pychess-0.12beta3/0000755000175000017470000000000012176727272013104 5ustar tamasuserspychess-0.12beta3/glade/0000755000175000017470000000000012176727272014160 5ustar tamasuserspychess-0.12beta3/glade/white.png0000755000175000017470000000075012161415524015777 0ustar tamasusersPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<eIDAT8J`%IE(d"֥J.!H)|ઋ-:Xbpxq.ͭzònm)ADI`xAƣeY'csCmg|Oys{Ap+r촳qtGƠL]ametDQ[:DjVNQ5)a;) "H%s>'Rs(mĠ`ÀR2`[`Q""W1%dr.0W]}_a(./z1 &uտg}~g,t}w6 è7 @YIENDB`pychess-0.12beta3/glade/panel_moves.svg0000755000175000017470000004114212161415524017202 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/piece-white.png0000755000175000017470000000470212161415524017063 0ustar tamasusersPNG  IHDR.0neHsRGBbKGD pHYs f fItIME+1 BIDAThřYlT3cxjH Ic 8mV"joi4Qߦ#MF꒴yJUJH $68ZCBhҲ6x SƶS>ijX|GL rt ?uZ3eM kxtc|β,BZ<-# =!ضUW~>UXlBLgc \';}s;xTL\8N#v:Y\LNMd̛71)URɦbE(lٺ?t`<:t"iW)JwYwk4Ģ BD׍ ݄EC]#5S pbZKuy?׋낦i>\,3KX81ş&}?v 3:Мz/ΝYr\bP8Pvq;wίO'Ӯ:+fq)ٷo}x*HwњnWxuǙXveu[qGԞ ՁqB?^?WV5焻L%3kYƓxtэ^<4ګq ruoߏţLi'˓Lᎎ=VZ]ھپ @MH):'N&RoN<~5lذmA (Kv' 9XαwfZ׀~ֵO6L0M85}ko&O=F) mbRU~cWHUZk$\vŊr \ZnG0iB`Kųի4[e+Wf .VuL>rR{=CC;SGC7Od#Nu)ڕ u XABuo.<y4"u/.LZZk[Z۬{^rOj_ YG~rZZ,M3͖.W4-,+ahZE߉YpdGV*r0PYڹ|ڦjU@dPoObf4MJܺߩjWwS{OE( Eٳp|N@Q/^|qтyU'OvsylHu]TEEgHXefaa&ab&niBbdd|Ou]EB@p67i|^nf,`0ZAL2+0js]VǕ8e+)qD:e .^𰷓|ώ(,V+gKkWmŽKׇBt][k߃ `1 Wop-1>u1m False 12 PyChess - Connect to Internet Chess False center-on-parent pychess dialog True False True False 8 False True False 4 6 True True 0 True False 0 <b><big>Connect to the Free Online Chess Server</big></b> True False False 1 True False True False globe.png True True 0 True False 6 True False 6 True False 6 2 6 4 True True False True False False 1 2 3 4 True True True 25 False False 1 2 2 3 True False 1 _Password: True passEntry 3 4 True False 1 _Name: True 2 3 True False 1 True False 2 1 2 GTK_EXPAND True False 1 1 True False 2 4 5 Log on as _Guest True True False True 0.5 True 1 2 GTK_FILL True True True 5000, 23 False False 1 2 5 6 True False 1 0.50999999046325684 Po_rts: True portsEntry 5 6 True True 0 False True 0 False 0 1 1 True False True False 0.050000000745099998 True True 1 True True 1 True True 2 True True 0 True False 6 True False 0 0 0 S_ign up 100 True True True False True True True 0 gtk-cancel 100 True True True False True False True 1 gtk-connect 100 True True True True True True False True False True 2 gtk-stop 100 True True False True False True 3 True True 1 pychess-0.12beta3/glade/promotion.glade0000755000175000017470000002550112161415524017176 0ustar tamasusers False 3 Promotion False pychess dialog True False True False end False True True True False True False True False True True 0 True False Queen False False 1 False False 0 False 60 True True True False True False True False True True 0 True False Rook False False 1 False False 1 False True True True False True False True False True True 0 True False Bishop False False 1 False False 2 False True True True False True False True False True True 0 True False Knight False False 1 False False 3 False True end 0 True False 0 13 6 <b><big>Promote pawn to what?</big></b> True False False 1 button1 button2 button3 button4 pychess-0.12beta3/glade/stock_alarm.svg0000644000175000017470000001135012161415524017164 0ustar tamasusers pychess-0.12beta3/glade/discovererDialog.glade0000755000175000017470000001272512161415523020440 0ustar tamasusers False 12 False pychess True False 12 True False <big><b>PyChess is discovering your engines. Please wait.</b></big> True False True 0 True False 3 2 6 3 True False 0.10000000149 1 2 2 3 True False 0.10000000149 1 2 1 2 True False 0.10000000149 1 2 True False 1 PyChess.py: 1 2 True False 1 ShredderLinuxChess: 2 3 True False 1 gnuchess: False True 1 True False 0 0 True True 2 pychess-0.12beta3/glade/board.png0000755000175000017470000000067312161415523015751 0ustar tamasusersPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<8IDAT8J@ d2vEXۺs)mA=xD$V Lf$"X(`x8GA6:} n@N_ ӟDAfŝRif2@DR cP<ӗBqi,HuW7EӶ($4;ޒTɖ)ј-qv~qXw ?3ffF׭bJ'RBE%cCgLj7dKTQUT $H׫Μ"XR$32DP\0+EXds*9%IENDB`pychess-0.12beta3/glade/panel_score.svg0000755000175000017470000003647312161415524017177 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/throbber.svg0000755000175000017470000004363512161415524016512 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/about.png0000755000175000017470000007477112161415523016006 0ustar tamasusersPNG  IHDR#ZU1HbKGD pHYs B(xtIME (0No IDATx}y]04^#dxE$nlMo7$1u52x Y(Ǩ%}?ia|q~ߧ%QWߴK?7)!o#Ait|P؝`UlaoM°0 ی~pWg4}ɨf , 50̀a#}x}B lS]noY`q|v#. ǻ>V0l% @ tmض'[:p k6Fo`;0o-ܛeuM~oQh>ě]K3HL6Q<#[\^zfDGG;v-v3/o 喜x JbM>H~V#h%÷aFnp.a =uw/qe?,7.Bv02 "(ecc9F4yhтQ|76G52@ P(2޶!oۇOF+T0DZ@-KDY O(4G\9QuݑFz6p_f/o*0okyxF<p1iC͢S Dqt9RLJݚ">+o23:f}>(Yd6pF̤AUL(wI ¨ID BpC:WKڇOFuĵ_uD[ 8D'!Bj2xA!c x( W,H+Q&#dEr2mUI ɨY.e0&p Q*Ob zƂmԸ0?/a>.!w՟DžJYe^SEU CD J@H/w0zZ=Iƅg[,A |gRd53woQcz.-j L[PZ@hT;tʨ唿Y~!okq 䰉㲵@>=4A!տˠʨeڵQ0|iɧD÷w| 5us$KD< H+ h^fu>9|hRv :$I( x.ug渝\p<8z܇. B+c@{@&8hA.vP!\Y71*<2mYKJ`̃F/&~ w~/M>Fd_CK-'m^@ͫ0R]隢(@+[:{3RBu1q5Veu\dRzu` #yOKEl;::xykYZ%ForyeMW**c6L݄H,۲|l`[6L~U<P0W~g_>|2ɫ=Rpx8B^,.‘@^h`d,XֈGQ!K}/W>y872$YrD ,BV<3BHcpl޿R1rhyǁ)KN~F7bAQ""ԟ$$`_wD+xl}dTnsy1J4åσ_f҆g#/i'|}HK21:.dU/%Yĩ; sN#f=m?oV?eӂ*@2Le[&wXՖ}K60y`4 U?3 ݄eTvI-@)Toi{']ޢ¸kWฅ3h Mэ7^~< {M87|ծ}wԟsȼPuS,y,ǏƐNpq-&J^15g:^}~,Ƽ3\PP."0ϚS?g^z:lcGjxήKAOF-vzޔy7c <Ǎ"c: 4 OƧoҊ?ta]8STUKOعuIƦ]AMFG[:2x‘%b.BK8B G| qNfJZt3sUo qБqh-UwVj,˅eڞ,$q :DJ='D_7q__~^~x$3x{?CΞj;_>:25j*ytc!-8zƄҊ5C/϶eu[MP1! tn !m ESLv~։ם}ұpC'3G95xnp_>_Ҿ>^[bE=i2C4TaGb tZ/[8 p HYJ^{^C?۟ފ^pQ.fi|o v>oY<ʅK%ePAHq,>B&#f`?Y AA)כMlL$ۿά:Bpn|0ed|pKCލG~/>6lrgWgfLɟ=:t1@&z\?4}`eG-;01`8XTQ idt)h4-`hS2F1@cp,5-BӟȈxso~X;{/߁&>iVo-OM l3^پY߹k,,k-| Q:ei[Sk0QuWmM_c?tL$(~R l17se6z9n_ZuBSfz1ޞ8lˆH7߃6IzKadLd2≪Xq[^}h<)K\jo'jU&h-w shkk*|$3twK#'^rsFe qXO|.a]g{[n/mn@Xe` t16hήNE*nF]I@#ڹ`+7ܵ>U/ߩtL "\"v.zp$BVu)zzJeFBJSe ?z춲zMο[WT=4,ab &6Ba65kyRխ3).)f~Ǻ}2Ϝe 4UXQjȎڡj %]EowJd-pM%_>{Ǟ"3tzƀe]Rut䷖aYlZD(`h{+ׯ>U}}1$%Z2KDC| c貄B0qR˨5@.҂CZbKaԃOo]ȯq\d2tݬ '0]vf+dTM[xB "0L$Vm}=|5Zf^c6Lӆc;mDbaL8і(c0wow?$Y:e9Xutsz0gW>yK /gӰ&LB4H%7__O1C*Bڶ =cBͺV|s@PPTrA QDHY!J"RLAVY#?[9;o4"M2j!"H#d1" [SD4K-u6Rt2%b?DTHnAB.)YL݂68~cQ($ `N"k|˨=k6汖H]\+C7ߗ@KkPq">eZqρ9GȠ\W+Kb`R(@]CvQV˘=} @EHI>gO-Y~*KdX~yuK8)$hfD#wl!AzC?9r`8PUX+eT*S7xHY )"x8Пvԏ}hCi[OU.!cs"llÄđ( . <GDWqE*ڶj lHaKpYDPT(x*ií@wve˜m0ۢ%5q\dRBB8n\Pm@8BZ* !YG!IRV4;_-(D9<B2꘷4"s3^p0@]7 H4mH`}ûޞjG.CV O}q B/{ `;dA@u@L՘XW7ɨ"_1b0qhY?/R7En$@Q(TC5dgw_=K)cv+lW88Wz=^ (e;EIc;%e[ۅ$ {0RZHD" j$q<C@3S }nylӎ.߽ѕ~*{jͤu8[qAB*AmT]\?ATTz+ߐqT_+}qd-bB=-EtlXg629YA|R"bhHSppLX@8. ,aljqgU2,+ol' kxJsUj(2d2FE+ihu30Edni}X֯x_-c2r S~Bxh gQfl@ lA&4l1<_A-  @V%u)R Id2pD o`F5,O(A (#Apj@J=mʿmFgP)__| xM|gSxqӲm HFC \ׅeڰsBG eҫv؁ よ >*MDdg[6z{psAX 3;a4L xÜSôS>ܶ^ #Su1SKm#:8?\K9ia9 JǘJ GpC T(/Lƀ>dIP8IaY6&i0~`X7YBr!GI 9拓iv>="+ zC߽ /=ܶ,3}_q?aQc=ac+L 90dKl(@/  iF{y>;1 9Dž6ິPñ(2iҩLDC-kW#J< N@ךW >OMS ņ5D MIqG>5>@ڻwx߻ #Ԫ FXƃU4JE9 P6!P8'hƞݽHSu=2+@{v!Ou'NxIoF~r6s*Ûˏb >-3f2t̬ B52Aԡm(s\]5iVڇ9Ɂݼ0ij?Iڿ?0h!pfhAFr d] vJf.issij!,eXeY](ќT: Z2⫘4DUD#1|@V%lf[we{vk߀T" Ӱpeg ;qx᩵$di8Mwɧqe7֢Kq8I<: GB&5#FR$i݋tZoHܴl&gW/|s IDATRImK6s^un׫^LFAp?v>/<ܗS8##Տ=J;R:-x ihЌp$bI]@ ݻI#nb,;gO?*EUXYW= OywV>ܶ:9z_ذc{*S|jgd * 7xY+ŽA`XQcYk+GJKHgw_.4E| U*|fNW :/+%\ Ξ;>'.{mj~.g^z:6'_ֳ-[B0ɧLj ZVZҾ@[Y2Ѣ)q]pcsQQ2@PE "ёN鹶 B!-[E*Yo6)QxǜgS#gwoqј鳦y.,/=~eӏX[k=綇3kz[^{I>53(bql=ƫ @ hCS,s tC&cĔt@KQ)O|SǗ~x3N:g~u__Rtn0krhA5¢#Ix;IRJ/*+aYF9FF^RFmc{6GFUMct* Ӵ8.I$ih4+wG[" pS=M=Xx}{n)f-oϟY y#~JsugY u\⧏ɕc!GL'A8X^*wvbӺ!Y kg}jd4Pua(R癆UQ8EWVDJ @7di*&«>J$z33f'#۲/C2}MK[&i>=ƞa|if-ГϠlM)GX 7N|EXmlMVpLD0sy7 ~^RVwcּ(?ήΌO ;+Uih1oZ_}Jߖ8&$N?S,ہ,jB\-YeLZHkX9Bx~VR}w m90L us)FE8Ual OE8´S=ߓR_yj@(U-;]V[ښFUMTUjdi{%#'eNESNC?h`3>jÊ|ѢeƮ)exqۃLFWtLr5u"Qݔ"Ȕ,TUXxc7@:#֡*YkeKX5 dE /?dᾸr[ycĦAZT!hJU")jIaVuFU4T]( U7MHvH8j%x8m۰Lo[5ֹ$' Kr*RgecGV]`pA!a̧zтwᦪdPe8dNP5tӰȃ9u36._@(`Pˍ&"E.>O:N<"wKO֕ C{|OzƄJ8r.{8 Ip)v(#==(6T+u .-в3.zR7*ʦ(٘52FC`68Ěe~U5)ֽ`H3kܷm|\"B:9~5dEDKP2mWwJ5Ec!O3(e#-&BZexq ձh|bw~!LdT.BVy!;.-S#B HPUvTxPT_g ڨVex4F\"ޟFK[U]SYIN|FC#HijMh0;-AdRyO8mن֍c}PBFE&1-0Qd:RRַ2jțhA $&y-ƐLfnwUv]UsKh{q@yQ!)b~P^$ާȲh,\@t{]LCCW|gTc<1es@ȡ Tb~{|@sVQ;iΝyf\7x;a9e{Shz 5ʓmPdðoNAࡨw~$*CO߫GDCpl(fU2!QBmHfUJyqC"=`o5w,λy"AV$XT*]1M tC (׍ͼ@ ._g;T,:J|ћQ괠k7|hؖэAyJ?a l=8G:#O͋Z˨z KB A l9*Z"%];+m+wΪs|6Ʌr3QsP\>˸fme}[kg!ct] M8"wo>cQ\foA #ód(6A{p&lݑWU4*vԭUEҩqBBbaΊ"r}g^BF->KG*1_|M)v Kݑ[\cQC|'ւʰʌrh6>QPd&Nj-hC9p$U!?g6Ƃ!(vu/ZҧwJ/2B^EDT%"8a8k+e,䖰-=rdTPJ]2_,Eʤq_Z3RNj^V) h،HS*ԕcY6lӂHȎyhz\||~xWwD3yYmD|Z?]WnZ!7tUDQoW9fmD}d>(C8X&K*MEd`;~NȽ@Dq5oN:X\sOFdԐɢY)\'mٞQk T <8+Q" TR"4x sռ(*pl,KD?jH2׼5 f蹇5TwePS ~`T>ɭظ9NEG^QWj[^41Lc,ޭU&9΍8WaI&Bz%>-]+߁a0h O|2ڻLTh۩NF RaXP,˃__ b䲕J\=4F%r{~WǏ݋Vi҇͘gISgZFk,(7R߇6Fդ0l; bڰ ĕՌ}2pPvquc02& lV1W12ytmV (zuvIY%Hs/Q-I)C*3DGu-H,N9hqMVMiHurVٜ8܊ל= S]>|._*W¥>?W{SJa[2)x˲!Hʊ~e2N먥Ky*(˂+eCOAZM{{Jcj\& ?闀N~B9-8j`5Ɇε{:L 7B ɋ0sФl)BJ3 ;m{cx #AHBrz9JNzb$YHeڰ,r̀䬣`{)@0@&cq\%k-pd0R ڮ4lp< S+EMat1rV>IJeN]w[ H8kl"ܴʺ2&?}t3\Ӛ`Z{h&v"c%<Ǟm剨N2l8N( H2Ԑ%  ޟeZHS#*JfA <, &rqYOe#DoHBMc{YyWz{8v4H_7>CL#'"҂r3J,|;Q4M{hUhۛ8OAfYr$Ŏ4UkWgFmEd'Î0hjN.1=ZaK<䒂oԥLzb E.q.Gw"ʒ=W P.=-KF)lCC+=XG>eMVTURG"[xc!$Q!!TSQzTEZLWO nusT1qPFtL=}=ǑժBPp*9qnje4v'ޫ/EtpkM>xr# FجJQ!'C|R:{k@P-f*kY]K % h1TZ[Ur]o.> ӫ>IBʘL𾒐]w`+ ,2Y,Q̼ ^焣L:^fS3O2 )CW1t12-We7k aacz3Bj}ܕxhu I p ʛ*SӺQbWOJ h[0m$ H$2݋@de]ȂJ䎭Tf5+2; ak.]n/ 4YVهy=U"YvMl￸qs[{sѨhƝ_80>,yK6l(z<1ߛ@K[4o ZURxJYkuܚ#wq na `BI ݂ɐd O@]˲DTY~%~V;qm 'Q la=bjӬQ=5%ٷ \Y2։xTJ$*oZB,l+q]=.OB@u}}5AU"?8{¸/RR:z38RɌ{a ;"*T o/ Mڳn?? xuNh솓QǼ͎<=㻖l&eHӈ%KXPTDFi㢷'n2 DJnafeGŠѪ93&JL^5\w=?#s37o0_YGQa'n~aogPБnv9ɏCTqaZY&mʷm'_.z{0Зw Gp;;`W~ 020J?,E״ IDAT +ƺdi?45;ב0zFt߸;[X ϼ_iy\S|2okQ8 Ɔ//VVՔ!QG|͐U]7ѽ={1ПD&ML@2B_ovԤ@Snrr]GO6(gZoT M:eT Sb$ jDzic׋7/ι[[_+>#FNK:S:7KڗnP%\k-ӆ eqD$z&1= " X?D˄XٺHRV0`h['rFe#~C*swJ?CvtY+}1;֋w'_?g?zy*(pT|b)oNz_g1netI7̬DD\'²޺n"O-IF<T9qHB]8aDs\I%$UVrA}2v1C UŴqKD0ij3ZxC~{C2Owp.cxձ6}7s~TqE5e{YYIWӚ)5W{ۖ!VM ! u)wH&ʺ @ކ 0DMx+$K@nzhr蘷4"q(BHǘx㡗~\i Pv:b!<`wqY55ko/7WD+ѕ7WRQ5aqD (um$@ӆJm ZۄXYJfJ*[SYMB__آSx5" -F˴Sr]ytuSb i tE3Y r"%߁ɵwt\ 1ӰaLF&eTQ[;mY58UϨ)nFe *}XH& .0U !A^`bR,=)WjE5Lʹ{GvG0`'߃S \PHke]?~DT7>92\ ʮcL("<AM0Z'4mR3&LnA[GP䳖Zw5N*~?PtwcUujT񸄳 O$N}8q،h?c&k?M-5͆+t>9&gЂ*4M87j!h#;tvݪPN5kFBKEiq \`C* D4_/os#\fXZ;tdyq ,Uw7 !Y5QE8ֆ5f]!I#߼xZb5nVlzZ+$z@Y+w-ڱH7sOPTÁY\bd.[gY#&jDsܨQօOhL iE\lՈ2=uф ѫQ,<)UK Ʊ|;M #" yy-S[M#VKw.Z}&qдx5UC:)4Q6s| }ygy~u5}!iFeɖvđ,%$ `k0$.n~"6`!Xd]$D `Y-KuKsguU}3dMWutwWWuU}|~nmֽ̐Q&\X~B4/(֏x'#*!x*kABGGRko]Hy*"!^|M5U3 iպ%hss46J5Wή<*uDQ&'ǙBbVQxI8d)pYf2 j.P_s`%0YOF;ַhq q4Ew*4Ys_w%*t%åڱJSV VFz,;Yykdo Փ$[EUh$\rqFS%J tq(ƭT̻^R#!Ob< 4͏z1C5DXJ隦9(l,ɐr& K)1:<5wͲldQ ϲYGA7ˍ`⃥+B ƄE47f2b4:]iVUuz\!i0$r9jFRE\WB㏯xIzql7ѹed(=#nbg "`Me*OFi,3(TeZ PKa d2]r&Z*Vs' t_Y27,cwi7F!4:4]>lM+JF{Gnpf"Zl:#N/SJf /N%E02MD{aUU+3Å03#2 PLYHS+Si_#-0tx ۽1֙<-}xJW[y/>+Ejbu{# ~h}W~w?zOא u#![8}׮L"3IF1.kv&]^%G:_g_T|xgpnVm5d;Yԟ$9`]ZM?*MZl: sκ!h`XW1PZW;yM;ܶ;JbM᪖_}Eޘgsa-m 4΋"U=+=qU%cߚhNWM#Ʒ=YLQ*Vz',业 xnʌQ=)}{%nkU .a|bY1!AQWtq; UUxeKr9ciRTN10̱DF-#Hqm•mI- !K4M1UH k?ۙ;mMw.⑳ΕUF%02*XZ0'a-^96zqD_OAc隘ʔLfDDd.ND96#>#Β} % 缶$sOY-BXE%X)3NjϜ)EdWZ d~@ -h$ȤN B.LkA([j/e7uiӬLlÙp:찞31#r! HyNJ&"#i^X'4wlj eقf\..<!  x]'=(! 4B50 uYٴs'M!iW"-{ld4n< t$2\Y'48GrA@@ -_6Ή1 e߶<vp%h>uZ;|&2b5n<&[1I{xK8|%=ޅTehfӽ^l:'׀x4/ Xu߃w<ˬ)!`{i׉eʪst=l9ul#2taCj4m%Iri ˔\ -lvBѱu+Lޕ]%Nm첦{y:QAKC\ͻF۴UD03a)r8-a[69y33g#oZȤipaYLv w"vllpemQ7v04M5L>f'FfwxR}7b&?0t`qV[X5ǻ.PMUN2o{?Zf$ F Gk'>wc{?3#9TU)PT@Q>Q: t8%7߁_ɿoZ h񊖚]19эp9AhMھ;^QbS_.uF/\ 33,˂eYh!(B!!=Rq8H8 q`ۅ4"*aCHm[jsͯԹ_XrGJ@( 7ڹ:}8 ^g[vq DqRӬHW)Z"4NRB@Q:_ :K)p9N6WHɕX>Rm׷Wx'7N*Wݺ" !O瘸UhH6ݴo?nk y G"7v'f @v۲`ɐRBo/W 9{=-$h {zJyЄ7-xe=*3D@˨t#GtX5>Cdw(]:yہ6l)9E՗1_ESY*o~  c w - lxڪ6~tC*џRݞ[)_CًeAN!Ì;'Ꚍ 13MHD84Ź\jm۰mY܎7>s=ym{2* OPz:yfa,+?o \si"h,G2FxH/ˏ9eP7/ Pv{g:O32%_Y:aHb.i>zxT[RlRs2^;)6ZnqbB`]>0$H%^SخqD(gF*Kqc rBxv\jغW>pۦmiVܸ.3?=e>О4k}>¸y 3;u G2oakV.qv}rIF\F^Ne ^`ZȤsIVm ~0A%]Rv dY<)ܲGH]"EbEF}hjuęŸq* (3kHk`/jR`/)+j"U7VecR~_ ` 2 t@7nSoUT?Z}۷*jƊ7K[C];r{#Bq.|ъ,}9RbHS94%]-3`|%@u/?80Zh U:|ft&vkw3nެOݸt5sᎮ]^|~HmS4bIDATz#ւi-7 DM!EUqZew_闺})⎮<)wc{ E%QDYyB2coW}˯Mm]~m˚|m[v3kᙟסNōXMH\8Ջ!zNuCFv2rW:mJR@=4|օڞ:D߻,_rDE`m˪Ap4EQ82p dy?3kմ@B  uqLF:`8Ƀg䉾oc? PwAƨs+4QK/q1σ̏O*r1:+ppj6i)!9v<GqXEz{=ZE>qy 􌺍LlR(0Ah{P 署(@ν2N4C;>,'`ؔ*BdYdҦWu: ;كTME'@<р~ZRj۶:؃mY,_`@0l\cm9rHȌN&͸fɰ׾McanS $7ޱ e#=f"5{GKytl@cvXVo߮y|U$"$|l<6" va׿߅]k v`ixSU͘J,L23W=ѡ4F҈5j*bM*bM }&Sq6nVmiAUah0 ݫ̦;4~^e߇ѾlpYXq%AEEhi_eE%GH=l L98kbSQuޣtKg]*|!‘uHwUo{o$"R5mf hliU pݫ+06@Ti8e"?mhi\ "b PP!4flqn(DuР(#]M)e^H-ٷȞ4H7G} j+bmJ¥8JI],hn4͋BٴwbC_lbMĸjnu[e0w6Q9k> (_;3яA_|\Y^QdqXvc.{yEC'J Kɷ ^EX}sqѡ:P)TC}IH&|aLo:A^kcrXEč,8Œ,XB+wdžcU8a~[3|~˚OL}gEQ_R-¼ĜN©RHOt?C!իF0ҩN^Xh>$T9_YSt oeO.q*%3@AJ-~4?lwѧXZ䥫Xa9"c\:m)5m7On 9b q9b )3g ;͏*zMT}?4#j_o ֶ9 BD7oZq,Z\Rp.fq/OAkY2z./N1WJG \ހ)Zcޡf׾<%uPM+ _N©V֞e/wV}`4z@0?\S8mXBdy.uQ@ɨ˙d,o2>ֻW!>3?yBp^iy߁}:TWG-_TQr^=1e"U7-nh-WWn~N;-5z0U' g @p¼)'ExM !!?rJ8 ɀd f|Ռ>w3X7Gp͋0R2erOAvb6o'_0h6qDj A|^x"ZM-h[ڄo\+畾*Ms[Jڈ|G"rnVܴKVcӕxhׯ.5@C]cV"Sd3M~uTVp T_U#d<߶K Ya"z* '6!? Xߨ)Bi^7U"rE>؁gA ߰_-"PkwtY1vUASs'9l,9/ WNJdEѿUNzJbo4w}gZ /ě#y bq)`/HY;3[s7 (/y\;yx ݃F>o#bfOUpahiaBX`sm{ooLF" ^paOE,u凑 W8/v^K;j?|^ƚtGmSa4$Yb 8AiMUuA7tBغ{@f_ch֢X ö%x\SʂTe9-VF6c^Ӷ ? +NFʪbT|Y qD,/,q^YRJd9ƲPze7v`nTL!%wQpciB]'B  a&ܼq6F,\\JeNW4i^)T=C&H뗘Ǟ9b]0iú = wӈ}&Q3sY2j MU*U@Q(keDsud|Da]g7EҖ@_gr5Ih<iLK_VJ 39 *@J" !  ~)\h!B3`Y[2cA ]42` 14͏]W=wjmW e7'bY]D QH@^" +,U `Xg&3%-qe$ q?B O{)&c^ $TzNGj?LuCE4AK[M|y HűghwhϷ]dغ[">Yc4]fhTUW*TM^U]U =v17ϞPgC:F|X;S]yl<)*PB (EQR5ʈE)= E)MDNp_Oi ,%lہw`-2\D6e̕r}|2=(Ck!b=Pl@R AW֕_ ES@{$0<,<۲]lkr 8#\~XplYQ=Y[GۿF  !pAg> mpy>t+G'#EyԆVD]jxAݏa'#3w~ Q-$n%&WX}9OA;ӽ߳q}LnKMKph㯼<0>7mա]J |ʪ2- "Yp3@͐< [[3B`!'# m:ku#J ((#j@AaF!>_ԫ'Q# @b gii1E$W}2q`.yh d!XƤ"Y& XLXf"bѸƠxoĈ1XLαP %Lcpf<4H Fxp>4E#(:be#ĵ}3fk$IENDB`pychess-0.12beta3/glade/clear.png0000755000175000017470000047132612161415523015757 0ustar tamasusersPNG  IHDRebKGD̿ pHYs  tIME  8 IDATx<ێ$K$&"j̪szzfrg?X,?BbItẅpw3Ugs&"TxOH $֚o0*v'vUl@wܑ솢Jˆ@sL34+KN“B+S J`أЪVpⳁ2X[:&C{$me`Х-s_m^Mjv\ٖ}L/;8jцZs^1CC^5Xk[?{sKkf0]MK]hхD70 =  dsbREL {DRzF6 ԚKMم5e&'?;}M`MX(ޒ}l͂|-@`Z'?# goGk l%-^5z4$D CyhM ?w~ScG:B&q?k$oM^J:,>x]Ct l:VZ?:P ?+qREBd(7/ L`lM e0-DGMr!̢ iLXgTlLnnDU+$Rr'ţm$]LrЫ4vrWZ{-k#&`,n^bPG3눗&^qw/?h~WJWHסG<#E)QxFQZ䤰T{(%'{ 8t&=Rp7ы86њ=%xzu'ŽJʋ!j. TZghRqq1|Յ"1iv/5?z/Z`$At2T$H#T(!يiӁN h!)Rbh (LDaW+B&Isqsaq!Y[4-UDwDN^ 8-N6eg}\,E$pY(U<|6!? g[2qͅh^jh)k5 Z|/{M߲;Q4fXyk9Y<pBQn(^{5O6!T+/,]kR@X .%dZ@3 fyӡKk˗퍛_s0|hr%4qŗKm,Ō,<p֋C7_-ţh{қ]K-E\$*h @X@sG4O,SxiTRu^ |gzbIɥɢpK]K_sk(ppʼnɥĆ?a\ ʆ5YL-^j -S"kAHHb$۸RD gyx#"R+ h0Ku Wh .&U (YlDb2u[ڹu~!هKey{Z+yuzş˯~DJ)?Fl]Lk&:_2 I!G_1"*)r|j L[v.NwEw}o3Եb%:8R]XW:= I!lS`c c8uISI yČlDՎR{yk2NY <!6&Kdoe %'1Qq)2T2 :WcrSLa=R>/_U`Ua0!t`HS/uCSᓲ@30ϳ)"`Sy0@y"T<ԊV 0P (`˲*prB  Y*f%I Ls#\풔렼+eBALa[,=<͛)y&'^SpW,,6ܪegrlڣsŒԊį]='KocW ]b=|@³q>ŷ!4~qj5 E`ѯTKm3^4J3/򵚗*޲pCZk('ē:S]A'/o>G7P*wZio+xpCCkQ*6>dyť֊j~Qbp *5-%/%.9y=w]뒇wgÓ] YnNMQC΢fVCG7_:0)L:u)b &vݻt`3NSp6~) \=9˿nL,N tC]ȐCҜl Ƥ-I E9 5)Q0 tКnKj,ia1@;֊2BC$@lNS=/oy䳙0^Z{5j ,f~EkB,M>]$59+$8G;bo㖋Fj{5!LtG캟=k :a4-!pn`Zh! l uKJ{:]dZ0Y,v0PԡM2)9)a2ՋOan§=^LƏucZ랿[vo*u|Kz1e-ug'<lj&xthn¿۔K%o)L>Հ[ NQԩetfb׮^ %mo@{=?K%ݧ@<(dԉ L/5O3g%OP©Ʉu~BA _[Ji FΦFy%,4HpE$ɠ([i̢Аhٵ%'kU3>b!yxgA`՛>یZq?^>bLѩfQ4!|ũ=(tLs]cS`h<8=THMZL#&(CvkA(sͽń冥d0d(lSċDA:{JCkɩ]ͷ _/"с?{;̤9dq^nmktUzC 糵S+@84^P"1H2O-$/(LZ^?gqSbN5gئ;G*@XG Tf ׹uޅ@Q`v,`iVh:SayTdZpw5X595,^ꈂܼԡV^3]϶pAcM(qZQEP6mumZ5]+9|ŝȏ~ɩ{:=_WŮgZX,\p uƛ,п8.@^\\ WNOߧ<T ]P?:=u4<3їDM@Cŷ^Wb-g-z}F~rLN^] [7[# ѧ LTWЫaM.fy5^1YZsJV \؁v`ճPK=8gG[sRh{,~Dʾ\VCPbhp.+HQ@aQR ~Q(fPL jyĥ%:Bn9kB(L^k?>NR,>H~۔ghU0zEak[G[E ]jͿSX;U ,˓X{C^ʟw_BNLGs)Y)'8]o>"='<Ԫ{ pOh| O rkjG=^Ktz GJX1Xa^׌CB.\j$xMԽ XشԦNYg\tg( ѽtN}u~vtkr <{LcubRC@䏶&P|zbT^3*/#Z̩R Ұw; S=U0Z ˪$"Y D*Qkr!Q rD0ҩJ3f߇O=A#55/U<P׸[x `,a 0uс%{5hiokS}®]='ͩ2xYn^k ]G/z2}jZyWJ!SQbhիT +n^V͇eXg۴}.cc^@E  >:p^yzɫ:sn2gu)a,L^uAyk]lũIf|E%CHܴ`p||\8svve,\q&dtN:P6T/6fC <\P'e Nè[] 69#Gz\h>CQC'~EM*KeDxm6 zm$&ϭ-߳_pMt\z䦡I&ek]G?UzɟXjGy-~KwW8y>.>jCKFMX R?}t[Zj#8Gp*9X\L^&*̠UO-oY'3>Qߊ~E-[.܉sऊS2<(_WIK~d@+^fqK}W)y2JxفiM32T^桄t/&&q /fD1T|K0}גuW!z + O 3Uh%h-RSIP:2ut*q 4%H/ZT 00t-s $qԉ3%8H;hE`gCCG ?i_JllT=bj(]uZNK|Eص9Hh6jDx)'W>ۡC-O6=ǵ^+mkKrWwq)߫lxpT|[^99؝ ǿgb.$sM˓BOҁ(Ō-6[-&t݀Xy[^1ۊp㊂l %oTΔ6hZY*1Sh1FO.5c| dA F󡧤 R< IDATyư N'aCABg 3yfytdsGqSXkuV98ixM`+?5 &0L+UlnfIfR׺ k-5gRSgZ8tpGkm ʮ3s%[5S1tNlg+j~ ZS6WtT ¥Π%smNmhCQMͻsT ayMأגG&zA0UCMr oix1ԪP&?Z,l{gw:՗&tvk>0Tܢ֒,&cs}2ʔe~}hq 켦 Z)@㥵֯!|p$[8ѓ,fz玲§yǩ76_=5aHj&Pclk[,jJZ_*^k /=T-75o+]W*ל4#SC)TR,4mSvN{KW?-› Qg6 ,79x@ g+L :z][y#.9)q=G-\#bW%X2|Ϸ,ͥgo..(K=[kWI_kWSk~ť.dEx,6bӥ ;/ΫWb[\Y\R8Q pAsjoyT 3_u_̵T;]=y;,W4GjKOfyɞv F}/>7TUnb@5OtUh՗ iQ;aahͥCC~i|T~&Q*a _2 $JaH>LuRu)$^Q#l4#ZWv^go_L/`maڨosx3+bT9\*yBqH柎^%!Cµ KY$h~eGZZxΝ7?Q$K\jfYU(`8 ,Ip32Ă E8${33LpEע3 ymc8LNn-ۗ=<,Y;akRtzزeGA^Fbϑ[=kygOr2Je϶=T-nI#e~Y{3ٯ-hѩll x4l>5o[l99TߖP/xZSAW–M4*(.%`#bXʬLnRL&2Et {IP.7ucz Jl:eԊ 6ȖSmO2v4bjQh!Y&sIb3ޑa3-kL=w4.m?5}s1X#LiȋKotgC=$Cr-5!4Mv[CTbXwĉpO`E(e̙4R6<,H&'-i=KsdsmJlZ|sJt fJ-aL6%uȮ?4,O/!^n<پ[)Ŏq[̇'.lZ)[n lTd=fmx"l%~=>[chꂾ8R[N+௳֟B/3}.}zgiZ^pÛFnHс-Oy-Ŧdi8촤]z? |`j9XۻiУI-uM/1䉡`@6"DH)p$aX\!yB EЌ].!( rوaH6m)s$X$05tVCx->G>m-N˾]dVM{+pj\jxx{3ljju4c2di%}"A7mdnag3}$ۛR2l&4Ga-.[zf=nJbwGN++6Ů ZnGlJտ7XX´Mii}/aӦ% 2q3#iG+3Ͳoc"c˷(n84rȴǞО?:lqly[~igCֹy e-~>s_"[iq-Yg𒺊yEj|{7&mqhi_-Q'p&O {[@/7l:8rd[0,Qpפ4<8_χjMZ&Mb-Ġ%ZJCg_TρDKALPO@ =6Z*$1|;{0$ܲ_$"dOX|F1JYmBu gn:Xf1iā̦o&HiZ$,lMtwOD\̕X ᑊa2e(Ք9[6-vGOp%cⰳ`tic.Flm-/z -~ td@Ӗ>=V;Oa4|"p-f|/<= J~kח򴷘|b˟ d#+F!6kAXI`ɇ8mdӷTF׈w˗fJQ->Ó=KIKU^憚Sv,G6}әH*c.p&2a,s% >( EYޖ+x["z[a=ȚL,>mҏZ--':얁$2PM2O4t-}:i[ 0 ?-F_Gs - { 4+hŗUh{h*ˁLjʒyY;SzVOY8 -'ޗkq-G>*GAXץl?u9>'hvO.+2M'th 5D"yBC;MxelĐ3Htn!5P;Cay8J81cϧ'oz&!Ppвg{#lVVɇO0<Ubdܲ$<'\ebX M"(4s8!'垂_95SS']·=wkex8>= Ihړ$F~@|L.ˉ 񲵾Pr]97bx0-.-ag{*!ɷayY4 tݖ떥 eYs()ivoъ{]4Ov-2<4d\FN[Fuˡ&qO}yώ&ǩYTPw2GLn2f M_G4 $%feA \ܲT'Hۜ .>5.t 30t{F =$vW&e*=pc] a;&r6=̃o|ieLha-Nȿ$lⷻt+ޙ21 {, H"m\*Kec AP[`@cWEb1M1/9Y@ Om _Ŋ6{ܯXp9[Vi 1pˑMIM==l FIӖuM ˞&.N.;F@L+dрbL=Xt*|E%Y18 yOGЖ 8[:/97 ,x4²Ar&Y:Ґx:cb{|MCZ%4S-Ut-bSϿ5ҙG6e=vТYbdWɢEjPz9MMd8lKVaV+2=EP ={Ve\aҖ}v2pM+Y&1tX[V LV5c8f0>%ӛӉ-oq,|_g:ZE.zRCAѲM\zW~G_%`{nyXIGǧ@ lrKSe~MvOǻt4|y-R?zuز[$DFhq+dVJ[ɔrY}Ϻ^T+]/M``&7ĞjU*?[S!E/ÇEڢ2aŋ.k*;_0!abb;GfVh-NEʗUѬNFV.:2a ²Qh “ 94mqhy!i; ]e$ZIL)jz!xڸd2/ : \j=٧a[,N>ljx[oషg6Ӷ&U/xŗ|4C15Ua к aYGdbxM,G藱sS6VN6ǁ5lLJ_K0$< %e aJR$-'`yK#FU`SE]pv#x UvdyZv)خBc--_A"|a[L/[_YRɖW0!7 n9g 45T`ȹŧXFj/*C(a5dC"X]qW) MT@G"9YziMi/r܀Xȳeq+'0DMC-u[Meo-O &aBkr/fM=@2qS5w+v9`c߷NurE-= $ _0Ҭ9k.!Lk@,̀HϺ2ZЄ4 Ip-MGA< 2<,9[MT¢:jPK: ?D .Oًz(;f A3VB*K[ UNгEW7[*Al Ev w;c"=L˾=\X]o1$ޣ|~5NڦM.b˼ 8C{ ˒+vSD+M j>ᴫxyRCӆpG!BLxV"?q1\jU+\YMh߭`Iq < z[njFa-{) ЧmE^WϊIզ9 8=DCM9Tjd\Gu(a~)Lo Z|:8NlӺ{kC`_sٴKtj+Хd{-U4}˿-e = "_Y,pUQ{z\*#WLNL/Wķ>bY핐Z@ٵkwyu??#ʕ5Y -CFr6T RA:z (qIݐuO)Y޷eY1`p4.`D>@ŁÛGuxïsS{m`UhE=-p[(`hoDThEvOt׭ x8Ҙ[yI.b[vUΩ\nӊayǬm$?֧y-úMwOu=/*M?g n %i@GhcTP W@T-IJzlaa+josiWiHDbˁ0tGm!Yզdif@_3|,鋻LI20rr hyZR(F8<-ݧt}.J>\e60*~Y^貊y~epbBTUXי $TS9_氫pi#*^xxT -nYpN%d] ӖXܯDR#LU\a=\44oRU{.iQE vp)޻Ӌ;2p=ى^?mrbKcM.+X_jE  tg 6,5\xeqZIG&nYĚ\Tٺ%x-~a{M[#\WōlX6gSpϒd abBz+($gQ IDATɘö 1hZ/|bV^du =U^2r/x]/NnqKpU]cRˡe ƴE4,xB˾Ċ|^L%V$fe0U~oy6TbrI[7z {uO^IxiVNG[ֳSMb{F(iU,ˠYBu WُUIF:B,$^i)PU%pٲ /N_H(YoĮҹ N4ô€M[( z:'pKG`rbӓ S~-;, 0īj-.Sl EiWN̅=lϓoYO Oz*HRq>C[ O&fYiX#"=k|AIYL$SLD{~:2E 6Cuw:2fH4s$ Y8}a{>Y~-€N3,s ,Hu˿ Ӵ!]&i& %>}a Ͼ\YԐtk0GWo2"<=ȩ zsU߯p\~Ӛn_e~M^u+&[#eBWKvTVyUY1a;J5T0ȁ$tӿi?-U3ta!òH2qZbaӿ}ZP<)2~5ѕHIL#ݣ Hh!QJ{$[tR.$S2/Ӟ=O;-çQM?"xhJ}Ӿ[{+xвiVl9L㸲,@<O<=^mO+ѭK09WֳR.5,K ?j3^35\4L+D#Mteʼ_"={K/m卂(.b5Dvy)˜]_F%[Uzfb/_U* W[䖸LU'=&Jh)4kE>;x촧z֭pe9KE+vZDi48\Pj)5mY;5J"0M@u1:r-p/oQna:a: [vVz aPBa-qVxtW}kX_+xش-N tM ?F!. nITC@""ke'#rז%:}%ⴏ|þ}[ntI*y0e8zW%KmP9~2dMf=-ej|(q+vٖ^"X~U/翋/50m<.i쇅yMB+ x4i8NkO^*ݺ bN iM.䦆RĄtuL;k-O{*^'ۗwҫ' #hNEQLѾa µi[E|:_[ܮ$ue[L`Zc{8FyCps{0rZ\aBGbd(ƻםosY\Z@,U'Q`]a"^wkUB_=2n NWH6!# a{\4:c~e[GFo+#tb˦œ߽oE=tOj9$|M?잇KI&2ڔ\?_7ר9I! %QZ#nZ\JS^5[v" 6a/R!x88/TҲ 91:}QT=#M@yKcUSj1eZ۴zz,5{1Q*W yq-zZ\nX^9"Y`W[mO!Jr ܲ"*^ S |4lWG0ʥ!.9j k1oqIUشE=˖_02sE]O]iOS'?^B(51M#$U_a]^ia~i.0i׮1rW%xZ^I"8-^_6_-vO'?po|UNSuwGK[+vM>mo\#DbqT嵥lzX իYK#2HlyXXiH,_eNK-.94aM\6$ia{=ޢB%^ʳ-FlX`R2av BKM.-vjbQ׮.:F1~M0@gӐ_$V vM෫4~Z\fmˡ^q1&&a]aeW_Y))Vv,s!qx-$+ ,ڰ=z\uL5醓MH vm=nr`b-a-g9hO>v>a-e6YA+7l4f?<ݖUsWHfUdpM[ YqFe'-f8ҨXqi^ NN9'Mj+85dmm\MoDܮKjshi]Iʆd}BGE:5p4ӦY M&Q,0155m]XV7Y2 {=#q+JD5q=? E]iמuv?>pK`M%}x ].6A4}!t.G +'a[?So+ɱ$뙻GdV&G`s ¹9ze :!תʌp7]Xd5/6$OVdg}2[N–l#lM ME[׸{Z+0m8#e:$0W@i{j0j+ZV鴏L?힚˜ z 7>]^ް}#io<==l-|EzȲδ []A]4ð%}gPS-iÂ4FEDhb m+e6:-m: tL~̱DZ\&[mJ2hKBK{`& n V;4Bzf}tt ̎G#{6roy+(߳ż9]GG-2߲Z\#m\Uh2HF| %5J}F: ?^0CHImҼ j~AbTmZXβ8tgX&2)E*ԑ-Qa>8N,Wɤ ۋ4g!8W 3C#@7/_-Ͱ3^G> )`ZpD#5mAYI㴝eaӾao?HVÏ2^~Ӊψw:|zVR0>pbX5a[;GL7ҷJ 6*{˕5l Xki˂"kzp_'&lRlu">W06尝!054r^>MY/W+ت3^* GHqVPDRNcN@g rdm)b\uic4l5}Z_vie6:jz*GHc .)Vir 廿Q@u=^ .6[z}YPl0ߋ܋?_%n&V&[N_cj~>߷g a| ^'t(CtWsibX)s:b>VOꁭ: Ff%>9lD`jdW1;1nuZfPVJ*ݘKLkQKeԽo/'ؗ.֘=6c/)Op[ʧ<{6>,e}U LlDN{FY2|{#_,}ciLS$S.y0>fͧh+yNw^xڀ%d=f k"ʥ i@>miEsJ`Cp>rqcg;VA5( 1`c1# m=#æm8g㭜eǝV>#Ɵ"#8rb;)n5ܫ7Q-ki4_g8eNn¯gyK4E68FCvz!DzkW:kG2NB4Ђ\&P6}+D+.p Rzi`1q%dN_tX\iZn.grx x0RRcT#N!l*'-)'gCF)G)w.e[§%}2s\׌NWp|VӮ<|yZw xe?C skjiWr3Wvio9mxT G:;Js_ccm5yU i\K7_.5+!/-I5mfe:I8 y*8,`}Ɵ1P4Gq6M=qVO̷b+v(ـou;ժ l g"6qܷNeCY{9(\K^T]` 080\'"VNl-"{^2ڲ0XwEsщ6|\XMcYW/v0ClS"8ll@iVlOkIE^lю0~KF#ouG>HiV| ?oQ2dSh :8o F@kzZgl4LW^r5kdH: w$5IֱNJj+v+ح`{ux{^ri_1Q&&ۄll<h6L<;GdJBm:lD) (өy^LsDGZ ߫U IDAT:?jpct~yyDHȸj2M{glo֑4ui-O̘H\[#֤4iRȝBjNK;ݰ-ˆ?gF<ᑏ2k7Ӧihll Oܘ>ٜۼOO?}d\tQOw6 +*^y&>cβ ~L:nBfLkRg]Z}r2p$X QaJ:\r|˄nVsN:I.0#r_(aW2 i^ D}@?۴/W6?)Ut:o,JgX^Mw>ԑr/0l"#1r_=˽^!xV+,+Siݧ 8Rfy4ժhhya1mh \ (H,?pU(z|BM%48Y?4XgV>=oeL;]M8ujG:FNo*tU.ۙïsO5: #)y.^NJ-vZx}A/Oo;}dsgs:_!{jܡ?{̝@yX[ߍ+DGWo\{M^s݈mVz{iWL"j[(5 V)h6/WVM5>jReI|$1<5XgnhiÕ6Ç~+ V.즑 j*N_-mWLFGy?˱Ətʊit.>+Ao)Ć5a4Z)E:ےlzYoF`34NpmOrYSBdBl>V},r3N[&j\-2v.-p_p:h0mT1W`[)E H) Wt9<]-vF Ï(ꑗ%3r `u`5 L2: e4KLWVT[cE4_9ă{JTM9}s"6nR r{=aę^[Z+C,!eı4+pþW޷yg+_lNֺƶbMS+0ؖcpzrr( *mo0=7<ј&ZD\p".0"բ[!A䲷帷a;KoSP[Ѿ+Ds;DpH QjS\uǍÇ#|ڴfK߲dY&lZ=pQ{ ѽUgz*-PW~#V\`)Ls(©ar$ȧ ^ ^nv+Ysj棂V4Gi+HLR)Ii3 nΣOo=_Qo0 nVĶ 0/G:ڷ)4g3>yex`ZXzzq?T;Okνtg=?*Bh[ ظQ[1C (2Ԃ9Bu=㽰?v>*ҁvq4] 3Creii׻ףP~B`*Aí|9k%?3Gg[>?gїk4x?D\Vh(3>AY[(\} YWFRq*9KD[OvZ: :lgө 1¯-\lSp?s߻bkxyT=k"̱q>6n p iA+񈧛}'eg_^a`Z4n+v \.xpmcmu%3d.;8Ͼ-_?B;S¬~`cca6KTë{paWFۡ<:~W|V_qVOO,}zFkj٫pHG%wM#<%rv Jag^mlo;ϱ>Զt~䴧.|?jkڰk 2XVq>lX+t$:<([Wݞ{6|`W:hzFq2`͈" ޡŽX\r|O;V!xDK#ʜ ireB%w D`"/ace2^qVxoi0Zs1.ԴyF M|);ܥs)t60,j{\6q9;$08 oTwm |=U*vn{I#Ya"O|_]Vf{2k(Zݘ"gV\-[@9/xW[ 1 lG8}jpG{F:åT\+XpiyywLF%)I w\E9 Nahƀ<%eeձ2hwVRym0iN[}o) j'm2 QbⰧ;iGaΉ ggG-[[=qKDŽ[p?c_Q?Fmo("֐tëM{.3^{>.Aԧ@-zF5^/)^:NB6]O}|KY-?avzԺ֛nZ͗4&T̲//et.0 k dgNot5*n^K{)GJ袟nAF;VW#PHO|Y&)gװЬwzidӣg8ulLb\%Pp 榑`+Ow^Vh 鬅4Tc: 2%HsIjީ%{ƥ&l| \ڗnXCŽT9T}UqK`/%:c ) 8{jEyW{MOmU?ut ;7b }Ӧt^f>nNo7lz [ SY/%D%^6(ou*/9ֆ};6tZѪ {)]ܥXNeTop[.e}8qi{Zv1RmTb#e+kO^Lvmjt<Րv#* gg<{{r'|Vp.JaqoyiWI!GáG=om+g M[^ט=}_SWHd7\".̴^_FܒycxK>mp-l @eD6px.}kXt%5R'\ŸY*D l/G&ȝOn e ėm_biZJ xĒ~K}TαY( 댵 ><]QsF#}! nYEV[⵲|8~VZo"^m?Z,^/Pl uÜ}35 V3tKt-U^h=u>ӎت%"Nic)z%3js8O5^|%~nuE#(+ ?U& X76a_10.Q}ejߦVv=AcKc+àËFݸ-dg/L@]/"^O~_̍/c^q+й}I鷰P:u(ˆ9vՠ)}d^9~{3ZM;3_,`\h\+~2@Z-oPŮԮ۩жrW˽jΎ]dax{2Վ( eNX/j{H /y\,\4îZ{-QqYҟٹ^i(mXVb bkuJvS23bz->@ق̨G6׹>3xj+tLwt{KO?}+?xT~:-49i?Ψ`}mW,v.0ߴ3>F{EyýbIZ)J s#/qOJ:_WSל-i48Fe\R1ۂ5;cQSRSQt&Qi8]7zVKS|ZAyJ9\t<, ِhHK(>@~EcCHݺ /vkb!DӝƏz:L))+: kt}VP ^B1Rض eՐqk@X`zKwQLK |׭f5+P>^Xwϱ0Xv&Ҝi x'jixJ7/LXO7Rbi$Up,\=ƽ= i;mr}m%L d6 IDATW795lK&9sZ:|NtZ˔R&v@hj~7{)%oÌF Eh|*:6J^;}+hiH3xWt&2ΧsٕA-;;(g-ݍ :k)QFZ+OW9y%$$ u:yX2(g~/7 xg4|T5i#ӿB0F7 -b0@Bv#| pz:d'jIfX ˘>\gq+ ?eްe&%^k*A|)t<J-z9 @phءmITZ4 8CO$>LG<2-r]vr ǙN f8 liW(Tax7θ’ycMւ>T(2ᥝ:1fօЏ[E)ֱq3%nrٸ^ְՌiO^3ȴj)(Q `F~8@z;ٞt紶Xi F%efJyZ9Ӕا*W V_8{nuA%N֜8W+WA@bmz!Y\ެg$΋lґs`t;=-Ώ|?e>xFف$1 `N` .p/0EH{x|}7[˝rwMfPaa@jbֲin(eKBoB@$^ݜD <]#*P'`S?Y\ihxϞe[K4K-IaW?w>. :^ۛvt@cdg4:OmنiƏFgp`[' #_n|~DٷrUx@JtF{E?7NujSIRZ; Jt6˧,NA{K󹿽o`hI۬lVt^׹7,QvNaK_9ZZ!K\la[:Qia#0jxZyG-Ei5tαrԷRd'DP2oC9/4Bs@dU-!7apO6QƊa58LԗbsZ`vpÝ7A [O}4;})tTɷ/mti Mч]7eۋw1W*a}Cӟ=e/xG-՜͍駡>D#%xȪB)gxFB-Wl%sWꮟ{^m=W4|9H(2EiG|YWoF_BY2/yuh :eRy@t𽢆T<ðe#M/fPpONP5Ad;[+h8v:uK#A=i~a;'f0QkY*PF%NGA^ڮ>rZZJ.tK?QZ@__i|kpշ'?+hƕkii÷U!FZbXc_"+:nϦ騸%^0G$`|/?^DZ3=m66(;;=MTbu4tbB+6l,~ܭh?ڽeimez u_|$Rq nu4 KRzpQxg|3[6Nk; s7b1l~_ꂍ d:<[.~fmtp6hEx\ D-if/KF>Vb*KAǭumY-)i4­փ/6.X˘0Sdh,RCyMpq^O3HbUOV#ol셽|+|73(:jQ[?Cr+:f8b_MC4>8G iD@"5P ٰ: 4G?V a?Uo#K$鉨Gdf7QvvXz;]uNfB#O_\TTfF'Weau+e9zN{͸闃wdŗ lՓp*ba>W?f&l]z>w=?7ꖂ`l9Hih:m*.Ata[֣ľrמÚ"F/ i6͆~Btw` jcr Uxeߖ7yt}YzՎç/t!ː`H-z/! 7Y{ Yx0)W&S_~*Ӷf&Xe}#\9GX0^0u9G hB,Nvz);LטLv~_f*88SoHNAa8,$ɢ ,sٟLC(iuZ++}azj5c*emxg3u}=K{=r-24V:kYsxZ5- GA/-u 0x$28eIA |ɽ̹oQM|eM+aLmf?oG =f1ʃ!||K  ڦQg '`J`8岗|ibl"7~ϖbBaɏi2PmJKG k1nӳ}M鯶҆D=OE)GpdU<~a.(04LJ _T(ra \~נzv.!`0D Ln'0ɟl_9IL˞:B}Ax\OkU5t0 l@'3,'kXnhz0Ú~y0}zkBp+qq[}?.=in˨^ ){,^^ú6$w?4ʾ>o{dNb:mˬ"c@O7-&;#qEː$ 2e%jp.vs C/Ϩ{b# JG'?EcEF#>MD1;z,nM6ͫyTe}uݴIXscW\[&8*kXի>㸮j9J$jYLp@jW]]Ӵk.`b[-4j=hEX:ޗQaӶ. QE9'$2𨄂Z 迯-Κ_k&:m0oK }?cVCh!0ɫPQ{a_t2!J{zf_a 2@v# *#eO=AG0lZ]+c쥞 ڼzM_+K`$:m&mp= 7ЮVrT_>Wݵ8ǪX6-~Wi^{sB 0ZV)eȆ:,覝HjVH~*c,5Vn+ -2k1%/j|iɶFϝ.+mɴH [1kS\س {ڦ-2;0n V&=_=-R7m6[ LĒ|xi`|Z!4S핕EK&e/pd~6,>wJZ{iZOנ . 5M+1͑\d^ M9!nquBqؕ*'O52fȆk˚@ Kl2,&"޻hXZ Yyb`C744N>yg8MٟۼGҾ_v/5)5z9X+NuXn ^6`מ bc6)nQ,&ai[t $_),r^y=^z(5|}sJru=max6)SZci?;pbpZӴ*7 Z]77fEYGb)9uFhY&-vbw&?, g%kbϏHʹgؘ&L4-] =J :w vrj%I z, &}r=ELklL8v"q2aXpDLvK$@׵hM:g Q9Bqf2&W2ѵM7 Ks(cI#UH{5 @MQ/,"%/柱I3E[]`-#z!6ixPe NܣkfUBhTR'RKh x b+~VZzV3~q1pQzlhд}D]VT;GqS0GSӲ1yG qXw kfA/N\ x wdYf21 2jbGrx[4mZ8JI*8 sѰx`\ \oliqM-l֝eCY~)E՝%(O/ =+>OrYgI/H/("2ȏ 'E\`*ʎiY7T~1Jի-8R*Eޯ !  ![XAҾբdJC iӔgopCk!j'8L,=妮$̎ѴɫW!Z/;(Ä V-\|@GE7[Flm O&A>;?f69HxN[V+M{[H}%!v`vA?/ Q1+ĩ(DSa"ipHFecGV6I4iSM-";9&2C)1bV2dP rxyR7I.L˒?l=4$*`)ޔ5Ңp=5q "LMO1Д%˂ut %T[6Zpq^CLl3<ʫcgg0p0l(NV[̺^K4!=MՊXO?A92c6l:5%ŮѤ1v֯O_<-Y_Vuč f5OF[|z)2p{4eW (4:'n󲖀!H4Ůl.BitA +R%HCdMAkFZlѮ6tRVk{duK뛜.t[Fm%G+t{-O+ a ~YW`ʩ.:OZ,E*8Jwޕ 0-aHrv -ǚy*JiųALP0U #^PVN$0*| y=T5TXA[- 0lh2"?mn1g=Z8ҥŧH@i9}=ޕH>cWoLKU}o]oz6PeW}XT͕FlWYz†_؜ >-_Ʌx/dѢgW5=mZ0)_Zaq(QܜB\n/S7p37x8 `<=EnA|4khvx[grOkD|5oķpr_ŒB:LA+;M-.u?-Q(-{2ͷ5^`/#,19"_Wd~Y/ϵ %Sy+"l>R1=6$h-H䎝PF#]R蕾 i50͔B<ϋGdV[IeAMtE/E{i9RYFh47&?ւW0D\i5 NNXo`GoOc0nL_?ͪ &>d[!k-nD %\Ը?AO`~45-tyRæ9:4+A 9,Qt2-T2[N*ۅE@ ~ʉaI2lUaӆ92~$̸XG" Ꙙ 2zFTMXKuشg3W2Kzbv\Jr v0VlHDiIv~i qZ6$,Œ{m_P\I?m7,R$L"8EY?dJnӁe^Er9 8W+^Wui/Þn7Pv gB}|$Y  OCYw eq_gKjҢd"Uk,p}H1h\@PK;B6wOB}'WG6u}cNԸӞNb@4J-O" H_n ¬<e6q Q yz v-LN8a~_Q4i0yV M_LNrni[V_ćT +˷8m* .k:p9!_pBWÿ_ДN۵EdLӠ{|MӶuL~ :3@%8]Z5 }^4$oa`E7odsM'u2e.UZYrӠI쑮M) 9f0_d+gbUtpCh+t/!B dy~!7ox|0[+id~m:dp}l\xryxiʳxc)=m`0F2^X]-N%Д-L׷3[%{O727}zŗo+.c#n´Ya}u-<|ʺO9*mj.sX\Fɑ 熊beoeLs-Lq2DYjnmT^1ruLi' 7΁%``@{ N# 5 laLael96[qZoTa,@Ol1D4N>TgZ/S9L+CLLnml[<}-r_L(1 z%]J@[qC=> [p\q1.,JP_,'FGf7u9T&} Zd\MB)ٯ K2۽(8-U^05ue"tLdSW{*Դ)lӶzM$7ŧ~-N6kc:m+iNC,Hecl}Ѱ/&Л֔cQ[ds4[Y!ΕMDY&Ot N[ 3W=2tFL $ZH1ţaʮJNvpٮlF8lQy.3tM2:lR1+"opSɌr+Uw);m4,'E`e=M 5m+ p$[TMbCTe75lÉɷ` {#2rkaSWqZӗ?RK˶e|l꺯D[$N6-2m!Ma0,_H2QY ]\I^281O]EM{PXf*,96!& dA4AXއ9pvAZ،U4<._TAS.Fv_A1&RQ4{𶆉 Ä]|.{en䤺DQW\e=B1<-%[pe }|͊aܴI)A@lqhEI@Zpo1tVѤk1 3kB Z4$]VZ!BJ p)˭ ;w dwr,X{WD~ۧ)%HĭM&C&rԻcG-r伋˨-WiX8aXcM.2)+geYj.ߗ ])3 \8(LWhbZzDIL9IPKL#D9VXQie<-vg5=p[$-o #k%LL$> tKӂ\teu/Ha!C(v9'Nt-8mJE9Ti5\(i->G>0Pzx2ӈ.J0N3u)=[,v=oX/.n`W'n&'N4䕭bZ|RXB/2IN=x˗(%Y1LR -&?ە=JO7vHį&l-٭'ִ?r`O3jŽ-: s.t9V)$fx*48Tۦ]Mz Y9\n2Kb\:BxeMK-n밮 Q]?fU-v- b$ €L0 . F4ƅPs GBEiv*`qW/k g1LQ#o;.t%YF&#ůZ&QOb-uu*8y=زfaT!$8ged=-T`^˴`691j=-}҆P6,0زO@hJrRTm^?t['À{ uevD Ⱝ-,_i [UV(.Zau6lr/]>w5(IH3aiN$#f|8uJj\nB,( x I6@#mhR(GTԽӛ&8y5Mx2l1Wò9z[_EVQ#B&ń521BǗ0Dh釗黹>sT{!3o+'ZmqXKڪ~L;F3lLROLBzg aoW7[0m1 RWpAɱkǠ0J=6J)7*U)b9u2S3,KW2Ejyo3'6܁+V!s b8yO8cXT]Dhi]m-/} 2T`ȹ}rt*̴8 bC ,fnB9羭ciMP0l+ϠAǫ#^D#=^ yh}ҸMgL- :ni-hZ2sNj?#pȅt- Ա6J8li޴}}dez}Wntfi=֮"Қ4S&Ƴi_$C-c1@睺Ų{xcL~u9ysW4vsQH7ώUvu䇷*y-hgiOԵ0/jZK`<-hkVϜECS6㾆6YvNL6=׼~ձ:,pZG}ckGPC fw$HX>\|KeiXI7-`q M=rOb[4mi^bf`Hy-'Y]kTVP@h0X:uD*Adc,%Qc܅ul-7xX9=pki9KJJ!)2ٶtu/u Je僓n?o8O`@[d]ZUV>̰*)?T}IWޗôch1,8duXKЮf'?vBW YiLݶ ںmuzK,W.[;٫}?wrtzŢÕV& F)f*=go˕=n Onۖjz_frVەb- Ona'ԇߔpsk]8=~~1.G.JngXpS0 u{ p`jm/C$O7b&mE:kqص'[vRVcr}^yWPOWWW2hSD$a8:s_#o{ |caᱰ ,o4Na =7.D4vb`\m p)|ɄܫYY(P֫V3J/^f|9k~G~V+Y؄LUb lEjpF 0,61(A. W-ʐkɴǮxFq/[5p ?MNz-\mz_qbbU6-ʞƓΣ{8uk_ӅBEQIO_ܵE&HlऋrbgFд=+*imIjx/僒ZUT[]ڦ%]=Q=v-\$.„D_-N)JPm꺅`)e0la3сN&$7Ǜv%Z"4>MF0@J. M[)_ "Z!s6`_Ɇ{&M)I]ɞaNJ@1Or4S94.&b 0=}aea{ڪγRS}'[8f DaOsi<ׇE@{>xniźouеU5udy M<:KaY_B  H>|rbC 4zR- z 8=`7vy@Pj2Q)r ZȆ¥vBsLK =UVD '5mʨO dl2=q'#+m@Td Ǻ0ßh[TQtR$`h[|[/F@cr<:{ qg[*Nb~̧Q[/wO_{8 5Q 8m?->yO3Q'3a=) 6%j֝m% uC9*1'02c=lΏ͇-8fpbAeZN 3QA9ڃ5q-E~-94mqyA .]z$7n+y=qVLBuXn\i)ȳ5:d-`xm[5yz ?i+3}$9CW/ⴶv T=JoV'; ",:N{lF@صu\a 8f4qpm/X-]K@K\- y̐P%^jN-B/IBA85\z뵃 ^ qTY3i[X|aQ$ޮW%Z="sSoHOF+.HAyŤp7[\GH>:sgF<'{Βia-t$ QAN#320er-O{b 7p&ll.,ɧWz-ߤ{5FװaS2rW?g^‹[T-xd]^p *%)-[Ŧo9ۢ}B +H]: hTQQ8d핹aE]+(c ]7 5ڑM.Ս/F%# `RK%'06tM"Pkud21I>]Fmh:Ow$:ξaRVzU@Bb8|Ɇ &)kUv >={%(@˴ UmQ&rEpr&eW#Yszd`!X[WKJAK%Ĵo#\Ĥi񴂧N;M01V1YޜV"t&] py HvI}`gh_a0m=u˯,&vg\G[v `W A^koN\`_A=e{|L-č- JA-'R,Sm䲷a.*U V%6)0zdkً(ʆa\;:]|ZRD[Zz4=|ug`Q} XVT[$>lWl55)m1fG;GUk'aɗ T$y3hh*Q儮]:&ǯg`M;Ζivi |JbOvjړ+bhǵ rmV\_IS]㛶uYևk+z]k'Ojͮ|s\5]Ğ'66L`KiOxQ_.>Xҧ%}̒ 'a{.0͝ 0- .8_n_60cV K$0VRXk~d$=VprK۷`1liW**/t5^_rU98(Oz)s y+7Ur/`2(Ɂ=>r[ ,%=:*Z)W|h08x!0)10W3}I[&&w_oYu]FK`tp.t8H֡3٥뺅NCIϊ4>XtlJ-W% dϧOx=&EzGk=z ŠVoAеRi`=E,$~LK2PB:3f %;-wXrwWB}Weu^6[M7{ izy`cឞ(—m:L5r=A##שS*^!G{<[t@X#a$ܙKw- 6xX MO@5mil^\5c.GbOb]>#"LӪ޼eǜxY y?M2:N۲`-tܫ@B0#ykB)r~WZxm۷(K-_~<r+\`pv) Q&\[4`2"BWb[1e }2l(jFx3|Ypfpp [3t3{Nu>8b2Y]#oYô`iU5P p0=vh)5 䰉 &::\[X)LX%z@8+㾶ԅJ:İaV\l(ً?x({3VM, bͥz¶6cbq&op˛LԳ-{CAmDF,p&4)7B[S%(cӞ 2 {lh8l&e!==]72hyN[KۗANjWI6-MD%ᱠbT29|id/q5>m\=j96ꭦ&WEI.A1A ziPpX-DfLKXaӇ?* 4 ;84Wפ`68MFn[x> EKIK(8<d8qSkdhq_\obTR*+żc+r_s]] O$sZ8kICbJkN"¨3=J2Y򈻌'':.M@OUO/ C=`oInyIg:YZ­`U6օ[~ D2J3QNZ-G"HxJ& njN_H8ѹ>=&>84KÈ455Ք:kr!/o;E]nWճE'_-*cR"Q2 ;q]/p=kjnYnMqZеGKaZRjmkcZɯm?ckSIiuB:2r!g =T NMn)WQ|z{NfŬٳ|^Ceg'={^O} `Onl?۷v Gz&L…SGs匌"_u=]S> -<,QP{1724DA`vkYC/+mҏ{+d][vQ]5MXu:רvWu˗o P`d-sE+{%[9UN@l2c뙕S{|Ã/Ŵ߲p}-6ǖa '˟np6׃pZū+*Π 5N-[U_GCpan[6`uڒ[*t6%NT{=(ں7hAJ;<{k=WrA}^PR}= KxX`e˫!Ed򮃓d"T<'05pjSII*7 x紏#ã r)=p) N3 Di[V%M?fÖ S%r7Ch0%w n٣#_6=sjw>6O:4$ONkY-} :\`㰚zyS79R!Ot<,1WzڪP*bˁaEUJ%s\f^a.-2Z_@YtA/a Y?b]5x3kQՠr!.U h{ ;V"eOlM"-#j7Rg͌sNk:$pxiC-?M=dK(.{2[V򴫺W@=w]Mtd 4 C `2Ju<=k>f8zrD WgZom'o=خQij({eN OL.RJ~6áA<þROfX{!szL(G47TЁa@z9lAqKYL8 Q"`" Q1iIuӪ ~R1V'7Ƕ!$@/{y=Dnz?c*T\@e^8FEԹv}Ò߂VPRPJtLU""JqD]Jİ|䠖qZEG4oỊiz,0J'4/#KlY @-dqjS b%TgҌ]x,F^V1f1f ue3&"r00kKMkTiMNsha=0[diՒib)8e-|25EV*lu*gsumCLMMm[>,7D\kMwrIɧOŦ'%Z07;(9-Mo Uɯj]M[ (VI`D HVHR<|ZGevZ09 wa'[i=b úRu*vqXeMOvUd]|B9! ]tԳG1 )jaD:FVsຯGn`pU^merbp,O2Gw\۰Z@jϤc4VSF%WI^nx4c~skhov/wYi;oiן$s1 ggo^;W9]C/r([WdB:[dÖ_NZ=(yd▦Na-kG~pg3/j{TmH1`:9M`K@R-MOhuff_M8b02jWx%gEb$ *py0-U7ua[%3N sy%%+'4&2d횷A2L I[OK-֜&5VLh9"LTyE(牦Zܧ@g=/v!QY ;LbUc ػ= =OkJ<|' pRgˠkO IDAT&$QveM]&ىMtT5:*LOO aviWޝ[ZB d.MaTX]%"UHFDWUR4{ԅx˒w}(ӚOe]"1.8O/HPq˿Oװ䳱cV6쏓hG^dʻaz>l?at2N.tO7sԚŋ|m*Bi&Ӥ,V`ȓ[Ƞ=M - 4_ZxdQ (XD6H~U -Pi=JWɧ7mh45BA} Z=o6Ūxt.ؤNҕ%ܳ47ULU{aV,i{Xztcv[E1jzD(+ZpBYxɏ"jyo֨6.iڕg,'ƦNy[֚dc ]M CSX k0mm=-No5Lګhd,q_"%rܶ}wLz\/w}rs[6=-K&]GZu(Z#]Hx= 'zAonyi?=z/ө[#ja=J7 <}@i&bK*#=sI_]ĖƵ6RF.۽`Ӱ{Y߰X'dv> l-嶾M ||Ǽ]֔V'F=ma)>>1LZ7gڳgdذ=G25=}؟=LM'޵3I{'8mjMќ19paX &s4)*unrKjjJ<`k^~*q>-yj_]4VP:ê=ĉqON^˅*5[ 4 E=H /8+Q"KE쫎L-,2y$_-?[<\5wa,Xt`Xz% !;jpg1P CqƩ[Yt|',b[@$t$4Ǵ\I[\ u_i[.+[]40LCNkC`%kyZ2m,5ag+9;Yx&Oj%-}&ֳg{ ue`ذ>~6c>zݣZkyVG-myxK7eӴGIc+kvO? 0PA DCgBћN|%2A;!Y1V.&݂FZ[>rj*1c&+MWW:sdNۀ,}DkghSY {`be}d^[7pb1oNvtcÖ$J[\[AP&*9"QA+Q\B N,欒UG>Bg+0Gɂ+Y=iXbs7'ky=,PA0087Zt9H'ź.B*z E88-ӋY<~=?g)TÚ,gۣV*to{>[tK]tg]&Ǜan'j?=Lji+Yt@[c ܣ‰|xi:BL o:e+/_\V$[/Ty5 MɃKqzN+jny#|4=5:yn-K r9}u.OKkJzo*u8L{Աulr!on᫝>w5~㮉bayoI=]=z6ݒH9$`88TC"Qd ɍ #a0L$Tw-o$"5Hn7iEi[Cheia}Ms-9w4]@t>[F VcثzE֙Ih+8k4rx@]ɂCA'{0MV]R $  {ATѶ"UzF( $IӮMBמUU~H4+$[|W=J|XplzeΞ2ji6q G<}p$aka 6Ag**묽'Q_0rC%Zrd _HVuvL▧5܂f|4V|gİ*5*2z?$u#bm}ӀiOxꘓ[3~yMfbI~y´Ŧ/;uPQЁD[ ٲɶJqVGts}ఘʍB.UH^OԪic$NpْxU|ÃKPpUǧMEWӞ;kK8GŶ{ɇhОeU5]bJ!صIӓTbiniJji'xMKSUnY0W g WaVa¥ v *PÛ*N#߂rPn5-T-wZ4y:ɚ2 3D[L56Iϻ&9eL߲X ~W#DтÙMJu]㲒Yy/: =KiX$|z\TZߣuP[ɦBsXɾ*='<-;\VNIUwۛ:oU7e7!K*Yf"#9~3LLMས Uz楨̂vf^qW1\2%iK12guN^p7UPo=/c[cb}g]419|ӮQmNy%!RE6)X&z̐?Lqn:g$GLVyxK"S=q6S3ju#϶d[㈆d:Ka&S >=_rӗXR@ppOaLoycO*[tXL $`Qw%O~[Ϗ|uݝkр\yfE$]G!8 7F]9 nwvρ_̹b2e7 O l |-Vv9YcM/x붬tDS_\BM[¦^֣iIm/P)9jh{u{Y=Wۃޔsg=%e>lԖҰiBeIfxCɰiנ0 @];*To鴦o-lk;x%&xGJhثjj$*9yT0VM~ĴM0cp~m,e%+\WAS&L,bK`E]RerObD-*ɋ8/#ȸu:VV{ݣf  سs lk-r˰î6[UU8Vh&ް^. Dys%GHr4Y~sȬf+^CQt3WZhgUf AM:3;K=VJ5 >la8*xvxbv_Q3k!g  jmS -87jr %cD^9WwiḣwL~D*5w_:/LI T &X,rzz|'{KW. E?ک}~=^Q_맬op?gpE"M%A803ї+g2aC)6@|@a59!i-=C7_#VO51lk2i| u =zɰ}bE,QzΥ-k L1oKhYİd5T%0&i-o[=[$-l4U#'«a/F^y (0̵'\Sb\ ~_;ߤW$w+D휓[REbϷ xZVj>\|uOKN=" r-NPEH--k}=ٲ/}lFˣL&΅Eb*"ʚ TLY> /|&jyi`r03Շ> kߣT4td1a"b/0ڀ¨(z}j`.6Zk%bYT>[)kV{u4= o1P^ aC-B0-1[yDU-qR00JTy<Ėɋ8Ylm,X(./G :eI(u=lh)$bʔ WBЊ i=*Gt(ْ?{-= tvҠlh-UqHYVzrz|{ ca:-/ZN @ C,]\J)R*ȫ/Ui.!MxM=*OAi΀^բN8TIVVeʃ\q>uj r{)KqW<\S^Bu.Uez Z'f51f+5Fw/jxxZ\qNO}hJCșt D ghʓZϬ4vlɬXKlQ)La Ԗk"rW*p7CPς4!޽Pirl|X+=}sl+Ao!(4|EǐoʿU=i^=5+!A3qj[OìC!.KW0r\ы߽ƁGConل[l|4`DX@%=<@8-`0՜yܢf?GxO~ ^h(y"4Tt+1mQ ҽ_d51Kk׫`x!E`p]`IF{8ZAg ҂曟&,(tyzL[܂yXG|ڷ Rk W:ʹ<&SOnQR- t_,Ȇ/Pɓ[W>[KDKGtzjʕr,I=8[Ӓ VR1*=7^ }k-u!{\,Ԍ,/)-/ {Ab n4 L-=!tɘ?}8\ l95hQ[_*P\,!;&=͗,^s`AOo1aj5Ih+_zԞ5T"{r:^q8rFOXD bpjz0&O\ڗ, Y(E1/^>x-zAqX -^i۾lcr T ?qpY#ݺ;iŹ- u2V|'OmqXY Yp/ L6L~{&]npq2vV/dm,ff. IDAT.Od3C@i%aO{tzEq5-ۛG6UUI[cIԊ- ,pjep| HG?S.-ys&y-\+`)A5viq+3xAPO+s(ׄ^(Y8(c^o; >[*G "zOB0:#3B={Ff5M" |Jyh}HǎO-;7"]7_)= bZ9XCC3c0 RGm^J-}yA<}X=O&,jܽK{X<%/v]k`0s@d[Ns:&ca0®-Z\.\-=/#u갡2XX9Ѯ_7LF>[ CӔOՎFP2_ s#śsE61( ꊟiG˶ǡ:砡u/{!`oK֋Īo>8L> 羺0gsH}V×S-d.t\ڻzX[(DDNc?UӪL;Gvci/āa{&σor̃#\=9r6 8_jm'? G/O,{]@,‰s\J 4[x:o⺦gZu O^9"X  ? H~PSy:U1nzu0T'yqa[*U UGoQVzX[Fހ:6ڒHVmy.ҷY,(˧+})]3[\`6_ biZ:Y6 ĥ{R9k\f{ǧ ϡw>ڏQm I@Q\+gUUr0sQ|ؗHп_]( ~, -{x@=D<+^$kg|ZTro0*#ɞB>c:=ku`\l#@S}7E+-a58#ʻXrKWC+tJ{re[zk,skA`~/uQg\O5آ5Ұh-[[i]G= (R񩇄OS ,J OmӶn(r!8q5҅za=l-S}ݍCe( 3lӖ$c%h0ɚ*^Љwi&E-Pd./%'J >QA5iW"N=U+E8t h}~fYid 0`i-ot"31bAnoҁW%-l@Ϫ@fd+?, cpYz| _* {s7ޖ zx0z֭\+Qī{ _RhhM luj ES+|ffX$l{TӪE<'g ruHeBx5)O`(NCyr_Mkrz줢/y GX_=ԣ5{}Y`_C=[>Eo^ R]VCJP;uZN( ݝ[xAz-0uC-_AA@ {|NUN?^&)d6ݸ#/Ƽu/,ˍY]!b-{@4V9E.*kaW#[|'ݕiz|E < "eP֊kf_jrlPaan EVoy.BM?T~6ZMUa*db9εlut޼Ƈ[֚B+n۵uԀ`hT\-MYcLL)#naa>נ[L2mM,g,Y_=c9^zWNO2,\(秊-Xk2GLB\mS= 6D{MeCӈ[$7:U- m5Shp6 4x%,5qy+ל5٨BH[89ɵ +鼴f-pB;DϖeUr.Pɇn3ٓiᬀer-sXV-[U8LTQ=23_t϶0Q:yXz,"={X:joE֑& ?Z(18ŞS[ɵdLXttN[[={tGu=>=l0=*YZ:mXi@ ,Zў2?r cj{P'{aO)-ܢ+9y%\zC,mhd+L$O+"%qe̬,UCz˻6(Q)d\jKw+bxCPGݔ{${2[=th/_@CaF=yD`Чlu} أ9r[0TB\E_-sUpS\ \r *woK~ZiCl7q4_ iuCO%{1-z$Om|zmNzu5H70@a'>XqNá_rک!s)` uNly=[⳹@ْߣB*i+[,oNGYX-BTo4''WI" R ?mѲU8-g%Tr/t)%UZ&oV=P~zN])-^2ӓH[ʕ\XKg${(~"zi@decе83H^wÄ>m84R:O rKA" [niYǞʞV(uiY_g;a]᩟-09ShUfں6p)U RMiѲ$sE3NUxqK.qG l "14Z^oŤeKCIO;,N&Ξo4Ut-[~uTtaElC{é׵>2lѓԯVoamqj*9k!A>T*yйG7% qmYnb~ڢ^=AX iP~ֺe/-RJ%,AʥN p?UjQL+C/g"?vjT~e啴zB  cm7fZN}px-? a_bA˱a!短@ɓ(ȡX=CU`oK1,`V tE66smKYoɥl j9O+W' }2ǐ݋$Y7B8 3xSL\{#|%; V:ԾVKY7[޽E*C%}~j¾$Ʈ zx-[j%*7rHTZN,n+SiYj% _-yFnqlKe!ʟe 4JPyt\ƿy:((ɒ\SW`Zgh/a~ ` ".Im+CZ6={uZ]a]{˩Iǩ-8}SZ:w-&o^oQ ɧm+01Gjg]}ߏ,*4ۂ'C> o|SE?= qH4DD5IJBˊݸS 5y)`#'8UьO}Dw=^閷9(0 H>louH9$sa--Y6/GDAW8 V<[ S󡖷h`O=Z*TK-&Xrpo+&w4LˡSg˻_RCpkᵯ3y-Oڿc\K~.cSZL [z*ipcd|Y_@%W+S2F}u;P qŞS|[,liѲÁLq"o,`ЇsX^a<w &-{=t rj`R MT޲>lPggj_[qJ_' }8xN4ÀmgeڬG=`-D0u{=tZ ~u$P{&{ M[d_HWSBZiZ1P"?p}߼'ruONd}ovAC庿ycmSۆ}vF<&1-Ҳ\%MD1yβ_ C_ZXe*"MX\Eoh8uҀF dŅ?| K.gV eVY~tWv5"J?b롴|'k-Q4mVwdV[(y=>UʼO **LhS5;eP~M޽V#ş |n<8~}G+ɗ$xE<\k~Ujп@Wjk_ L@B.T^?CTWhj8ByPNb *&/p_";upbga{xe[dkQ]{17/acR2֢}8ͯ1]Z`Q5533ѱ35l-YQ2_-ZBOq(p!dxW}YW?^ڡ2j tqh_h`dAp ,Jh*k 7EXS-uKx[]o6z >[(SI=?%{B̶ԛ+ ن6_WP [g(n,pEh,{ZNT0Fh/zB0xhrem 1\=[{M4+V T5=B`}J~hʐB`ٕog R|%n\ƫ8RsE 0zX=sv0Vxw_2l?{ ~ W[xة(4E;yZ6ixe-~F(my?mZ\%BfͶ2 ,g^_՝rP,BCm,cUa L-}mN`Rl[aj<{Y=o@W͡=,E`_3zZR5䕒̶L޼GaU8 ZZCߧ UGQJ}472xSeͩUOξ@B =IԐ|SKIn Qܲ}ɤa0`'*=i(8 1PP΢UIZ HN>%G;ùO*8 qh`þҹ|/r㚋g.Š`A pQ7-͖KvؐL[^q}ZḂ08JڳexMw1em1ZNLN9叧C85lP= ?qxiFjo3J/ݷN2ݕ Gط;8;N.['K רmJڇg갇=,Hn %[}B ob𢫯 = yE"cZ *d|i[,5<*I [PƅCkt4ek6}:8dbQ@eƗ{^|~}2T&#KQ?MKǞ+O{}b Pn%lTTz}AgŖhSŌ0 7LK\3W۴L-s18x븎 SCP4_B‚߼"|tke(,.^"Nthi ӮN W ŋ~^SK[|toJeY"!_rg ـi[űP?:1LyZn}n"-Z /!OO=ZٿR}ŧM*'m]kfC-oSGRk;c)x,ɾ”b _$X|}z^o5Ѓ-%I-W] [QpS-@pP +P]rglibJs= bǤPOz>dhZsm Zi-*XP֐^pЊFԢ" =N@ڀciLJo3}k8|? H&T@[\߾󯌂2y-&DF5ewߣe[VvV Ҵ0;\"0- r[ճY- 7Bcp˧j +dV͑z^.T+FjL[h"ٳe\EMYć՚j,nap}+}4?ڞjmtނp|ۉC6P&iCJǬa{T^8db˖ʴ[mJQQHl{⻷Iڪ qdIPYfˋ^5%I9Qf$\8gb(:Pyx-JYd~=& %s%mQmNJUĿsO#SC[sPHӶZ?swO /)HS'bَ9y= +>˩öI=`KByٴj-i=w?̢'hepiS.-.uEL_0T %IauZȠb%4]2FPA'T--O)E ܈1YP$>o*EIͪuÖ}JuSr^).fZV,s{PSp[r]QE{PXZ Z|a=C\RYQِ{ 0gŊ KyI ڒh)X"lﴖ=<h tLMvA*EEܰH@B -"7rB*O%Cqگ@ CCS?&BFo,\Ué5oRdV(8q)ӌi)Hٲz„U-,C6U!8MzpLC !?|Hx&%5^ʧ4ޠ,-t+tA]O=zu཈TgQ͉2ӓ*mO6ԃ}=r!W3`W&s O_÷Ph.j2I 9l/{G׌ZM@)1bGiw7X4Ad4`C-ѮH)!E'BݿL!!?|n[ˊ*5[ZEX\Se&p >+=+FMܽy6Aj4g=!= Ԅ||&ӧN ܂KYmKw߂߯BL)JKB8Ӳe6e3qؔ^(%Ţ@CSZ~@-G|L{S@4И+Y{:-Sk CG4 tM=]C/!=Lr?E-zRiA\RXZHkp+j/nCqBG8-$OEȴ9Ч7{AZ;01oqwg V|\~S=6ؽ-U3Gk{ӈ=wÀh79.RXȗQ,ju ̴ˎ7ru3%G(p0-ƹtҏ@q ʰE"xsA_ֲ7Bw>͵_N.l8uEcmF>"䥚PchT8p^WvwqHb^GzנhPpbʀ|Tsƽ2*ْI憓SeдتO׌RV«]54>Jٗ&ejjNi{Ǘ݂^Nç<-P =h?$1[eSLűQ_-=?h-N|[I.fj.v-kƮP޵8]T-z<1ݝ"[x=jA|*o[.]KaOKK d8yGx{"z69SO% RMZ*.LQ0wq*clt7IFׂ=*LO)[zFC[yh˞3=}Rlt ś WG|' u|{J&{L*.^qz›jXJz/J=TM쩹!Q#Oj)ɢT-,Z9:0\zN)q m"PRw2Y"&6A֧ In s-8 t q TWNܡteYҐ"o-[n)b2(Ndϟ,8a{s62e Cʐ 8K2{_20tϞ- e)*\]Gd̰'M{۬b-!!&ѐ&HB=AXlwI#ZYtQE3w)4/t珹1D ,}XNqʵnV,[zUUB1>)WITB$*+(wĐ}i)a2r-^|g2--% 7ߣ嗑x̤O~"yQ1e-LŒ6E4o(E\WY4ɕ랭B< W6{a d%=ဂUG+SiXҺ!OUڪ\@(7Uk-5d3Hi+ɗ yk4)]ӤdI^)yN`HS-^ H'ŚʚҒ:$ mQE^ $9Pu8eѦʒX`>;(- CC5[jOWg<.זH) =[]AAZ|nW̨\]-ZL241COyUYʒSC ؖ d[% ?T"ϏЩϖrO':iSLSӲ$zBZq/ecՙȾH n@y$caU4S,sg_-<4ҡDCHTKRZLmi.SVCXesےĖR" a1?E "꽬>8~.7,RJȀ%))V`n־uhOC d/js8_7=yudU|fi-] 3د%r(4C{~ !+RBl-{4R X|K-lkCfO4/Sæ$--g3Вǜ uv Z~S~L**/r^wNQeq @ L~lAb{)ܘ|#rm6EkZʐCԟG~XVelC4Wr!48.BDGƒ#P qLa\{]V[ZH'[WFa(IШtz2؊LxZ ׵GVɼrbg ʤc_jǧ =_S]{NaT-2"SaQ"Fe_Y8E^&hHiI$0oX'y\\'QyN-@!˰Jb(-S.bhKv%WL2EbOs Znٱ̔|]~Ğa6vi2ki^2&pjMO; Ӟ q}ik b:WbK4S2m~ N y_2T\5dr!h*:9KSME jF_[@ߛŖ=VqcR"7b@%D]yKȡOM!szVA#etyR/ z Zfu-reӐ#@# 41䩊vɓ*G@BBъ\0ӦJ֐ZoboAj3c]YzG0[Or2^%)}!-° w!ũ+{H#~ 0F\RTXqG !{j,N=uF,xYgTS` -U ib:D/akoQ8ѓQl9!f_vMnN}-~٢ũOQ/=aZm.I89=ܽ0~>mց1TI*<]XSzۢU]5SB>UspwBC\|6{T|!7p+_T%$*P[,[mB*+Z dQT/]ڪc8iY V_E٦U}C1orP)rH Lv%e_T=r!M@@ ٌP} I!8Y)} =LH֑lڧRА8e)-[ ԐOs|˧J;'%\wm^t rwZWRZK L y@9޶%B~tPlϡ ž4{^!{0%T@)yKaC{zrחt#S5IO=rbbn^l!yX/w1YQ[,Xғ +w9yk ε+];% {fzL .\=(]2r[gɪKz)!ķ\QL}HnCժȐ=4R͉s}ɀ34ow?iJVĶ>-eI$%{ f[H![4xFu,pTjO4 #J%XP%x[&!Oq(ʣ^=r[D*JZ2s25IiʾaPʵv(0|q /5 OkYqHޣBvw>&#x"]gقA1 *mc[4g)ߢ*u8}4fp)t~\~EZ/ $[Wd_M:ǭ7[Eِ.F)Q՝O @NLK6'ԖʂK[Sk$/,Κ[ Y.! LA^-8z~- Sqeg)I~߽0gR H9 ;tzX% .iXSv i!SzHy9PrjG}WNCJF/F\1Uk;D,OZ~=~Ξə6=t /ߡ{8tpnUpJU*ȃi .>=|55 _iC)P`pldiH/¯4dUG8[.#*\y'$Ɯ PQ9{} M&6HQ .7 |-Ǣ<.;^͔] SK'6叹KٲolQ9#kWZs*ĊNXU]^!g1K<ǻޙJLsKB[,ۧ5@Gp SRs*IST1~jr1 bW2ܩA-l8{Ҟ6 ))\uKO{N4&V]6Uͽ\|p|ςSY3k QSZB+m|{zعvwzh7;a9eBsȗM=/ !~YL"iH*8eO𘴺=my2iyVǨԟPĥ`Xl\x"6<%$rJH؂)`O(V~CHI}[ r},~E9iѯDuo|sꄭ:?2;5[Bȅ T,FzZO*Wo8Ð6}0R5:AeeuT9q))=zEK Y9hq<%qT'FRCK@Sަ0[Op諵k)ڤg9z(Sfvgc/uO;!hdڰv@З)yoܶD S򨸨{mYn !K'؇}fTd>=FӴC*?3pjfsԈX$3BB|;6'v}]bϤ_k+p< "2P)J!N! (VXEL-^Qap¡y(IE 8eQ!CrJ]YMlCe rωڵj_ AsN ,4ܼEA%^(~x;]'Ws9Bša=4·0`zN?u|:,D-B$Dp-=BzuEF9d0Iv6DT. SW˩^Mŏ ;#q@{$l rsV{Oۢaz[cH!6U\Lt-"t, ȕhi/ !SM6M9c MV" %ހ'Svi&4%-{xeVF[ajixgP9gbWpqNぺo+꿋?ro{-$C0f@8zv5;Ukyje-/"Y `x7(imACx*5sQ­GⱸFo҇E 0'7_AD?Ǭm'Uᔧ1@r*0|v_͇rN q{ZuFũ-:1*CɭNSh_e 9 zwk/[ߪSgå.!1ʰb`UXdf;%"Z'݃ fv*Nm`nqKmݟ:ܜIlUiqH@`Ӹߖ2޽X 2)jYʻ$:|#.=T(8챶!4lP StޣE6X_PRaue%`0B2SK03Cէ2L};42ˌx}󠍼yH`1g+(_znY6 cU9S\ >tK,cl" .rWI <|?-!C-N{%߂Sd,%NUßJe-=GD7'=k|Sݣ^;[X|/X5{CT-P@#xkey("C zyn|) /m . 9=x|T?w* 'z:5^9{<)|kTCU/瘄.=p<^|氵l.jVQ[TuO3TI8u Y:+9F!zʙn@Ws㸻ЇR>[jn޶0{9ũ[p DXuu O(& z<-i1]mȊ^F:'WR-[j pOQliy)7X>;ڸGGVSZZ^.W)SXyTw/]*SLDorviͶZ~\74RBCR-NmA!zz[N|Yȩ[t"JS>m㯧t U lئjxwáخ\!ѥv Hͯf 0tJSuT ݉l~?NɿE[>s.ߡ 5FN6GC$gz>.dzP`VŠa[hO%"4ݟ:@ 8~}p`243HS̽@D;ڃk1 mi|ҿo8BO}xs= Ee4_<ԧ1#d!YTQ?9dK=P w7څ Z@cTOhKe%T%uO`2qq0q ?b FwV{zM^wUT-7˧[PV]Shx|1a!EFq|h#56+GXV5SPyb IDATԑ@gC~`1Bc(\zScz@aK"iyw"V=k\,-tFPݣ4 !᭒hK(iUdyk-О)r /+K;=\0ː M8+? 6SD<*ps(eOk:W>S- VSsbRŴoN.򮣼oSt)y͋pC1r䤡d=i^8OcOɠ+• x*{4IǔzKˢڱޓĩO\-&gas.qXJnsʢ+kwrkʳpXD3%s&&(~[}ʢЩ7)HK]ӏX6e%C~ESg>( #A`T&#A8cOQ= K{,w:I]&ҠmDY`OFHN bO !ƞr%ȣXİ "HBaUpCmy`Scb{kԍy{/}-x&r5DaIKKzy@hAr=.p95[u_Ys(Wa9jY={=z%Jj@Qci%0k3U߅ i5ldɾ{+[ɿ{UDVl}O4_lԐ/{Ut/q1zl2Kہ߽GC m.7wPr} )% sLtYf TYȔ=-tr4 A܃K8/2.age=*^J.)IjxgOdjr%mj1KBz`Sso{Yt?f ~з#Oɾ;PF lq0+ b~9 QjԦ^2Vzsʐ{!5򰭟_v22ƥ6tԟNԄb{ڌB̤=2 "M\1! _ET*\1rt req`ҰC׊!#^|N㜣g*NI,Qj=n2UtCj!i_ h[_Д)iVZ-`jw.GfHC-U~zaysKEw~\@˟Nb{+à2܃S3ЯZjZ5Q0G9 .k=-5 ơEnx!?&uȖSݳ9t{OZLY<>͉!=[Ns׶4ԥ.VC^}-IyZ,w|^Şo-G@$V1dVYr׿O?[ShhLa>x> ̗n%c(> aZS}-ԫj9Kk[d GNsxbvꩆ/>֩pI@5tI8#,``*Tns0&lkb(!"*Rg4]:iFr)[*Bh)$~E u95e-d,JҖ_Ƽ.c1- znMZ:MT@@sTM,P(uK@rTC>;~+.i{lNÅPJєoQpjmq(U!XZCiN74a`C R:#`l2eȖvA4lxGmV h2kʢL9LK ݴlxZbn). ^)0Ds-XąqL2AO*-!)SoUϚa0@/xB4{ yNֿ׽܈y18hl++F_O`U\[N*A/ 9-irhjNۢ&M^]\ .ܡ٣cZܬ-UH>=T)S<,dT΂YB&)ע./vD<%G0ZY[zS?! MW4RRE{.x•nq IHӒ{LI ݾiCUc`hJo`ˬp˧JYZ !Ųb8J~_ 9$[j 83'+WXHVwZRZja!]2# )YJCPk)3Ͱ|*EV\֩VXr̷|iOIYb *]SNUp˩S $h{X.62 2RS[+ -C3H(aS{>.K5Aw)*9,Sg*yM-|XX>" IDzQVŒP1ՅdTuoɰJG|ٗAlk RWv^0j M"/t/  5}XVh}%!1rqX)5*hC-P՚|΅#~DKSZR>նDbMg\~! c@Ӎ?cD:Qr rajy b/'G K/KQAȆ@  {8Wу!:2tdGirɗ>%p2d˜"fr%P܊;F5P2j>!/ rL\/OG_E JwG$˸J~_MsHǗin83KNyw BEi){n,u`X8MqxLJ2^} KPFNzb ;5Gȫ,r(XS Pm+iF浒:O%M)e` T~ܔoxf) - k:l&ER3Mтz?W$)XEF _d )Җ|=j^stJ93<; Rzw销W2J0)s~ u.Ԓ!{x0'p2Ey[8mD[u%J#S_7zk=>ᔏ<*=8 *e]أeʌ$Ėqt 55\o!ѝ6eV g+9ce#hS=UK+U-}UshV~ץQ'x"qL(SzpS> [p>AH(\LN5 L3eCMM{ :t=ϭ%8- L)l ഞӀ,;)^z)[YdpؼtY+Za{)8qK)Fa\,SR=3p㦲NJ &Z9-SՈ@.eXDAI~,=9NB,4 bT6Ak)ؒp\JM߽Ǩ5C:C{&*l!!%[uy~h׫tN sZQIX=LNԡkK:ޏuep.R넟 #SdےQy>U݇[Z<xƞm kRqZx-ZJwSJ|5K=ӼBD1 ;oi#Y.O? ة3 =,B!^zUV3B~n2/ϩ{ṒBx<ߤRB{zZe ݁2͞Nl1e2]%;|s @xcmAطeëwkْ͖[4Joxoy-ZWG,8ge)SH!Lr#]Q}S{ uj=Z|}Z/=4>5hqLǝGX~:ۉ- ZrKJU1 JUxk)@с`5)3oW0Ⱥj>g Je! '8T+jByr˖[n%j}j"Cyߏxdgt0&C-%S1Es+K& C4 by饂BZ(:uKט2Cڨyެ^gHJáḦ́rKFwV)[iV]D i9ԑgK\>&h 5XL -pʬ$uT]nj>}( mII GCdc [8.=j}Bm`q:@kzNy)-p@2B' s@=>ph} g`rÞw+W 9〳9!AݗM Y<e5\^4j>S9?""EL~g$37,"Жng{47t[^zJ[2P;J2@OxA ʥ9dgpL#2'8(U~5-[|b]Nm+e )!-E[O}}-Wm^!= Co[p8&҉Ʒ:7;"."SZ m2j-~ӡ+sczLyUdJV]8ng#֦fyGqs98rYuzC!:}Zt|BjO=tȏhySppvd #:~_ Un\{p&v'CP-N "ؗwU|/N?,%6.lUU>"* xKjUwAQgY 9U-P\85[^˨/Lốp p˷1}ioآlŏPc*n4N9NJ1Z ֽ~cq8ԿݮBX^TPmLNwf2Y=KGQIz =ʿ|M} 31K2 dHH\@V;]whQ*ZEHKC4l~O:+n?$soԷA*i tqkϲWJ7[lJ;cN|٥pѤ%b F!*L)Vno1釦ZKJi#R<窬MoO3v_ƍ%af{5؎dB3+EԮe^y==] V kR~m\d I/"Өz5UO?L:@mP:^ʌ)lӳD_24daQ1 3N5V;EE?yPCUjH0+0>S_ӼtKN+6r:nTۦ$lq ( -h 6j;S]^ҟ)CZYBrj C- [f]Z]\B \:U+J3,6M΋ziRة@)"r7Hqa}KKpvX, 'ڃ)'W"LǓaMK@  Ͼt꩝n`KG # a([ԂyMв\o 0 9ccS F-[ j3G2[٤65xaF0|K-[8%-!)KӲG/[Nt:C{nNso0 IDAT[ z>QAi z) JSOejˡ=&mt}4ô :ae[ G)a-(Mt~D#>b #ҲSK>W{wGC4S5 @Zv۔$Q40$گm{5,rJʖ6-[&.u*czkRޔ5ܔ$@%xv !!3$eSn]5,C*R8SkĕVl`9-9aN1 njg-O4;e){>'.SvINeZ=OCyX*lD!Oثb?PqлأdjA+L"ESK kRZJ]pZtTR_OOp-i҅ںK 4u/-z٥< _۪^mwˌ=,GWǧkG @Q,Gm+ :?2Ċ Y !1仌Cz4xUX`| \Ϟ; ިF!`jᜰeoRzBHvc԰$yzf`cnEtjU\WKJZ½IH[R,ƊX L Ax*g#-n"ܱwRK1zE|έ-k}^\*ҽ5=)1?cê7_y)|!5& eK$,13'^Em5 [t;^e omhŨo-y YR 1|L9-C{yA?kL̊^K0(ʉUdgYV\ 䪤n/tЫb!/=䩗fWsnή-9'/ QlyM1$0Zv- ES p{e+P^Nx_&Hli0|UʼK bHV唖[何N ){ a u\EVTrH%εVEnwXqԶl9UU7  xwUA=?| 2$E2%1m4}ŕ~CL gm§  ,-{ziqZ3è\` WV7!"-LjQge/SQᑔ:iϺ2PsjcW=KגꞤ lK+a&Y}!MseC/˩ت:e0eޟB_hڄ b%A_cfE-~YSŷ|[ LXhR gnaPOԨe-4ju'Y/50Ku_5E#kPa:n%S'= ٝc.v;P1TT҅늁SeV네7!r_zCd"P ap9Ie8Z+oA %I_c-[#jߺVc6&5٧”3bN:$=C6qrDuk +%!¼ՕmzӼgSX$1z\bocg]dpN}ƒBcT 1"Rr>Q% ^/sÀ;oS!2G8eO2ղe'0]dI9*J,w.ad5 CI}{8F43NynE.>lS9%Wz= L@a' ;\Dӊ B%$AZ-%)>bO`~ B|N6JK!֬讒,2ya!1я9 )[j>P=| ȩS8eD$z`[@rhQtL]uEVcŦ=r [WRq@ pTK؂bwYKS]yctgV -cbPHlޣ6/j[A{ Wֈd%ǨUVO^=ep%RY FɄFSnUQG19t [[T$QR-u؍!V@!.˶09BJ3~-fĥC=Eøb8UI j]w\-Quj/`|Ȼλ[(ؚPw_*- wfY[B1eau 2k@#ԧn[r:Wtg('xS\#5$S.ɺqeќ%!Xxx+r|ZMj:baT Qu.=.z UL}D ^r)jҩ<N qa7uu\jTDgd2CIr`[&a#Slb]3˖-{ M$Z&\`#$S]59+ri|&.^z%þЬtr.D"͛l kMPAqL+*ߢ)%q9UѲPnȆ/$?*h5)twb1Y!p2'PH= ,ZȖRt6p9VLu Kl2E0a_PS{NF{Wo4ЅOTgH!HI |z#xHIb9O9ˆ^J@4pP:;O;ub) 8eg}.e=%w"z<{r+ҡ[^G ^{HxY/}d[0휟s(rM 3>ReUntx2eAQhd?t]R5E\!/wdC\ķ})+ͅ}!7exx|Q o>n \Fcd"B&*W;yw+GU CyCgÜ;lHHr DٝU(oGݲrtb+ier/ Ud$wSU2,J Teo o9peCeӞ2*dV!!F2R*qxxqGt|:>Nj%5X ,HYE~)d=, a <594?(lbK3B! ֗⸔H}@sVB)@ ͼYni$gR%܆zPX:-.[L$h6$ߣ' 0̑`ȞS. Q3!(ĝJ0zUB `-.+" znK HNB(^C[N2臺l9tJTW/)E,,[<,!S4NX`QE$Q69d7i D/[Ѫf{x{}v_A;o=N}5 !X5i@N%RdatGzh+琐 Υc0gSHj%ʡ5iX_zʖ9Ei јmOTai%&o‹穴xgɕgF;pctܼEXˣ>JwYaWz)g%wcp1`CșSl )sp+&cY:;{X/F!* !S^wjANܓl4PaCSqjJդRYNLw|NFP).B-Zx)[-@>cw=\>􌜪u»ȳGjQz?toc ~[А4{sMF3xjqQP(uVnD-͐\-OTU Z~|I kHL2=x]%[^vjSǤWrw6C8J"g92eO0V,- ִ`RN Ka a,L&HԲ"ӐI҉BAsU / K5*=;r 2r+LTb%CO;_Krˬ^Дe4nK84仅 fdKFۉ p A#lQ뵌ԃ3=PFc)L۪wɪV~ PאNlBΔ:@U/Y$ ;H-<\X eB.zpcly˔AiX21Gpe.\_8*(Nm1[A7ڲsT^2gC+e|^ ZO:5ٺbY9BHl&(G9EjHfz{NSL|N6,;@Al96^2"*xi\j؝.loSW Rh+Ǐ-{43+dT/ xBFr8*ʷ1*"@ ö8Зƛ7}o{aXH-hTX$~GԝKa!\)M, A4ھ[PtQ j=PT=o^l9-՞q _>MЮ)Otzd)Є~);=YUf.zBz1@vw.Zݺe~Vi:C..[:zec IWZ{) 7Tl˒GcS31i.hLi@moL O9?=d W.UFѳj!<ͷa *N |Ge-tGKҙX\rQ`Bn})n11L+a+t3Z^恟)-mըXj)."Ojo mtCH=Z#H1,[:琕U(Yí5!{gȐh ۤJW`J*G`*ہe@B:kCPMreST %OBKG/+͝xd\w-Y=D@?=_ǻ~wwE5?CiZQ-e{Slwd `pG¡BЯx$ێ.=\.#d2.Ş2ŵt4[N›O0I;1 b\F*̕)oYmwNg32er^KoV~_ <–`ӧ:I:5EC0pHK|=< <5p(p yf(#bU)S we \{O){-͠rSx:[?^V]nMvPYDn$Y.>/R8ulT{ULFAf:K{Z3[[VY ܊J@M"XRy Yo˜(2na3r#$pB/Y 6: efJَ)Ks7SA%JQs2f#HKþ%c|0o;[<9Eh$>Ed_z-Z‘xHցgW|I2pT=Ywtin«O=Ԩ@J?X*2050ŗ]ʪc3%-{9ʻl◵Sj:~LǞ-2RK姏eч<;yFZR,^zebKGk8 U-,P%.hX!epVnչ^~j*|"z盁>QRcK$㍨_*5mj%z83I2Ҳ O)Qr ߃CGNC. \lɔ}IKfE!hyp)dmѮ ]a kYC*Y#ѡ{̲j$KB,]OuZ|N-8j-#PؙFԟlE=޷Bk/]^ׁ32B<o/! ү"-.; WCCRWbGl/#bQY= B(Gʥ)("ub96.sUġ-CN;̥LLRӲǧ_@0Kwć#]B-A*i P̭Df_ۀe iƫ$==GYTe}ІJQ fZtxn#o~sX"9ʥ!;Z%,Bz"z' P³oTrBS nڃD^^~ ǐ]nt0GtS\V ^̿?k45d5Sfʥit {a].]ޥ9 Jh!㞟L t[jJnkqSIp %}ZATG{U \Z<lDf!QǸq#j=Be 'mҲUz,q)Xpz=e)?'tUҖ4 -wj=LlWpSq5{=,V:h>BG.5AP n$g--$n&NJ pP-٤'-![W_Dij!J_xIK{i3, ?g =<_xgXslȣ":ʁ)ZY/tn2My&5ùEz#>S[hF.{>8Q-vG[dxߘwSxEE?)ShP JwV-%n+Wo]!9Xm*[7[;k Fgu*ŵܾlV@{u=['>2=tIE|Ss@ n>8liv ڜe/8YHb<K!g+?\xө8EhC/K -b˞=`lK)-4aHxȑrJcNYSd6/41eh/0_OH-(6Q{8n~>HB.64h&2P Sh,IYgTVX|xeϩSD$;zH*B#4[B@mG z9\Sv4 K!!, @ kK;(`[+4EJKրȒ$Iz"fT,@ ^|t$wwNfB#l]3##G䓞\|mQT|M͝jSY $L,rY\6YME-\3I$\&C׶,V7+f [99?n&[-=}9ȂbZ?q}$p.Sg2qMU6f吪|*>+|VM:xa{Oj| awa`8|شa[F\ˊ\F|@O{9P:soqi#80H|RFĚJo8NJ&{z[H:? Ouep[5|7 ;e|X6΂"qK/H*S i&-Xp1m$AYMoz L<,(|zg^Ė%k5RqQmV_&~޼쒾6@:osb,͕'|I $Ƙ|UuM{q :4OjJ$ wȂ=mck/Miɤ`4: w5Dv2=͗u^3Iltm-CN[<m+M'U\ ]^T6?6מO? E״Yȍ[6\?{Xц%ÄGkOOFe)P4> V|k tl'|ɣ(Ζ^۶eEM\cfsY`K)%j]=v&Z^bA% &ckKI5,Nu3 fNC P*[p>l/cfKK[1;WX*-ִV.a@$o*P-KTQKgL-k(jͿ_"|I\rxBPiZ~[^&/ \ Þ{&l`cQ "ujؔLMv /6q-Z0 e^HlSf?|Z"qc)8&5&l]c'7%HŧOzP ;Y={x~0iRX^+ e-.T}Oϰ|;>T@c030h;ʚ'ycXZU-|KSd\y9QK`5[\԰2֎/i3tGi@׃ɹTk ktX`е%ZMo{N"-4ni6tl|M4rÓ~IMe~pZ]ϟt d~OmيOROa-[EvV+%M9/GM &n TG027@[ł }-&6:x8~Fb4lBO'i[8- aCLn90p{-ziO3S:/߲ӔfTA_n䮇KVy5'JP3/ž }MQ+R%]V^2kEkYZW@jL{K9M?oBSq[29%%U,׬+Y~qGĒ.zݞ߯w1azqb-4/N;_RrMk{~b v(uM!"(Ӟ6j|T6f [N>Z6I{& Yam ek ħ'7~.צ Vd?({!6îfM]\iM=kt-kNpZa-G-qذcFn zrگ4nDEV}0 Ӯ!?K zT/U̅5m\*/d-Y%h$P0dχ_zb/[.LLtՠ.sOc7 &yuSm䰧ŞlY6mJ> ~6̙2V4ഴ]i-+e@o1t:H+˨LvUy_R={<ցe TBa ՗s%)*oFieп/:J_/2p\.:PP2F/ysi.ImE*rr\sH]D{4UG]V,e\^ {%UeMy48UQay[nq&)ī 0ه7gK$ӇQ&M6< QFϖ8)=0nxAy<[ӇibӋ9|ZTY}$oy/HP=ӂ#K1/uuhԈc1F~O 3uxNZ[> I+L+d$=ɡĉ)*!T+5.|BQ)M3I' V4aKbiʣ:z ^]Ӓ 5wؕV/y=@)c}KBGpU;_eCtXJ|cä_aE vY`g$5B d bw,wyiqpqnW x6YVI*O-5*qّ+ҡ-+%3E!VbA[s3)r=喧y2M:mRvP.%Ei`rۙ0qiϝ%J{t[zJ=M;ju:@W4 O7EYkT׮Ki+`S.M#kWQ *-!MG jLS{ K~Z-ueޕ8 :zȃF@w@Kh=L`"y"eeI4AWghH=ܕ5c d W=RĮp qz?/>L\P] ;:X|1TJۗUvr8zm+<2Mڢ=h6iyQgapCratxnyTXB R>P>RVPʝLԯ&_cT}RO|Uޚv}^q6s~ډ?iXeӞ8:>ڒ6&?[O-Z*d=[N譥<'=g&hE▗]ЀYytk+5rW,)7W k\Xs7ːX ^V8R#}4u5Uu%zaB@|ZצO0L2b6pS & o/kj)AVtq-`Hɣd."4f8,(Jv|X&gWb/4khu<]Yjq/_!|Ş+krƏk`v:tV梓3]E@KL&q;]`8}R_Om_*翲eiu&$4ٴGXOfbA΀-5-y5"kPK@pZϘ`GK446{Mҋ#*goYTk\va RZѲ&{oe(ٗi1&/ pO&4Y"%cv^ыFzp#t> 6z}cV Y V=j62w}=n] )M)#WGEt6k7j/(yE?#ҊF%I 7,گ] $_W/eX*dU_<&(|]O<}aHceRi Oϰ [NLyˮViougtpWSf-/=<^:Qݞx6'?yM:$,j\ز6 oqi5 /`6D= h6=T:lȵbpʳʖga>oYUGSFڭOl d"'M:,c$y0m؏8llLKg1li t|)=*y-`x& ItO_jKاOԴW~dZS{gXzԾ^U{z|ױQwy /۾eufMHQya"4q;q-Xk%%D[%02/B[lj侺߰zHJRL~4"~ؖWp}~iAq0džM{aZ$t8p򖿼Q{%/>|:|xo jh?'ⴱTh[[ЀmN(gVaGG+=>ť0V(xilr}$gҲk(4=sRu_rI-j=ДVѨ2 Z50:xPSϓa t#?4Ү_D· LNܓk]O2LA~ӷZ`oѓ{O'҂t8mXϰa ýQzs|Tl[nV2DZ]=mOCí :3# [ORMi]=AUB +Ey&`|ڴj4aqڞPza.4B<,N;UQOi[j*S彙\"RqtVO-T8r IDAThJgt4[Z%6]6ɗPJn:n.Q)sjl%/]\Xaش@ӂM[^4<'kY 2FrF8yOW=ž*\tϾڒb~%l'Nħ_G**-.+G[n ;my0Qe,E2pϧj=LɆa[{&ienx]==Q[n93L)5|`뗗%8lqb45eEf/Cv[KBb=$i{$b]GXJbAl9Mߟ^·mj `Ӈ5%*iɃ}yږ" a+E{b{g9w%RW[J 2J{%u6-zZ}҇Pü/Lh3_~uF%ǭ,թQ.L)%kH9[ldR\<_2PUuIh} Ƃnk40#!S[> UOi[Z72O˚7>&Ӷ][xch_ n,$pV&1/W^^mVa_DMwepOimc6=p5Ӓwȶθ oYwY@c%ӛJ!R"*W<@8햎.%S0 aa$H v6cV72]~HZe41Ͱ F45}Z?̛LRXW-RYaL6lD=´4Xl,}ӕm^V&rbI<˃X㺹wnX^' EZ(fNqQLw\b<,hs6M_}jV aiT*V?ji՟vOiiÅ`rמ=~iZ['5Ͱ=wl:mxY#-oY=Wr]+XGEB+5hVȮ._M?>=I&ϞaoQټz5Kbܣ.aO^Ólu˟3ٚ&'t~?cW?ڞ=h*ML,e]a{V.Z0V*4[ĉ2 Rmc yu e|c%q|qniڮ Vţ\Z=X# "Ta'nQӴ}X}][> -ˎrڮ\?Ѵg&߹r[ɶךn"_W-ޗ2&DŲH%vrkA`254!5$p=Oo &]2Ul-Mqi:[ԔVô&OӖS-9YN-1NLGOKAaoxsUms5^ Vj-J|d-VC||?@u=o<|EN 1?>鷸{>Lv9ޣiˠMU[իM;6vm?&Ak8M :ǧ7 sLmUx>mϰWiF?q2**pn< BÖto9Lt 'vqG8o1xZɟrvE >͊8®!])z˖~X[Oe]qM:XtpB[]?!p͛-Xua}--IU{Bjגͫ8sч7U5'vJT#تsN6-'Bprm+h:)>yK״AqR-!EXkUsE2lBقO7mC 5F;j=ȥk *@rr˷0<<"zrj9sn˪ Svx[xsrS˦i`ǟ է˴QZMa= t90Q?L g=Qz\I?ιip4|7U߼Ճ]o9J`,Qœ8W4t"3|^24< Z2:O{}^{$Vwir{6ocd- = @ӏz+\oct&Pk[9mbaO?Xg=(Wl_xk:p`" 4uXg%2 U$T&oaBl?Ox0msr+R,r3MO>'{V@5;ճ*b]uS{A2[erɗS-7 pxd$X+o*m*,_i7$p2> W>i?f() PG[u2UFi]W W[aM*➛zAϸ2n\VuCĢQ2I.\t0V3K`Y: , N+'$T f-:gMr鮽r-napbPh+cipHԆf?Φg6l:oI4._rV' h#nkx rjiY +> ׾pz!7nl®%Wy}GfJ)^z֚R?(V! K'Ų% ZFOˊ4dog[/t_ E]D+àIl>wjlE0{vlyئ<ÞΫ SS0GӛzRH45U,Oh9 M1m]M{R3<{L|˜p}*%W>JVXנ]՗+izZ6Y`] -?mϏ{+_҃X<  a+*r =~"`-ghR5L4}mjs.5֕WA;XWg])mLmSI#:=+/ J2 `\kUˋnkM8÷No߂ 0ʴs\MI t(.JNr~z=Y55Qm:jGtĕzW5<+7c~$5-J-`_cTc9_yC]ov鞟-4ӕ~ڵfvOl8Jq{mN~Xջw I?zvUï_* M&Ok ޳ÝZwMtm*&XC__>W4K"R=ݲ»ْfL 5 3*{İi`m00(N9lx.ziDu&i`hrDOUc+a%p>F6$ v5 {n DaÆD8b܆MdP4rimZ]t0Rĝ^EŎ+9SAs W^bXQM&e]7l2Rv4ìi'\a5ynZғ9l, ciW,Fz99O[n^Yl9ӚZn6_8&Z=\ӂг7aWt"ϴkد&lu)%-\°-wUnOM N1DW%Áajg_>iH_i]nEz<,to C]:l[= ܖz/[q9h2sТD2]iϮa=J34`yt+B0]ો<[яfb讻-Ui{oXĉzVLZ_0϶hDv+l);NX&L > !cc5b !Sa]cʿ-ֻR  BiWOn cWwkح_ͫZWyIKPcWMVS =Wk%-8os-qbӬd x JZ!z8glə'(} {peL|Tê n1 ~=;LOc[îJ 2ŝEos&ϙlx~L?)9Ͻ V;zʐ)JֲULMaou5*]^p> :R!cqO%ǣB*zWbJ\2Ui+N jq[Z<̰wYv;NՂ| +12Z=Ӛ[|9oٳԿ4Ӟ?dAeəֲc0ܯru5k/?[ūy-.m\x=UÖQșE5I<| `/yдsqKɮa3/zl˰{fMOC#ʽv)j`6\+E>P㯃 7j4XOsK3wLv}{nڣtڳt=>W9VK]@HҼumfD tR.h ]"U=7m"Ǧ.ɒZ44`&Ȯ sѪ#NyN)mL aLvs69 [lٴ1 0nI▱ e꡺nDMn Դr58͵aoI&G;0Vwoe$-'i%jKq j_qi {_õW r$ɏtig+F+G4{$6➮{nY @.?\m]vT`;LuE4Z " jIg}Pj$%HX`Z^*m .d#_ ӷ|+tSiQ4if],ckɕrV״QS 5/4gaM<wS0a"^"c3r[2| >O;V]\:mtU%Ų '$L aA÷6pAW!+=OK,{;.)&E0N@4Ǧ*Ŗw]0}[+@D)HEL;yQQQ6UAls(tZ4BJn"܊Q-*[+Imi_%VJeTY)1*ͦr */n=FG%W̞)-Mo9{~<ۿ6GYrw,ݸzCƈz%1!t?QNl $a<ۇ^NtPgF`MS6U fǁ=E&7x1Vma3^2$L7}z/ qZ˹!aWW plO[ P{|()Ek8`-ۢ͜2 0 P^3%+eJ`1Jƾ ի4K^Ey[HX()_xjs[^&ppTWI[ pMe>+OrprWC}.ִ={bPb;_OD%jd8܋Hh}X9%AJ&h˛l[&7]d؃= -0Uk< GȺƂXi5<,hz{?= +L,gƞ]+i@-Њ4zңy~@]Ȭ#1NHY7,80<O~ALJ};t0ʡD$MP2]1G і^C{W4a@Mw=Po?o Ҁ̷6`8>c ذp a00G1kݰҠZ]x' \a?ߠ_]r>t-0߮jPl{N665Ou)s%ۯ+BEZE l ZK Sы@O[O$)J^y9Jo_ Q%EMhzZĶƚ]Vb&M_ G鎦:*Ƌs{iXco~L ǖm/yϏ>*eX ́_u%{V(9ء@s]+S{Z~7; 0ఓB9~-i=f-9=n=iߎ6?CdH) BF:EAKŞ=_槽;9]tW|ґUCk kښW~] qwUfΰhÀF*99gX%`0Xi=O7G2ętn1i Obv s?<}u-U_l ,nX=UVlr}x Gqv mR5`Ӿ4/\*q]id~aI?S[xa!'emܫ IDATަOSB+ycGdjVRGiE(vc˪2eah5tط L>, |zW5"LӾ?۞OK,? |Stcr"Vں>͍oi.hK([,;(dS=Jweh vzW"L;XE^r s 5}=OkzgdSoɋ~Q&)1mSrKrfi#ݯs[dX_A4O{ˊɔd2ֿy^lAC.'kxM귺?ukڍkN3\+2^odsk ו$Xo[Nőb{􁗭GV4j=[Zcgwş~[9,YOK9ql7({h+sGI(m}*tQU0 h1(԰\sa{a뢳6YO8< zfH2_"-h,Iê>yI2 בH-tӖn: 25>irɆD"j圹@D::6@>~|r6#-oƷ͎pa_BEe+AP٦]%\J*%D'GxzNޕmYW O{8z4mw4yxG&n'P:!h0 |Szi{i-4 iOf2}[Ot\j~il ^4׼--\\]֜zڕR@V/\uKTÓ-' e=Re蹎~Up`+ߜ@t1r1Q\ξ@ӳ>r"5u*%ar}zS|siz4m嗝^`cWnepW0=ur(nX-|˾ e-vwN- oٵː2q۠0qj Ԫ3`<]? <)랃| o9fnmnkd1239|`K`ɖkH۫9X"ք=ۥanx$f[Jt][v{> 5uuNBNrPWJoӖ[^3SSʢ~+\nSê8mw<ӡi-/Ed+xMZTlMxQ.C;pRv`Ӟv=[~asiTmݟsL-hOGO5}Y KHrtgkioі 5N;m:B1 f>SZބ,@9둨`,sdu , ;Peƾyz uF՛䃝%U8ml'';?s˗<-9D8-^?i'TM}& `\"ndN 2hlxXO |ZZL>laX~:^qu_.WLA'U?㦾p5LwE&}>^5Ⱥ뼪!M0+$nY7z:#P4_2/d/{k@{J1y\،%XɁ.Ӧ}ɸ~ZҖ+[yض~O2\Nj'}4_)lr-G!/-?' 2rWˎOo545)2BГ{e6&W&8+ւЖGvzǧ{L[Qʆ@4 [i@RiPX3Lu(Zr',ba>K,gEiydUPJ I$-Z؎)[@`'d dLd* ^Ot3$>Z]:bQOðz t Ud)_^?ked`^I:x%vYC]sok R^.-Bli*47pCoUQʹ奟@kZ)Q7}[VKSCt-,)S -Jt Wm qOT,*K _iui='U=4y [omqGJ-djOy-Eul &ɃzZnDGbؐ ] r -aO%ŮBUj+_.B)k;[#|A,nW:rD=д%H8'&d趴;[gfÖ[ `&:j }ݑ~n2 |Ln`v!hn:Ҋ4`rωmp]Vz5h5f)f/Y.4P;pRE 3VH5wy͙_xQ{VebSC2XDR%[&%AO&,(lգgX_qT-Nq$O*9W|4` 7cѰ$e+H"4r}n[i[~V͊{&Ok#Tn;!0 N d17$tDKs&#Ӑ+>K) xL[ YA˴oX5w',qχ=l@͚&-ݶ^-<-E2,'L%X{FݱXkà00`fhW5ʨz~+965)d 8а]Sh /j ]!y=,Ծt=uLQZ^9Y\õҲ%jn Bؕ?>;*l.Gc2Z54eW O[5*7QMN; kNbyڥ-Hˣ 'oQַky`nMnO68AuoΙ=z`@X zrP;qaw8&ER KnfN3L)U}u*]ך0+lr7lSW7 st s<=w߃~z͖kӋ410i`pV4ǻڿ_լ|!㯄=mƓ`Yjk0Losc tHG(O (p!04Ӕh@:mZDg5ki&i*ǖ54 LeCƦoA|M$ MXO^9}y%d]Z|@ut Y&:~hlm 䖥'Y;i=kS LV)vRY&/$e}sYVo4E1{q=i_3"0NV:W$ WwCn!2v-Kh`* =ғ}ɋ$bk~]c5kXFTx/H0`$mFz&/h躭ZWb9pEUn_3BySXgV֣)ɓ au}z 7=YDaeOͼ&q\:p $RhfN|OJ {XͥC݊GbRP;ALL5R!D= W!ʪ-D :F]ú.Y_SU{LO9l+,*9l:QN\oYTM`&bаW[Mjׅ^:׋µ䇟FLsM^<4&i%&#Fݮ*X.I}=m2EZD}򖽨tܡ>dr޲&z굉 L!hE05> CR.m OnVbla2A'iE$Ǯi-7KH]KY]?>Xɇi T5h@~]QG4 hKU^JXY HC:ߢې[M-#-ȷ@ϐ#2%tVb 8aN6y:uӿi%_XN>DDi=ŧ~I˱jUOHk! fw@[f=șBOL't06+7~[vցu<p@"jLSWȣ@`:h'~p] tqצݯ)dm`^EɿMĞIOի&R-M0ngIT<#]RW]C,zZZ^^ە[yzŎ-°{&/S,E-v!M}Ņ+sP4vAWA+y`r%ix_osC+<4dȡq Ȅ3y#[:0Ga>s߲}G]?)au!K埾EA&m߹G &tZqؔ!aO^m*6}8f\~* lL 2=in3CEȰ!8xϴM{پ;Zx5M"Ac5.^Jlϟ= VgcQfL'0- ]hN۱ĖmH8ԴWN_RZ~Z{q뫤7iU~*@-,w]i_{k~zt`VLg}+'_ڇdٴ$,xFmZN&VҞ6qˇ퐦!N ѾEM#]PV <99aCy_fb5Mog(/ɞuo@+!w_'0 =.y0AH2qͪi49uIKٖ]oiW3uTte daOƟWD#}p[A x:GNpǠv43J2I{΍ sBagpqK"z]/Hn Gv-fL>4@ۊy=JGio,.^M6c *h/\d-<ەV/ܪLvVg끱0 t؞{&&x;+pOO'lrP/ޯyK[[L4VOrCpfEyD?i p.r=i%z,ZEU{EwjXU\_eμ J48_'ö<s]TP[LiHWЪˬ7Ǯiwu@1A{4}ؖ[zہo0%ׅ18xitӿڦN.bE@@^{&-]wҴS`_DVih\R={L>}]M]N5lPW*˴f^,7 ,ha{:L3OP#a=bj0t]vUrld-p?ɯX_Y97vj5u .=u~[%paku-F;V9Nmi17$m}%/u6(i9U^\cHuKq5  ӔWx9ya\uJ != yp iei3m99x&[2~Oދ\5{t~ k,ט)mi?p-'OwsOߎ9q-xzCM^Ը'$kdKk-N g^C"AV×"ߧ(|jo[ַ.:@˛@pIӠ*D&4YDOz2OS+ lH ;%b֪{8 o1R<`h5uz\c຀+sȳ,V_Llj̓Q`4azx :zA64rrr׶ ,tL6=T#^W:_^l6lpkK$]{)ʗ"yckhՈ+54ºtB1 N6z˦tӦ QV& + wX5pܳEj:- ; xZ=o O7_@{km}4YO[3~E B 4BKTJT鬠Vni <59: R9y-a1!q֐]KJJ&mkE/zl3j3?;Ѱ%}Kgf98e&y4&ם}K#E}o`i%YUV5RX +毳$s0:}vl6!( p5Kza2{v?9#`4 AVo)~yEչr'O:fӀ*KgP$?J q_ܺ:8k`ӱ*9U6:0ݲ~jjCaӞVFL-/k{q ~@K:` vi%wђ,?{mB7iaJ"7p[>fbB5âȐ"IN:F9&Ll:\KL[* 5lzFɄghx-'o10%L_qTP.`v$i'i>&̴3 ąlkOY(?t-k[@2hŞM~.+lR4_ς&oR6fx{ֳ_Gԫ{jgI'\ё-F{X9C^oI_p%^7{LVtyi'~X|1u^]~Uv/^) t\c kJqfzefB,̄-&P 4H:]&N`L̹3u$?-WP0h ˆbJ IDAT\Sɳp`JW.TLirX:O Vy hr^tx;>\?i+[X:WKFQxiI.}Iz]_ybOwPFV[\֒iRK <ړvWZIT]P\OK$~杖w\$qִ>9lhi{0|f-L;?oD@;txK @X jx- Cݐd 8Й8`b&5![LM`4v劁7yq#kXӓaocqEU+GjfNQ -7Z ]-5MӛF+ܔS8&{iϴxaoY=kB|.FnczqwטaR+/s-jc~5/ ^ݎ5NRWU4$b⵨ЕUPey]M ɁZ+z{낁]`~aj/@ք\{%ٵikhU Qw5ܰօrTN$p T+ 72o!HzNa:5_KLQ70&3ETC't8:[n!tV=wQ*RxeS=߲K]דleV ֛mwW^z.Ξi\IV*^<ȥ]x]g:Wu /Iq4q`&^b%;˧zR+;J$MOD+ Kڍ*Vca ~կ"tm’;Ӧi\Mm-3jp*ai,\ um*V]*YYˡSz2 3m٘ hrm ]%V,سƄKi-]рbm[ӞV@W;[G3OAOA-@CsGA:aIn˔pvL*:L|2AEAL"Tm:MK zzZ%r=\D[:1ڮNL( Aga8<'nlF44M 8K. *b- 9';5帬 ]Qݯ@׊֡K*T/ÄXZ}ɚ5WkrJ7lhpɗ*4ׇ PW^3%cUIk]1lT׏ÖaB%}*V뮗NjRzY'æVOKZڣKVj%c"xţ%TwZ .RWֲ:"W<~r8}-.WOCϮNghgpzaKbJs-u'fq2l |?[-CЧ v$;vk {0<%; Ƈu@]/tLbTcMfa}[~4*QGR?l5mӮdצ,hyu8 \f=$i^y&-P[G8dvK,(rWHi8jV+4u~ə.AruYWmX_@kWh00z QڕL> lj:ȮW6uZXO/vz! ?yW|_WEÙ%He\1N|4Ol|T|_R\b^ 'M{= l{oHLߋ(Sˢm|9KkmNd=|}~xE >Ze|򰧹~xbOw73.xbɹEr/aZ9d"y$wKZ@%]O>x[v?W|AM/)M=Şҕ:RזR n\nImB63;)@7&*ap>0LE?[$+IDV/V֝d2a/ i5c iRޱ.uy8/t%_jV!,1+-t-̚*%aqT2вV53+lK+s uxb7O3L Y 3{@SdTsu*d5$/2Y5\=%:ymY&- v3nIJ/ߖ`i--k %>9as ׳Áy|H}GN>L䮈%1ZȌ>u>ē?=>xcK]t|^F4% ka,yP*<,k9^ -NH6ZY-4Ui^6YMh&P)4-wZ4+Y(ϕ ,8* *~mq/&@3_R\<_nIK_þ\g:Dz=5''6Yjɔg Y=q]e8 B>DÓJ$UBaϴӏ"f}h_3y8pBϦ-׮JcXUWqigg^jO!o֐ΖŽcaI&̔=>y,2`y&`בg[ZS596m>ZӞ_rOw5o{?xQ?N@8_=>yiaK4%\=DDzv؞HÞ^&L^%OvH=~;{{O-_-#ɗ6YSs}x\h4Y5@SI`O>4MnzWV j8 #-SAWeLOrPW-7bUZfU'4:g|eMP:+w} G㰗ћ&ο7LGmZZpX+Sӿ EeG}>MNl(M6%N8I~6}#34 Ж`sKX-Q#ӫM5 *//Ȱ >BL3`Xg2fk dtYS( ayZJv&KA-O~0e[tVK cEi]mYe@ YZSz,⤭c{1B[uK\=6Z NN{T8,i{<"ᓁ-JaղX`Ie6z|]G@e ^ea\uּ6l*>lMq#}VUS+)WյiO5xGzpHXue,p~ڍbO< n\߶58goP?i?e oar-krݳI|GsOpSA6?a]?pt { 646$Zبv5g>8}{}'?c.˦|Zq25K3@,Z@ 3D@_6g0armn5a*mM/lV'#'e)sUެ\"p=zbHf [zh[@t® Jl֯d՛AUY-nڵ`i ?e  "eק/Sw"+V:v(*:VQ?ڏViiu'&2ux7$l0$}apbz5?dZIƹebizyO-PVd)w. kKaQ vg=(h˧ceMN2, i8 H~ ~5q9vyYUwJ/kׇמ{݉ :"K\W"K$fWBz3Ӥ\U5K2U܋ KX]3\-䧛r ߢv ْR(th-L8Д]X" ԉ0k:xXw0jn9h g l+ /`ˀ;dc]JYkI_˱I&mE=qu˿͚O<[ܗE-ɒ& [g+|kjWn+xU!2Lli8Lت)]^P+XĬq(8L]Ğ=M8-q.EWZBHbH ,2մe:f pZP 3zGA|ir33SaM5 tZpS}[N|¶2Bb@<*u8Y|?k)_ ֆEȣh*(g͸MMOkʸT{K| h*{W[Ȉ劑ZM2!/I_5oB\Ua?Ozð]1&U<=1ش=rJ6 I $N#^%isSU&j R<<\AyZ[ =\90Z0ؓoQwMдeϧ6"qaG= m|"z}KC݃l,i7珶e=M?<̧apttp']?Qc44==_v&l {&_=7^[4Nk99tqIڂJR׍0ki `vP$A斦 ܤliܸAY`ǹ#aX(_1X}k6~,S/qDZ&9Wu,zr}]̿VX֍zt|Zg/}Fl5 & c Kܯ %sSٵr|'ڲ8Mte\}ִ0촞=mV Y'1r_=-CO_.[ aeVwѐ/k N#[2sԔV80_CM{yG#\[Ӗţ--9Դ7V4?ɐ?]MZ yE%- G7$]=]/=O;l8'ɴAS0{z$"0]Ni䴏~t$s4$͘nz8v[mFzBR[v>KeL<" tt8H`pXAĆMqS5޵Im7k(0΀X tmðD 82F'OYRÓ=i$ٴXͻ_zx4 #\^'|׮=x$/70՘O/%]a[n'!k a`ӦIG׵NU"ZOɖee7ђzԪՙ!ؿMצj ^Lv ,ע.ׯVf IDAT׻_K3iòrsrrnh&}p[Le&211mN 1ӵ\)=m陬pEeӹZnTϰɴdځ{üVzK\fRQįe[8X(ʫ9\"9 nf`Ai-=E+ $?|z:ߢ,Cr49lrh=6m9,)6?e?Z{|-olL4ߦmYG,Q{F{y⑇˟>XlzO(z9 Fu='Y7i&꩚Hڳ oa"NotK4uϮMF\YQFI$h4 $榓3IM{nb hK:̘6d`,z*08y=!VmӁ=|ݬrDRxdiM)TCп(0-pKĽnI1Vƭ5 N ma05bsёbm:s]&&;iY@q էaPg]MaNT+u#teZ{r]6WА__+UX}]o<-י`r0 ,- XBC\ܢi[5 ӫrqkLw0Zѹ<[p`Yh}OjyM<8W01i&~p "~l9`S.gv bg?MM{񖳝6%Ov@al\H0-'5%m9@ [9)1X&'{Jr4K0996[ŷ㳹# Mr8'%@ 3&`p>U_L>Ҕ@S(BෙZh_se.b,,-~YE*~Qau~e+n2 dB=שj뙫+ߗr194,"\,pMC 4`WG] XNWkk Qhmj{M&2et\>dCm:Ӆfؓ$}cpo3I s0`z˺hԌ~NV7 XAY@p`_ԉvYQG~ύ3@p.ǀ@ ZlZ=ذRR%aȻ>Fu{b:W]u MVٷr%?aSOhiz6Ϸ@[^V_'N\}/NSb9}kWjGɦV<^@M{UySpa~M~-Ŧh0y֖\ev@6XV.+W,.%h6">fLOE-4{= }Vs}xwi ҽP%V|YB{^.o18[G)uQi96@LvL0$R<`BIS˓{lz"ڒQ Birjn#gt 7N@^J/tOW%Ѳß5tĠ+J7Ӗ0̲+Ki s!⓻ 09BJ_Ò;QJ׺(X3_E,iISĔi{$';/쮧 GşζBL&l:"I&=kS ڿR0Ϟ8צ#:eItTMJ1qXMgӲ\ %/2 +H;gX5M|!qx6L!Y`W=am RLp6!O٠@qS?oO "! 3!?<瞮ʨƂeu'*ȯ7(W ״檢LeOGW2v; t!~6?gS0KTy:ß xY&?|,T=Z>>MmI6׆ y5_3l|ɦd# =[V>P'=[2.'Χ]LLNɘsw@+if᥀=; -ȮgQ&ӞnUypa>mh8='H~9Acb?-oq[þgzd)6ayğmLܔ+_^ֱ=C]M'l2an *Ną"Q*!>4}:pZ&jSn2kQOdh }z`2dfapޣaIC | 'omD6oUɩBGGk8g,CWU]ZKLx-ʎŗ;V~.Oy jZpxDIݲ҈)aqVdG;ϺVa.b` q-0YX)M >Ik5Ym_0<-9yUܱ h+UR]վJ :XD]Kr&Z狖]cYikqpQUH4g:^x?i@,^˴4 mO~a==t{(b%fpN‘&,gG]}<(#-; nt}o2WLp#5l]<*65Ru@Ʉ8a CRXZ0tcp0,b|] eOUHa9LwX 8qYS*9]n0EL+"aXe!Axk+& ^ڪ<SdW-.MU0Pi4|Z_vu9Xi}Qⰿ{dC_r5_~2yg,|r1Es)zGY6 6Yvɧ>&7! FSeGn`wdG&W\d ayh.CWŏ[$v.uaS-V#LBu׭Pi/,4|(8N䖆&q[hçEӖMS N6ݒ"ߦJ,~{Tweᖻ+[MN >۴&ϪJe42n5 qZamq lR|R Ǻ/^^J癊$Grf&QNWÞOs|尰a"pشmO2W?5݂6YՃ-Okz5t:%B?ZEA a8M4 :mY#@^iUP.TzÛx`JߴN.{ɹ%%oYӞְO3Mݣ ,yQٖ MHa")s94Wuɒb჎ 2\7.\*L+Mr 泒8oA4a^n ~[NrOV*p` h״''=IbZa}Fħ7-7Nka pX[J9qݣO"N [L"1ق6 éM}nА^祦qC u*n ¨TPz`=>{NlbG9 )(+J4/&SpOîê<vdl~iXM]oӈ56Af蒹 -I)yZnڵ#xqy/_{.O_:N./y%&'n稭|±!*yg"ןʜ_\ ~6}8~DcUئLdNk]BLE*dk 0∗EebXăMZfvO*QFU\9Xridu(FiVdˢ)L4[k=$<[=}b &m0v{1h=SU{tt[~Ma$MW-򇄲^7\.r{:\#(5u(+X"!{RoFfz)|4 ϣ`+L KlY$0pZ(ت#j5iV=4yPzVЊx08Vfib`X9Fżْutx8|ϞiԳ*z+ -4}{ 2 4 wwܛ\{["F-g곱-{yqYʫcj 6)n:;46 Â&k#[L vl--c3@ؒhC pl8|= \ɣrͧi 2Ma:KL-Tw)& [Y |}ZDYNhahA2Mn|Y+"^. M=,ГiˊciZ: QoJ^2۵ii;'PS7e{Namx:O2dcü͆FCnHGȦ7ePaG"SU=]ٿ._H : IDATm5sM l2^K:击G G{6϶:fE0uî|^@mzj%e{[TUD6=R8ؿ\DO04.Sܷyp϶Ű-3qxOoz1_V&=K}=>a33y馮iwNX:T5dS!(W>߬/w nn*a ٗb.]][6myXk[q0%0kJo#ZTTSW5/PkXӢ-jP~X41!EQ?ݻ c<-Lo)4ټ j6O #v "z&K32lj9iؒ@Ē5Wn j0s~Ta*cr7n%M[}p7-^1 өuϠk˷% ti9l=n/حWeK"&b6h-/>Si@y pŴ6W[\^"i%Ez)y_';C)OƩϱ ~~ݩ Pe9DSpQKX*z5n2Ruz3͢~WGRap=\ub@^W:3[ NBa^qɃ9=l}>q n]k^#{l-@9lQ$y6* W$ZV0 tn0ċ;{ϧ/=2 k<2}[b$(q9`?ELB(>El#5*WCrަ)l=g{3<`Vm}`ݽ-\st45sZL,>ڋAz0{ޚK֌>x$kn"6=L잸ΊeQ4MN{jm.EI3y8a Ӷ\[V?j٭x.L5%K,8l5}-[S[qU1_*$e<*ml[7Uc~g: :UA?2|1p,ahhj(Cg{x誋v^97~t:֜4[ܽm %xxjaP'<ֲ%a~5O p:GhʿŒhj0|habTb89H JDrwUIǠ#a\ t=ABGo4UvJK Ä~Ӟ~5"VZXʅ31`omX&++(Shjpr1Ė_ޜW]WϴK>*-NߎI9y$B  >,h e钂X*O݇uF|9tyzkg7 lX-J+~*IJ t 1찻>|˦t]rڰ[>aqiڇ =a{ao|x$ ^E-_vJtU!H8 3еi h+(w ^RR]Qaƪ&lhBx0tnݠ~oX7+&]%ɧ[&\5z,`M׼&WGWO,*xa 9<Ъ^c 0-,,-Msak$po%!lo<$]hH6 ϝ]eaϞ"qx"ӍHJu5;4C֗y^pezNkXY[V IL?8\XrLM[@pIyaz%n3lZ=ߦcDKO!&Þ^A%˥:g9aZ+l=OiC3 1pmž\#Y*ç&p9zYҒ~=@5BY <ۭk6Ml%qx[[v 74}cw{xćsش!$'}F9f/WаfmI+CEHMۤxAEE%hO[Ch{ӪS \"AXc(I?=,ӆ}4GbaMӢs3 :XJv W5RJ62"[r|]&S0GĈK<j/), |WeAMֲS i-YDzhmz~ -Ch[g&w_ܢ6OvX@=Z=ptʼnid ]aq{UqVӮ$-'&~ >eXӷYϨ+l(fBZ) 2VeǠN,4Ԡ5ےXU5;6 \_eg۬r">Á%.Ggiɧmʒ9,ұ`LL[.xӮ电H*}2 }$OMd`%LR`shup6oE3͆-xڢ&5 F<~= >h6qWp3þϞ@HTZ T~D05q95fBE1 -}8u,ham*na'ڨ,/ur"JP vנ (Tl`:h)iVDq}o9<0*gM'h5/񷣜6w7L d>Ւo= 35^Ooi5ga]O_-_hKtL,Y#Jv6%LGMU˺]l)aYCAC _B-ú2~ĊosZ$LvfqeuaMf6-yaM1ۚr1<~]}Ohqؠiঃ[O|E'D~=o0 -& I6 >D}tb-04JDL(YRFfayJAHa0:f0x5Db/\KwKN% | ~6;B/X`/7\OKe*`*ݩ@.4)r,BɱcrZƊd!5^c{ȷs - Oؚ;¾XaIfyʣHBAdrr85iE-o6R<Ԇ釕kO[6M&[dB=yK30G'_}O3Y޳b0 [%?秿gK4=hN>ۮ_-Nijل()[b6[~-Repؚ% khH 옼e%.Y4E+c%dgעak6QXN |atgk ybśZ,z-4T3梪 aE79p]?Ө50ܻ=]G+G wiÙ{f $0VC%vK_bŒKX&v,iA-ATbش5N̊ڰV/îvsm= wEÂiOOCP&y4aêR"Wx_`5tX>Id2O *5 R v5z6-m s~jAaYU3ga%)\kUS0$EAŖTdM\36mi$1G60%DǴIÒn ձIXTȏvRe3lmn݂⚶ᢀ>Q(R/Y-L$ rRa=kzj.lK.yE .G 4ɿpS8ڇ=lLU~E h=GZ7w:agHF{4=ݵecpݪ IW.i"":p<̵ƚˉ.حؽRa[2PL p44YoDuגk88\dڰmhMs}*Vxģ #hB嫬hK9jj; pi$ƻmr$޿`d98Χ+02xаQ_aa~˪n&$?{v.A${TͿ^n6lm.iKhh|m^;aH9me%ofFl.S)eIVcq='qv8L:'_[霵cӞ?/nMoǪNр,GÈڥnSZT[dsr՞mn@S]ݛ[k˞f9°ZUs^ϓ4dg[Jn}Wz.aHm`5.k+@}vobkU✳7aKa]k:v+Ӻ.>-6t`46c)Hl_"{R O$i [>L5/aآv MÉ% /zPGr5L~ +` ID8L , ^zfJUX0P?];: ȸfiDחMV-" ~0ÏnƏaHlia m&zv;%m[~&w?lnؽ6Ʃa?;$g|$x̦/jiVX]cAQ~R1ѐx]poG@hha<|nE i/ 0ÿӀO>?[Sg>'yɉ Yu6g_s/x)YςG.P%4p`^__>*“Fg"|32i0mooLn;=y }qwe&]Q,iX`Z!k%O{eh[v|4ڭ%\aKlm 4<'e˨<3і~GU&[kfKf~ɇpv$AZnjsɻknSiusM֙ThMo /e_-{O6v ǓXᕭbו7[jkѕB 'i=X_n|lZirݩd- yL=Aɦ!<ϧ>yj5tj?-PeZ+NݛU XpB vK~BavL l4e÷!aa2gni;IDAT+"l^Ce5'p Lv"Q>z\sGۂh_6O veN9Sl:l)` ۬Ki˹}%Ρfn?\c0Yę>b?@ŗLz%Kۤ 凡LOm֡->K{%莎%'oOnT9-Yڲڿkܭ$g5 w_44<4>L-j bvė 4\s vxY.<E8FX-MhjyxQikVc=gd2{lўjúO!vO֢ŢK.A4t1k58͕ cܝNnkW*)wSߛ&w[=. Oǖ%.W1qKL{Aъ`W~rɧk?z:V`L;kTD&1n /?eQaw/ ]EMtt"M8xnWlPR2⒘b*i"5l},m]K2Et k!p$M-e [C})f DϮBE YR_6Nw3{ .v?yN#S-)\bQ9gW'<-l-kh%[_]mp[L+ݓMe?-W?ov.5wKZN>qZ#لiK>"Q3voal&$ӆ}axx݉ ^oqXSY~.{ $\횿HK>tI,zaIz5=tM-|y"CÿkGu$?EzzX kOtWN9aJ,,oQ۬VGaQK5-p?Q VXR/ I5 lyXrf43XДVtB&d f2=y SKMl9hXrag]S|~8Xuv5%҄Mp=vLܭksnbQx&?}wXW#F2$\rg&W-Y߼ɧ'_&a&Wڰ:ϼ%Ňur K40w ?Ǯ2`a 咜4M<, +hl$3JL`G3IQFopf0yv`r&0N73]00-mEopp[|VH}{$ּK\\=4,*a1,ǚɺ\5ǚ tIq˖bWΞ-a]җUG;xaPT -ٱCkӗ NwuC<[bI[t5mqꐗioGo+N%.ijp|Ws &na`rw;3ғV\TZs~ /Q-G%|Q8 ]æ%6ܒ v=nI[Vt GpFMp[>mB|5z-;٦5]s7pY_N~kl9h4W׬-Læ%5, @\{-5-1o35<:a=`KxO}0?}q\W+{;lIc+[ӖXM[6u6{ iح.ç%9*,e buNJ-_a.awsMvyz^v')yuɯVl-\SLM{BmvMAѨC^&"bni5%~U~ش?[ݯ)|-{Gg4j[E{;WƳW@67}/1𯎏j̞KdkTp˻?@|5-䒊.W0mx\ÔnqI1XKn3%0E2 g5 }a^ R_2KN sZ/Q&1aYYZ)4H#DL STJvP\nE 6FEA0bM&39vM-(Y[5-δKtm%3Id4^Od5aN!8ᦞb`{&԰E~4|Qܰ!#cio=ޓXr˚z JxC/dz`Q_眆*Vvӄ5vۼnKI8m0#$N+_v%zrI}[*u>(RÎ3 t&ۇ{,[FR?eH{<)_o|;;O᮰˶v[@qO+|h)욓?s$]]_j3t;`e0gP|s False 5 Quit PyChess False center-on-parent pychess dialog True False 12 True False start Close _without Saving False True True False True False False 0 gtk-cancel False True True False True False False 1 False True True True False True False 0 0 True False 2 True False gtk-save False False 0 True False _Save %d documents True False False 1 False False 2 False True end 0 True False 6 12 True False 0 gtk-dialog-warning 6 False True 0 True False 12 True False 0 <big><b>There are %d games with unsaved moves. Save changes before closing?</b></big> True True False True 0 True False 6 True False 0 Select the games you want to save: True False False 0 True True automatic automatic in True True False True True 1 False True 1 True False 0 If you don't save, new changes to your games will be permanently lost. True False True 2 True True 1 True True 1 button2 button3 button4 pychess-0.12beta3/glade/panel_chat.svg0000755000175000017470000003727512161415524017004 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/stock-vchain-24.png0000755000175000017470000000057112161415524017474 0ustar tamasusersPNG  IHDR (sRGBbKGD pHYs  ~tIME ;5WIDAT(Ͻ?k@$"Nm)ӯP(JB"nJR (ApxGwBjXwac%{5^4Cu{#B8t$|~R+36"VBGvǜ)bg;M*nꋕZjwflKÚd G>[kPā~gB^e7נ,O-dg7=_~ZIUIENDB`pychess-0.12beta3/glade/poput.png0000755000175000017470000000027212161415524016025 0ustar tamasusersPNG  IHDRaVsRGB PLTEtRNS@fbKGDH pHYs  d_tIME 1#-DIDATc `ZƐBa Dd#IENDB`pychess-0.12beta3/glade/document-properties.svg0000644000175000017470000000662412161415523020704 0ustar tamasusers pychess-0.12beta3/glade/black.png0000755000175000017470000000074412161415523015735 0ustar tamasusersPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<aIDAT8;OAޝ|"PBlIh@~ڨP! nCc]aFXēL~Z1b!jc.n)W5)=!ץzhm̞1 3FJłHy4>Aku LJł-2|`h}B!fd&@-b'ڐ\c86b/*!Ak?8 r'ށm!9\bBx*NR+'٨ÓKfxbrZڼ8oaa,6PJ~0Ww۩g->pu;F?W IENDB`pychess-0.12beta3/glade/dock_left.svg0000755000175000017470000000641012161415523016622 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/challenge.png0000755000175000017470000000161612161415523016602 0ustar tamasusersPNG  IHDRVΎWsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDAT8OLW9."A\*ZV%EII$I`ΛpRX=e"fT5+=]^5VĜ@\.#wk䝓l.*J+zK lƇP6nGB ]\$=6,4ޠ(.v_j}D9˲mg#Z{w]I-p93Kc wq>eYv )J'sr)Iz߭@hK#Q1s&2EƦmGpL$R 40>lrx/I"3Y^}gM(鑌ܱ3BbbVp/cNwgw 6Or2!sg^ZCa`/0'R7"3QIENDB`pychess-0.12beta3/glade/seek.png0000755000175000017470000000104512161415524015604 0ustar tamasusersPNG  IHDRVΎWbKGD pHYs3tIME, $_bIDAT8˽Aa7mr$nmck v=ŐvU:( Zō9HYkּߧ>ً}=>6}8afNԦFLo=ey |\iKp8DVW_&a$J8\}h`1 -==/Q#*q|*ɗ?ZZV-4hs/O`%v([K/P\r _êtiø DzEL\tl?M?NIENDB`pychess-0.12beta3/glade/manseek.png0000755000175000017470000000116612161415524016304 0ustar tamasusersPNG  IHDRVΎWsBIT|d pHYs3tEXtSoftwarewww.inkscape.org<IDAT8=hAYoɝ4Z 6"+E5l'.GDAAX,-99 X(r$ ,0( 6Z{X$9.5y3oRAhXnؖc dq8 zw5Ƕp et~\.7S%-P Uggrնy_Jbg2+Yc1QnH!#Ew `E |Fe`طA\ 'PLg ^kdwۖXs_bM4x^PZ4ir2h 0ޯKerz |Y@ѽ@hzmURo5_"ꋙK|cC"1Ĺ[,"pEcs9Wwi-¶M#6p ml$.vJOw>_Fg$IENDB`pychess-0.12beta3/glade/dock_right.svg0000755000175000017470000000646612161415523017020 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/taskers.glade0000644000175000017470000006424112161415524016625 0ustar tamasusers 1 21 20 1 1 1 0 0 False True False True False True False 0 0 3 False True True False none True False True False 1 1 poput.png GTK_FILL True False 0.20000000298023224 48 stock_weather-sunny GTK_FILL False False 0 250 True False 3 True False 4 2 6 3 True False 2 1 2 True False 1 2 2 3 True False 0 _Opponent: True 2 3 True False 1 2 True False 0 _Your Color: True 18 True True adjustment1 0 left 2 3 4 False True 0 False 30 True True False none True False 0 0 True False 6 True False gtk-apply 1 False False 0 True False <b>_Start Game</b> True True startButton False False 1 False False 1 True True 1 True True 0 True False False True 1 True False True False 0 0 3 False True True False none True False True False 1 1 poput.png GTK_FILL True False 0.20000000298023224 48 stock_init GTK_FILL True True 0 250 True False 3 True False 3 2 6 3 Log on as G_uest False True True False True True 2 True True True False False True True 1 2 1 2 True True False True False False True True 1 2 2 3 True False 0 _Password: True passwordEntry 2 3 True False 0 Ha_ndle: True usernameEntry 1 2 GTK_FILL False True 0 False 30 True True True True True True True none True False 0 True False 6 True False gtk-apply 1 False False 0 True False <b>_Connect to FICS</b> True True connectButton False False 1 False False 1 True True 1 True True 2 pychess-0.12beta3/glade/dock_bottom.svg0000755000175000017470000000645112161415523017201 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/dock_center.svg0000755000175000017470000001004612161415523017150 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/panel_annotation.svg0000755000175000017470000005037112161415524020227 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/christmas_about.png0000755000175000017470000022621212161415523020050 0ustar tamasusersPNG  IHDRiͦ!sBIT|d pHYs }eYtEXtSoftwarewww.inkscape.org< IDATxw|TEw酐HBHi46P]GbA}DaET,һ%5=$dwM}??̝93sݻ{3= r !9T)AU.mُ 6ӕGݍ(]V:mz:TUm/8r Z Ldl:("ZfM~9sWt|ܳp"//5/ es{*ԞSO?>5nJ1jYuyF?>e|6fQӹࡇdv8gu+zWћ.hj[UYgP 9{Kz\nbDreIJ[eEXV̡-7/:]^\LD0S5y5z\MK\7R[!;:y JaO)ds$A֛b9 婧\t6"˹t>Jm?i6<?jCފ-׊I{&kk=1Ӽ9WwNl@yIn}qWҪ]' gϑ~{.ԩmLMe+,X0r>_]L\]roƉ^@͆ u8y3I6~t [d MOd-f4o;8z[ӲƼ6M{dQ~2vs"۵cffzd;'''jZu;5hu"ֳ}{M'sn~>2+WCB٧t?̤$^iJ?}pG+:7l9';SY3NmH}UL y<.K A"Ӳ%{&aCr.]_tYsS5A x"hAslLЂ`TWJtlԥ35q٠}ٯ h8""eM{M79%ի 8`t=!u}u5Vt0VA7X?$?#BmV%NSwN)67S@jߌCIQJ:g*! ~*?g Uԕ'tL-sNEX҆DJ Lw'>y5Qucuc1 {E=8A\2NN::gX=D(;D;n@C-<Tnj@uAPd L<ހ,]JNwE=8"٧OZdE&3/u(^*Cm@Oc,մvm5i'rs G;g fQUJ$Sbuv_2jHXQEn$g׾yl t8C7q_sId\] DFDТ(TMYǻI Jٺ#K:ewm}Ohܘ[^z[^z3gX$oM%_QVʻ2Y u' />1n_u?io{[@-@ Ɂ4/i2gܹ\سW53WI՜`YN6;w-cg=OmV+׮ڵ4ܙ~z`{ѣyi>bZ:z5I;v|_hu_` ￟ʕk*,%5ꓔ&-[R}{bZ$eK:G%‰ػh}A0a P(RKGW_Dl@"P, a-+sko ̄j;:᥿~W.p99|CbDI;T WfFP8 iCQN Yf(n?O֭k[WK^J ?̥)Õ=w}ίSSlTCk'7\_N=)I^'C7#g(zQyE 2O#LԊmLeS˗qp |Su]cv-ioZ@VDegݟ|LωKD+KBȲߨYϥDaNhZLIOIrZ:&dcN2Wkq1֒j$N ڏ6^NvYa!gdžv^Zc[S'U[KKY<~""i>xL`p< w./.ѕsptxʊ4ek`4B*ӱY=]sgn&_Dfzg] 4zcY{!.Yf__\_E\κ + yղ֢?&~!<UQ~:Zl&PEo#IwURteUjƒv8R3>3}4Ki[Bvȅ!y&캝:a=Ԭ_gb-):Q V\ "oEdufwKAIwQD@AgrrvGsԃ[vP7#]Q6%gp!͘A]7;PcG\IT 7Qh_"WV^NCʦ f3JE@`ˆ +OUtVOMe ?ND;׌EMCMe\!k#F&zٸ-&.< T3[8k<3/kW_Ҥ{wE L>}8z5 kP"jnDԆ> Y:zZCFXMz$wo L jSVP)a_Eb2qC`rKz^`+ 2IK+TӬ9aM3'[֑\DѣG_m:G:WSDf4g2ϴ?۳';痩SYgLg[oU(Sc[oqr#jק'QJudjzKWݵ}#EЕuo9wzZNcV'hq82s&Ok:@9Pl)J2 ?]FL3pCF"'Rd+Kכka5u"o|^X#JA-Hg*m60XnA"r$7E%;y&Ԅm4-6F2[9+n| >ޓ'S,ٯn|vc/ 2|bєox 69SG5c>~~_^|OBUlH{'0oy |>|8yix-Θ߿V-tu!ivV?߸}ҭ$Q+HڐPe)kTG^"OUԽVVwٳC\L@5Pn]hbcAo侬 PSV' H\EERHde =*,3E&/*׽TݾnلoPnN]5%}1RL|IZO.cڷ'IKKp^ܿ} !UqcfB(EyI ӬOou7\+䥥qv^iң'۷ӸJ3OԶ4܉:8}!zG{΁kE˽a܎y%jeW`@  0:v8}b""Ou23!=tegSN"Qgmi-Bl6Ble|2탍ZT%^14كS8OQ>~p HZ w`)-5lq7e!A\Nr crM#bcA *S vD"uP6n$iF`U!(EK=#1 ݈4Ѯ¢lsA\YQk LJ{>= H ]K/,!aY6]uֳX"g?RKn@5].<%4}|$󓎫AAиɥ iiDfdi(@"H!6+!eVM>})kIS2tǃfɖYoÏ4 S&; 䓔q|2ݖ=E jŹ8J?\[cG۵'i:3ҝ-nق+WӮudyG3[Gh;do+·C[ۦ5%%X!Z,zb*(r),&jaGwǵ"h{CJ7j֤wаKgRRH3r ZQ}}%7op0Ah*>P.^s礏&G";f_dә tݵ푇9uϿKCgK+JōȑS#2.wl?4č6lV+újQ#3}3.5kY8rR.Ѥ }A[9gv]&ogcݻ8 taڮfsېXd{ ݐmQQP]]Qta X!gz ~LtZ-c))%yry4DV<> U,z=-oVY[$ZՉBv|fGy%'Mbj0ЕyfYE#Ք¬lmي2UHSyUИh^_{oJq8:BE>2S6)u=!D"[H@h(!QQj,.%=3 AU-jaz Sz{YG@QJA@$?$6e(JV3^ZJp8'S`)+ig8zFV>~}N"l^3/fJ<XBZZwÆsa.{qS|N*7o>g%-׹U?Æ2~bʹѲ:v7CDnZ$hfIԦ|1lUrt.n!{?iS';ٹj%kC:kG YZE&oOavuBϽ\CiilOOrrHHp hV Tި1ȠFmY!r٬XM&[[!6n<_ ]yߋ/PKgZz+Zj>W_MbQ!k2pݘ)+,zK qXIAyy9pi>~. %[vVܻ7|Ӧ<=ˍ*=mc}q60pqvGƗ 4?BLѣg-^hsj҄"2O"`j"4 /5 v7qWCpw{HE]#Ed#xx.Ybh=;.hmXUPj7x'ᎋu8'p"6`#m%,~}f<@yq g.#8}A|I=ۯ/v%YSO8'f#V-FyQ1EXt%| qo>̅ƃg>t^5 ?fɻt 0>|C;9\б tGFiuZjjZuZ;61d湟̴٢VE2:p3m}|t7}?0q<thAzH]-/ 4:us uD|) dO:pϯ) eḰfft1D82a WAEONAz:YBiسǭ2Νh3j~!3W2m̥8z =_MnIIvg`o)d~y|*ƍ}c8a#qEl`'OUeU!j;I{A뒵̂J IDAT0b?^{5oC0p4޹+>~~mӆ:͛s_[V{(jѝ>ia7V9DEA^0//b|r؀Ki4&Sfl3?7,@QfGpv$Fjj^+M֕'jnZ0xϭ4E[?{6_xzQ$"_`̙:g#=<Vd{}'p/x Z۟sqdNoF)"+9i=hij1v XW]B[hus?3$'JJ؆4 DrA_ VkMiDny[S>fvlN\Ӟ7:d]Z|8G1 +q)-,$,&7&;ÚΨIyi /:D=H޵ogݐ<]DaҢu['hfGW {EA?$ } ۾_ktSPWb4:1fc:0Ճ3gZ92.'(1;Nspxv~7ruIƑ"5%̾?\;~KQ;Ȩk5-i뻟d&z;}DFڏhkorzV0 +@07۷[Z -<ϘAι=WuUi{\mDӺT_EQd˯~™N()jgDC$sf&?V-:+nEUld*3f֭F0ݮ- ~$S'|9LD&<~b+- cҲv_Vښ]誕Ilr0??*[.H獰} Ne괠]~ή|K}:LЦWB]ʤ2it0QMB`XI[86f0F_#'G"X} |._**ٰBmVLJΝOSSV:N'O/H?OZa/^®>,EE.7vZZJi~>vMCZVƒSȕ-ҳb5 YڊUJZZYDP# uG7u:菍r|:lW}yrbo-j`5 h#ŁpojFLۺ=kO`½_hF}Mm!7Ae5^6Wj2E k{7Mm Ǎeȩ?VrxwYH:?p?_|^W<=>_&UL !$:hbOl",%%$o?KS|gqS^͆p<ۘmy%,~I񅦞#2İ~yI ǎv qFO*5kӢ6_G LW.= Q I;zpf9ìzu|iW\Ok F _?n#l'N)7 Y/>ONð;׽7o ">Iji8SjK/5OMsX=O0< ^#d$$pz:.\$E5ߵ+ǎ6}alHƱcDw@n#};]Yfcso?ϑyriA;LWсʒ7-nnbdeb]SM/9L-"/䧩ST JzDmO["Cz6yӧ!gI޽ ky9ҼϼK)+ ^2Y߄dAC`=::SZ&i(RLDmGÛ՘ѺkP P;3!OMCެ.iܿv-70 9\NlzU#i\йT?,}+и,%%l|us.mߥ515;<6M~[u)I W/F/]o@ 5ե0'3VE$&r)>6mܒmTm.Wn?iEԞ|D"a EG+r/^n#q|G~c-Jn]>\oҥXu֢eW4 ,T t=#HOи6><{?y'R.+(rZ1l' ݡe'fTe@=pƨ`-5hiO3Pg}sq^MzWe,kSVuiԽ!8~ߑOt;=7mۣEuxcQ ۳aS٠C_z9Q@!'h_XHMb',XH5?260:%61A:DەLHDv&O_aܹxHm5-l>qǏѬ)oGAܹx1~!-ŬNzQkWD`Z;pɹ $XM=c)iʞX*oȨ?m4@DFV4+{TH˗; Z[ߥ{7NLz"כ`ߢY0~<6fƎa_cDV Ʈ (+5k -q7fЎDZC.[Ɛ={}Z\bĜ;nPg]kY[_ɞ9\)`Œb==3kw@{]6WVӚ|HZknzfFVE~|}j5^d.w˵ǺDj?k7G~U1_!jNma|+.z,/t7Sۿ7D픝$NJҰsg[O㉠g&c?k#x[?m, ?`$5>izކ jvHU96r }}dK' RIݰRFL;.͞t2hwz;!'4w<3y&eV+oתTbݦ5oݬǺf33.ځʺ?#hkxk7Rnw~KP_jF:ٗKMJjs,w+kAiтGL&$3MDe쎠&]=ۗvnԕF6HʟftD@_7,̫f4hWd3M_{֭%tAZ?2[ [y/>V}8EDB8q"]}hh yd\3:OLPw}_~s墪> Y%+6"ݦ3ZVlv]}>dI6kwnַ/-/Fm4}jfg^Q+GԚvt kE,7mFt'plZލF]Ҹ{wb{@`( h+*V\﹇ `⏲\6J=*d\]D{ҼutL\w<'Mw:A>^.VU7E`;׾* fgSQ#Lfҏ3n Q%TDpj<~pF:HSzӠcG.Ǔi[lܘqDa/V|1E)1ᆱ}~5k2`Iƍl=zY_h^x??$bt6.կOD&I&; nC+/;7g9¶7AFt rk=SgnJ-:v^ /:R}wlѓv}%1ڑw>/ NrJid˔TN,ۑgԮ6H,qa`RN4bZbً/!ۏ7n>mɻv9F@X 8{y5C5$ 0X/ANu 8؏}¸i2qb۶O.'˽ݠ:m֭ 9kop8vMg~C _H0!u_#-q=(_ϲՓƲnHY5ڎgfq`Q,o䞠ijFz'VI+~|ɷl7;DEyXflFq6a|:iAϊ.JT.8GV A߉SQyOu"qol%h[y9^]+g 1!?"rN"m~ix ^fwXod)m: <&xeKL}٢`KJI?~\_ANZPKw)睼,-;0eU7bZyUk| ՀLv3n/ӬW/nzZɘfӸ[7z?YT~;E+6 Fw9`9p)98s2`:4־֥e@6O \@pt4=nطbaϻwCᄃ,?߰<(*9wWL5E'*d-D =u5&gՃA5US=owB ¢ 57"$V{Z kZ}f,?P +Q͛"fX_e8&̟Opdd'%3)S6sd .̱7/Îߺw ! E&:.5%hڿ*" Yw01L Mݬ4;{(D Dѣ|3OIV[j[zh-kFi8jjwu)[B޲|C=h5twϟǰ_9 l/89\OZ7B:~6}$Xf?Sڼն_=մtE3 h;t!j?nT}hz lq=kði38|CCa4ȕ7dZ||h2tVC8}Vy7!M~! Y%*ZNFתd[zXɅ*p{>}A5ƀh(wףFeI5g ۽;@/YYY Hɓd&lؐKK]\\LѦ ),_|$ ڱ. CDڟ0mȮ]őoۖ@bs׈VkiCLӱ;v a##z8۰+ 6^U+g"ZlzYްP6vm|6nO?7gWؕ!2^}$$'&׶K ?\8Zԍu}|ԋ7 +(!ZWٖ(租qw )o@A5Éٓ ssvxe6͙MaNxj:;,8t3:~;-0'?DhyX~)=~ۮ{:ӗV S4\O ųp,nB- $iO\"eHI\۶o@Fh&t] k3Tf7>֐CիFFGX͙kܺR"1b?pnfmLŧ&1WèR58}!kM=CV+kWW~jS+q6>ރC@D& {u<\2a<[?yʋJ:EmwRa>YtgDԺzzz$jUQ\{'˼;$Q#b٘ؾ:2 LfxQ۳{qByag(#ze_1.؋O& Z D>K(<;hؐ/LI*DQJ TٺEiDcB!])7KMJ?y)T8"h1v>o ŢOeZ-b@U]AKvj|<+?8BssXˬy e҆1| {5.5ؙE/Of ]RZ27NLlgdp|+fֹs I 9##ZM#ޜE1m66oVxzP HSC@C$W̵HE;jM]waҙmWDQq_] nz( =;llUv!1u ^h*t 񦂸z"f?_ B*OmUDø&1mےv(2g~O?ElϞ7MϨ9S];.=jlx]Pɚݹ9\\bbhdHSݧ_4"7誕l壏AhRZo` I6񗍪-H|(Q Mں3"MKCZve8X.M&NɄIOY]fH•u'M!Es›6Fl,S ·nVQ>դVLz( i=ēd%$piNʋuhVyd-=ɪvO]DWݿ]u>>YjhzL|ģ:5ղf#sߊkñ.w9|xp[Ƚx6o]4v 4 OV,'iL1S3xb+SSغ2? O_9}+r4p3ULD$&J:輏 E&Ώ=ΉKY,APM螘Tdm`U;Y՚r7V;S/9ϥD]r5O#@YQ1!wA 0\p2 Λ*uX* ZPk6lȄܳn!W.^Rf$&壏lЀ)/.y_qjF>$v@`򨏫HHˤC37zȹɷstCxv4<{_CȮɓ[igW`kfz-o2,pȡ&omP|Yyސ'ֳc-9YUu蓳{+W $m[sݴׯ@4hAI{vʰW^adH*r#=ѺO?*o&z IJh'')n͞J IDATB₏BW^¿AX2d);vZHL3;,}4uˍ'XfX} nN9EZTXEe%enkOTKzQ|M>AKdi4U(Կh~}=_QEphO-)A7'oFroAWDr!r;CBݧkoOe]wtZ\L^`0!-ZR^TH,FuahDwBNjߞ ?Z"(wy n~{U1f\=høR6N!Z^.Tn o,GԺאB*"#7Yˆ - QXV2+Qn$s ۬2H1崺kA ^=ZvD@d|XŸ#Gb-.&qc><܌? xtרAPMծ ߖRGA~֍{uСi#4w, L@x8woۢߟA~BGs䧤:7`ugqxVחKuus䧖(z3#vm6Skpߍە qIhκ%I*ap^t/W{ĹaǗ_OpT-rΝ#y6nzq=_a?ߡ U(tSr~5oNXa2sp=oX7leB"6B@D#< c+)/U+5iHZOc]k)Q^/GSIQV&o'vsKQ1{/W *ʇ,xv7XQ?oD]^RB;qE:~ciN֤'jjtvOZ]ibw95n^nJ+Rnϲћ-[+٠!zcAҦ6m?.@ET}G@s#צe;I[eL~~9(FmkWOb]?MYҦ=.#fw#R%.+( +8ev.}z{*3諷C)̒B~=g噇%i5AԿ&t7<9S}V+dUXF֩,$:cF/!!n~Us7N=^=c +Xc'Fz樀?奥 ;)Oz뻢Dn,tGGIAx)>q(cv^%t ˞8-wd =Yvfجe@SG0!YXʩV)HگfMj֤Fkf6rfdd;0bwsCn zw2;6o %V_!^>vTcY{Heǭ  7ߗ/;uϓ Dm7%7Ua))awi3f +JhL 7@1}?_!jaU,{Gմ4"4A4a<oG$+) {vbP|=^ S44Q yy|>T>iV+i#'hl\NNOTZK:Hю׬.8g>jP-N5Kov$<=\{CCxe4dODGs__||7&!ACEd7d=pҾ#DMLƯ9Oח(寸nN$w v {Q3۝姥1\EhN8D#nR"&dM{vKoΠ#a7Պ( V+ :uGe~~ vfaR9T?Ȥ_~6Ck@E=/"}Vo$|(iYVP jw yJVĹN#deľަTeyBqc=!(? jmHtRv YRw"If!~KoQ:7eZWΞu"*JKGg rQٶ982#"iw8J!c}[t9Wgo` u+hگ&z RuO+ݺ{'E}lo Wދ(A+$j,1jL-FhlE (JS }ؽ=8"}z~ #$rN2aMs,=5HI2kEbڒȡ#sJ[&|(Tu|;!mY~}eꫮQOUܲ>61AK=Ƹwls|x4x ]93n(7-Z??#GepnY+^y˔gNZ%QԚ2M_D]y'g_=KZW_e"[W~z7ϜAa߾\Su'lQ<`VQ^اf fq,!qҰޥ 9?%6H{_|@, \X`Xv/:WnJ1 Z6O̙].:ÁEڙT2(!YMF a3%]ۯ_|8ۑZ~IkF=?SXɼ?&7}KhQb0ȚƪgJI5M7S5~6MOa"wo&y|uuD% |%yzz)_]=e[qWFDSy9֬a?AgwzIKHLDa,ŋ1YݲC[$`4oqU0AЧ7\N<9n ~zOD y#1~e&3g܏ͷtoMK3QIJCk`0LVΌuםTiX"Q#ԟc0k63.D?rm'ֳDu;w,yzQ:bx|ش鸒[?7&^?>բ*q4TVn7SwVm+_u5Wݼ)wE/ŋ1Ldu,si,8#+YTİn?̈ӘˊOIYW_'ݻs`LElfO2/kX.Źsғ!lPǭh/+t ?H8E[bThÊX~+-?hKN95Zʹwә9tIWWa!N1永 U@@,KM9GQ]W:|Rz^p>C {,? j)  z+9jK6X%gQ(9p5lV챛eܽQwkxg`KO!puo+ъ\CD8lYeYs֫3th㍺x8[Iݶ:2^/&Oڵl~XmOXf2W 1E49iEfToBzi)*>2uӢ?aʲ%82^5r6yUUh.>سw(LD妖91[sWh+i¨#Kg\l/?n=d{t1S"y3%S3 toI2xTyQЧgI^'gs Á}`u1Di7Y}t3 L?OUqro!ֿ.f̤C>AO6ı0lL_Beohڽ[%;S*B}}>ۿɭB2)O(Y8$ m=p>rD?={6Fs^;gld?C0QD-hɚYX;^v>zO&]oENk/EUͶzb1Qn_m-e߬U(jsVX{͞*c4d>ŖN)gg J:"R$BÑLy5\yo1IJ_b:=bÆ!E"tM5QKChZ9n?p?L+.|ALh_vI-Xst'{/]E0vد[ǔ=G)͛SS^K(fw|RkFNF\Igz+oipDƘnkc|gkQ/[+-)dU5S7LJNm/u;w2=/_|\&E,my;K3"W/EO.qdֽR4YnbPl5m~5kTSrE-s$l}QeVW+}OANlzݵNw;wRw// _TFVۣb:ƗO>ņٳ8}p}\üq5t>OܳݹoD{:jiGKz Gw2,wuWVq/t;FkFfQ2e2lo>tJ!mض>3hx;4#(<CxGiSڳ#&-p3J2Y>\zՏDܢB&nMa!m#-KZ}ǪݛF_8I{zⲇ/p,\@kŚ _;g~jsMJs}EfVLJ'" i*/whYNG豘 yݻ3`ݡ|:Ay?(Ƕn_/%eEk+kc`٘t6 c#}KHDSE9y={xzOΪmYy58!C8́8[A hD04x_YYS^Ƕ EUW7mKOʗ,a϶-Aȑ |a be5ڋ7o0& s}%ڧXO$N4E+^{BJTmPztJY+ZYjUˏWcsLzZ]Kxk~G1qt|E>&IF)5hrhr3ZfWdwB]{ -FCHG{HH4&bu54$?ú[8)֍-D0v92 Jw 45aq:h!_?< xĸV ώ\m Vxw60L"`4(.&{rM7{Y3O{v͙á>I#Aʹ4HLFstndS[YYnO]U=Қ ǵMmh(m +[Oaf]џXԲXğX?iHNfz^ޒƑLjgW(iA jM33EV') oU5b(ֹ+H5{ٿ:Z4o&*(۶U ))f4IFJ%<L6/7#ٿb{HSy;m \6~{) 0N Emç(W`jha}V 6F kn.l:D ܓJ5E9e&ߩOL{v1ꢳ}k!Wr URw{^X-??_ Izڸb#Koԩuk^+6s%~ņ71e  {^f<7˘|$οlf=ZT8ږ~VY)X)YֱFZ2jUZrY+WQ:vL*hލѣ{4{N6eR;EaIsY}44۸cZPr2hEq$_̞W/HA4a|SbSYGHW,pHLQ :r;#'_IIrud~fHUVqh!fԥPq}#-f7[a| Pڳf&WUWzvB(SGO!G#~[ȃAZ [n]Y'aTS窵xÙʋB>/g͉bߗ_&D F#)r3?̚'7D|_?EBomJ47@sDz_㭭eܹ71=eZhm$) u#+Qr)XъD.X=SQ/E"z^Tw %NQN.$QrŊb#EdV: iAn2Wճe~^?v%FqegQpkyܤgdFAFw/l%& d`XO`0Ӈ/[]C 'ק`WP} 3p`@vE~Q&G^!hˊ5Y-Kr #PC' -wW_o#?<Rz5իWSj7+Vc ov1}/CȖڠ$##&(\F]a]ZcSW zERD"!}dvS$yT4٨rQ*ΑO$I&Ta97Y҉jNϒffV҉[5gQ!~kf&|ėNC E]Gs-_ /X*$\:2/OqcCDܺn:W_E^' ѩ>[ޥKY+ n+ksV鄿'ٚ*vDqX_Pi#jMvc&I۷ر"u7F};v_f! E/KС> A!HV3݊v"B$^` j{ gt-@CchMcIUDFp-ff^OUWx^)@m*KTZz+/‰?lo7̥+e|[Ts7k1BNu,{6ޚue˂| ϔv!Ԅ(3tڋУi*_97!SbbEQTx)M|ћZiY?€<? :؈<>p@ݰmO}`Y'wN NDLW*}[>o7@SW&Xv 1,Ƭk?Аp[3p[[ȋ+@ZWW{0?svR*g>̘f Ռjb5LLF܊eq>Y#4_ JYwSG~hlmo滰/;F:;wmn>l}KD4rg2!(E"lLxPmLh“UWbğfIq{D$AR!Ɓ6SOoOr( L$ZޑDcGz THZtg|1$[ovPMK$"H†F1X蛂լHL*e' *'/MfvIƉ!_ !!;: DQ|sZ Xb iiH]|aC+8&+"<9sKf&ZC F#h $#"0~!3+ C;l[DuO8>\FcL!G-e1u~Z$j %W\kQAھ`2rq>tWO2if-dɭ}J:OUaw9[yfv +–9qC%.]ǝ˫CϤn~t4k :~MZa!qzճtEU(iM -:,;ݾ\tb1LnƉ{wg@ck Ð+F>|<;gc( bE?n8JH$1kxJa:$ĐCIG\r'G/>᭬)xL=FS{eIroE/۽[v6'GXBE=5l""^/wަb&1Z1'-:m*oO 0MX|1i-%W-mt;ItPrm E##ulWaCyr{)-f3PQOXk""=ÉW= Cjsơ>BԼ~v9鞠(wGS(72ztW)ҊK&OAT{]u q{?•I =׷eZ 5g F  %&Œ"& 4W\N!9mFNi Pᢓ%*D=:N&$f;> Ņouqea#"l=ɫ6 PkdaY0$Yp}O5ѫbCL{W(b eOwH$I45z𸵽a36?=ft!_GQ~@ÒFCYJz+P_o=@s_'IȣT&ْ-;v3><|qTB^ByCF.'t `N:i)֬]9k!mhM+i Z<$VA0Zq)]II%eU@,'v'(TYC19\zv6FfL'>[LǏ+́nnaFa4٭6̖bd2pw柆c b$Vsܠ$[˖m94?aYw%dZ*UT7b, ˪?D`ʢr t8}piS9tb!J*eH{$ZWeM3pwVNPr{g ލD W5KL1z@O`cUM( *QH8iMگqv̬Ԓw!ku}!:ytq8m.^C>zw2bab95ҏA{E?$YK9 ƌ!ӢR>Lƍn؀AD},n`{v;e(=\MV)d0[LLbƕQ&N%4n<%,FC|u . }Ù㱪i(S{&qUt[ -3Ν\YT6c&Eb۲{t8NefKرh. nJ(6'4TA iɹiyҳQ8h Xuu.xs۶b~>s&=ϋvh:9+WPjbQ^wIn#-Ip%K#T\X N':m&3C|LEHx%1DBD[:B&" щD夹h4`4Btل+A8gm*eruvLetJtx>%瞋aWȺ]3G <mp:91@},vfAɷ$AeW\N#W[G `4F9N*2]۳Kt+ۼ7/,N;#".ar:{ODk(7q(_7݄!ve@Im|zϽH)]NS2a`h7+C(횗j%?&ByD`2^rHHR*ΓzO mz󰤧)ƫܴMmlMΑkZQ?5-oo  }:,)AQm?HqPE:r$LQgv)LF|ecKIAQ0~<V"wpuՓd6Z\MР7ui_%IPDuU}lUF 4 $(vO&p8jk·xs5!َJ}߽I٪rݵxy.#Grt晌\?C{=1m'Hv5pUhP<.5Ά1_3hZ1`il7?YS5jW|ŌTHjMHr 3<' lveqsr3U7M[Q]Y9ZsZh Hf!3+}6"bԃGZg c;CGc}}InzTmV Zc)岪۩\bp-~iM%Qdċ8frn0*y'Inطۯ/[[9*Oz~q$ev71z "<|ohT$UIZY$yYtԖ'==Dʝ;_]RB;}Jkў}i:[.edJ:9B^l:6嫘8!%ә$bN%!<PΕ8&4GkVr|F#MW҉c @Ͷ\9c,t"&^@ۯ)o9^2v.c9fjl f3~.FE 1Sy [~[-KebKz/AeΝC8uvǷkWQsZcg~~x #m4=tL`rgl BamNݨ{ЕhS8wW̬4lmLT߂P(L0" :C0/c}O"!}ynDbFt2z]s|jwdsp,,j;jcw}qύmu)ᕫTkM[][ +*8n8+^{ݻ}/yt< B^/i_-gdҥDbs`'=띓 P o(""&!ފlym] ^`%!-j(}~pXԍ@E22VO'h鲫OHRsh4(! @Rl13Q=E 9e˚D$^݊hkI б~H┶*jķ+j{~ y^Z:?I3v<<*n.jwK`)>,o皱Ӛ{\q8w"Kg\:3سx12%vS7Λ_ Ě^^RhAmrPڳtixYI ޟKn&PIeCz0yڥ|vnCjsS?!`=7њ(T%:G-#A5~TNʞgڐGʹ-t2 QSq#M#H@fR,Nr-Zj`mթM*_pZ\zR2냂'!jƍ,:,j7lxqplž֊CyAemtBxh?Uc[BḼZ=h4Ip_MZ3 P]YGmuC ঢښ|m4M -Gfnt#.(oKpX :DX8˔qKKT-h 'nJ8FwX|T,,b0-3ԭRHK@c{fb0OZԴ|Q֌մLf {eյҸmc̜ɖGU(auD>5h)SԈ 4ddtGDjuekb2D"(RWT~;LN'"؋0X,TYiq -akTG3̚JmA9E4DXm'gqnn z|Qz7M^.;=Na$^HWqW9 Hv]^{rcJ}Mfw o~s<~~RK> bxY mF5 ePTizye9b+VaPډ=5C]W&T'Hiu$Wh.E FA@A8%2 {<4MݭYexɡlaҠ; j Kk;Uu$I@If4]x~϶Z-ɗewcO3zp,Qy3R`%A D ڌ`)8Aw,L5d2bwXq8˜p(׎'+_?`j]TW7!νJR[vU #bU ҞIj潽7.5-+Fw#Z45F”6d`zJw嚫8x) $1.߱PYּ-]N/?_݆a@]c^~~ iػ7ɐ*Yb=R;=ck}ΝY;S44{ߚc꡵멠;RndDAI0n`$[$Y0HF$"Dˊh« !E0XҒp}rZɬ~h G15qԗck⩍'Mxr:;3ތMmYy6G;|Ҝ45񸕔S0Oӟ喇qC4#aB'%rUc[{hO{Q#P,OVѩ{1Pp(L &;PL#?ƒۭ-v‚[Ћ#!Wŀ4r6a$OZn^~)5ˋ.%ӦmZ=Z[ 3Œt4[SUk?I6(=~(!5ML@Oc({DQ>~ !HժC$ ۇ%TX>H aCX*ؤ c8k/C3E0iIh-ŝיž-Pv` DmMp.&"; ׎ۯ\ݛV$Iݺ}2y8f{{Q\}s( ԌL'(m[4?yGݧ|9?eK%Gw̞CquW*iK>tXк[S|ہ:A+f1kxP-ձۆ{b΅ػlF ;y)TݾIЙ8lCE>BfEH~M޸HVY[cJN5jx?C~2vQ-_ДיA4"bf0hwc4p&t16E3f:F_2Cu+YEb(V-U !+/2]T`ʫ*" vgt`Z a NYs&ONЩ@Q}i>]wPtM$p.XD5nc#[|ѺMݚ.=iT3ZXLV FQ6o*rhSixyBurxcǪvQ 44ҫcjeH۾|⪒ʡAGkXQ4&]Ana HT9ڈ:J}Ǿԕ ēOcوl/Ajk!a}Itaw٩.2Ix[ചؔ1@W1Ȱ$ ,(xB=hk@AzPڳ۷֣Kjז]zC{W.H0yA-S߼lCoJzE)Zr/ |Tj}bN'^zGKIQ&YY-HAdA#TZ*y][6ӽ{\Y?ͳ?HrPR:8!ǧ?S%ؤP@mJXĠ0Ka"2bPXyw kbԌw0ԋV>I9z&p@>gBufM/r"bϏ G.cQ8b8npB:dMv;=C݊`0hl={ŗkA$ ZޚA`!ndHvm{?nˤaZ%ojFo\k {moeJԈe+Q$Z`rc@8 *4ۚ(]?;WPk>V46ij`ZڢS=עe'kJYF*Fmb373z U,3H{Gf-[$-XHх,<KuͤIml5\kJmnlV.C٪ՔZVb֏:V-|r󎓢>{f^oGo`* vQ,`cLј5EM-EE@QA~8m~̖C|x--;y>Q/۾;dsUW3KHAgq( QNוfch;Zp!q!+ 5_GzCu f`p lM 6*&#,o>ܼl![c"vlv+vW,3N%˧sBNvs%JMx1ĵ>xM53aOÏ8pO$k/Hcsz\[htKJq%+ޜJƵlC)CIO"ǥ\lA-W[=ƌUʮռvx!}ϣ$Ɨ$%#>'lyyTLBߓOf%ϱ8-ڋlxW`+YX[|3\JD =&S!Y{A01Q ܙ@PL[~;08؃L؉m YC&R7bY>'I@H`xآ( p-Cp$B$&vkZn@~a.͍B-M咝d#uXl2ݵкK"fbU<JKuN_4TH-AGoE4w70Dl NvYr/d1A#55[kAQő;&k³]B 9L &#XNZ~Q9Zy w̱9wzv8BAr *P"lE&k.](G3xy}<ƈhj`˲s?Hss[_b" Q ´8 # 1U˨=񢵮jf;[8BO}YizHeMH6-v Rbv2T#Ck9kH9|Iw'A~3!Wb%/藏?ѧ؆fcχR~8n18IZQ!I# ~fYclөot GG D䝋WXd9lDZ}%o0`2$v7n:xD?QF!7|]$tIZH"CQ$iuI#$?4!dO8Gm(́ W %lΐ$@ $  dV@"e"$I&#YY6lvKvqոў%oLv螇LU%!η7ES&5פ$\b[IӒkq)5蛴b>1֢$:1_5ION'0`&/}i'_{  43VhBbHZ+84bV[Ȟ_ɡS/EJAHP0eǣ}?9 c$%Rm D8(^J$a(سسli4Ǽ8f@"mmI{VE_!VN~lVBn75MB~{Wjx1?IhmgSC(Jxhq&ک4H:^ґ5Z⮇ME{2ec.+^| z= >˟~uv,jQ#SI V_ ?gMvnt AZrCNyMF'brjoFny9s:yr0ᠬ488Gz4d$GO鑴}* (_l%5 >#'A:!IRDBjD 0}?'4m"zCP4+{s*55,vGp8Lscnx@^~b| Ԭ$f]ÜHvlkmO'!H{waUKS"A8GEDS׍W_ϒ)gonɐ[#~_IG24/Ik8$'CJ~.HAysV >((b0V=WAC:na*( LN忛LhY3JwRThl*7A|Z6Qe{`d9y;H y6wF' EyiGDks{c)+%r*VWd~׬4}>Θ’rK#+ѹD *wZKK9%n_GyztʒXH&DUzFVQQmv;HD+\ڧ/0V@sd Di/ ֨${R4ַtR}rh%QKXQ> )!OY!ӏeX:3w U;dtVE3E!Ol9V8~>fj~Wq^ޚ#HR Hۦͱdž;b?:#|v9:V3t(ʁO$((*(3EoKzСIڥ/ W<+"+!Ndߡp] I~:#8tÞju9hjщ%)I9~=),E{vLT>W*=_4Ӱb5+Ϛɦ`7oa=CN?P`WN)rCT {@`9uVܵxvL뜺 ̉kّEN~ 8tNjڻxWգuLDI |0I@gLkG;R~* ΰ% LԒnW)o$7nf@zkXYzaAiD䨶 pzR?FڜwmՋ)a>=0 IDATv|szwa̲>tHGs m[3cv7JsT{OƝ{$ oxb=~Fl!l UqBAЏ!1֌]H@߸AG7m0/F_}Z{ +KOC LF n ~`ʹd"aUdZC45*#AZZj%͜ah`<j 2cV6 yC+Wd$5<=7^);*Ϟ5o/$j7l+Y[˷׬qIk! ? Qa!-I bӼTj#F՝&d4sX ֎@B0RiGp)be"y/jy%"f {V,V \, #3J0Di{-[u„}wUH5:YꕫH( HLJѣCD3f(.f{39e"aJ~pQmrT+*[Nƍ8JJ7f)0E n|9._Lj?,ךtN8Dq0=n%eGcuJ RP "KOŒ,K$ e%I<;uZ`Sf݆<Xss9?2#Nt]wOиsm l}u>񄮬Nض`&9ln7}8iS4ݫ9tqܒ6CkI c .X#Ѱ"!:0!o IAd sUhdeD1k١YT BRBN}l7Νe>Hرݞ$M{|Lv+! Ѭ)?][w=pT mee\gȋ##Gh=xH0h0SOSz:eR$[wg+* ҞqgC1:Az\{7c~#̙Èf '=(ͬ!2p[S[fy٪h⓲0u%Lzڷ&4×4];7װK.}Vk|r,9\(߻oɕG2٧)8wxnܾ70뷿[/Ďޢ줓vy5Y[9k?0k5WN@6W_g[1FS[~_{cO3[Cۖ-zZ7mBDO#fG؄>U1?}6R77ˋ]c0;✚O0Fw ?M,7Ah4P\ڽU?Hs2 mUi kYvy4\Mݩ-#=HIˉ3ZۭPb5sxB8aʘ+єh63۸d>NﱖЀUl{o8`tA=KCjWƒ HnCUD֔EaLj܈p {ԋ_CϨsdIa;>pߖϼbƣ$m86Zy;TEfcG'MOq4z&# m<_(Hф MDOgmaɡuF<^/cY{*-۲[2I3d;uGtvjy)H4D"\`eʢhZڴ- EhјaZvPcjҢK_z 9@9g1dOG˓ϯ/wqve5-Wa0\+ =<uwn JCgAzZ$"upܫT׮e3T$XY$ ěy,Gⴿ%L@4)2ފfuf^/ZkI—GFv0p YoC68B9 B*Hl<}J ŌP9X ]zD Poet^Royzp=>la?HK8@NMa_ eF{:]mEA@EkyAC@UQ~L]*)w_~`G.GF}EyިQi޸Ir X*2 ߟOڣ#;;(=5k׏>%c0j%?F{mg  <ȋ/5nނǾ0`x!ps_zǠ^bttFy'yG}I nd'̽!" 7ѿ&'hBdùYC'^'͕'Hl6Tz[1ew$'j:b[e\5 8ЎC 8`a*6>&X"]:-:]-`;rD9Dsn|H3 nVx3c6iL< OQH2̐SYysiۻ+F!KA{u5}׿aOrx:.ǜ /`Ȳd%XȫSq]9~{>x8f G( !-gs{Ç {9\ ,Vd-FǗGְ!ki3rzȋӉӮ]m><+ܚrKe}F:GZ^cԼ.)|t/pTȞ0GW] C0DMJuZ`ǔK1gmcyhHzzw\Nv2\;g,{g$1Z۸mn ^=}O6W^msϗ {yA.ٻs/g7.Q!ĭC^{ xXij'w=Xck.NCm k\cpWWZmlv7dgg/xױ7_&}uzt]t!]H(z8-uVF {PBƠd `ʢtd|vMʿ'>msdy\xiޮ}?*T>7?Y w|hNV^}R8eK ~JЮۥ`4R:}*gfҶk~M[0XC#Hex06l'֊& ά+=ŇE&e=8[c^W[(EVa܅= )"9۔ÂȦL"#kJ2rV֧GЩi۲$q|U}30ZH*N=gPw,_=[w1b{߾:^Hm{Gm6wT/UJ`1?.K,Q)p6+@ˎ]+zڒ5/߽>X}NWq'?!0?G4WeRTDUWQqUtKÊmߎsNw&|$EȞԇh;bG7f P-=LEt?PH ^!i{G !_MV "JmO!s%B4 UvCz$F{:pcC4g{6L'F#wb+ʫU۠ۍnAH’Og_$]j-woh2qru``pV˗Ӿ\-TN_|EkajlwIki2F^p>v^rB~yf?)8=dCVېCݴIΝ1loWl(bVVFޘ11B3C~?oOL}77^4y9hllU6朚O/g?P}rz=:u.VZel)WcuHp?AWnY-o3ә&>nZw^VF!SWڻ{h8ukky}i/Ȧǟ$g@[gp%:e:M۶wƕP74EFHGFL24xl׿rY1׏6,۶򪫘`fBA愴<=%,dv'Ǡ4fuռy ?O!"E.CSQ/O! j`ZxkqG[N:5k9]hPs: 2t̫'gYF[0UTPp!%ѽ 0){7|d5U"Xf6S 9HKRғd-Ei"hIgOu#gtd&?Fr3qaeS͹ICk>&= [Q!W9Kߣxct3{ܭS )I"t?{_~U1?[R{w!|qQ4oƾo0י S^dxwHÆb-(`0qѶG|5T_`ɺM595VyWsۈ>N'eڏ"׾},m}l$T%*T&G zl-Hp0%'oK &B~?_s mG1[ R(ĦIh\~ʠF'+NVS[0yxd%]phhA@@ ELN,A{A3m_!&Y{S& O|y.9#nŬyf E'G2D'x{iذCK?_ȼvei>}v٥̯=̐ xΙ@,3ɽ1|c4[xBuhx$u*)Ri-re>]5E08:`42[`{.agy[^][v^/IPyzLrOWl^$ UqI]wƛ (4A)dE"?|ܺq뮭eqrs 8rs_0Ԯl"ʮ۲7CSO{fAmJI &PVyS~ :=A^sV?#%'PW(~2T㫯IJi M!}tH4I"K6Q;6BT/UY+$0P&10yXf&Ou= IDATJJ,uHթjRܿ2Q[{J `dsi۱3Ѯqg4 "LUo2ᮿ=ˊo~+ۗ3BSSw"xaa=_*':s#vMFivMt IOCno \cgcx()kR# XuMNO: )z, 8F̟s_mI)ez>#KձfL 9L' oSp8l*]/mE8ry/_N&;*LR8qCZEosdXU+hkVR-c|w>eॗдa#= R(Dqm1'OWG˶miz%/Ϗ VIOa׿0+g| y&˟ >wF' nLzN)#SM|2Kf!7;0-űOk!(9R{BNۙE:P̙C99r׋ `e@ѣxkkїZ@[8ӑ#C1q|¦޿ u-]06nsKoAO~伮W^Ωes/rrb߳7|Nv@VM.n} \??{n+78n>D.iE'1uD!Lr{)^}Kr8jloz߻L՜nxQE#uL4ho?Ir?os6 v?@k+?)' / scXiXKҾc<55*!LVsSn.>}0XE{$=.A 78^ޅl6eZjف1+~z&/yfr Hglǝ%3b `g!E$?VоON|EX3eBZ-it&ZtkrnC/XU;iڽk4Lne ZrLֆL 6] R 6xfDվFa'ay9wa[Bֿ1mt:9|ev;}?s 0egz lYg笳ԕ$ E_QN G.spy{V/☐fUtH4rџJHOVkZ}Ϊ*UU*RҦ&O Iv<ѕ[ [-@GUA*OeL @ f%#SyhAsISդtz3D?uYWi0ZhȾXJ+d-4.b,hzV͛ǂb_|1OE3wF#Ʉh6#Z,) l,}J`A3;v]wA%pvϟ ^}$u-<&K~GlE<^u?)׾\:ˮ> U(:F}S~BCO5?Qwʲƿ?{߹I-|B<6%,٤w;Ҋ2к"ԟI[lfN6"-^p/lR#qsE)S(>t 'LhD%%8onQbf~xx7㎝}r`╽ Y ˋ]M a^5bЦz:@c[i)n^ C^w8ǣ&ףv<&Yv)l۳|_iQFhYn@p6bޱ'H8{c!V%My u?;~~ut>\ԩJa%.r£2=hu &}ƌvD4&DL4YQֿ mۋ0ྦ5Ř7-^H0HSDZ2Ge%E'H`8&BNy V͝ dN'9c'}f7G z7jiIhR^ݔυ:ZVTWcA's`r<"\AR(L(THO A]āE@5жW~:)F']NDNCNB$Bju6]ջ h2dɡaNAM*8U4A$}xIW}=v #;/v'~DXgmOJuO EoR$Z\pWX,8rrX:q"3Csx<⪫r-w$( p$wh4`4o)M"$KUgHuNlXl}(27RylfOLMMѐ91㙧462|dgԍs柟d?J5/ K 8jY8黻iܰt^ (6[A׊MvY"9L xcF&/n`@JG`}+kh(=|Jp(?37K^R@‚ hA)Z 9BӺuT=O=Eʕnڄk>H&㸊]~y4]k~ZSDBH:bL,v:J5602H|#ii'3mhQ=RRE+W0+nNFkniF}֑qƛ9.^BI>!Ld@ c8ԭ}iZt|Y{u5^~Wf}7A&O^Pȋ/0&&v+g=cO NRz3K@Q F_|1WO `OۯH8h4bZ){"y /:_AVBo*EFʉ ||Լ6BKVe%WVe%~h~:c9/_ R2kGjjvye<c$:\dWhm[WOv(Nɏz%f7kŋަ(.4g-#b--;r4e'^_&FWV2sl[-IK9$wd wM$Љ.\?surO4u*fwWnjbдiD!_9dҍ-; > gd4Tٍ Fl$6D 8*+1+cc:` tvcGұolr13F;s9ݔGD k)g,'\9+$h)b#?GV&\t mt:UTF:G!" 5+V;`$֝W‚a{).zrn3Jnj^)C8NԒlj.^;xR\mZh2eMήK߯(.Q\{?VAw@OKgKFK%h&M`bԟZ>]vz0a658tl~oHᰮ8ޔsgiilL9t4N7c9'̛~΅ Y/p뭜t54As^ >_Y_Ǥ"ѭqhCD2Z+yNr{{#r%W?イu B[I4  .)Dl ah "6CMA ѿbkW =bBf6{K"mϋlHcu0foUTAsS+*ӒKP4a5zdd1k&֞sBZfD$O0^횵П xƛ ݼyXJN.$}lKx}5z$ٷlMU{})pnnbGSeɥjDGQ1ov;ΣG;ܾT>XoN|/ͻ˖)kd-j?>.ԫf,`IC9H0 $!%P,"!YE$[e7`מZBYgCO|}3| LDt`2QkADj!}S7r:MNUͶBJݙcMwIuzDΉJ7S֝F+.'oAH0H:=Nk>aWRԌh4br8q4WUQ|rΒ9kShp0HS\FsփAW}=s/ IvH)*YY{xygCvi)9}q76IS[ID;D ︽ '@{={Dv\,4׫ki+LGI%7."v +k @חhS2}:Y=/M$9?i7>QD)aevPE"&,&g-ٽAZl~9'H(Z+òAر\ Q4ze!]h6T/_L:y%ہ#7#| k-ᗓڨ #rӧ fnl?~(&.&I{î#^BR]A"lr9 V7#ۛOElBh}ᩧ2ttm[]"RT_S/SǣF`D7XuZkCGF;%CA^s Rv%5:v]oHMY='M@^<<Yȣ_w9ҥusJ ^w `\ޒ_bFʎn|1FE I4pb5! qh׏ual^ͱӨ>IbMLxif})e3g;\呐[=k{tNv7XSz!IUByQ;%ZLj%Fito平9*wd/EMjkEhp׫-G$%#'20$ ϴヒUkkS؁v@$`2fxi!%:_;|;zGG`v-prKg{twd 6g-]Jٳc1RSX]-rHnj`HPQC0mI*tv%՞x~bY_q=g/P0| \4>WR,jqТ5tEMt{l %@Nci)3U*T̛p* S_{I2øA5yd7XF'FrjY{ҜU?PulڳcD\$$  toMⴻw”#NonZ%'I4_i3Nj]u+;&há0عujP \ߎMdc0#XrJ3+Mxi/[- O9RCGɠn2wz&6'"=钳f[Ak'+de}ٵ V+:ak|Z֜Rt;2tXctʓeY{ig ]c@fZGgfM7h>DB [DI6Ezsr}̯ENI$&e6NOLu5q{n=)K[\ U{Q"9H6ĺQD4h0AD? O[tm3Cn7OE w4E-KO  J:2,[iKRA#+9񚫹z;T.&OnF]:3ϡbTZŋ.|SA}1ӕ4 vfed},R{wE]u3}+z#WGؿ# q Ue4mp3c콒sd4$َ$ѸΪ*&Nx{wM<=j;5鞊M_nҞ&-ϐ˜_wQ6gs1׏AgIۡj:7jh=Ѣ5[jq{}*p>4bhF"veX&󎓫NK7RIP.E@A}U@. `yQ)"*K"46$McΝ[Ζx9v{@['E]>ax><4P4,"p@ܐ%噂z>sYQ7[C8!G1"[ǣbəc' Ngw-5.pϼO bP矟pE!-sʗN;P~h٤͢H9j_ q+Vohn-)RRzfdq'-;G;H$`Nj/|{S} 6sWT5KCsIBsfNk_3ŘV|.MRf/+y!CQp6M암p"O졬qeߺEOgOH:ιuH2i}ukA$VY_P4g'bΦOpm܈k=ftEFZ1MRcJ4ٞSSU$Ah롓FRMlr.oЩ7z@)^L9L58VIk;ͫBU1= Ml$ V7pc[_I9S<R1u*/3& }C ȅ W-؅L^Ky(㡹ٹJ(,%iح͎tM3ؼGI$܎N¶'bw-; dv>;ɤP3|Ùu,>d"ۋϿwޅǥ^Ϗ7ZmjP4RLVVȒR>48ցEddUO̙WSXWGnytɄ`_&1oOq70nJՈ/!(7M$ !6Ê=J^Av/;Z MDӅ{=I OIQ$-#"H8B$!*{àf(;=8ȭC0E f3-8p VdC)g]O߾fE^CZRhj3w$Y 50T^]1kRV2x::x?ɳQT_/· TӖ¡ jcjl *pFd2@ig-4H2HYKt2tk㧍 Ap;95 [OY#^$IE(&b$9/i.9BZz|#FWgLkVo1v~nm~eNoU|tm}hq6@Ϻwu6`X˖M3hZYZ^-܀6-cЦ9OnEqxoiє遲91G g݂fj`ZXD"I^/[0;yyԮhX$IH(I(!Ib95z$[OO9?MZ zmssÆhB0Q8y6m3N:M8j8>6*f:|.[1f|ʦOc9gK+iUx#p/~?8H0zMi"[(!I=XھdX$Ig1 F"tMD媄?&Ғrؔ)|&8}DPԛ?zxv?JXJ(~HRؿ8~VHDr}w뉚:9"#U-h2uM1vm,s*␵TޑAԖ 0Y1YTΝ˸'SVwޥuÆE4S̙mV]GAm-= iZ}H.ۤSfŮxX۴ݎ[2sǖLV$b̬Yy>+cxX5Cw kYP0G=HE8J#$p8D"&⧨fBGCVpg?.LFhr:9X^eQyVcs,it* 6>]:8 [Q&NF$֐A5>c:)9{yk˘vfJLaҥ#}]!UgEki*@ةsJJٌjEE<<}T"yU#ҽ{CAo1 ixM޽D_B[>;odvjdY(,ͥ4et{{=7D֨,BL8ɤ!3qH#q0}{!Lbsc8B8B8>W\`I:pNF?x@+j h6ќj`l=x#c'buF]65 Q郢\Nē{Xzɋlz ow-- m"N2z Ҷ1"|g|>Z%vizmLz Dd2%}L&AHDXL&kǝUL@A=)eIru9Q9KD,uvdQ9iin`ҹy3FYhcZ|^_ڻ>_;kϬ/ϓ(1/sҿT5h!G^.@MϑQZ4ĎXAw&Η*;|g˧ƛzً`0)ƛD4A ;AN~9Nr8swnOvԖ5K:ۼ( CeG}x<^պi+Fc_i^^Z(әTYP/{L%›~FV`|9o{;β2V6ymjh6oRc8/wqHDM<-=;|d'yB>? \s--|By:~Ck% Y8H6O+ciZp!{%?9;|Kq2Bsm?B$E9sd6Ew:Xh݂-Şeԁ<|ACYь@^qWn'TzzmBўyNICو q5RrHy2UQ-huj@y 5HiT[UEK b$2dh yUUX_}fX#qq(GieJXE~G嗙x1;^܊r[4_@]__=-#"uMj0)-#ҽ]nz'"<аV]n?W:zƯ 9Mm;6QXturT)ݣʕSŤcדO dz'˨-;߷AgbԞuF8KJd(d<tL$O#{^.n Nm-:w-6{WVښ™܇KI#f0Yო";NY=Q;hmPؑ&I@@_i{3B')Wλ_^FIDr.C9W^QTa'oS7vals7T=ڳ,?ZChGx*s0\3Ga/򟣎_kN6sg'ڥʧ.cL5N'ScFd*.!̡Շɞ =SNDhZ)]} %~}P{V=Ss(M;jmѵ34HL?G)kUuMZ)lpܑ`|f3m߻dRpdN9ӞxĢLV 5Sq<5}ɚZJZi=2{^BE_|"O00ou:T7LվZ/JGRZĻUs$ܔԴ\|P:sдOyO%HJƂo,x%DbP **ͣx=9sV٢ gw-mi9$b9yn;Ռ3A( jⴷ@m)l5Q|d2/%7/O&d53Mgo~ĥp[(Iboii%{ W)(nͬfy S}"ҒZMV׷y>05ͨZ&\a2Kq95mdt}Z_,+װOkB}-/sM YrG]{`Vo6o!ցlBLa9pƮc۪rA`*&֍4n=@kИMa5aea+' Go%@!9FH$<>cDLm~lK>\|n=/LG_O3ҚSY'UR7.ʰ, В<%-iOtrZ6fmV'iƀ[9XJVyI-gfLN/;M):h Qec i߯>+f.oP-LSX++~I$Z sdlͳ;0uؚ :ۭ\n"aƶ~_$<}qløۧj59jJAHgy^RfЩYi|]j\;>~FebI^0zbI{mmk猗_0튶T>|z2tc9DjW'2O@KC~䏩d2#lӟU6qJ:4*;c̙*T#wduS+COŝaB[~jy#ۅ1[ވSN͸ M"hd%cUۆ-O sUnpQ0VQc=ŧ~7w~U~¡Hbc6Ni0(GA/h!meSQSaSJio>!2 w]cm_Dn}a.ラ1QI|Cf L{h Y\"h?K_џѾP>.}RhPq 3{7L STꮯD]ݸ2b$@Vl;% A  CxTшRZ5z;'SɑecqlZ݈O)b7f f ,w7,.dg#Kctᩧ3kW%3PdZ(:*jd O;#+V2chn:*.j *C]Elw%5_YţҺ@5tˆΊzO/~ؔ-1NA4l}e޹vjQW]EV>FcWK+:T'UT5Vh(_ r%A W͞V AiѢ.SZ *œ%Pl4#& Tc9 Ωe鶯˼!KNi۲9Fw6}_WMƛvʗz -y=`,HL'ҧ3j@:S4ʘRm hka߇7g;n`wXq886,uǣ F1M <ןoB^ hOOZ-ZK]zLf ].0kij]:mA={@8 q2H6> ooׯW40}i+\n2IzߡڧK攼ZKO$hҤ5҄Z$.KA|bD30 ̤S%((Lf;73ZmN,@ n?O(ڝQlJ\)ۋU'L:6G^g Ih2 jp0fZosgTO A@LQO ᅬ˖UWmRNJiK\[2h$+)bn&RvU |4bR̒!n?n?^Otw 1Jd{$Cf7?ϋӭS$N`P0WILdw7k"az(hͦl-ea IDATQDmLRD7ڦXٱ>VpYYf 'e?޽M DAV#=k"@4e+|cԼh-䌮=9NщD;^l#bܔJ}Qxy#Js$%Ig' գ>\nCJm2NBĂ O  ōGRȌƐlv+y`-ADo$MOGY{2X.; x IzΜ`21ײ륗Y11Y,ax(?eӧ#LlCy#"-kѽQӞSa g}6>>n1w[{/2b׾Ɩ"bB-;rP-Nw?%_+cw( &O.OiDb: =Vj_z,n\E2M;?Mz ؽfmܵN Oa2٣viʫp:9 ;<{B^$SID36O1vw)]uX$P|a& ! Ak6k1A\'bG]^մ./D,JB l'/_^zvdÏзIr8'S˔i\e3f[lNy99~_fg>t@L@K@A }Wq駳w@ĮcW|LXSZ. Oێ)?'7`TiɺʓL1ڮ``dUbc Y'ec 8R֕l{m䓵{1lQhiꠧ_W(u$9sspvTJvN`WOl"@Ko^-}Mi >G&zQYxu[ S ƞoOy6_CrR yƀyDRa2*#g2 Fksϱ"a\Fsr +[_Yu6b29̏׮Ib;9|.y׼f̚EՌ4 O;}.RG\/|C0I;8Ni1G`` 4sEeyLUkxáF`u+wg pvA4r̘?9Iس.E9E''698IE\,%= iK+R͎|=wt{9vΒrv:D׊|iӸ\Ie Uk .:&,9sbu?Ij^CU YhN. @,Ntu2s)4 S飏;"ts3bBؒHtSkI4tD7 M̾k|5f^C{Nh-Q=?z$˥St*juXSH˿("x6@KRMZBeoV|DjΘS,`5Hq|D$UѶ?D|.E (ۺ$WYSVU@NBk>~8!7r+e#=g*}dd9KqwZ%1/O ;2eZ7sq22(C[↣_y]]CM:rPpLz0!r&d?/Kُ=bkv`ˏ 'LgB^*6J^h.g?ٸ!gw c֝)uDp+&Lb1kЇE9,Nw.ޮ.}}<0o3f3b(`6ӵm%Ӧ2ۗ>B$8p9VafgEkU9WM7Ē.sN:%Kx䕗cs:c?hpOFp(-:8'? Y_*~֭[562tg RmOHB5֚LKӾC@qP3qӪX9h-qu3^w`:3)3G_%V_V=xE vO|*E eFH$|}$WhԖK˿[/gWziްAwL>xRAaTh_?K<Y!oR>@V&Ve_Mxj=47: esY}>\(H&,Cghj oe/JaOmzNOZ>Cau=Ioс5k 0ךsF_RJb覍X댴gyENq x~DAox9@⾥r`&QmOhxU1eRVozi Q8NF%]4=@'jzl)3]^_:sFv PTNx Sޝ;4G"dMXtt Oó'h|M$RRIMRڼP/,~|*Im=ż*O U_χm۶~7><]{tGB>trΤ֑1!ƀZKg ǢI%LU+5Zd[2量ڍٟWmj1mspTGXiwpcě˛PV FUR?OIK:FUU^1:?gEdso~-h5|R~Co иjUʘtr¥ A$B]81D'Hbv4Mrڙpmzlx=Să (_fWUԯW :5oJYc_FU.V*/3YVy%>H-lzETL…Ø3llG.ySdw;x))l%@߉&G DJ75eV-%? 957vhz3EԯVo-P?ǭ`ΗЇAL&{ˡşZ0Yѻ$}>SY}Zs*wZXٳc nX /?LT~!4U =ńo IǾ }'Fԗк[uh#H&|l"lOaԟecu+ϓ[Hd¶lZMgჳBoUВ4x݌.h㯾 ߧg_jNHKX#.anOI@m̄.ED!l"_՛]$A$"h:ݟYNpDQ~ьm֖%|c-9^JaI(QtL:x\4y2@P!ّw75ttF.nJYYtˀ˅NBldМSjL(gjOfJf,g~KM{k'ueڟITߜo|grRK*Ob02!Vh6ʾ%b2 hriZ-hQaM yy͸G]u17"3g2d=nBsOb̳O?[uպu8 ~掘QN,@ =q*}(WP_f T ٝ:Kp>EOhQ#b"HFRfcg4X9`2W=h_aWݞ֬&#&-)͈%->ڬ}{ʕ\_[GAe%G\|1'^=ߒ~' roˤ㎣yj)8rs2ZeXA`E{,e&J΂z\I3t:x> -f Kr"'/ gŌlB0%$J$-_Ark:-Z>OG3br%)vOR^L'G8fe !8!#cz=B8KEs_:flʌZiC_e:9u>TZ"Roo) L>xjΑΙõ/ |~y#/q pO(d;;;ἄK@d_HvUs)]U] ʿXBwNJ d<V-~o//wl~*5Aq&5=̀hK_}2!;w)6=AO_@Zo}܃4's8wӿ@GFIL0K97$" ;ixUZ֮csύ:0k'jE %m*KgnMe=0jPl喖%:[9᪫ȔpE7L n-R<==/i-Gä-$ !BIl0[l8á-.ڈD}>A$1E#AHs$!/6 KhxfZtz;p@1QhZWPђlFcHkl9\k';^{/̰Ⴓ~=#f|H@ znPH zre_gOPR_'/e M-B jH~[a/&?d+$R ~+z1f s$۰` FɑMZcͼy̾d Imj_o/3g@Z `K&LH0HAE͇$8G20o$KiJ?J/|3׿+/lkDDظ|l$1j$յn*jM(+NVw;!-) F$1$ D%1Q "&1xM27)"~#qݐ gۙN?o-+oƷߡ[r3OxG?qXz%zg.|E8 A`Ғ%xu$QL8FV{VɼT'2WV@[C;Vu )k8k-,!6oWN s/& t׋O Yl~*xac?4mWʸѪRQE(a!?&.[F<}\ >>W/sθN¡;1u%5eSsc /QR$ojZ -awKǍhX^=cXlw~fZrQY㧍bW@$q`O'M;5'+ǓViҁJ0CvE; &}T~>nGD҂^%UZ**p&\ѵkofw倢mj#jRtKQ[s Ö,W^f$Iwy&_|Qց@k;5j["Ji4c*3,! :h_t&/pKܷd"A_[_.xPEt =E;hnHFwuLUT2\ IK7(KF8GI^}ow3gڻp05+M13XyGSZ U{NV>z{^?y=lYn]M{>0&NػnyUW)^޽>^v\13x%@v+bzcTR>"رqҌLpYMhĆ P >z1" b8\}޺]= +g*g.cs MƸ=U{\|rWZFOpy"1pEgtƛ^Chگ}[Gnc=mh7pnDy9zeΖQ#5>uh΍$F/]lC=Lq{?;FI(ƑGh8Z6n]P $$/PԒt2$&3u}it <]]|@tc˫w__yeHwgM޽GO>o^D[CCb<\IX_$m.Fňˍ+il[ڭѴfU-_hEsijhyhr@&.;tAz1tMZ%3״$ {9(Sr,Lf G\v)_vYu}:29kIKK {v+%=ӟH$2fnDn7۲)Sx$ nyW07,!ۑ/WF,6}{UV[E,$2x$ÄapuYMfVل$`Jm0Xy IDATY,m2isJxl20DE 1"D‘wz<+dAQ"lX9ޛ9m(0'hIQ Usy*Rkh2;kG״~=79sѾ?\ l{D~5'9 Wڅ$]%^++H%(@M,/,F?I%bŸH-*~M@PyGPֆϛ6?^I5;ZKKPyaL\|"'t#-60fOH0='ǣߨiϩ:Ŷ _s 7`2a|21U~$b.cډ'$If޽yiR)m ]R AtSj•7W'uPHP+MϧEǚR:~|F_:hOt/Grn) sοFm4XY1߽8 =RJ'hM `+}[@l0 h?|孷ܳH(GI$eKQ%z&HX' Dj/vdBEh,43Cv0IѰ21: ٞbuםXv s u9m۶-IGA? ky~X"m>iSdT_Zy 0-)yjͿݴ1ӧ/7e V"DQ¼%l M   Ho11,A~ I #A+(lW0AGBܐy y383.&9%th@W1MCFɸtك$dΐh5=B_JI՞eԉ;Έ4dqZ@ q[eD@0w%ih Xd 9bAINRD ^SL~0@9/30$ dWF/s* epH6 (Pf!mYEϣj,XANy?Zw + k9rrF9n"vDYڳz~hsjz0-G7~[]&CP#-kNTo'hiz[Sߧ&@tnLrяdXd#gI'R:u&"E`ڏjM˶O$ J1y>t"Nb@ ?끠.#W=T~H `}:@VJ:ucPݞi5pN-/CՌ)6>,x#]Ob׊#Ωe^>ui̯֬v<>%'4 A& =N'7v_HQmm"*y:+y4/#S GlRpA9]k#+Kl/ϣtD֛ef1r5w3r+MkIف7\ppg`_2NQerҰ<AA$bOH}{iʔ}HI)(I}唕1DDI&r}gU'}|BNixSH*ɫo7R9h8c_RT ])]^58v___̑LxqlY\ЃǤW>ǃ'CR:l7zg3_sUoQY3ERd-iХJ`Ay4OuI[%P:Bx(T^d-i #=u:޾73̛ܝ4:b;צ3GO&)|u ݯƑMae̎acek+ 73!KQQݬ#b:mb<^+|,85%e?w!Kt~m 8j뱖^$:;{O` \sN`kvr9ڎ TYjv @XXN\#ylv>**ahI;C#`Cj{TU2x?yTJg-RtPy?T V~2] .YQ{尷,JB5OWǩ[ms=h*; F]tWn(Y3PV"f?A~‹SFLт{_6к^l2"i+P˺]5Ex|I|hkf>i*3($LyE/'c~DKRN&^!xwU&d;J`VQuv╕()-C;g&3-+Y j}3C_ ;Q?*mJIENDB`pychess-0.12beta3/glade/board.svg0000755000175000017470000002227212161415523015763 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/panel_book.svg0000755000175000017470000005225612161415524017013 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/dock_top.svg0000755000175000017470000000654612161415523016504 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/panel_comments.svg0000755000175000017470000004151212161415524017677 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/PyChess.glade0000644000175000017470000060737312175472633016551 0ustar tamasusers False 5 normal Chess client for the Gnome desktop http://code.google.com/p/pychess http://code.google.com/p/pychess PyChess is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. PyChess is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PyChess; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA about.png False False False True end 0 100 1 1 10 False 7 Game information True pychess dialog True False 5 True False end gtk-cancel False True True True False True False False 0 gtk-ok False True True True False True False False 1 False True end 0 True False 4 2 2 True False True False 2 0 none True False 58 True False 1.1175870895385742e-08 3 x-office-address-book False True 0 True False 3 4 6 4 True True False False True True 1 2 1 2 True False 0 Event: 1 2 GTK_FILL True False 0 Site: GTK_FILL True True False False True True 1 4 True False 0 Round: 2 3 1 2 GTK_FILL True True False False True True adjustment1 1 3 4 1 2 True False 0 White: 2 3 True False 0 Black: 2 3 2 3 True True False False True True 1 2 2 3 True True False False True True 3 4 2 3 True True 1 True False 3 <b>Game data</b> True False True 0 True False 2 0 none True False 58 True False 0 3 x-office-calendar False True 0 True True True True 1 True False 3 <b>Date of game</b> True True True 1 True True 1 game_info_cancel_button game_info_ok_button True False gtk-new True False gtk-missing-image True False gtk-missing-image True False gtk-network True False gtk-fullscreen True False gtk-export True False gtk-connect True False gtk-connect True False gtk-open True False gtk-save True False gtk-save-as True False gtk-undo True False gtk-refresh True False gtk-fullscreen True False gtk-info True False gtk-directory True False gtk-directory True False gtk-directory True False gtk-directory True False gtk-open True False gtk-open True False gtk-open Default Knights Beep Select sound file... No sound uci xboard False 9 Manage engines dialog True False 3 True False end gtk-close False True True True True False False 1 False True end 0 True False 12 True False 0 none True False True True never automatic in True True False False True 0 True False True False True False 5 2 3 3 True False 0 Name: GTK_FILL GTK_FILL True False 0 Command: 1 2 GTK_FILL GTK_FILL True False 0 Protocol: 4 5 GTK_FILL GTK_FILL True False 0 Parameters: 2 3 GTK_FILL GTK_FILL True True Command line parameters needed by the engine. True False False True True 1 2 2 3 GTK_FILL True False True True Unique name of the engine used in player popup lists. True False False True True 1 2 GTK_FILL True False True False True False Engines use uci or xboard communication protocol to talk to the GUI. If it can use both you can set here which one you like. liststore3 True False 0 1 2 4 5 GTK_FILL True False 0 Working directory: 3 4 GTK_FILL GTK_FILL True False The directory where the engine will be started from. 1 2 3 4 GTK_FILL True False True False False False False False True True 1 2 1 2 False True 0 True True automatic automatic in True True liststore4 True both True True 4 1 True True 1 True True 1 True False 3 start gtk-new False True True True True True False False 0 gtk-copy False False True True True True False False 1 gtk-delete False True False True True True True False False 2 False True 2 engines_close_button False 7 Preferences pychess True False 8 True True True False 3 True False 6 12 True False 0 none True False 3 12 True True The displayed name of the first human player, e.g., John. False False True True True False <b>Name of _first human player:</b> True True firstName False True 0 True False 0 none True False 3 12 True True The displayed name of the guest player, e.g., Mary. False False True True True False <b>Name of s_econd human player:</b> True True secondName False True 1 True False 0 none True False True False 3 12 True False 3 _Hide tabs when only one game is open False True True False If set, this hides the tab in the top of the playing window, when it is not needed. True True False False 0 Auto _rotate board to current human player False True True False If set, the board will turn after each move, to show the natural view for the current player. True True True False False 1 Face _to Face display mode False True True False If set, the black pieces will be head down, suitable for playing against friends on mobile devices. True True False False 2 Sho_w cords False True True False If set, the playing board will display labels and ranks for each chess field. These are usable in chess notation. True True False False 3 Show _captured pieces False True True False If set, the captured figurines will be shown next to the board. True True False False 4 Prefer figures in _notation False True True False If set, PyChess will use figures to express moved pieces, rather than uppercase letters. True True False False 5 True True 0 True False <b>General Display Options</b> True False True 2 True False 0 none True False 3 12 True False True False 3 F_ull board animation False True True False Animate pieces, board rotation and more. Use this on fast machines. True True True False False 0 Only animate _moves False True True False Only animate piece moves. True True fullAnimation False False 1 No _animation False True True False Never use animation. Use this on slow machines. True True fullAnimation False False 2 True True 0 True False <b>Animation</b> True True True 3 True False _General True False True False 3 True False 6 12 True False 0 none True False 3 12 True False 12 True False Use opening _book False True True False If set, PyChess will suggest best opening moves on hint panel. True True True True True 0 True False 12 True False 3 True False Polyglot book file: False False 0 True False True True 1 True True 1 False False 0 True False Use _local tablebases False True True False If set, PyChess will show game results for different moves in positions containing 6 or less pieces. You can download tablebase files from: http://www.olympuschess.com/egtb/gaviota/ True True True True True 0 True False 12 True False 3 True False 5 Gaviota TB path: False False 0 True False True True 1 True True 1 False False 1 Use _online tablebases False True True False If set, PyChess will show game results for different moves in positions containing 6 or less pieces. It will search positions from http://www.k4it.de/ True True True False False 2 True False <b>Opening, endgame</b> True False True 0 True False 0 none True False 3 12 True False 12 True False Use _analyzer False True True False True True True False False 0 True False 12 True False True False True True 0 True False 0 The analyzer will run in the background and analyze the game. <b>This is necessary for the hint mode to work</b> True True False False 1 True True 1 False False 0 True False Use _inverted analyzer False True True False True True True False False 0 True False 12 True False True False True True 0 True False 3.7252902984619141e-09 The inverse analyzer will analyze the game as if your opponent was to move. <b>This is necessary for the spy mode to work</b> True True False False 1 True True 1 False False 1 True False <b>Analyzing</b> True False True 1 1 True False _Hints True 1 False True False 3 True False 6 0 none True False 4 12 True False 5 True True automatic automatic in True True False True False True True 0 True False 4 True False True False True False 0 0 True False 2 True False gtk-add False False 0 True False Install new True False False 1 True True 0 False True False True False 0 0 True False 2 True False gtk-remove False False 0 True False Uninstall True False False 1 True True 1 False True False True False True True False 0 True False 2 True False gtk-ok False True 0 True False Ac_tive True False False 1 True True 2 gtk-about False True False True False True True True 3 False True 1 True False <b>Installed Sidepanels</b> True 2 True False Side_panels True 2 False True False True False 0 none True False 12 True True automatic automatic True True 3 True False Themes 3 False True False 3 True False 6 12 True False 5 _Use sounds in PyChess False True True False True True False False 0 False 0 none True False 3 12 True False 4 True False liststore1 0 True True 0 True False <b>Sound Theme</b> True False True 1 True False 0 none True False 3 12 True False 11 3 3 3 True False liststore2 0 1 2 GTK_FILL True False 1 2 1 2 GTK_FILL GTK_FILL True False 1 2 2 3 GTK_FILL GTK_FILL True False 1 2 5 6 GTK_FILL GTK_FILL True False 1 2 6 7 GTK_FILL GTK_FILL True False 1 2 7 8 GTK_FILL GTK_FILL False True True False True False gtk-media-play 2 3 GTK_FILL False True True False True False gtk-media-play 2 3 1 2 GTK_FILL False True True False True False gtk-media-play 2 3 2 3 GTK_FILL False True True False True False gtk-media-play 2 3 5 6 GTK_FILL False True True False True False gtk-media-play 2 3 6 7 GTK_FILL False True True False True False gtk-media-play 2 3 7 8 GTK_FILL True False 0 A player _checks: True 1 2 GTK_FILL True False 0 A player _moves: True GTK_FILL True False 0 Game is _drawn: True 7 8 GTK_FILL True False 0 Game is _lost: True 6 7 GTK_FILL True False 0 Game is _won: True 5 6 GTK_FILL True False 0 A player c_aptures: True 2 3 GTK_FILL True False 3 3 4 GTK_FILL GTK_FILL 3 True False 0 Game is _set-up: True 4 5 GTK_FILL True False 1 2 4 5 GTK_FILL GTK_FILL False True True False True False gtk-media-play 2 3 4 5 GTK_FILL True False 0 _Observed moves: True 9 10 GTK_FILL True False 0 Observed _ends: True 10 11 GTK_FILL True False 1 2 9 10 GTK_FILL GTK_FILL True False 1 2 10 11 GTK_FILL GTK_FILL False True True False True False gtk-media-play 2 3 9 10 GTK_FILL False True True False True False gtk-media-play 2 3 10 11 GTK_FILL True False 3 8 9 GTK_FILL 3 True False <b>Play Sound When...</b> True False False 2 4 True False _Sounds True 4 False True True 0 True False end gtk-close False True True True False True False False 0 False True 1 True False Pychess pychess True False True False False True False _Game True False _New Game False True False True image1 False Play _Internet Chess False True False True image2 False True False _Load Game False True False True image3 False False True False Load _Recent Game True False False Open _Database True False False Setup Position True False True False Enter Game _Notation True True False _Save Game False True False False True image4 False Save Game _As False True False False True image5 False _Export Position False True False False True image16 False True False gtk-properties False True False False True True accelgroup1 False False Player _Rating True True False gtk-close False True False False True True accelgroup1 gtk-quit False True False True True accelgroup1 False True False _Edit True False False True False _Engines True gtk-preferences False True False True True accelgroup1 False True False _Actions True False False True False False Offer _Abort True False True False False Offer Ad_journment True False True False False Offer _Draw True False True False False Offer _Pause True False True False False Offer _Resume True Offer _Undo False True False False True image6 False True False False True False False _Call Flag True False True False False R_esign True False True False False Ask to _Move True True False False True False Auto Call _Flag True False True False _View True False _Rotate Board False True False False True image7 False _Fullscreen False True False True image8 False Leave _Fullscreen False False True image13 False False True False False _Show Sidepanels True True False True False _Log Viewer True True False False True False False _Hint mode True False True False False Sp_y mode True False True False _Help True False False True False About Chess False True False How to Play False True False Translate PyChess Tip of the Day False True False image9 False True False gtk-about False True False True True accelgroup1 False True 0 True False True True 1 pychess-0.12beta3/glade/piece-unknown.png0000755000175000017470000000576312161415524017452 0ustar tamasusersPNG  IHDR.0neHsRGBbKGD pHYs f fItIME3 sIDAThřkpyvWJde0 % SK;ng4С:ih駦/ⴄ$L3'NY3XlIV+~F W2gy/γy9+xKeI&#h?Zmq:Bn@U<c;,8qR==}www Iʹe۶~(r24166iĪcߨ=}ۍ)۶K $IȲatv0 8pBޞBU@몪^d2;5Mc6)))AQ,R=ΟL&UA k391$I;;wVLoWU;:uD"i133 ##P]]M(;R&EEBx&m*YB  `  Nl*݂u]DCC#X5eqe\]uVd2xKMM H xwwWQ:> P[[ իWI/xhMu b@Gw=o+^@0`ttMݝo(fDvwn]HZ0@,FH|^^^ݏZ z' .}qr18QWWG4]v~㼘ʇ$t \ݾPP nY)EU9H7ghii!P]]M4]"JKK9rU+tAYIŒ 3~y{ !mȲpMӸr TW8ϱažILGb b;6wƍ=}'dzrKw6ԣiyͼzyy=2Ciu9yDNU(b|!Yk(l͛7Uq+<^r˶PUݿ$gz{NhC+䡗^>-!4Sf$Il۶MӈyssrawlMcǏ6?V_b\blQ+**سe144~CKauxDz.z?jݴs_ض9[0 t: T "ط4m=L*7TUP}*7oPC;;wُVU<۲,bxx bII3$,C_P7o?<N?kg_zЕ}BQS6U..]bjjjV/Į]+xn:)sw|\:#;Ξ9}vO8κu>N2$,l qr !.Js{޹;9WSM)bjlBkk :x㷂Ŝk$7B;2-* Y~xs1eIl X#'d{:eV^vs&f()  QT5_,T=Upb_קO8R扙xbpleJuk߰~ >l7:~ݏO}>4͇(Ȋ<9cx8ظK4ua3x#q8Пß=ojXUUQJQJEdY !'87slۙYhkYޡ/2BzBUE *P/K /=ps@8-6` !,IdiI+xb H@YPޡ@}mYS/et~>v0+g鬙ϜWU,7wHVŢ-ْ \>"O@?=u@ڱBƖ,IENDB`pychess-0.12beta3/glade/dock_star.svg0000755000175000017470000000500212161415523016635 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/piece-black.png0000755000175000017470000000476012161415524017023 0ustar tamasusersPNG  IHDR.0neHsBIT|d pHYs P P<{tEXtSoftwarewww.inkscape.org< mIDATh[lgfw]lîml@l@BM@9n^WR+UV}h+JPVQZ6I)l _/8K^g,ƗY>̜3}155œmvp-7}NȲicT52l\Qx& TTTJ%䓫LNN (c@$dYrqėq\+U>ZT52%\ x rv;U<(a x x'q:]$333,//<#mػwd0 Pb=+ϟt1??DRhh48B!^ULOOȎVڑ+JÇzY\\2J K{|x,?MM{Cin߾E4Ro[1,+J @mm-$"Qәet\vVCE 6k-t4hZWY]]g(++8 nVر!X ð<宩|FgqݼI$IPrmMYPQQ@, C't: ׫g<N[iܹ3@CCyxcSiq1JKKKzgS?6dg+snf{j%M(//47+!nF(םY,yO("lt?AIɃ0 q cс){n3::aF4xii>.\蠷`brr_LW.݈`qqoX0 n߾ ds7o hUHo1 ,ʀl&da̘|&lh[cd&9{G~|>nYaِeY&] Of2 LSSS;70rׄkHҼf۱ddfzM0 ]70 Mu0ud2ܜy2sK7%`9W.uvKC~k[=nUr\nIj!)P!S"ĪntS/'}@< ,wvK*IVnԺ YPJ,2ILBE9ٮhZ&g\RBtTf8Aǁxgǹ6q<.63Gdirx!ZK,aZgǹ|e |Gh*rT|[ oΎs4m,xWzuv[5e1ꍛAIENDB`pychess-0.12beta3/glade/fics_lounge.glade0000755000175000017470000063066012172773406017465 0ustar tamasusers 1 240 15 1 10 60 10 1 10 124 40 1 1 1 1 120 8 1 1 3 False 5 Challenge: <Player> center True pychess normal True False 1 True False end gtk-cancel False True True True True False False 0 False True True True True True False 0 0 True False 2 True False challenge.png False False 0 True False Send Challenge True False False 1 False False 1 False True end 0 True False True False <big>Challenge:</big> True False False 0 True False 7 gtk-orientation-portrait False False 1 True False <big><b>mgatto</b> (1337)</big> True False False 2 False False 1 True False 5 12 True False 10 True False 3 3 3 False True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 GTK_SHRINK | GTK_FILL False True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 1 2 GTK_SHRINK | GTK_FILL False True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 2 3 GTK_SHRINK | GTK_FILL True False 25 Lightning: False True True False True True challenge1Radio 2 3 GTK_FILL True False 25 Standard: False True True False True 0.47999998927116394 True challenge1Radio 1 2 GTK_FILL True False 25 Blitz: False True True False True 0 True True GTK_SHRINK | GTK_FILL True False 35 True False 0 2 min, Fischer Random, Black True 1 2 2 3 True False 35 True False 0 10 min + 6 sec/move, White True 1 2 1 2 True False 35 True False 0 5 min True 1 2 True True 0 False False 2 button1 sendChallengeButton False 5 Edit Seek center True pychess normal True False 2 True False end gtk-cancel False True True True True True False False 0 gtk-ok False True True True True True True False False 1 False True end 0 True False True False 0 none True False 3 4 True False True False 0 0 5 5 stock_alarm.svg 6 False False 0 True False 0 12 True False 3 Untimed False True True False True True True 0 True False 21 38 True False False True 1 True False 2 4 True False 2 True True False True False 0 Minutes: False True 0 True True False False True True adjustment1 False True 1 True False 0 Gain: False True 2 True True False False True True adjustment2 False True 3 True True 0 True False True False Time control: False True 0 True False 0 Standard True True 1 True True 1 True True 2 True True 1 True False <b>Time Control</b> True True True 0 True False 0 none True False 3 3 True False True False 0 0 5 5 48 weather-clear False True 0 True False 0 13 True False 3 Don't care False True True False True True True 0 True False 21 38 True False False True 1 True False 2 4 38 True False True False True False True False 1 4 True False True False Your strength: False True 0 True False 0 2 weather-few-clouds 1 False True 1 True False 0 1 1200 False True 2 True False 5 (Blitz) False False 3 True True 0 True False True False True False 0 Opponent's strength: False True 0 True False 0 2 weather-clear 1 False True 1 True False 0 1 1000 False True 2 True False - False True 3 True False 0 2 weather-overcast 1 False True 4 True False 0 1 1400 5 False True 5 False True 0 True True 1 True True 0 True False When this button is in the "locked" state, the relationship between "Opponent's strength" and "Your strength" will be preserved when a) your rating for the type of game sought has changed b) you change the variant or the time control 20 False False 1 True True 0 True False 4 True False True False True False Center: False True 0 True False 3 True False 0 2 weather-few-clouds 1 True True 1 True False 2 True False 1200 True True 2 False True 0 18 True True adjustment3 0 False left True True 1 True True 1 True False True False True False Tolerance: False True 0 True False 3 2 True False 0 1 ±200 False True 1 18 True True adjustment4 0 False left True True 2 True True 0 Hide False True True True none 0 False True 1 True True 2 True True 2 True True 1 True False <b>Opponent Strength</b> True True True 1 True False 0 none True False 0 3 True False True False 0 0 10 5 piece-unknown.png 5 False True 0 True False 0 7 True False 3 Don't care False True True False True True True True True 0 True False 21 38 True False False True 1 True False White False True True False True True nocolorRadio True True 0 True True 2 True False Black False True True False True True nocolorRadio True True 0 True True 3 True True 1 True False <b>Your Color</b> True True True 2 True False 2 0 none True False 0 3 3 True False True False 0 0 5 5 48 gtk-preferences 6 False True 0 True False 10 True False 3 Play normal chess rules False True True False True True True True True 0 True False 21 38 True False False True 1 True False Play False True True False True noVariantRadio False True 0 True False 0 1 70 True False liststore1 on 0 False True 1 False True 2 True True 1 True False <b>Chess Variant</b> True True True 3 True False 0 none True False 0 3 3 True False True False 0 0 5 5 document-properties.svg 6 False True 0 True False 0 12 True False 3 Rated game False True True False True True False True 0 Manually accept opponent False True True False True False True 1 True True 1 True False <b>Options</b> True True True 4 True True 1 button15 button16 True False PyChess - Internet Chess: FICS pychess True False True False False False 0 True False 12 12 True False 12 True True True False 6 6 True False True False 0 6 0 Active Seeks True True 0 False True False True True True True True False 6 _Clear Seeks True False False 1 False True False True True True True True False 6 _Accept True False False 2 False True False True True True True True False 6 _Decline True False False 3 False True 0 True True never automatic True True True True 1 True False False True 2 True True True True False 3 12 True False 10 True False 3 3 3 False True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 GTK_SHRINK | GTK_FILL False True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 1 2 GTK_SHRINK | GTK_FILL False True True True True 1 True False 0 0 True False 2 True False gtk-properties False False 0 2 3 2 3 GTK_SHRINK | GTK_FILL True False 25 Lightning: False True True False True True seek1Radio 2 3 GTK_FILL True False 25 Standard: False True True False True 0.47999998927116394 True seek1Radio 1 2 GTK_FILL True False 25 Blitz: False True True False True 0 True True GTK_SHRINK | GTK_FILL True False 35 True False 0 2 min, Fischer Random, 1800↓, Black 1 2 2 3 True False 35 True False 0 10 min + 6 sec/move, 1400↑, White 1 2 1 2 True False 35 True False 0 5 min, 1200-1800, Manual 1 2 True True 0 True False 6 end False True True True True True False 0 0 True False 2 True False seek.png False False 0 True False Send seek True False False 1 False False 0 True True 1 True False Create Seek False True 3 True False _Seeks / Challenges True False True False 6 2 2 True False Rating 90 GTK_FILL True False 1 2 True False Time 1 2 1 2 GTK_FILL 1 True False Seek _Graph True 1 False True False 6 6 True False True False 0 6 0 Players Ready True True 0 False True True True True True False 0 0 True False 2 True False challenge.png False False 0 True False Challenge True False False 1 False False 1 False True True True True True False 0 0 True False 2 True False gtk-find False False 0 True False Observe True False False 1 False False 2 False True True True True True False 0 0 True False 2 True False user-offline False False 0 True False Start Private Chat True False False 1 False False 3 False True 0 True True never automatic True True True True 1 2 True False _Player List True 2 False True False 6 6 True False True False 0 6 0 Games Running True True 0 False True True True True True False 0 0 True False 2 True False gtk-find False False 0 True False Observe True False False 1 False False 1 False True 0 True True never automatic True True True True 1 3 True False _Game List True 3 False True False 6 6 True False 6 False True True True True True False 0 0 1 True False 2 True False 1 gtk-media-play 1 False False 0 True False Offer _Resume True False False 1 False False end 0 False True True True True True False 0 0 1 1 True False 3 True False 1 gtk-media-stop 1 False False 0 True False R_esign True False False 1 False False end 1 False True True True True True False 0 0 1 1 True False 2 True False Offer _Draw True False False 0 False False end 2 False True True True True True False 0 0 1 1 True False 2 True False Offer A_bort True False False 0 False False end 3 False True True True True True False 0 0 1 1 True False 3 True False gtk-find 1 False False 0 True False Pre_view True False False 1 False False end 4 False True 0 True True automatic automatic True True True True 1 4 True False _Adjourned True 4 False True True 0 True True 0 True False 12 True False 0 none True False 3 12 True False <b>[Username]</b> True False True 0 True False 0 0 0 True False 0 none True False 3 12 True False True False <b>News</b> True True True 1 True False 0 none True False 3 12 True False 3 Show _Chat False True False True True True False False 0 Show Console False True True True True False False 0 _Log Off False True True True True False False 1 True False <b>Tools</b> True False True 2 False False 1 True True 1 Asymmetric Random pychess-0.12beta3/glade/16.png0000755000175000017470000000141412161415523015102 0ustar tamasusersPNG  IHDR ͣ9bKGD pHYs }eYtIME :8IDAT(eMHTQs̹W4gFTufRk%ʈ@!hg uX E)hpY)GQ+\8?wp̙w~/Q`9> Il6$ >M oa_@$I$IbmmRK)Y.q{N>˽0M󲦅M% HmW޾^sttB)*U R4-f}x<`@Vy눢(k[$`jjxˑc1fI(@LSKFڰQJcp\i3eYviDw^B Kd\eNsų ~u kxuuғ~_"爬|ЧnO%C˲LF`؜.mŌybs>0jPe~WWgyEE PUa+ˑ M /kmjj/p+ )WA776{;3bRuf#WW^=@B=&@ @X"9xp-GIENDB`pychess-0.12beta3/glade/newInOut.glade0000644000175000017470000022302512161415524016716 0ustar tamasusers 1 21 20 1 1 1 1 21 20 1 1 1 400 310.5 345 225 0.90000000000000002 1 False 6 New Game pychess dialog True False 6 True False end gtk-cancel False True True True False True False False 0 False True True True True True False True False 0 0 True False 2 True False gtk-ok False False 0 True False _Start Game True False False 1 False False 1 False True end 0 True False True False 6 True False 2 0 none True False 3 True False 58 True False 0 5 5 stock_people 6 False True 0 True False 4 2 12 1 32 True False 1 2 2 3 32 True False 1 2 True False 0 _Black player: True blackPlayerCombobox 2 3 32 True False 0 _White player: True whitePlayerCombobox True False 4 18 True True adjustment1 0 right True True 0 True False weather-few-clouds 1 False True 1 2 3 4 True False 2 True False 4 18 True True adjustment2 0 right True True 0 True False weather-clear 1 False True 1 2 1 2 True True 1 True False <b>Players</b> True True True 0 True False 2 0 none True False 3 True False 58 True False 0 5 5 stock_alarm.svg 6 False False 0 True False 3 _Untimed False True True False True True False False 0 True False 21 21 True False False True 1 True False Blitz: 5 min False True True False True True notimeRadio True True 0 True False 0 0 21 21 True False gtk-properties 1 False True 1 False False 2 True False Rapid: 15 min + 10 sec/move False True True False True True notimeRadio True True 0 True False 21 21 True False gtk-properties 1 False False 1 False True 3 True False Normal: 40 min + 15 sec/move False True True False True True notimeRadio True True 0 True False 21 21 True False gtk-properties 1 False False 1 True True 4 True True 1 True False <b>Time Control</b> True True True 1 True False 2 0 none True False 3 True False 58 True False 0 5 5 gtk-preferences 6 False True 0 True False 3 _Play Normal chess False True True False True True True True True 0 True False 21 21 True False False True 1 True False Play Fischer Random chess False True True False True True True playNormalRadio True True 0 True False 21 21 True False gtk-properties 1 False True 1 True True 2 True False Play Losers chess False True True False True True True playNormalRadio True True 0 True False 21 21 True False gtk-properties 1 False True 1 True True 3 True True 1 True False <b>Chess Variant</b> True True True 2 True True 0 False 2 10 140 True False 0 none True False 2 12 True False 2 True False False True 0 True True automatic automatic in True True False True True True 1 True False <b>Open Game</b> True True True 0 True False 0 none True False 2 12 True False True False True True 0 True False True False 1. True False 0 True False False True True False none True False 0 0 True False 2 True False gtk-media-previous False False 0 False False 0 False True True False none True False 0 0 True False 2 True False gtk-media-rewind False False 0 False False 1 False True True False none True False 0 0 True False 2 True False gtk-media-forward False False 0 False False 2 False True True False none True False 0 0 True False 2 True False gtk-media-next False False 0 False False 3 True False 1 False True 1 True False <b>Initial Position</b> True True True 1 True True 1 225 False adjustment4 adjustment3 225 400 223 100 True False 0 none True False 4 1 12 True True automatic automatic in True False <b>Enter Game Notation</b> True 2 2 24 24 True False 199 -1 True True 2 False True 1 button15 button16 pychess-0.12beta3/glade/random.png0000644000175000017470000000061212161415524016131 0ustar tamasusersPNG  IHDRagAMA atIME ?+.IDAT8O_KP*BKlYI x% (vR,*( .Atگtgځg >řy&)a@ 1gCΆrU V]m-ᬕAWLY)llV8hGR+B'ڀa +Q7e(:*prڂTA\ .zEE|Ȱ: Q˫2:*pۿFڶc̹$g3|F|]jbd-a./xh7t-,#Q?_yjJIENDB`pychess-0.12beta3/glade/panel_engineoutput.svg0000755000175000017470000005236712161415524020612 0ustar tamasusers image/svg+xml pychess-0.12beta3/glade/stock-vchain-broken-24.png0000755000175000017470000000060112161415524020744 0ustar tamasusersPNG  IHDR (sRGBbKGD pHYs  ~tIME h IDAT(ϵ1KPNnN"!CPEP[J5GdrHR <sϽ=.5@TA{JP]q46 CV(:jpiɳ2mz'M>th`׊>>۶>\iںѺa g)E?5Qg False 12 Tip Of The day pychess True False 6 True False 0 none True False 6 18 True True never automatic True False none 275 True True 0 0 True True True True 0 Show tips at startup False True True False True True False False 1 True False 6 end gtk-go-back False True True True False True False False 0 gtk-go-forward False True True True False True False False 1 gtk-close False True True True False True False False 2 False True 2 pychess-0.12beta3/glade/globe.png0000755000175000017470000016106612161415524015757 0ustar tamasusersPNG  IHDR\rfsRGBbKGD pHYs B(xtIME  Mj_ IDATxyeWUTCSzHwg̓!@AFQ'*(*/L !NNU5ᜳ9! $?U}֭{kgZX ka-ZX ka- K,|kKKih%+k$jbUFb)+ak !Ɛ). u K8;k;b(8@5Rmnu`ri>u~?ڼvꤖ;/z,SJ1X9/8΁X!ugAC8b9swpڅ+nVQw?z Wk,G~]_#dtQgԳH\'p!$8Bp9NN`åvNpX+ւ 3FP`u3v|UiկM/\N^YS[R~X]cp TH)BBH R!7|CkT2V׌4c E{gwPJ !a 5XWk~o,)qgΆBvf:绅N:鏯oj/8:%oI{;c]#nU8!H$JIH)ZpB,Q"FV*iFX]1R()|Z.\|)ztwC >'skqֆ LAQ8k1;?.+>s/vÂxJU/|ƅ+W,fdtmRH#[{(CJT8!B`7 jSl\aIJ}D^U~|&%Yra=@ETxs`]pbQ1`]3;kq;擇۽Ⱥ??Kj_W=g\igu &#j1iypp= '}.%>/,]s겄S֕+iI= wZ sng;T'G)}4kCz'` !Sxǐgk;^nr/ g| kW,yYѨ&N""EqIӘ ۗs瞌<78[lXj:݃S;k;vӂX.|˟˞cbБ& :$IDhqR29+@!㔱uKb.H"- l |w{"Ż>ٞAJ1dԃFn@$JGEQENy*د=sû]ۿZϿp]x)%E&c$%4QĚ(VLu%;' 6t K;tse60Ź*"6GkIUˇٹW?܌-&(S(cr6Xܚ??ha-8'|]׬y_/}#$&Mj$ DvNdT558韰 $q.EkȐv??sR;@Br_P c<+pENasCΙ? o/zۺ˞sO%XJ$IL%j1Jv3ȭ#-+sxs` ڜrʔ8=|.:~k.Tϓ E `(pE0"S⣦w'~~[/Ux ~fhˣ5,jE4 I[wLv /8o}{ 'pc!زh )L ,S3şvzЧ]?4/y[W/OPQD4k)4%MbIHC3сv <{ιA/J=ƀs|ߩ5\z'`=\Ͳ %"Vt <pbИF}ISc,AQd,0ZM~lo^ص'^j#8zͯwU_jZ)ҴNZkPOkD:JDb Ynɍ o !Hj[i9osoɉ+҂IH׎ pX"S'8C6I{)RgI#FW9r,ޅ齗]zeg$6N(i4j1zh=fg9q!:Mŀ1a(Oor@4pFH/iHy'wE%OD'9s1r^S"(<1ǎOvBpky[_{xG1k."!Ji6F8ke̺19:')~!RHJzCٶLƺ%q1ќ"]DD+:CѮG:Лs#BJ(THT )k|CkUm7,,8㯗㣯x _zZ3jp17iE#)hÓt,ZbhPt( !o[9<ӎq&w?4fU'7$:ɶ}mHav<)yqB0 'o )d4ĊĚgz7v8jz[NyϾ-mTIh6X<⬵#45P" {/k`XĚ11bɈbk4Dt$}Lin ;)D~,Eh28N>|059oEm֑CVxnT]~Ǫf,_2Y՗~Ʌ]xo"Qr܅ޫsc]?Gz[>1K}nإ8p繡q6Q/t?K)@JPRb֭;5$qL#D]p S| ~8zR^\GB%ak%87`ly wݷ'Y ^Sd7+65?aG&j5j4ҘS1'Tfb/!dw2iFK[4 {C=G SX8) Y^e={(Fc(|L3T8't~nv:RhDHTQpzP<6$}Cc(x a~WH5oi\yYa1#EQ$JJ;=o/wl˖{A;w_{kyϯ oH*vɚfsZ$IHӘ$ɡ`bӲCOYpS^=-V*ش<+3XLL܂^g`Ck(rCx֙ D>rpC/@Kևsغk(}_ %"D$( ; uyhG&<%7)A/w{Dh_!aCȲ [d=4۽-S7$[=/JEK[W*FZkP%h➃%#1kǤ--LwH33`Z8eLvI%J|@\;]G,{@ᬗXGVyk,kE?DJ.[퇘DJc}ز\o&wJ#>(0יKn-nƯЙq^n)U8SqsWe)rLr|'0lh7o=B?O\5_kFӤZ=%M5$AJ(;J֎Ė'2vNZz#ys8"sNdl\^J V"Yր3`o~٧Y'mIl'8xѷ5֨FFUBipƪ&>ՑkHJV#b/ADy(i{PPF:mԁx% Ne H!( R%x̞X9ҳWv+?x;gׯ}S}RHC\k}Ѩu7=Mqzn3=GKl+<J*+HFkpF;7P+c7`t}-)*q+VXZi h'}sI/^م{t·'ZCzzA6h>-O͞Ul;篍= ²sp!Kf.u|#VH6,,o &gsvMf{XyezBk2c Cn^/E׎xqS5FR^rU)`8ұ&gG+"*}mE `An2݌SԫBN)884ai]x9tz= ա4e.?5mKWs%_ӵcǣ$^h6i4uX#B jFRppVJ2۵3Sg +p>tɶ rT$L@FHA)t!DE+"/v#l\$QQ8ևpBӬH҄4NHkH7X-%JP/5 <.Q6!c,ڬYRD8o=IcVw9b7tT7_p/5WJ-MAE^2,#3)p΢%hnϒ$1 ^vz8{Y f4KLe:\t2g09XKS>y'_|+_ع?|_kFyE$k f8/ZI`~WwEuWbΏH.w7}C8 K`qg-]LV]|e!lh%@Ka &/zLLfL}g؜eמ]zPJ#UH.\~)RdGNs |C8$R+YHM:5}VdY.۷ořȝ-i$5H)Ȳ,)L1oʣh~#7rI$' si2qđ{sֺEı(@dYNM%|%go=>)&=)O~=?}_2^zYIՉu!C3/V@ GeK-6Luqܲ.YC9WNPXu=-:(#r_u@˾Oo;)Iڜ!#M"o`x|;mzF=ItB^1`.po+,JDKz,czO)Ba鋅82gVEʓ,9S` $d68g('t†~[GYGKqpslsG 1q\NHSo~~>W"MT%*WRb}/B/@"$V^ @GC' Iv8pNY\碍`ݜ߳D]R#3XJ {/ݱZ#9Af,=w%,m2m5zX\qU[xQXj<3Vmg{{n/lп)c5IOf4%5ZJFrI_ڧ+@lceZ,*Rk.X9"=:B`OI'"F  &+eNed+bT;Kwfmh6jIx`J{0zJJpW*+ 2({B Q?JܿBJ+qH"]?XI3WgǾ)m" ,BGeGE67?8O Wv9v偽3lXzCUİqHzYŭ3]n<v\9N5k)q@=}Wb/ .OcQ!N4IH4McɧOu ͜~@y9\ 8wݐ` pPWJ~i N#%od=󞾘KNeߑSGAJU,g|ey:GjU%ZgU5^^KNo5sDH=\uWlhk7.8_+KUUῗ*O49/H?JIoUi着׾W8@%d.eJ%?-k9zi&;^shf#.نF`q=4ï}nw/B|ǃ\}I ZI݂?$+3NPg.^w>ZqG>QuA>Ӯrݶֳ.e#EJ{N5(  <8Bt G1N`8KXviV}|aPOޅ^T]hY!Z+"ŗ!?}/Ӂ{p?Hå3)X9ienfs':r"YTv²ф[ 5HEw3ӝ8^pݻx%#b--۹CI[X:Yγ^Yk1 &`Cy]2m 1^_u?nij`%/rH)3Yȅ J9: hө-R'7i"iD"Gѫ(D0ԃ#pJ䣂WrT!~{G;_y 1V̺u ضg= c}Cf M 㤑 ZQͭs8شf1ٌXX&"za^fzN.̟ 0>(2 ΂\eVف-c$|Hsq(zYחHC׸'JmobO0tz99;_͎CQULD!q!~ P99/6U?PSb0(Zj_4Q X-bCmNC0Lh!.fnw׹=^;@ذ?H-qV'o~YM;bMkmŊIPF,MǼX{cOnŵx ;=ݰX1IkkM OIūP~9;N XM~\bDbc:QniN8;Ӝ-XQwRk9ڟ98cIy1F<؂ 5~ g-k7"Hjbi^;(Ph$;LYksKXS+rLQp`rkX9 łe(9̳ @/DJ0?4SpS8/*g²z<l7đnKX:% .O3fgfaXeMf90X' eg,ݯ8CyIؠߋ"/8mݲ+EMw,8G.}ݯ?g,^JYu㯵>&+ß~̑,r2â:0N~Gw_<<G"Vrz $lȾ b 'e8}P/—A4WO"%,G:/K~c,,3l,Yqn%/ghcD4Mt8ȋ"4e웘9F)fLLe‘^ WfDA^_> v?:%uj5Aژd7$"҉DGKc> K77tzt;߸}3dyN)NVK2'׿7(("HVg1Xkc k,=AveTA$q<ЀPM|"j&"xqOGPY0}aIbt4%#jrcrHMsyb9s2N[/cW{dGs lig"͏<ӖB$$iB M ڃq.s''sdAeA# 8k_O ǯzwI<قzE:*:lI7r C">{)8=&!HHc͒E /i`$Dq9O''ϿLyd{#>q),Q~ُ}Ϯ[ps֩W`< [5@NƱG+@Pn}nC`*ce / GfjrÎ]:FQ0>6Hꡡ'Ĥ"W5Nz$o+bXO ;³0(@*r8{f#LNpƵs. /*}z*#E$A<09W|303oVc}$iL6zn.*^)E卾<-sʈ8f6*Oپ„u 5:>ӍHT\v"qNaqLj*Ρ\hՕbC0p~@J3PM)#dt-nl 3h g>#?`cs{U6 MS0E>޿z˻p~-IHҔ4-)}(xTU ]V%>iFPsrпlq{y`$I),Cfkt D-M)y_б\/|# >1%bwhIӔ'})>/A?4a'0(r?UwO$-.'|soN|UӰȏ{!{Yw"%Al0j "/pų3S;|k|lP>Q~{Ӗ}h %Co^uG|1OD9T'}3Tt%RD:FE1H]҈fGvqGKZ *÷޳gH;0 c$w?85p&;7n+.߆{k&<a olfÓXR7TBpp8!PR w|D IGGo7|q!r5ZGi(>e$IHEH%˟{R_;v$IbwIS-/OG N<%Kq+Lm[8BGQ" PZq:)TiX‘ΨNz~0O?Q!wsC`u*ύt{9NF7f1z*/M#is>%e5;@ taAۦ(*PJ IYտ91R*~x댗~T~⚗ZK_k󜙙)͑yߐY(`| w'QR`&f989tQS7hZIC8T~wp(\ 9QN`<W=Ku-*]2pC_TzC߅g}o<7vl)|%q}`aJ `OO #&'g۹ӑBEUޝWq6-PxZCQL "y3O=ikF?^FkMIjz>Z'3,Q_}Hmt6b=kFjDIuҴ#0~eA'J,ΖQɰ@q BOG"jƀD %גƏ/owX9qEd$ \Br4vm;އcC?) W^z6s0F7{*ӺC\?Rn+XJxFQǝuX;(BG1*xK/g/f'u}OY4:H y ek]SR7lj67~L?N?D38sc# [PjV,!%j:otIp.P"ɳ.RxӖqEZR 8 z))I"g+ߺg7&gAD4-4e fm.;wwgs_{3J70Б* L^J)}]WSڹ7u.|M<틍Z&iJ?LuU-u.?( xd?)4mVEѤVoPIkuO=)u7_`i}0`2"'CWag@<e ˙.?Z-"/ Ɲ$dEF%j5$Eiͷyz6rϻlغܾ/x'W\fmsg^EJZ6}kL9%G =s@ )Iqffbkt{叽 k$qB{eC3PgL/1<6kK{2ZfڀGC o'aN`4e3^*|!v)_k+4!I]>;3O I'71jhZz18d?d/?A+?K|buy ~NA7JT}|1%=S@a%+ 2ӞphbZ=t 43m~?5tڤ9?%5t\Ư|T(c_ oXR4֬Z6ƿ}Z ~ SZ+H3H!0u<"Gp"OO 9gt?ӧ>{{\Rw5|I7V 8-c:)$?Z͓KJopL<}oyÓz&}l_oϙ>̝AYΠ UyeLOO|=e$7b|rjj&:#oqB*2(xlff|k|}N>Ks7Ki>\MFxE'6oxeʵ/kLl(-պNE>E8QΙsJނoiפirWooxR9glN(r_6a zs3 0' `g%v9zё:iN: 1v`&ta*;F `]ggb% MAn]` :/\Q>[IEKh i5)DuvnnїJJ=n$afiilw?ǝku +fE2>m(_dDBz#c2JzwS_iFgdtFkZ $QV6 IDAT1 3R$7Hgm0G@ ~jÜ~7XZGQVLHB$7@ku_E4Z$&II|SG-֥:JZ.=gR nwq )%}pZEbdtwr>HGu#Ȳn'=:&Mk`U:QJp4>E*M#g'8D8p pU=EE8w* OidRWၪk_C @730;5L YW 4D=ȾfZA6:F J}YK mJ8/3_$;_'xUeV )5c@F0 mÈExyb$iMVA2?{?{C'R% Bz恣à 8K9G TkB=hp(˒,/%qW C.=r G_V^+ ܀尝fwwOVP}7^Wjl  A\ RvcOܹ׸p yQS?RRgʮ6B)l) W =ٽ'Nh"TX&.*2% Z/_8g.A`#7IBSUkþ^`+.q|cC^Srx/HǎgyA^n+U1cQHt{~X-Ͽƀ~gikV -2Ak7s"M ӜXvZmFOsZ_Djo~3&짫ɒךd|V/É*Y[( `Xet;d<ơ821E0kT2Apq1H@>*EGД.?7eTGY8G m:Y7-Mղ@mop`}9 Q?ocNF ZR=>o+%"N7J!T<-񠹖 7:A=Kfzʢ$qSs }x3 HC?V*|!-jd!>eY e t`G)hT5 ұwyOVPZ;Z}y!/Q=In/ԇ_X2r3[Y. s `8%Tn``Ւ#jV@l i-xE>ˑwХ $IZ#i 4' v'OLy2O̬PTm9kCǏ}tZIw:UI@kŇ~Q,. H' ޻?W$Zسc'/*#aGTPwݴCRf$iF)MfW֤+B7߀_ !򞿻;YMݮI@U"#d=T[f~K%os<~ VIq?*2n[ /a-AlLj%Oc={غnP! Ƒ˔W%D  έ)-+fv/fdm?;x('l5 ea),so$ZQ7'eTc\h ʲ2KWʢ@Iq_}z Q=:N+֐$)syV|Y^=ߧ@ՎVd|3d@-i7PjcAjxWSWh*Oc l`V0zi[32ΛPZ;W?k*L њ_{s $?L^Zʨ iJRp-8~>~oWΓ6VQtJk1kIUw!\<{^/kMDeetŇ?$' %T$.6Ɛe٘ۓ*YZZI[Y: *3BZcQl}WsM_<]7hhTE0tNSxA8̈́s`qEz8⻜y(JC5ORaǨѣYiJܺ8w B鯴F+!ߢ꠵]dss1 8Pr{ Z? *zp)4EIбOͯd-1  K%dœ(׭*`j\vM|eiߦsͺY47!lpEwpZ\t?|4KM'K٥An\*ҒJZ1 7VRو*ߢ(@XFKV5`5R~ 1؟$XaVI1y(N)^ϝ嵋}dюJ,A !Z(~!$~ aٸߍnj.c15Q٠LІwg G[ໃ^%qKYSɓ[ q-"6HS~p8nmgV=)}]*9瞿~C{ pב$cL K@Eޣ3'!gr-y׃GW׆CK=fYe0ׅ>NI/-\#ۡ8弱_#c;h&4LxNf nƓ_|H_{_͈uqeyaU~7?`C8`F4Y55~lwusOqrGWG-<Z+ LfpWJ p2V @&YF&RǞ?5a7]dyƾ#\Š+ϟg./^a]܎sX!Fn8E@IdD*eXm R m:ݘQp>1frY-8\ Y]N:|ۃzs'I2Xʿ#C~? m?iV{'r6@%&)(!I&X[[d[{T^)=|"'Ol MT& Vl}ˋ,h 2tei6J Q̂=sZ:?TvXH=փdVW݉_al4qK#.@~tocߴ cƷn|_/0o$ɹ ?<WZY:RDIng|W_Nnb78YjX6VWwGW"Jqǥh?yϙMҊz)TEIh%X]/QR"G)s !,?|͡wrRs{.rӖB*XméuPWW4$$oU'> :Q5vS| ojCm_7;gnz⯼T࿲zM[# .w uฉM5CKҊTf04k9{~/0CY`x^{g/ ;<>cJ&s=o"0oP Nph z j :i10|If!ܰ] n$]Q9uGnGbUǻ+zeƝy8?q_ 4=D2z0.Ę2כ}FXm_Y? 6]߉RvzV̬f~ұ ,ᱧ^:>Y+cƀFPY ƺ ;Gwl pxuᘯ_3?]Rr^ +R+RH9IbR "IC[4g7 .FJR;TAꍛIN6HVI$'7-8u~F6~fލwc<}SXM%q/\X- phEݚBǷ%,oT﯑W% 2MgH=ì R4/>|gL$A*R%ig'^_W &'.]o&}}5D_CRSq*R6*u H@VZZP\eAZYj1@m*g̛W$g{ l:Ak(on<W{A?Dk/7?O@TJU~MI晗},/?l;6,eo`$Dze8y":"T\ȉ}ku2n:{SH@jASy'ܥ?wnZl[47Q77q{n"I&f&@'+fW#Y7]Sc4߿࿒#vr(X|B+7 OD;{94iw9?}~ ݌D'$ZcOBg?~DF+xM5:Td)'6*Є"7Ƽ^N3Y3U+Q(/$ ]0>V 1V7js`IZ+6 R3Tn0nSk-xRnqy X7;bj} =ѯzwBnF"F' /?%ƞߤM[#VՂ_ cll_{|W'JN{vd8r;SzGSg|/0(Kc憇=‡"K$Ea((k[XcY]Md|,w[iJBc;Dy2-$J*$pf}H$LjG8`lpl_*-ܲ;sCrOK3y;5Nc߬f3@EĚ)~d]{#JV.EyYwM;U$Z& /vǿJCH9 TKQE4%s~*{Òɹ[ B%K{Z=hM&M "$Bx2-dNf)TN[n2,qikƱR^>5 3Nl]"p$9~N;0Q`&&0:_.K ]7s7ԿJj~&o/GvdPn)OLUlgLei.`-ַjҚp-J)J0( ,-tA&w\vFn?#SQmbsJ,L`] tu0 }KXSx@S|ܲFp~lL&p739L _XQlox0!у5rN+ ']  ̣݂|$/8Fqsz-/FUuWclԢ *rP\agAxA;.;7fQQ3 IDATL4 $ zɱ*go?zN|,}mE|߳J/kĿ9e禀f_/Nb688jq5 @r`.\;>\}_[9%MZ SoJӄvja-d jP߮ 2N{SZtq `.J͚xq㋙0O(T K %4casք[Y^YLP,ag'2#}!`xtwfgv@|.&9 4cfr l0,˒?~ AZ_zLkcGXh.藿".l&Imf뢪8M7D+*سi# cv3N1u %<>&>A*AYxљF*zu[Bܾ?$ZFI2 di;nӜl /A$)akzH%TpBvYnkEJ@JD5X$9d$ZrT&IG G^Ѽҏ]/1ͽ2>3c2I`7=iHd*o{X}]Kլ~r&A(1~x/,0{(\<ٙq3*V,՜:Ň? :aXȋQo0>\Zg:+m/F,הHc8zr8ݑز=+GM$DX>*x8ya85Ԅ)Q~RGsx7Nl$X-aU"o~_?Y6 F;e~q7ىqqAcO-V2o?< \{;6vVbGx?7Rk@?bTe+D0 Ifo~IeaKN E4sI%Y\Lie)Z' K(wc\<! Hc{)ҰeNp6v^֥i:-E'Ӝ^7|>X J(DHBPl W;Z[JI.g^Ce IVPq^ qz(XA_Y$ `c,((08}{V@j~'eix}{U‚pO+}:F1A>RgS_y %$/=E>/ª{Ifn;0HQXAL8ܙ{jn](C6 ԣ$TC-Fj F !hsk=>r:"h&%2DvUW,%p;.U FS1)_{sÚ]q``픬(Ԍ4MNmy&#RJ~auoN:,CޠD5qHX@KI6qG~<1  +q Liȑ_ၻ✉Muj*MUByEYCw/?hg=~ŰngȲo~ l zÂAa)C >5"UzؼSl ;@(}9V``m`)'/ ˝*ˊ˚= ˝zc%|ֆ򽹋DAxu/UC+ Ɂ匳±wxyȴR@+^B`D+%'Ƅ8osݹɀh~|l eo) GQXbD@a!׌ߋp-To1A]603 &gTapj _Zq`Eo)arJ6LWsZڃTDTk&%]v3J3 {PYcU$j kMmqy׹oL>@3!Lr˧8X\< q0(,[C'Ns>|$\vhm%^.ރpA X-GliK@T5t6#/w$Z;E*EQqF~,*煬xR;W2 <RTdPk=.>  -AMⲯuKTY-iQpdMh&tK'妃2T—7>_pDs7))ȁ]^鰱5@ї|KN|+2P YIGiOi-y ٭UHN2v\(-6U@㫐_>a=z:S.9.$ܾS]řf"Z9%m0XlPd Lt] Q )t>0+a# Gl~8 s0! Z_,^>Y5k1Ճ~7Bǭy!C?vN;hw$~]("9D\=hd(rEr 4w^tBĪ 0Q1f*Hч.~B.8喵^AHaw߻vR.dՅaA(dl\]H2MƖ58( C;X ┡􎵭DoBLp^@`s<9l2c480 ڀi7,yW9vǭ8gU1˵2_mՁb7*2[`F $y"BL/WL$J$ <ƺ3;y=MTSyD78DJG0R-W(_>#GWdI?tKawl ™O>k E*{Dk7a0AQv\Jl:_ Qbd3]1y86zedCg

!nP@+INJ!{YWTMDC|zAia<(_V} 7הvh)IDuZ6ҋ]򎀜f&L2 T*$eαr~-'K@ }20a7)~)\~0'nb$؜\9/A)Ovǟ⯽8N;U؎Ĥ !*Zv3^oJR *>Y&2P6VJ 4!]Hㄤ(!QyygCB8rvXh dW (k&GwIk7aYqXgDMzk9 &$c8r863I M*ɃuZVe=E qP $^jN)Lay/~-&YVSҍJn΢a$Cߞo[Y-/,΅qoog/XHs'/NH£ls9Xk:GDъ~GT- V7Ake) mN|ւg3R l&%'XΌjKT] iF)=>a(;J~BJR@`yC4\4M|'9}zA.ZT*ZkEwxhXD|_Žx/^L` q؄Eԩ͌dqJ.EP icP_IjoǛ:ijjڙ햄pC-56~Nlι$ B$SXXh,t[aɍch4=bAzicGx&pf4ԄURP(,r~֐{B K׉EL~} W$)IPXa]t;gAX/^ə!Q8/ {245?=>B"FZŜD*E+K-A'\)Ht֊'zc,oznRus/3/cK z >uVqc6e2sW^H?|>UUS%'9GYZCT RTl$ʁt2$0V_?8vH*6ri 誷TKQR0"uH*Z$ݹot݌+mJcĸ JZMPƼ +,:!IҘc vuyE -Ei޷ I'+71\ r3DC'3-A{%R%EasZY-Gw(8q$Ͻ*wqǟs&aRI'H Jzx Z'5߬Ir5+zj J&IB 0jBx Q!#C9bcG&}_ǹj)*q#AGp߱_6;EjT56 śd0eOu4wAoщ SFזP -c򈢦2C*څ1@|<}>VH}fvϰŁ]D O+cL(s k˨*&Rudi®AJG50b,u2&V $G7Ns g{Z^❏Bǟ⥓y\葶2. ' 9}~sC u)Y(ld%Z0N[sn> z.wt/8+!Mc"M24N0,.ىVY,Ʃʹby4gg7y;uoIltBFUu;Ma~ݜ8CG;_(SZJUϜJ` IDATsOh0cLdnB&Yji:_ 9&&\n14q^@}W%$搃:x&tS䞳!:W:ˉSyN13ԄJh.Q6vwx#NaVtp+ "a^!7t7//@Y v;FK 2T22_,-tPZ0JB5ŽIU S_۱ W7Z/{8W->cdn PJ3Q{򉯟]mV TG'a*؃@Il\ܘ1pCcZ9,,w6!%z2hf*ɀogsS؀ 58^߲6y&J6m *J!Y@iUX EcCV&!~),< :l[o;v??Q_J UbӦ(=̋^r B1bMôj0(QBQyGa{X5JMGO~lQ~,ˁ|dܑ񆓌<9&=@,:nJؿҔFQpI4qf54Tk1_8,5'x#@1$M҄<球7~DbAc\Y^0l[c.EiY8h򱊪q )C [Le-t`άS>;MnGt+0 ~It-}9έmg_P/B'CHŋ9(ED$)`oE/>csB o[=w.LJKZM7ou\0/}`M9x|ɓZh= 䔥%ĤxƂl./ ^88 T1V]-E0zLS͒pf_$ƈKL\Z2lȬ -A3H@!u3-=+8cIW堡kVV'\KIph2Y*n^4Wge}:m?G!$#yg78wυ-jJ![TkTThx)왳}uV4,ϱe4xV@HJ7ֽ6`pJ˫H  \ i>)KV2 Ht  ֶ ܐћ VO] O`$ š©APGGT9@J2BEpu&vOKсUc8 VF_|WNqa}ka &ՊZ9IL"vRWS*pzǫɓ'o롟R*AP ORxţI j@<#:Kû[u0#sa<1F-&_WoA!Œ_)Rzb &{۵ey7Ӵ`EdyYONIKA~hV~A7^bďO*^I}q~!bR;)4o~"#]/}_)Ietmixu.86748FyRJڭBH_!G{P938?l|]=yY{vRENsc|o/KY͞Rry"V Á6lS%|1yԲk͓Z*&.X(D+.سn6`Y(XlCE` Z-O8y?\ ,\c6bOW'cf^gJtD Zbr0T\`p |Lm4e;z97X27,;g73^^[WWw[-$6-,D`;f#q8231 8l!A@Z-U]׾z۽9w^U-7*~}OjL@JvZ)1s%d0[n }Ǿ똣 ( p^8ATIڻ |]sxZs1Z1ΐeY>ʿ/x0E Sla54XGpRV?¬wHbaaZ۠KxG ,|Dɱ%Кro}(\mpiwB|E0o]~NHI^.F8;WÍf b|'[= |R Ib$/ =Cݾ װ| ' (?g.o`~ڧZ:L+7>5l f)$-}YEj_O>ݗa9o%QKcx[5w?Z@k 9Q{X $.Vֶp `ۣo/Un[&U\.60gVkbnzR,.wⵀFO9x!g3ֶ}_Kg^%`܆s%vAZ3XA83z,,-F $|.?>bՓ SMNz` ɱu?( J3rNc}I!eeR6yY,XDZ8̌j7Vl*uRl$h'ۇk\W^l7!X# H*M Rmu^:lDzK,vlaS,>x;ވ(#A"8;qhT8}f ~v/A,3B s{'!zPRA %8 PR"ac+j$a!p@$ #N,OO(G~ &+!K&M156(RTU{9 u>?&D1?Sjz.KN1T (@j%A`6Ϝ~ďjſgg|!_F'tsS sr%=K)cǶ/ 8#F⹁pY研T oVkh4# % oJ,lE@d>ݍ N`Ns.&o4܋$M`n땴k2|ff{Xmf16քq K[>uR|R%$8!< }%e8`6茀)שJµulStS-LO ,.o6냟 WtȦPR{e8L&c ͌+D!ML5Ǫ`O^k]޹koK 4b$1FIgL4ː)I;>w m`XfJ!]זRz\&spV[bBr-;IJi\ JVu8W\-zsQXGH 4̲lZ8C(E?5p`Q XzWȯJ9o8Τ 5m}a71gέB IDāIn!L)*vǪ`8UNU$v QM,Ka-AR!nm` ̢PL FecAv0|r5P\Wr09W wĵqiqr u_8:>%W,j Z+9RKlt=@B ]߇A.`!*/^_M}U?2(@BxsaCC+ËWVsL0ِ(r1aͺW *GEQf[!RN+u$g?zހKH`u~ M/0n+ : s#"%Kpz\痜y*P Dw51 :zT9/njw ,Kp^:Bae dA/WTpA+s(տҹ_@:;3H^.e]g%U:!gý|72zIf`I0h}9n_*e@G8Yxc,d+>N%3]VPwEfV=W 1P} Z:/nr $yBpfPR&g,c!R zW˯;'t_#9Hlrdž1(ׅg:43 3~N).Soh F XGwWqqA)} 4C?ZVuvU:d'nH_2"ύ*Π~̑4k/kDGpF !_3A:~wmggLb|"7s ]GzY,v0N>zUwh/,BJ,6% aƌJ`;Lu&X^b`/X)zӈzz"U/Ёo'8Bi<;H ;} R9n!x@^ע2A!I+QbՔ8FĽY 6;yK#{=Ks@#JP"m^V=ܕY\}aߟPC?%Nϙ'=?jƫC.R)MᬂD:@HĩB+ ̰{&N3#>1Ҍ6hF go$8/Fe6+ykv_ZoPߧ âv繋]֨Wx$>E/1 @،("Ш !d!}{"{.;+< s%H'ڝ}ޣБLTt0J(` QRbnf 6-PsoEN(cGJ)-o<\Ʃn>ҡ']b~M2 fÛNa&x^8$$űB;!P3_ͩaAMى/F?>|`uOuYFCh^[A'bd0ziH.@yt?7ފם+91 x) ]dƯ~߇uv{){HbgDلC )时p}i3}~-^+SGxMr$#=sh_XWJ)geL 4SN84 k@&Xc>HCȫR0ݷ]?*؀Qknp/ɓN_ZÅu38Vl upȎ;Wz_J}߈z??%ƠZlXoEʫ=,vԌNG!e^X9OΡhBJN?V){$N}qo ]Xj_=~+ S".?v}oIri$3uaR^;η x˾'̑rG ! p&,c堒YAq+GPB {P~11 s΅=k$'Y, `R펕2GNGt#`9+piB~X{8,39 %A*qދV-'_~jP1W)#"\{V#L|H??3/U96,IN9ȓO*/<:;x~|OvBCkX"@f]/^GV_.sUd2[w#1z9|u˛)\^@*A3ReLaT041jNpÜ@+ƞƚ΃0&16'x 9LL̠7k븲3Y$%?,<@@ Rˏ*Ը?^mD ͠(+fb,yC0'p+dz wX#Tx}¯<XXV̕Zo Sy=(@*ϭVx<|:]^0RJ7NbiKdVp  ԗT _ ^W-p F6L4ߝZ¹ W vabb q9͍ 8k}Fʪ>> ~@?g\ Zau^nM[.[{O,@Hq =(hpsXXbyIsv^}(\f?[[B`pu1E9pėJs?. $_ǬX23bŵs|?I[3N&dX1H0=zJ8w.^'hSlR\\L0 _W> NᏕ۝m ?E3l2R4t!3o3K |jO6ZW=;|5ׇ jU"!ƚ H)o<$ůYf`-,%Tp -:9 Zq4-8z9ȯbAI}o^qZXY_/\ՓS~׽{ M{BߜHsBYozQֻki«5߂#|*.0{E} 2AשO4#L7{ o8N~?0eƮ2+\1{!8T40j0>>"`ccid-09E@x@>dSPo´Y{)$[q~&tq/~B'N2 H3_&,g;^E.a Ј$K3}YE$l1n]>YU$8緵bxM_GXU/8n!uĢo+$ 4@"D๣@?u87ˋOއk+]X"˜A-Di)%p~J!ȖN@~"Ix+8ХˎZ4|(^㦂 IDATA뿏C98nb|| a}}~`vbk=S ޱ%DcYxx ࠣkkK նnx>oizȱJ|`vfӓ- De+AȥrX48:XTP\)W݀3jҪ)dzWxIQQFglN@I_wGïP>5 ^7FCK'G@ׇu׋xVAΠD^:hKq>oYoZH,m Geʷg_ \'c }M88qעe@9[ ffWm ~|bu$pFsMeIz=vaMơSDoe2I /$xF7Vki}x ,Cd9_˵vmuoQc-x@7?pyiaY"#LO8K{f GtiITB(r_L? 6/\(ns/\=w`@pp4Z[5yNHZζrqv)%FDw CZxX_\DjnƼn6%@*j0aI^2,e]0Ԇwt{(6ղQ9N hj 4#o}IH/;Ij69$*}|i4|#Rq#R ]23P-kaP R2>~'d5nzv9 UH ( Y{aVb/&GrEC~`g-MʉBڊ`ĨRC 9 V{5l ƛ, ؄ەC[(Ri{rs}~rז61;ѹq7-,wx6=V8ʹ;~qߖF1\nl|U"?| TR|"7= C<䗒B5IXkF^t^%ш5/.-:&@*?8ka9/.噟|w4>{J8i 2H'OHj 2M8qpX|[f D>cUb|I Wv 0É@ :8Z8Ha^h8YV6XYkcr,)Z Nz D(#vX||@ ygFDoزD^a @#q Mt:["2HDZ#xՓs7eQPrF+–JC?G)g?6poʲt+{&& }/d Z Dĵ%'1Xos fVcZ@ ?'b޿)X2/~~P-qcIkcXXǣ.e$`gRBŒS{Jcc=y??e"V~^+vq|c!3399k ݮ0`gPߋ(\uEiQ^c_)+}q`tqoFˏ "y'IJ nu1zҔ;=,nbcV84;P 0A;rǠ$rZ"FՌ!;E 9>~ l"yBA%ffy\98R{-OIs9gy F^蟼YJ2Z. 87&~rɵ>bDi% B̯ 2zax I*2@Y % '9*%}M?&<7\Z3qqa.?h);r`x9`Hp@E%i}\_\E1=5X`}~/ehol΃ )3Eu #-\OaG_-v6OzW{{Z$IυHh]HK)d}K-b 0-~>YbBT2 z 1~[<ZD >ϞБ⭱6} ^,|UR/ +j$6e5`CB;~@Iuhqi#X @"vÔPNE>#$!if'%ҬZ#؍nR@+׶'B kES1a.;m^7J DԺtN+@H`zCsoB r1:B7bFGiJx:Wy;#Gcbbj([hvABNdcY-sIΜ7~gM.ek[GϿ@Z:+n᫵5O([y&?p% `x`'$e)1GB !)$N2_>:(E>tQG r@ 9 Z+DZO\uo"2T^ ԹT^ˀr5v2`g}#AH } 1֌09¡ВpVVUzMs,mpsˋ,3G Nw4"gAR)X#k2Sg @܁]|f  G aߌU }/EqpOMGfsYff⯶ `;IP׿_3/\{Zl֨"~.\]ƹ*2E9@s@!h?W%.ZxBh$rcq\]GorP$IkmX=3p~P7)Ushw{pΡcr|{&0=1&&ZMH!πf+M{&sB9/()Js~)#H!P7/b ,@ß~o{wpflЍ>s*MYz'WJ+vL3ZvZYI`rv ^胧~/|Exa7VȬ BTFIF*Wpv}[_ww (#rQXO (B@#ks Xw8ܞZCJ^^~?:t!}XCxz'7֤>K=13R ܟο m@+-^ m@1%>ة'igx+,2r˅kh% E1HCI Q<\ 0BSf :8CB+'_\ģ@c.$`{7))6#~QgÎm[T2 x vA8/śl ٱ;Kpc'ʕw%<mH֫RdDKIKp0klL?20^8l +Q.- k]~?xxupR1  U +“}#xOTxl` Jpk*R:|bp0n?<0$Y X`=9FJjr.ueݺzo\**eu_Vpuu_TV)6+3:Eۀ  _ xD*$)a}+-; 6KXB? q$E * ¯.Y)]q7<Уu ;@"W}{}{ZĽfO!`||xΓ H@f;)A k đc~5a[(.Nߒ$<9A ! ng4yඌԗ.v۫B7x^mt)A:B9FqS'*IK` >{ 8CȬEH 2epd84cX]]G?+?H]l+>7q,ϫC{56ΞG~a~4O= +򗗈PiH9P-92S/C d&!}#D7"nU(OCkY^wt^ IJQ,ʔ~*0p[ ᗒS ԛ }~ 7"4-_>c&"i7o&wB3~g76.ebm`500<'|;=i0 \ $uіz}6X3<}Z۷8%=_?PmZtD⑄ 7<0h N?zk7ZX>7?>@?z-^`(sҵ{?o|w/53yHm20/jCO |hC'`p?t#'\`FѢ7sT:(`>-(/J0|Q1ae?}z%o;wA.S;<'?oJ3JtbmF|R(0uNltШn Q_),3S <"@# F{â|}7߶ uHï>["|/鏴VqHLHYMO}31hc@~Ș .+_m.#I/TҔc,ɐIf L Kd16_~`7=ҏ!Fn6f mYk3 r-gΉrY@9r˞_O& H#S}iqz:_I+)~XF8W-h6|~e@hȰ+j/5ï8 >E.#(8~hGn7pt@k-66l`ccH~E`Y/^0Hc34E?M $A& Xn<| T_ QdVɡ9Bt!WT < 1@+80QZpo G;^-;*A#zھQ3jSV; VogY*ZC m6cw0LBM,lA{*- A1kCY!ع3:h^=eH ?MXCXJ_~KOXNiO7yu,@3smN}4#`ar O~qa*TiQ6W-8aϟ]9q`Z{|Rzܹ̃,՜VRd&u,.&K!qu~ssg=/v@i݀ `( iܡ!&|'hxTB0Hd#A-CYjh/GLN!h;o_ZƵMn*488: v}|B+ `̧)$EM4/mxijO? z P-nɏ?9b1B`pO}j?m#ugt`\,3HC후TQd^$u )Q1F)YAE lfamc2dY>}ؔۀW^y%N^, ùY?wiN=sзɸ_ n vA**;~/kdd(hi1;胒<@PZ)4tZ@Z=H*h)Xx*m#7׍=7c`e1 9 T+ l^E ^aS&x1LCI x 8 BbҖ0ғ E+@I X !|q^-3f4e)6Dr_}O%w#vۥ 5TFa(?W^O4 iʃ?)#457}]ώWG`1a Z7 ^%|M Zx’xk `M\<"n|0<7j:@Ț7):A<@AMu_RPk]*=ڌhF Q;RI.-wּDzw zBcaiucG>qc2쟵k[; 즥5 i xLE&`,-߇sS`Okz[gמ J;#+x5hF(N{AT4<(Q6R ~.]z c $HHOSUPx@PE! nPg[IQ2Y~;Ý'#5Ͽ3 x?pBItS򵳟Y.a6я2u_&ׯـ?݊ONb!|NϟKnC)%JX6^ \KA9PN>S Z%[ආ(_5"ߘ(JfQKpnsweoq$09wƾBbKgM)*-Iny/5PETLQZ RWO`An1βl17kC%@kd_PVɷ{~F6:ysMKSZ+%*t08|/7`c/|P.,|9G~#d^x߲5j{<TR;ء\\µ hײ 6TpyVL 1!2EP0r 2>)W>x3%7# eW HD2 0wDOéCPPh%RQHRJ^`E :Rg|l䓫c!eJ yY)J2 (C+o? w%ip}~4WWp*b* Sl(@EGVJt%SGxMkxSGRQc'lxO!&w RvxYn~|[co?g~+_嫦c/VR/t ދj?KNM0$ 0DyNN} /~jt`C d9`fz & H`m-d<+=@)f1I mAբ;/αfVp™~Ϟyi]o)g}bHv4$ԗ) ؍FpJA=~ O~C}'1=/\z EÂ9ðd)ԟg>R2, Vʼn()![(Ј?%; PD&'Z~홀4چT^I@}^)@0CP ۃ9Hy~@B(na -^z |#_z{>Owvv.xi@e@@cbԩSy7}:r;fqǁ1LG\) Thl2ߒ~W=b5p~%B0J&TY!](1R騑P!t Q@018w λ<|μJSsHkPBIT2nm~tS_7l\ ?W\ ;=w7ׄ Y@pwAP>0|;{x\;Oajv=ѹ}0ȲkRiBQY@ 2r-t*ӂZ"ӄ^!phnMlBs \~j} SR?pDIA*~kI7:S=VGAk o,c.</^eK:$Nan~-NSP[{XQɓ'u< gR/EJ5+Rvw &YPR%DWK|F#Hȁ=8t`ߗq}q C?RzoY- 5u6-X0\ xX:AoZ6HOQqj83igM;m'i'%[ыE=n?.( )pϹ>Cw󻽽}MSKӔy|*2b":?&$30^ *~~˭ݎ`̗7s0Wluyl |ahn ~ ]$N@hdF\ ֈV5͏#d2.nًtdO'05<|ă10FiIcO<Ȕ9I[PTEHeP`q|z!,Gsx+ "&}ӒH[3+K ՍQox1tstOky .q۞<>7~SDSrQy^P4P(0"=Bf[B|I [~Nl~V?ZF !g٢Pф7P=H[v"a`cÓZZ= qxR!ځh.>"eW8< 8?yl皢 Aqnse .jpH91#1p/&FRBF /^/7o;h5 &LBZ @҅"$|N&}ll9)Np4h:ocIԴ0m{W%h:2H[ DjY'P!* 5gplz:7>4̢B ]~ш[ )oq{M޳FJPE@׎oz˗/_6;[/?i6` AgQ:2Z](]栏n3oE瞜Mp624OĉCi_ d0z`^Ǽ2iq)2tA{{) gɻw?OөtS-4@= yWA>߫_%p 0hAO#&\A;dT"2znwwγ:vwȟ`k᠍N^w V+(!Gc.p`L䀧C*|96z(ҸtZ=Pp~qӳSLώd~LGѻUivƑsaF/ 3-OA:\KqOVoe ,( POohuI'`_<~ZjA(x )d)swdlD/~gH*9 &{u%q$Ǔ:r[B*) !PHf|&oz4h4^]]]04X?Sig؁ 0LQ~ /P$8:t!B\/T'֟8 Hح RH6h4pvy~otָ\V>3k4M"P")R@B !Ù !fpv3ULgd2\IAl-&2 _j>>}/2**W\Ih*`%(4 8nQȋUKWL%ӒfZ֚1m0X, l%g|] X W\], !," A, Aӈ!i"Hz`_ݖ `.M"t|UP0UX4>IDvAzU:msL.{d:mY&uUׅ4BPWzHр u XFF: N r7 23dH~^L|}o}T+-g fMɅ@eEʂ 5r AE 3}- 2F6 F̢X\VU"X`a+K^M5e|i/Rܳr_EX %^"EA `P&7]Ϻ׶TAp|,_j_:s Q}׉7Y /*F]|jHL|% `2ȀҎLS4&>sʸY*@Y e&e6Y,@@Vh@"(B ydS{K3r蘯-̡ ]|uﭰD) Bul)9-^%h"CWx+U'eWUP&,V6#A,Vp{ڀcmU,7Xd=@~sL]Gj.H^FUb]sꡀ뱩e$P弗C妀rDVZTZPLie ;.Ы0HP\݃,e ?Pxk Y\ `:9 B.?(?D",eGpU:( !(b+˽ae¦raf Bj kWrzȀ@\K_5$a{ ,,;ci0Ӟ:%}"+42%<"(&a׵k e7ˏ E-rᄅpTF!!+6JbIDATe=κU~kRV"( HD/(\@{PʐAB( nI>}p4"\%j=;Xs~"]lPW%eKzPO 2e}eD>=3 :^pp gI9s$V4RIENDB`pychess-0.12beta3/glade/findbar.glade0000755000175000017470000002715312161415524016562 0ustar tamasusers False window1 True False 1 True False 6 True False 3 0 of 0 True 3 4 GTK_FILL False True True False none True False 3 True False 1 1 16 16 True False gtk-go-up 1 True True 0 True False 0 _Previous True True True 1 4 5 False True True False none True False 3 True False 1 1 16 16 True False gtk-go-down 1 True True 0 True False 0 _Next True True True 1 5 6 True False 3 3 True False Search: 1 2 False 30 30 True True False none True False 1 gtk-close 2 140 True True False False True True 2 3 False True 0 True False 1 1 True True automatic in True True False True True 1 pychess-0.12beta3/gtksourceview-1.0/0000755000175000017470000000000012176727272016301 5ustar tamasuserspychess-0.12beta3/gtksourceview-1.0/language-specs/0000755000175000017470000000000012176727272021177 5ustar tamasuserspychess-0.12beta3/gtksourceview-1.0/language-specs/pgn.lang0000755000175000017470000000672712161415524022631 0ustar tamasusers " " ' ' ; ^% \{ \} Event Site Date Round White Black Result WhiteTitle BlackTitle WhiteElo BlackElo WhiteUSCF BlackUSCF WhiteNA BlackNA WhiteType BlackType EventDate EventSponsor Section Stage Board Opening Variation SubVariation ECO NIC Time UTCTime UTCDate TimeControl SetUp FEN Termination Annotator Mode PlyCount ![^!] \?[^\?] !! \?\? !\? \?! \$[0-9]+ \( \) \b[0-9]+\s*\. pychess-0.12beta3/flags/0000755000175000017470000000000012176727272014200 5ustar tamasuserspychess-0.12beta3/flags/ua.png0000755000175000017470000000202112161415523015274 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIIDATXVO@~w㈠"GA2 P:P!ub"RK{SEH8C.tH"a&"$vsqoywߏ p{VPJ)|e|mY `vnĕ) v- }.D78FLs0_?`{;O"ju7{c cB"Y)N_P|>RQAиA)/["H$~i&|K$=gڋC{m޹~saΚ94MH0[:0jP(( JRPV*7Y9y\2L&ZFЍ񱪪j}ͭ@ Y_o4M]@QDQQEQ*JRu>m/;T{%I$ @eYBP(HRT nZ%rl~.rif;D ޹ g!0DVV'i*2.Gd\| NiNt(d2L'7nz7 5PbAܨ>0 (r[[\mQ.<9C,bc@\o+ Ǽp QJ>7$)*g}Lt6>F8ʷ(0+/nWOF3.ѩ!h8t"+CG^,q;<b[k9σ@B^cA n%f(0q^XVxWfޛQwKaUw0\E,`n4JY,`u\ӸD -M:~XG`mUΡܓaᢋK``BPc*s1AzzxHW_P+ƀZb,W:=`sh.8S2 ߼/i ó{zgH 8s =Beiv+ \# U~/PJuZn>\t&u*.7 +O_t894@TmeTOU#DV)cf@Nt:].KQ4MUUb/%ƬDSЧ3K`,l*@_8<$É~[ ηy*0˕7AHyP(4[ek{ꪬ# /|>~[V$3g@4iYYzuccccSiji677775A{{{{{;r@[wcr]zuEEEEEE`arfvpv<'=}͚p8F?Fjjjjjj Q#0y`.d)Nt뺮CFFFFFB___ߝwڻ:%rs7D#GjkkkkkP( 7QFPSDj +YJ؅c@ (L!-qE"6%FYe@F*΋bX Z[[[[[̳iFʮmmN$l>{v;}aЦM) YJNK%Khuc#/D+!#?A^ $.ϣQeGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/fo.png0000755000175000017470000000300612161415523015277 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL>IDATXklUw;nBnjH@^U&HT0#VHL @?hPII# D0&Զ"l@lnepYҮ4{s9?Muii ڣXK뺮58yq*˲B!T!/…`0 srH$Qv)ko_J˂X̶:R<#]8zU =#Ή*Z{<;914nnw,81md~ZF$w.5/p鯻A`ȥKx<_ѩa< QL)5pcGU}3Nn{@16Η3v&qef{K؁SӗjmÎd;Vl7QdӰCK5)k9 H?[EpJ bF}:LȚCZa}z4oiK' tc ̑SK! n;=i54322240t]AJk|" b} y+  Tt: тŒ΃HM韟B\q?h" \/BaسSJ>M3q l5'r90 NEOY}pS6`e@`!GHbXLe 2/.,t˛-0 0t!?xW7 !Ʉ_N¯LfٍRR쬬yHd˖ں:è@  odN$Vcd{iivݐ SZjG?vLx^oqp8]_____pBP(:nDAeOj'򹶐ٳ-X~MS[f|>TVVVVVBZ4FV]]]]]-D6% Ū!I-zv<,yժ_EE6z<Qq%lٕ6\6ViIE{CK'TOW6B:?ޘo7-|.՘GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ky.png0000755000175000017470000000313412161415523015320 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX[lUgf;[UeUkhQP1D( %A5-M$x4[U!Fbmht/\|m?]g\\(t32 gl۪jY#G,gx\!q\1rX,H$ɤHmn!m۲ pyy]-xT_/ޅ̼UOG<|N6 k>WN AˋHf8~ JR%> bh{ `Gõ|i/ӑ4MӼ0Q©9)3n<{΂"]]S %[aU!23vp$oVZ`\G1 5Gݐה?^~qd4BL nѣh4:439WMSUU@'{5?=k}>l?X& 38(ZL (lkdRsK0}X |eׁX8TTTTTTxludw; |`\sҳ@ 7Qs`,u^TgUgWZ *!wa!# \DBg N .XaYi y1s|n%93W]]]]]-3C!Ym|>_aEx"LnkZ8 ɤs#;{80KdG{<`0 PSSSSSCC3f8iӪD"lllnnnnnu]ee(+(˅Dv!d<'raDh4(e_~ "H$:pt:(BdkS"=4$˂hRT*]]]]]]shj׭w 98矗BYYYYY\gjkb:,[%lq/W|oub1tI' ;,!+?KC|ͲGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cm.png0000755000175000017470000000233512161415523015276 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMhGfHRŮ)nu.RJ )SӸSC/.bzR -4EO Q$Q$XZxÛՏW̛ۘ77of8!/EQyjYGUUUUm{28/mZB!8q 4 `^+C\2s xCi3DK%zU?ʽVKn$ bC ԣpv D+T_' ^I, @;ά ?CBƉ_$^yK2rar>Ύ3͏g[koL$F&"=SBQ XqC6op%8)g1 /ضmv((*&j$8/:KէybM&~/5D,~Ȩelx`  i}ݙCƷ6軫@;cȚ\-,RV!D" 0 M#k;N| Tnݪs'mY}4ufg,˲,gJz,gbdۚi;;;;Pj@/;P"̃\ߨ?%d2 yټ}\.'ǎ-/7i^iZ.r@ZViҋL [ ~@ ]u]"H$RT*NYZo NZi^aa"?>(x'Fx9}ZPXV\.ˊ[F|@/ Bt: Lz^(l6 1Z ~/pi0 ^^n@RT*.^$^_z߹3x<Z[y B[Fދb;A&yt{y|z=Pxvx ?EGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pf.png0000755000175000017470000000254012161415523015302 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV_h[U{4ikU:av:D$NZpt/Sǐi N,}UQ*t AJ$MMs}8$풬eK/{|9P lll(HiyzzJ~4!R>d2dTUU \ϖ!|aP nۭLZ]mկdpeeuUQW۾z,"|>o׫!, MHEM49Dp\*K@.-uk/OEQY*g^YΞMkq\J~N gVA5|ov ht]u{bY u^f[Kt:[[.tә^6555 l`0 x<^dv*4veYe@$Il6=rY%wue2޺ BPu( g˭݂Wš@'qt=FQA%c{G+p8 @ Tr\.'CCCCCCX{xkp )j4M4 bMzΙWW[/.Ԃxd5R0[3_ E[㲆GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/C.png0000755000175000017470000000274312161415523015064 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXmlSUe- 26eF\NpDao1DL 3KA!A$L a43Й#M:֗wn]e/Osy^)La S,˲i1RUc&d2iVfs4#_$"I$I&nP( X,~]gC~]4pn[U Œޜ+`__8 SGJogA}+HGr|Z,uH8| /O? 7-S˱Ǭe08;4} H?=8T*JƦр$ \Zt Iԟ\&YNZN`Ʒ-?6BlAh״nn?=Pa$C8C;j 1%w[ 躡 @z lC%P*u]soP?Ml` 3Hx*"suV^Ư#[ ܹchp"к9Щ]u:X *C4 g ǡ`ǃj7uH>vec``'iiN,L*p=p%QK^\:xs@ܮuJ5K\q^a֯n0lHǣ(wf $Y m6neu TӤW0.aУ UA`u.Gi U?i @TDNZus~swZf@, mN@8[F4 76[{o(n/3WiU?W)tHH;J.:Z&J"]UUUUƑc(fZV`Fc$2yjkkkkkEbeiAt$"tW[kF"h,vXKKKg|>`0 B,frDb1l6(.rACCCCC$CCCCF6beˢh4;b p8X0+^Dg$2nN2@ Ȳ82!~zL&ɤ,777777KR6AHCXAH68ܳ0mjw*-5a&\IÐжmw/v: + kx/2%慽_}BCH6ﰰc`>!Elt]GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/lr.png0000755000175000017470000000243512161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLUIDATXVMlEޮY+'CܵRbr"'TNHBBV PO, J+q3 U#br,$U*iMjgwtllj8仼f޷3 a{(22"F-Ɯ*c[9mϘدP ""ylmO|>绺E˲,η+oHsm 8je>;0~ < j/nѥ0_ n -ȝ;8+ @$x< @O9L`;_z EǍ}i@g|bOK`~}(#@_=e/Oɏ,Bo.1hBDG<|SLzy&]*8EW./ҫ 89jc$*4v}zs 849K< 7(ٗ7@ z4/p;O,; }]Yic1*l?^-US O1M}`0 cn.N֚uxETUUzpc@QC ( ]5 awe4MS-9^(pd?5U菉s \۶m۶DJ޻0`0aL4MTuvvvvfr\7d}bCi POL5Ƌ}jqH$Hrfo(t TՖwxP,Z%D"dl6 X]KLn\뀔F뺮a~Dh4 X}j)E˺r%L&I4M4k QVPǻDc!d> mt:(e> T*JX,JRT%qFmJ47 ͤjRT*L&d sℰccnz{]{ϷB( BrFGp{Vi] E{iw+>j|^>UH3sXßJ=?x#TmC[زv;;LJӳ[7h|?|3g`sÄu]:m0 0gjVztG4M4M1 D"H$RZ[e)9S`귓C~!m[Jsss3V4 ﻰk._(l8ZP[ 䱚)&^G; )|>h_ ȎܹJRxi4YMž{iŒR r m\D$쬵EC~8y2ϩ?k#ѲK{_\;?e 9e*,ߤAFcׁTo&s+.%8׮B]]B_XBPJr…b9!S;N?쾦JS\GB R'Fj=Yvmi$-E)dy4xnmnaa񞮏cˁN.AءgR|d5pE,ݵ8g8ݺnhyInF `_';У3_t;B0Pp垑ʑ F\܋90pbˀM7Ա+UTx^o^ލp8<<ӇXnUqN}=\7HD=tw"A}?!o9_i.?8GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tw.png0000755000175000017470000000226112161415523015327 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXMhGkoDA -J$D Є@NE5r.Cu=B  ikDhٵXdRV=LƲ%˲]5pl M4MqCl[]Wu]g{N#+BG+<{R\.+>n!w]ǁ@ l[r:m_96p8<p1r10{~<$ȿO}[aqdȊzު!!d36nn>1 p*s*0~w.#wp tD;R=ֲCǎ5s o~ud POk3·}ԏາ)8/+{.GέY_)@!/d|06K( ֍~nBDk'pqWt]w_/7M~Nzo|>ѣWR|tgto:?S[ !nuGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/jm.png0000755000175000017470000000301212161415523015276 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLBIDATXLu_(LLΖ.m9XkH39&Ǫ1+VYjkM~,ȒX\ H N{+x W|~>=7 p&,JOXK v gK{H(iٴ[{M_̵xL0M{Y1C$A49v[TMjms>=Pfy|VlT( UWޙpc8:֑mI/ N3xb,{, 䶤ޠ#pbX,X`&a 3AюU$= .% v /' EwOXά-/m3&.^ 4H<!v}Ҥ65lNLLLTI@vaF ߴl@NiG7KAӆMu)KRVP" ׭wwڂ9R_Vp8K &r(O\Λz>_]]]]]]]]]^PGu'+7R?ѹ`l6kZ0WgD&_ݞe/[L&d0@ggggg'r8AC]~ΐ]^^^^^D"H$"wfgVUJWzjZ/W`0wL&rB!}"-Ƀ*#^?l6fvRSSSSS,н75ܹs, P񆆆!2r" J}z!+@ 8v݊"K'_N鄄p8RޔM?dkH)2Zw^_____x<3l.6neyl]경}rrrrrr!-TVvjEUʄy\|nx?[[. 0 cgN_)4MӔr~qR:e2B!c.t:xq6rz@0BWJJhnnnnnmgeple˂Ze>WӇ`z'wû}-'~iKn\ 'N^svzTO׀_+^:(| SRT*W#!<ѭ'a^ @);a;`C V^8fOkpƑuhHkAƯ mpRydH\G)ب[[/M&>3~Wҽ \or|[ˉ]/C{`y.X~g3\|?_!s4kO]x7RZ74>z!= ˖:~Zľ?;9(lh޹4ŖY4M%Ș0gg.]BRw5$49ha mS`dWf;wxkTT2\ ރ]obˠJ 0V8n,Vˠ̱RX@ՋNُRJi fQND8Np=:=Mn{\ԛ RT {<%7aZ| 2" R(Johi AfD0<4Mqpu@n.o#n=Cr1'D@` T| \'g(d<0hooooo'&,˲<BaNq{{}mN͞O\12RO^53+*~\}w+l ps۶m֞SW ?<<<Ix<ibJR8/P (KrOy]WWWWW@lmuɌx0L&#'D"H&dr9Evw1Z}  A@zzzzzzPNӢ׭f\n` FQ۲,˲ʆuf3+7 ]Dh dFǶx<7 ]2oޑ\bX,F8BTjSx5hih &ZMOOOOOC"H$Ws詧}ǒߨP( 2 m^@VͮR\^WN:[E] }k~-tkXq%;cq:GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mr.png0000755000175000017470000000252112161415523015312 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_h[U?v̶v,5 an >@AP|s8D{ڃD(6m*ym)6&u]4ͽ>{6W_};sN`XESbdb캚i8YkŝGW(((c9LO|>aCX*Jkk(w]ǁ^VqS7oݲ,(u5| <> @B-0׮_ );rvVju(@QD8\>rLY {{KOUӇH\z~aQwvOi_,W6[;+=s̻@o@[=@ +ɣCDB;,7OLٳ8 :a偮!l{`q_kG ;HhvVh0\ Pʷw.<ܨwXF Ryo+W7Q88jZM6#%On9g>Y-^; p]' @7oniY35NӕJDRU]4mѦۏ,>d_y/.l{Mqznq _cQZPUѶH$D˲,]S a{~1>k}s3W;8@hqмkS{>nswm۶e&&`}}944111J9뺮kd*\.ˁx!-芄%/n@]uFN/FQYF RJ u+Rԩx\x<l6fT/8r,h46 0 0M4MBPR۵KDtIܱcϞbX,ΝK$D,˲z`Y"J{x;BUpl;NiU[&xWH&dbX,_ZV:66666(ڔheo) ɲ!ir\.!d2E_E8,x~^kwa`````@ƩCHСC,́`Uh.y~&--=,y󥐝j"ߟ.F'qGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ag.png0000755000175000017470000000312512161415523015264 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXklU3;m֊t;%%iAJ i)IbJTn1jB"1PMDjL6 mDۥ - KݝxX6%y|s.= }]((KXx,ǃ7 PH!~8@ F#HDLs !כax_OOȉGzzzh*1 7hkz7GLv 2 ={ X׶=pH_4,9Ϝ ;mW|&w6 a (2@QQQQQyF0 je2w8_=H*2JyOn\_PvPVVVVVfp( =U>s666665ijssssS~VAaɆwg`r]zRx\Ϸ I)Җref.X Ñ^y^ mmmmmmXٺI XH6v8t]uzzNvoh&p$rh]]]]] `rcYe=u|HM@~ZX‰}>SY2ݑ PQQQQQX,JTmJgReB`Eh4 ͳhJׯwoqoŗ/uO֭u-imlK%߫Dr;!3?b!#qY4GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mo.png0000755000175000017470000000257212161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?nt#g`!4qΌ3xb Vb/l$ >C !&?N`@])k{|8=OX4z95$t]u9m90 0Tzd#iic% w}@X@Y ^c>To~+e7|NdGfgs\.WBJ&P1cK`VuCOb/$,D' ;<%`@+(^9 ҍ]\[ܝN_|*l~hu)av9 s5qT%+ )cOvx/u/s|ky}>".mB= +űff$={YwfSEZ{FCS?^q#g/{ ͸\9qqu00PkЎq;㎟_|utoڇ0Ԃky]xn[z`z Lh4jk܉D"V&-NM0 ^|4]~b93hgşY0⒙egxNm~n;yOg \(^]힞N$ 3NJ$e{׮[_0^dU!U67 hBA1> !0EʓWB۶mV+b57|Îci1111C,b _%烦&@2t:޽[ZuKkooookN&Tjxxttttt&H$aUY" j:Q\Dz{5IێD"HDUˤ\} BP(Apel6CCCCCCVMr堨*H9U7?????K8tHʁ^--R.,HyZ~_)@RC,n)V%]EE1Ժ%WN<~-6iy"a%W?_Ujfm_5_'8 9|qQʄ2L??|`]6^-T=]^2tg9[_m4X&yBK_p^r~l}Sp⺰qi yy 8u]յ5WUUUUEY____[r\Hpdˮ^i%d2IԔltaQ?V$>Pj˩j.r@T*JȉL7%FiݢBiDh4 RT*{{{{{ffff/^j5y8@m۶[4߹t| c8gaӕI9z" BPt:F|3Z^b SHon~xאuy=:osHLEJ?8g/z =vIn%@VCc2:s:t2#$!ƝEp! lmh6s*OI03go>bRH$QM@aVdm(B50t }?g'B=G(,[*JRhi۶iRJ缮{罜[_[Or;;ܪ 0 0@otPu]ץH(C: cf0n(JrsM4MSJR)z^yCPD@&9瞝^٥t:M f"! jZeu5====5uvn;˦ii jZ8hc 0Yu]0 bX,2L&ݝ+W6????7wjn;ΫWBP(LNڶm۶*K7"UN A &r:㺖eY(2P,"r0z|>Ϙ6 AA Z~NjZГ(9=z%ww%C2L&ǃ%?\x#0?=7)烠ʇ;:@x:?*4xGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ar.png0000755000175000017470000000275612161415523015310 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL&IDATXklU3nif"*vT!1H D$FQo /1QCT֪5Ll]dm/;vmmO?o{9i]kLnK뺮52~xe-B_=SSr}Rfa_Z7[lDGG zˆi67qk᳋+K'=@#qT l}Gʫ3^fFA~lmb1@8g7W:B鯩uٳgii h4{^oj˕iN:DffuXx)>p9L>!e䗘lż\(KA\|P(r:^Py{o;ĸ!G89 KџeYereo'8ĨRl0M4M0Hכ.[dYNtzssssS}C^P~XԸ:˕ճ.twPw+a8xw:~60 Fwbj;Їhmrz^x< 7ϞYQRRRR\hQ8uuuuuuG( BʪQUPډB| YD1@ 4MmOBCCCCCTWWWWWCJ,bVSSSSS#D7œAYC*H2^$D":M7ڼ}[B{{m>wn3ya[hgdج~[$R|jh&  ;x`ʏXllqH'ou65GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gd.png0000755000175000017470000000317212161415523015271 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXmpT͆lLMU M;!dY5̘2R+S:ةSk6Nt2֎SJeGcKmI j6vM/srlHv`7/=瞗? qqNH)-Z[eYR7_:-B!f`h(L&ɹs3l65Zϖ !|{KJ -xp*/pepՓoYzQFԒ!G\T%k~Cp7'[pe(1ƃ6x/;`􋷬yyt}EȝjeAߑ7~R ~Ѽw~pp<,d/j1:&d%^x ~ Ko?h{pW"*j!L3),@Uy^)̑ŻF?UfLU %?SOMUʂG_p~pIqN }AMO\:3}/ !b!;YfhV z^}'sP6ܼ$_ϝTuzrx[ 'E_Ck"kt3)0:{? n?|)+7_]hzY ͙].h*[r 8eI q+[;C uwJ)T($e bx:O@Bm 6=o4Lʧz K(z5Eၿ+Agurl}&-+૿ ^o} 9,Rju)--j!30,+++Ҷ LnT)4|ak4>e[ѡE_D_X ~2Z򟍵 mzx.;D?O}Zy9n$D"H*JٶrbbZFK_߄vAzn\X) =7"GY9KK纮F (?ǩun:z^l۶m۲z{apppppcohLYrj^|yh4Ⱥ:?x<>1q[--t&v,bH$dlf66ӇX; Apqpabb|||_ظhѪUL&8]RJR&F44 Da"YFqx<ǥ4%…|^N! i0SL00l2Պr 1Χ}~7_uu>ON+כu[h˖ "2 _̼b$tfΆ~6L!?~0 KE|~A%ƒvuGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ga.png0000755000175000017470000000210312161415523015257 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL{IDATXV1hQ]{`$it\h]t)AšTBit*fvrhtqD,.MpXĦUIUs6^/4 ) .{8/Aajl]WEQ=_+4q~ c1Fq4Y.iZe\]ڿm h:((ͭ~N a9"SWn^߿z^o 1pb)aUZA@8LO>zw> 8ѥصߝSz)zo{8_xB'Ctzw¯oL&Ⱥյq Az:;6 ,,͜tz'`.<LFaUUՁ/_t]wvZ GYA$QE\4SB⇹h@ȳ<i nmaHGο}yN|J:'kw{/Cm۶MZ>8$I$޼x<IyDW*J BǏOLT*iYϟd2d2 P,"`YF 6*w˲,2@$D"@"H$(_}ubcciflaax SfF ?>(DP<{\xض뺮 r\.d2jZVt:N&5)!Z~jZBP(4qskd?76]!FQZoC gm%m>irvWH+w|/(Pug7ف GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/kp.png0000755000175000017470000000274712161415523015320 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX[lUg]h D &FD&((h+c |H%I F$%K@%+o(EBs|]mh||?aii6#ӴR꺮e,ռ|r4{˲EB!^ };Scx<Wz)GjCe/evݦik s氻'_{vC,1,C& L.Ɍ3 I7CsS\{+ 7Zv)! M]}2@Oo6qpAK A{S\>K]7wJ,nB='Yڋl"< ⣁A,G17Qۛ/üXeYVQ`LKoۦ3пCvY c}[aS(np ~sͫ ^, }^H"@g pb @;$! 0&LT*oj9qĉp躮s)w qǷ>Yʃx\n>^V0O6F&vQ xDJXx<OQQoo$80s̞6ڻk< a3i%@,7TL{iD0 &0 =,p8tʕ+WBP2HTrpqv^FGJwr\kFX<~XKKKp|>]]]]]]7jmt:N'aBmmmmm-Rd2tEQYYYdIuu,~F"H$u:nDAj%rZȪU&i`0ijl9D+B]]]]]t:iBrS!>5T G%D"b[nk|[ڵzP~)mMllJR/h~auwVPΏtzlzȽ?gvQGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/vg.png0000755000175000017470000000307012161415523015310 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLpIDATX[lUg]X,-TVh /QDBRE@%ژ>(TX"!(mQrmK޺ÖҔh|w?ߙ3(,Yb4Zflqz}qa B/֭`0 32"h4rӼ_o!M0 '''''G,Ñoakk[[(Ӈ.dÍK2Ù &OW yƖ]0ypopyUё /@#NZp b+.z'lkG:;u]u)@:uC [{bf2/sYfzS bŐË o h.s[&%'sdf f0=ܟsG6\H {q$m6/,(mMn1-QD37xEUƣ(:8kb0ĆK> 0 QMh?5/+.`9D'aPޢ/Pbps2&}#7.'Wv"iiW|>_WWHEvl6 1S*H)N=;ptN%veW<\z=$Y"RO{{( 9{ .W{oMSOZ\'R;KS{[3@-S~ϴ5M4Mf"  ^[_oNtl  tdV@ɽл0ijoIf^pXJOOO2dp8Fwv:!F:dXHv\. TUUUx|Dٳ`i"H$=|BP(XvVވR~PȝHmBfh|"OB]]]]]=H$ E"u6%9eCbX,~ҳhJ~Ymqc@=K?IX#~Cl=od{}:\>iן`P>ޤ; ;,;!;!F~ u^ʊGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gt.png0000755000175000017470000000277412161415523015320 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL4IDATXklTE3w{Zvsk*UƈZc F+/+`"YhB51 1C|*]jn隶۲nel6m[_N̜3{.bWH)ֹ+vJaL.Br*{qK&BDx|T*N@ 0nar~߶]mQQyT ɍekj>!SUfP*wV  |w gNɜzӛA֊7Eau ab{}v…\.&7EBuWga#n•sψrrц[ȉ=e~[+׮Z.Pw89ײIrdv8IiBIjmT7`D<.Ap7 -ׯvF5las_*;;$!yPV;b{~4BTW[eLx[RRR"i^4v[PשF@}vyO֧n{X,W|Ac.g|> OxjAn_%dD>H>zoh(H$LӍ2;&08"D____<>qV^NMOw.CcccccRT2L.XF:0",ڲVhkkkkow4M4vwB3@7`-ޥi|{qm۶m}-t2&ͭy+-]:L[[[[C! BPbX,tڝqS^˲,˂ @2ѥK]'Oŋo=JGp8.*J$DbܱZ)t' 4˅KێFhTJ2W< H$@0 flVʦ&!QH_ZT@OOOOO?ιb&W֫ƕccꚮZg.m>+oyO.Lɧ?2&@-'_ ]NO3:B_&V^(GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ck.png0000755000175000017470000000303012161415523015265 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLPIDATX]lU3;\Z,ۈ@H0WHZ1JӖ@nw;ׇeCo_Μ;?ށxx(TUUUu ˋ,_M4M3G[9/M4EQE z^כ BQxP^ӄXۓw{fZԥpsY`mxzN]צMΛZⷝUS>jOVqmmQ.GG̅Bvs5Xx|44 (Uw '|?^gY͇l dz|iЧ ɿ}?ډ_pKKx lmu:.@䑊aS@`#][Xm9bmZ#(3 8WLxwwhZ+@}FQ}a<3!,-+J/w^ "Lp~ V6|5/x}ewϼ egy~-Sty^<fČnn 텖vc ss[_z~#_yʳ ]R]5C9vxF,Q\3'H7()bxDor@Xɪ?C5 4MVUMS]/@adZD1osѩ9bq!q>V/dޓothW z &c@599CCͣ(Jqtfd퀜hƍiql' [3h4$&Du١j}eeeeee~-$n8-.ҿ ?J qQEՈ1m]! b1D&d݇Y\t.^n뺮i 9rC+1/>u29stׯnw$@[WV uuuu^_____@(dǝ &7NtBx:0 0t:Np8\.Hdpppp+zKRZZZ:k`0 =`|>ϗ,++oDYA9Ʌ|F&hb 'sn[Ue,;v"lh4jmmmmm$kS"x*HiH+ Jj pͳݾkt YƍǍPRRRRR"$`Ih˖ ";۲UZ[},.^ڱOKO yK;|$d!}q O_GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/af.png0000755000175000017470000000265312161415523015270 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSu?{׻\q@XȐAH YcDD ͆/|aቀ .<>Bgix͢lX۵ׇu/|9w|w>>(4˕k_T(;w;̗{AIn1؄H ڳ_3{t:^lW!>}>מKs͜Jgݬ|a_;o('~26dBwL79x.+.L>u'hgJ0Ν;vD>_UUUUeȈz2w~_\v(`4 B -Kժ? `p2r~! XK45 4jd{μm9afa<',˲, Po_aEm4M4e& X;߻wpppphȲ4M4MU`bbbbbrRf7 0 `P -kjFOOK* yYn߾X,x7ҴP( `|||||qFvw&1$rnvz^/A29333k}`@X,_raF&쬼e>wZI6B泰&4u]u]QD+CGGGGGRT*(]]]]]]BrS">$5 GB%D"p8g9QG?Ƒ]iZ'BǎbG]:&?[,ʹ/r%r~D"i~H rBB*2=ozj܂GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/az.png0000755000175000017470000000275712161415523015321 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL'IDATXoLU?繗U ɒkmd-rF̅3M f/j9e˚r5B-hV+&7jEJ^<oZo{y`Ÿ4MӴ kZk)m6f3ɥHNoV@@!Pu`0 @0C/iBvvvvvv4jiSRS| ?xwL0 )(i̗9MyG~$a?X8n>^bav?bvS4 5$_Aqu" gy@cϼ?p |xr+_r;pf&˴PJb[agQ[ &:K~y|TK׮B݇`0M{7 k.5+s@*_c HiqYUb'ogV^`LE O p`y@/eX.!m^|}g;<ޣbyB3l`zoݧwA_lH YƓ Hh*!-cpl)%i|}N079_ aC X6qEUi7`iNlB7pJ: _@x rAv?◴ZPIлWG^YTEQ#գ"'rRS=gppa8fA$f(+a_ߩLp ½k# RJNfa 8-@bD hJ+nt~[Ii@n-pΆW~Tdd~3뭳@1l*g) RJ)C4F8J˕r뺮lmmmmz^/X/dRBS2oe^5@@Qi[s]ЩSuuuu^_____ Y/uㅩjjmar\.deeeeeAUUUUU  ZћEAAAҥ+W`(trCCCCCCJjETTLv"yэ^-,Dh2Kμ PSSSSSH$D4Vdn*LJLDp8  ɖ-w畗gɡ!K޽;*Nv9Ė鴤lUҞ^$KLɧݭ~lF&}>jS!_Y_iGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/lk.png0000755000175000017470000000272412161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL IDATX[lTEs۴ bMA 1A5$&"1(B5TK1MpqvkHv+Keoݞ=LJemC|3}]3s`34MӴ[fRmp8,kr֕S[/B!T!&OΝd2L&I3LFd|4PmYPUUUUUer*^}}Go9\mJ𞶖.,O E>8cpl`=gaz`~%}ۃ˗pW'c H.Á.\!}̰b@#} X^Ͼ&T6LY{/T%πeYep @8m=ݲ1w[lع=x0+[89ZeZ%vʾY @~0 l$;zKf7/]gAz{9ч;wʲ[mQa55R7.ҶJ0M4MJ` WWڵ]]]]ѨenptwwwG ud+9+544444`P:RTVyyyyYن T:ɜ8p8C"H$YnX S^뺮C  \.B^ \&jkkk-OLN0 0FʪQUPӅDq!T<&f1X,4ML_!D"hmmmmmg>&D17J 6~l6B<cIc--nA)~~=BP(BRh׮C,~)o΢\j^OM'T_#M7RPTo__stlGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/th.png0000755000175000017470000000214012161415523015304 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV1hg󹕹5HQbk &JPNdfd CcS$l,[{ g$8q$I$uK ]W0cQ޾mZVn4My 0m8#s] H$ ɠĨ;;䳋zCV~Dvw~?j7c~Mpf~Z_wj?<ܹsX_[<>˛X>B8&~[O.y+¿7?x^ߩ_l<>6g9N뒤DEwΛډy8x+v"ssۺ9yMӴ)E\%I K B}vHt:i 0dYJ\WOߕ{sa8C܇kڝ;JR,˲,KRVU@l6 I`>_&d2D,IQNZQUUUgft], bQbXFLSLdq B@?j((iX,l6޵k"˗liiiiqƍn5/JRT4 0 ?0U&"UIA',s 89'Od\(rr\m۶m|>g,؛0}5HRAZm~eYz>`'ÇBnI!?|իFHRT-z udxo+ɉ6'y#QqZ-z:8D@0ɣA>N3|.|( w]GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mv.png0000755000175000017470000000261012161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?++&(`"m@Ԡ V# [EMԇ J06DCM"^딘m"tuM[ùvݺfD˾/~; X"aaء$TpXUj-K75%Bh?fCx2L&˗әL&RΗG+C^JMSikj;~ƍT Vwkl-`~a+e6וaI{N[)Rà*29Y( l C㝢S@kw@U:^1B>c]Lu ߓ#449q`a3-+ڰ>ֹւq]m}h#y)8g~n6d G{/l R Q`m>k8;F|8l_S<ݯCw77H\@>j ><47o,Qc!_# SAV 7/ j&!C}2@l?&&\˲,x (@٢1}lZqq6qix/s 0`}n`/ \o@ d˱X,6=]1=5 ˮ] KW A g+=dTYŌ C z<T*rIsWyWx)W{3T'5K+}%KY/4M4':9ZF l:4444AGGGGGLOr܆ yӦt:dNﯩIRThXgV߈:Z_.)t%B5ibX,fdܑ D"8|>7.!{Stkh jflx</h |55)uK+  Sj={nbxgfg}Q\z\6^WNRq3<}>:Ր/L7"/?c`ݛGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tz.png0000755000175000017470000000272512161415523015337 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL IDATXMLTW=vAZQ*FJMc011Iim `~4idӅi0.h6ISlԆĠ3 >ady7ׁA 6ߜye,PEQU"aMSUUUU c~)%7 _$"B8fC̟{P( Xb|Bڛa@IIIIII"ai3g-th8 6_nwk*d֊26@H~oHV%}8VGǓd2tqJRoKɼTF4@q @ϷOw&$s;ɝ']'unkf_@~ ?qi,@7y9Y}=CWV8.9UEYl:>oI4-. BIP%y*e?~ pP z:~ ~}gx}kZKL}.$@iK|*-'ntw*ڦ/zso'@͖U`GiBJciآ0 0 CQTUԖs? ;>npD1Tl;1Xm~2z}Yߺ""SN l0 @:0--QZis ȍv{nnnl0LE]ɾS$yvMg$)<(zACY;֚^BiE.nEEEEE16öԃN@dnvzB BiFY)/v.@]]]]]iFH$rՁYx<M+-մ]~?0 fT7!7Ӵ2=f&&2-?iH$DBtBG"Jr\Ngmm$b/|6|0888885˝L:Nw@Ra~niiPXXXXX 099111eu[|ۣh4kmp8}R^*d'2 !㙙Ν"N"뺮"[fɥ_ <ぬ)Einnnnn"s炤 sQm!x<}8rĒMMnnK>x`ŞPVVVVV&IâPcKlKV)2E&w)J>i9A߁$R? Y058=dNe_ "o/`sGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/it.png0000755000175000017470000000242112161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIIDATXVMhGfZZUĺE4V6nA 5)\MIń!C/ BŇ^Bmsm" qw%a<ډo.3ޛ8L ¹slelmY(Hi{r>>M#B xX,^]/J%.O[oY~&u8] *ӛS?qt@!=Tɡrn%ފN%KK/hjE*B1٠MA$Y+jɓBnD/.o'8 $I$]"f+˲,˲mi]yf1<&y^KK8C~4Q<bX,;?_?7ig^,`o6PDG^~|:r' ݇׳#~ջ}j'~ӧiumUƽ'fGv;7paLn<) p.X t*+/#δwqL`$)?;;g>⿞ Ig JRpx߲,KQĪCP;Pڟϸ38a^s"jTc*Abb/p.eB8 k˥Ry("{{{{@Vj!G -(1NjsqNh(tIRh+D77Mv|00 0jZV7x檪 hiF(N4bL&g^d۶8\P( eY5ܘ*K7"UqA9Hd} ḮiiJL'2+bd2L&un+Il62&!Y*H&jZPT*:a_[Ua{=a>vD"H$h!n Kd|_\qGqi4hA"A0OB;'/+vGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bz.png0000755000175000017470000000302512161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLMIDATXklUwfw;[ZZp- ,b#1B@}D4V HZDA+DI/y `matv-m3=s5\5\idK뺮5TC[/B!T!/P( Fx\B()- ^5Mtfw akk[[8 Y7w UBR7,ψ kEW&@| -XTVp6t)JR Qv`_شm @8cꁥ]N:ƘpnlSg88ya pIKH\ (O-3r竧0Lfm$mG <o0KHa>[ǔ/ZԘz|ڥ3+Lh eo.r d]>yaw::]_ eG_m,yb멛R9ݻF恾ZFq* ho9"lR DWǹYFgch\|+Иhs=ɭ A cee 8n}LG0;NkfSȲ,˲rr4MׅL-k}Ҁ]׿~gX(moGa=&{=[ֻ?35SO9mkaJC |>/+1:;,@-4 4˞p4\QnvЅZ~ywk1Q+ǽO{( -j cO\nq$mAqqqqqqNN$.2s0ݕK]ӬGwO<(\wxOH)4M4U&PhX7| |9s,r\.]?{نhiiiiiPڅٲwҔLeq~%%%%%%**p+////7wh4ǷovqFVJLVB}(0 0|>x<ʠcd{ӧEQQQѤI3fbX<~@MMMMMpzcYu#*{~Plʧo!f 8PWWWWWH&dR*+++++@j@T*^"H$ `uX̖n~[vuٲJw(,,,,,TaShꞏ6R*ȸ/2ɥ+yS~C !-d sX}:?+C| ZGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/uz.png0000755000175000017470000000265712161415523015344 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXMlTUt&6%N_Mb(F]~BÇ+XHChXЅ, Lڊ!B?F;:#δySFr=ss}aa٣FRi/BB!t!'04H$Dii:d2Z | BK8m+U8h!$ݽ"8)d%p0h׈ll\f D8p7AFab?20R8R9|~GVח~.:-?x/AejI{Q'$P% O]vT*(/F9+PUeYU\x^aݦiR4Osn;@6 #rDN=ґ)r\ ki0 1KPRJ%ɤۭC@zɟL_HښKIM?qT/^RI m۶#"$,ʲmsvM3D qP7"L' :y&M@ϬVѭ$t}>oٲ;FFL…PBPbX,LFjs +P_hx<XeY~`0 Xc%6oNLʕv+L&ɼcY}# j}xЕ(Lg&-[jێFh0tɔ\z  p8Csssss3el6kB\[CKZmFGGGGGa``````<%P6_JN7롦FCSXKJԿZͥkv I$Tf rL/lvqz(?0_z-KGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/nz.png0000755000175000017470000000315412161415523015326 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXml[! i҄R5 %mB4*MEl:- l%mCP;&J+u[biZԦiľ{p9uDoyyy??pqRJy;mwaa8VϛNqI!B1ux<^]JYei?RS%`귓C^)ǁvO6N$ 7y}X}9/շ=4m˂gƬ=0|| ę?éggG@v$8:] J_ ,~ vml܊|>?4F>ޝ_^&bLU  ,^/? ?%wު>us-|G+r۠ʦ _\D)S0g~Gғ|?~-ozԶKu@6}݋a e򷹟A,k);VE29V@)WBy?zĞ=X 1+:М@j\\ļ s죞pT_'PAňB5Hs=y2QWUUsa?r!4zep~{1(P3`#?6ȅ@Ԩ@u`EH\s.RUpcddrq ) C+酒$ˡ"_〬pIS`6ws1 Qgx/=p:ζ;@C8 P_|[8:kU\} dEHO- V.V86q8s@J!##D"a.LЊy `xWX, ,Rߓ+7?ӾPSSSSSJRd2YWwt$ M@w}oBpqL4M0aCO%m]^W=l۶m[ljrLd2krd27M~r;{ |wɊӍ^ _ Ҳti[[*JYѣ@ xe?-q!k0;'fH6[VZ/M`tbWI8C: i4`_w_c{ƨ{?ZH'sx_k__ *G؇O싘`]*oy}Fql2g}> ؿ~`b ?|xwgO?ٍ#@> >3],G4.xNx=@i@'.'.&vYvY}ʜ2dLGsKMnpOS[}A8UpK}Q?\kO:-kRn59,xj7C9= ѭjB@m۬GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bf.png0000755000175000017470000000223412161415523015264 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV?lUrGN,D,Ojt #YflgU#S} <;z/;[W?R?;f)Yq W~x|0?K`˘\Sw`4~'ه|o_Jc'88$2cKɤ9E@2ԱWegՉG[ 2Ji߼>&@F(,vE>=oB蹛(Ir\.ua".yUu{1W]SI۹iq~s~m۶mpqhZ*iz8("˻n6 ^Ho"`bo^|>O f:- (V</,?](JRT*@jZiYn70ayZUUUUM4MD" BPFp8\]wvX6ͮ=yZZVaa"RI_ !(É118뺮D-|@jZVJRT,˲,Kr\f? yh4 A`0 @l6=AG[tZo:L&dȏ 1B/b!V9{.N|#0?:hD@0àʇ'/)/ ^լGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/kg.png0000755000175000017470000000220212161415523015271 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXKhQ@iԖ0ՀA]"M)ݎ.u,\utwW".$(~(I"?I dd}L2[t׻9y%[%CEAΟǑiضEQEѲFgoY_cFgZVa~-m[@$D"[o?~u]nGo+.ySO8U\P Xn 1̃#%_7)}ǐ>p4{훋 @w`ǎH9 {~3B(`0(_ᇬo3o O#뷐pEaYx(T麮KHb m`RL?a[Z-ӻnٮm4Lνs{fBQEQvfnMSUUUU c~) ba !2{7D"x]Aem`^RmhQ8W 'iX}z?(/֦_-W\yWl]NY^Q("ݓ =Bx ^صeE hF4#?ۀnn`+Vfu9N>U}*2=Nl()9XX t[Viv69wWTF @K ÷ťvC΁3Ѻwte2ЦiӴic PSUFGet z^].q͛`R˞nzvGwVl9ǫ΃qzՐjH5YxۘFxDQlWWWiiii 9S GIHo/|.:O_7sJ@__P׫shǐ;)-jڀccc 7>`Wi5_S;UlX3kn6u^:t8np7 A#w V4v`qMqMq =UK_|7n1'p9},5v:c`Mdn /W1%gCQ&ɴdɬ,Tq<&kq u֔ (+W+Q)-IieO9!} @}gǸ3 (߲E}l6-DpXiO!'.*U:0> 8ە(ke9=2c m)Yy'LXVg`2L7z<+,˲,0>`0  KP"Ldnr#vr{i]mmmmm- JH$V.[VWbwŲ.rccccccI72 1qL/4VT* 0L& 0FvH$ffff%ׯSW[bwvJe8Y$F$$zx 'y8 (qx~&%‰_d2LtWWWWWE{ >HkI 8@:I%' I2'|=X,Bd!о} ByBg+ ٓC\dȅ6+'"_{&raRx,$]X#WYI`GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/de.png0000755000175000017470000000230312161415523015262 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMhGfV^ƊSJCUzKJprʱCcPB%`ZJ!H3ڒP@9 rɭI$ ֮~a<,l"zwy;oߛyߛog>RJٳbb̹(0q|z*!"3Gr\mqwjo9c@( B+##xߠ >|ز|X~[ؑVj @0VB OWXǽ: p|:?/n~DZ^uB˄1$-> X:H`mMh0+|3 o=yR5cL)UB*PkM5zڠ r /X Xsu9.rv? ~}Qv6>%_x;p0 ctte4MK@jS(mΫ'&ϽqM:F,w6p3U| _"pxbX,JŲ,KUEvpqkZ |~t]o&~9ɻs"STlck|af7!~su]ue%@ =  \.SUUUUEY^^^RT*qCv( d7_΋x\ht*@ 8p̙jնڵtZUt:bXGn&n?hiiaa`0 D"HF^OM%'Oڶm;b&d2##eY՞XvVވr't9uḮiiR*Lؽ2,dl6 $d2 f٤4JR)Bڔ) ieCImzZVBP(t sa E$"Ɔ!FQ9OBB.m}­Vi}+.^ڽO \O[M9,nB;?ད?}?ԵGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bn.png0000755000175000017470000000313112161415523015271 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXklSe眭kKGRV/Q4>bfQ$&L\`-@M"jtm K(ms[]/Rֹ-#?ss9p p YeY^1uEQEѴY'Ziy$I$ ?FC?p8KKD"v]/$뺦r\jX La_@$ezq7ls^~Lrz^`w~~Pi4|mɑJlFEl6HPzK\炐URtڃ'L!H}$O`)~>}2n T2[.DTUUUUzDbBJe+Wbx"'MMMM~~?tuuuuuA"atdr*` >l6fpnNZHd]?:C@ (,D"H$Ȭ"ž?XJ'B32K%C8 B,|W` NiY|m e BEBƒD Cggggg ڰM|yg293>9ڸ%66UpA^x/b'MCH? NO/ ;o9"7GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ma.png0000755000175000017470000000205712161415523015275 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLgIDATXVo@GU+2D!!րĔR(b(CRD 86h&*b鷼ܻw{;_s9}[\W}_$IɖUё_n]B1Q+l!rtVxqύtWpǎM[/Omxv ŞLk/yiϘ¹&@ "DB? b{=Zz5\~6Nyo|x0;fsjyr.Il'* WvlqQUUСO 0vz!@ %D8eI`~K\M4MӢf4MS.(qW{/y[q{":7.-.eB U]\Tr\Ts8yP( k0?$ TqR ;nmZVվuܿ/l.}E2)noO!JR)@H%hTXJvn͓U|/,NAzM$2&;|T08t~`E>-DGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bi.png0000755000175000017470000000313412161415523015267 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX[lTU=ӹejKNXxR5PD 4DbP!MUFLDjSA;ځܙ9LJæ0c۔h|Y{nna0 …*ךf4Fo徾@UU!G,D ttnmy>'_75MU!######ֽ&S.loT0 HݱŻk,w\f51T `xPHa8֨5>1[$$nO 0a΄SϘ:.>XzGzz"H$7@Buk izyxʴ0qBHmX |yr7 =,0EBcq6m:@҇TP^Zhw6rcj_l1}tÆ_a3l>{- ~揻pA<3bSk0Z\X{n}p z=ߓ>;֧ǎSۺJ3> 4]Bxr1A`{$lٳo9jiãCM'ކH^_w v–L J>*9X}14@wAVl hP+ CA-k B͖_T/LϝzX<61H(6ݛP X]]&% F@ː>Vz;p[nZT-el^dvQPg_ |dߗ[Ә;6w7}PճP/ö3MwMK8n9 l̴vr+OˍVk|||_]]]E= Ob09BAg` E}٦&oL 39<ݱ]PݹO lO[EEEEEEHW(ͦ'$V=Ϊ*!^ER'Ww.?عz<OZ@{{/n̴έWUl6Ɔzhmmmmm}B^MP',m61y.\~~~~~>p8,wfexh+999yȐ=竬q8fp8|>}"˗[{;#?jZVvRSSSSS@ .ӧEnnnnNN^|֚L({^NDB69s.pr\.ALO係t:PVVVVVqP(  BDkS/_ҐV/ ~hnnnnnjn^xA˖Kmj ^ZKt+J5%K{G~al?!' _!n؀!GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ro.png0000755000175000017470000000202712161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLOIDATXVOPgATi)Ď JLE,(eeJfvTU CNlIH@tHbBMcwx9-w}^' aY[+]kdYeYh& jB!ĻsYeYjUUUQ`^ u!oD"Sm ` xvvq(_n'Jm%w7jR:^v>B`art,O_6ӎwx9pçˏ ,| \^>0 e@ܜ }! pfԶG91մZzߝ$'ж(b(ty(qtq{2puuXND/Ams@+߼ 6is@u]1, `G&+ʓFbX Xڲ= QJ>#nHn/0F> ݇QOx<ٍc9GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/iq.png0000755000175000017470000000266612161415523015317 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_h[U?&麲Vtح S*Ёms tdǍ=2@AȚ 6Mm:H:B$Mӛ{|;K-[/ߜ_󻰊U4MӴݕmk)u]uqfo1.8TJ!P~,X:d2L&L&Qr)J.!@ ض+-++)ue/9{ DO@5AƸ SS@:~6i%$̀^ 7uTlck a`[ nE|>__p:s+vh_!ItE,wG5y9z|4)0X\ev#No>϶g#O0vbfN H;8, V!| 8~K4{@֬ p{qnF [h_wH9qJtMA>tJʑ3Rvi2wЕ!h*_R: zN@$RXV$24TU5ccaHOo`z}Z t8}Y uy(wxImJxw L[ب5x@Y{36*5'q-[,˽ˬmGñ!!ޖG X֦Mi^o;6|fi4{ R.O=0J80FP5@ Fif⊸"V+j`0 w-˲ rffAqu|{g_7.H)8vsgr{#m۶'*TLs&lmD"A1 0 ]FAwB.4xn];Y_&:b2_UUUUYwo*Ng2Æ0$D";,8 *X^j|>i&@{{{{{;d7oƝ;t:|̲,˲ ̪2BU8ʟ-ƱX,4M;r\NӺ(MAbZix|>p9zwyv呑Р)m#G>[{Eqs^sI~ta CerA=+K*Ԛ?GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tm.png0000755000175000017470000000251012161415523015312 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXOlTUnjvh*TkE6h$bQ X`c+WN `H!NI#8a0N'0:3ouq2[pos޽{yE,⾰,˲}X)۶mۖrnkղeB!c6 ܼd2̲e\>ϛy"`!WJJhkkkkk}= Vƍ[<7?;LUOjIiIR/w[g:NaC9NyW@#m:x`tEܩT*Je: y~'wß[ (GY_*ֲ)  d'x3E' .D~عcUVzf^ Lm&5X!HmWxM\yc`+OZZojJHJ)lh,W.!t! ^EqKgK h๻\Wx`dI P8[ضm h޳fͯ!Ь*;`OfW&PP'? ٲ01y8m8+C^+a)j;(ŧ)`O9ܬT3$p , mow-[DbtTJqDZQHtt_>gʯ$`VvthkגdXm۲\.?sfhhh(sX,`|||||yݑ=9،0s8 B!p]u]hiiiii>(''''7lл_*֭ۼ9A<ϛ0k:aW Sj"L<3Z8L&ɤei@/x<(JRɲh4ZkHXCH-;P( HRTj:mԶѡmݡ3-#GDC@UyoBgɘ{Ef? |=Js.E<< MbʼGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tt.png0000755000175000017470000000313712161415523015327 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXklTEsw-][BM `yyHHhDJ$D* HBb"Ay(]@cRK)[ݶ;~L [چr2ss3s M4M7G9bX,تu /B!'PW@^p$y);*@_ۇ_JÀX̜MJJ\o,kׯtfG!>[NTBnW 1˥~BӸ3g(pR.OXxMnd$Z}U1r "XQg4YϷgO *Νltp9W`eҨL rҒ-@2> @6ݖG"Eq@̲"K[R޹%M^+kxeCpG#`?TIm~ }$ 3Ł-.&pㆩAl؀r+u &23 OfWOI c7`îrّǒ?fÜƵDaa8f>}`b_5;a8v՝ />&ʢpzЗOyO}r麮wP v4VRAZ 62dN7(Z?s_ '*ωG"f̏&@FR3nNNNNNY_ 6ɲMy@'Ǐ C= C %_w&2i0y^׫ie: PXXXXXh4F5HDm*74UiOj>ݶ4KvŊ[L67^#deeeee80%lY4KZ~[&Rߕ_gq-wK{m~'T;C4zoѮ @fSGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ml.png0000755000175000017470000000212512161415523015304 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVkYv:q#5xS^GsYžޚU,!)t*$)T&Ûo8^|8 NEH$Iҽ{b8b̹,˲,x}a%^c`n3g]˲,%`j8#y]HRTqtpTM CKgjm,gicxt=.x'O="?`0_Dz˗oRZښ뺮OOi2K/"eIA&5&q 0 Cd'wkZVUX,E`}I*r`o@AL k({m۶ 4Fqh ǛtZ୭jd2L-qo+T6O|$ݦ"tà{x|(G,Q'8>vj4GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/br.png0000755000175000017470000000272312161415523015303 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL IDATX]lU[V:t[*$cTXaGD.40>0(r%!& 2 B#QG&AQdu0dvX}ݺ}x{h׭kh<_S$&1*dYey&M 5]Uu:NSK&SW-_$I$:FB.z@ vUkc&$(kִD)޻'9*Gmh=QRow~)csYkNN/D"h@9hpDY&,X~/A/dX23}n}|?@J:dh 33N[nxɂ3g6qA֭O𜡵Yxd۹&^׷ B9E - ܍3'kv6&c< eIȞU``ޕy쟪6w5^Yt[#!|0|Yzgi׃]+vnr%7Iu1z{5v[>zeZgNY(].*;~ fi;]:x nu)_.KNp{W,,=0q7((E@6{ҷ Knz@%1T};.R ͡hS(Ն̑HR^l6Or\ICzzz,:N!U矇 K7o S7jz-B 47ׁpZ:,maXV՚|hQk50}A ijRU՚a'W[L(j?aQh` =ٜg69zNtBggggg'h/d|ZB!dl_~-Ol_qqqqqh@xhT-h>}ݺ~?s8zp8x<YcBH `l6d2L&l6 /֢H\@MM}}}}}}Z|bED}'8QFV4.rɲ82MN `v;L BPH+*****$) !H2  n秉m4Y^Ϋ@CC}{,bqb({X3gdhRmrJ{H..D'_ix# a!G?1Tgy zYOGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/nc.png0000755000175000017470000000275312161415523015303 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL#IDATX[lTEsN{ť\j!k/ A -j @m5>(RA%DEHtk0n`bfam{9qe{/wwqw1"4M4mzk[s)u]u4ǖn49zӴ !*c'~NN(J XB4t:xҦڧa  /6 I3)rNy]K<!ˋ ɔQ9m|O~ks'X};H$vl&UHtj 84ǽ=  Lmӽ÷-9 w7Jo_=5]Z3A.9xyƂ̃5J+Dnredy^ (C-333S Cu5PQ>}fYI~ N a>#k:K"XJ/!~1j(*****{z`0,P[͖->w,w㳓s)+$R`g'䟃m),1_<*o\.ʕ--ia>Bw$)\\W\\\\\PyyV=ujii__(zu>YNBsg"+V8zZf_ -FQM" G Qm<H$@GGGGG;Kld^yy,>nV$aQh۶ClvKV%RދTrJN|jxj4ؤ; VrP"Qg!GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bt.png0000755000175000017470000000273112161415523015304 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]lU3]tnQl15 R!Q+%D%)UXҍ1hP#^$7B| DF[B@[Rlw;;ׇ¶ݦ {ss,c˘`  al6ifn>^4b1EQEq̆;H$Dq]u9 D.r"0Mx<0Y={}B 7#a*l!PQ*[\d4 z"t:NϵzX:r `ضӖJ٢gxMƶ`to|G`x*q^ݫ/{}ԽPw_ m=gGށSշ}O?Ȯl(*~#ů/_nW1&f89z9FiFֶgsl&$>^ p YzJaЦ 2V̎c [=r Y~ ՏT6COȺAݕ.x:ѡCs(K 3%R&b4;E'`i.lfL>Hvo86C߭ Onw߼ %>}J#_vƻIpN& (X=FQ5MV̪ͬC,:p F*[z䡂րzb `: A7Y eS!]fl-d4TYPUKZkl,FkI29+w:gVnW^/-9 s4}.y~ّJ=̥yBaaHdsT M+/״;{{{{Lp8p8놜q$il{k;zeree%t,60 toZo_, ~8@ @( B֍, Ln,Ӈ,k~t:iivn7466666B29999Y_oyVjjjjnq]|nFhtƱTVވRA9=^*d%<Ȏ8 ʒY@/tuuuuu|JR*JvoJ7?dkHj H$ =΢&[Z^OMY|b=TUUUUUI?3Z9p,%/B~"4]nG!Òg? BH734iS 6GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ye.png0000755000175000017470000000202612161415523015311 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLNIDATXV;oPMDaCuȚ&Jv9{mWd"b:)@oSAa˷{p-$I$igG\W9eYeϛ.$t{c1F~Mׯfl6>lm۶IOK`sy@4F+ mYjn y1 ~gƪ&ʊ\?q8\f u]x1O?s 0 8~H)xU5ig4纕Jjgxg8eb~999=-ZV,iv^`蠪B$),˲/c I⏛L&eYnw,r\yU/g% <}kXӹW*_\u]<+hZ,iRT.{(rR@h4 I&`007z_u4Dt2nU4nQpxyykjmӧ|^Q|>z^l[LdM1zدQaXVUUUU@4MӀH$Dt:Nnt=ֿ~ekkkkOm BhYeYa,MD G׳*1g8 &㺦i)IT2!gwd^(bflXz^Or\.clII jLZ{8jZ6pN=!3W<.奐߾B"H$dLJ۷lx@,- I$F(h{AvMH&0>e>u_|pGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/md.png0000755000175000017470000000260612161415523015300 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVmh[U~ιRqKoG7ڵhQd.:vc Q6eC_ )~fhR?6Y[h6H2m&I\Z>޼=`=A)9=>c$IdYX[/%BDA70;D"HEE,.| BD?-Wkҵi?YvSl^VבB|ݥF)'o|F`cO)uqT]MѲ` $"pme@petCU^0KL[E*lXX̻ۏ^^RvNo*_5g:$؜}kn,˲JJ( tdVz5p(4r ؽouE>J^$!uuEE3BEq8Je9z^HBT'vJ{ |⡩}@]/(Rp?Km_F7FXȐ yM4Y泉ĪDW}S?i[c$cq- 7X_7[ 4p{`73*daaJD8TNU;;'''',KeY%izzzzj p/ =1^+ HK2Iǹ\.%+9L $wUVVVVZz`4ؘ+^P( _dqOK!sWEQ@UUUU*vn XZZZjmٯ\!MMX,|>WXiiĂY" x^&BԓHG1@ (G ~?x<PL&$dkS x.i+%5x<`0\n{{/_./s{Z3444444U. qcpʊJ w X@&t!p@$sNT- " ww֮Nj_~#q׌޼yofY8XH$Ib8b͹,˲,tIv+ی11 6=VjVW-˶m4Ncts"H$q]Z̺p{{w4w̡y*^H,"_~?j7#w{ GOTM8#ӧ:,1atoz 3~ m:>~\ p.z1@u9mbW?:z3 l~e ީ}\wFjwt__ &/z0flXU!?|S7smx? v^^ndn,9iRV O'&N_(5hT4ĉ CU AIRYeo_8X9 I⏛H$ޞinw$ \kO=oou%u]֠~޹_q"TдhT._.JruEQE+J\fĄ(&'>/xt]<"vj2b> Nzݶ,~0yE|h4Fm1Eozc YkUUUU4M4 pH&dvΝ?{Ϟp,˶=* Bai4M4Y ׋*1L3ȥKL4a$QɄ\b~z=ur<ԱGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/as.png0000755000175000017470000000311412161415523015276 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX[lUgv;-[TKYhAD"d%Aӈ5!#5%(&<&t% m#k-]l;mnwg| [Z?sw|qq^((*֦il6arhHT㟁*1^ %Q4$&C HL*a$t`;Vtׇӳn˯=\,f1!4M4mVdڶu]uݲ&J޲dx\!Py7h4L$dRd B۶er\---/a͛^^w~U9,K?mȭ[l6͎כ!d`q_3 h_9)5[WB5t @[k:Zke̟?b D-Pގ|61<='sl<tх ^b4!ll&!C{cضdYp-=`q{Ck^08(9XQoqH?gGB͙7 uzu@unGwۅt100,˲,4]p#==iEBGWH% ~?*?3 rO@> Ur$D>!n49s._B(EL Cuk<?+-jlp 3 _mbAhlllllt:bX0=p{g6~ml9>?9i5}*ۮL&dT& (47tMsÆ`в 0 C׻ABMP&-L8y;zUJ^6:WTVEEEży7D2yX{{{o~C$D"LY|b*p~S4Mӄhiiiiiᡡ+NаlYSS"H$OwtttttbX,w:^DA_)$ 򹽐$N& BI9D+@ >AI:NӚ&D!7!Ũ6UT*J cʎR^ʑ){zx<'IC,N)g%E!JΔ|n*?Ѩ5: )u+9vOtzzP"$QB}PWGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ve.png0000755000175000017470000000301212161415523015302 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLBIDATX]lTEsݽ[JK P"*XZ0b$B"$BB&`D#MDM@D$(t i]肴 Gw–m˹s̙9g.b-4M4RXJbX cx#7 sPH!P#$0^m/>Q矞?lIHzҳMmw Y)bB<QN]r|fvhHڊ.RƽCyaRZ⧦'] +b e? W)Ci/xoa{Pws:HNxZ wGIY{ٮ}p-#CmM ul:;  /gC`9h`oI6B+kzAj\`2/%2ǞD}O#<;aa8fKO~sx_rG~|4 q75 ?["GYz#`[ɡaF ٺ^7ϛcƌiVف#`JWn!~:xB\< YlA'sl#`9.&ӁTMDBv8@ 'I@7y]Ϟ{ad`!fU< ød[~=lfXӴR)!JR)D%p 3p:+*κή.ðZVbx<.|>2HJ7 +>u555555*5sLСҠ, Hjunz{{{{{!1odq+bjc5V4u]up:NʠX,3nj~ꔨ\ ##GZ[[[[[ @ VU7P|nMVI^42= D"HhZsssssT% eUAImh4f:nkL&pN#\.˥daJhӦt;2?ZUق"W\꽲w+>n8~zlҭ:~+TGB"qg~ȽG3ƤGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ch.png0000755000175000017470000000256712161415523015300 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]hWM&foilSWU^ (x#!l0k2&]9 @pVh A QF76_M1i4l'9y='`Ahi(Rl6f[7Mkx\!PẏXOh4O$dR\ϖ/iv٬孮.]_U)'Ϟ4m7-/ªvTwWw^ 0mzkg>sg^Ds\.BBX}(y8+77쿶@\U0?O]v.?%PWW~γ޳M&?kNN܉܉ lRD 2yT(@JK ueeغc_?#: 0@;5[`2 x`mW^6x.]I')ލ{7D@*,вJI-4Mt4f[kBN?.;G_wf$|[ρܯ9MOG@~7# .cבO1ߔG`sp8!u]kjᙙtjnlp3m.wؐ}.%U|@[+_>r8a1=<qb10 b/PJܺ}o)pGyGJ< ) Nb+w%yb@6)!fY*` Cכu}߾ѱ1ӴvfH$Dz!VŅ)^)ڧPVq%ڪ]3O$ɋA= AdzڸpJp뺮Cccccc#|>33t:Z6ؑH$puaaΪQuPK˅:F|g͆p8i,D+BP(======Pd2 QMrrPPV5*JRLNNNNNղ}`T, 8#.eVeJދRqye+>ū'U^BA>,/ /ta}GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/al.png0000755000175000017470000000266112161415523015275 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_h[U?$&]Sӕ@:jv[6ԮsT"P:e0CQ=L:Dq0F&>Xд)uM$m{}9M6+ߗ_|ֱu)a{eڲ0եWL7Mx\!Pq,X=;wh4ݸ1H&I B[iBmmmmmaZM+,pjjz:M ]E;x7C:E/Iy/X\gd/94$ 0mvvGfgl6]_Gg?@y.LjZowك0^fqq-rF|`[H^h펳`s1p>xZGK$PYYⲝHRU=\q6JZ^08kC1xe ۂڣj0c@#z˪۶ָu 0mRvM/&#櫰OMcm`3Xcw\W`V9.G&ml kGPyT!vC?k?}Ps㬗f8ff94Mxt80Pբ>B2{Η;jxCW+<0áw*xMgP^yorVuu~r~YvFLJ]u 7}\%ۗ3؉T_Gæ5nnZ#Te(J\@l`pqzFIi㙙b1=7Re 9v]_Y'΍s:br"49m5UU_0 PV@y~]Аi꺮1<<<<4`e*yJ svmmmmmm*.t<>2é^=O$ɞ`P׃`0H$D _duU``^dRkv~|>@ Tj~~~>0 vjmM$dƍP( 4-bcUY" *}zP(,gi" 8ᰔe\{  t:NK-D!7AQCIUbT+uLLLLLL,gN[>}`LƖꡱQæɓcKUIg{QH.]ɵOٕ_ M*-J.Nߛ][q/jK?UGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/fm.png0000755000175000017470000000233012161415523015274 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXOhSY5 0B)RP؍n&vUNfB +"(t * L[h 2ھj/z6mla66?{'8aqjyjKiiylJ%!Bq;bX,O.]uu? }3R>$d2y7j˗mǁ߇4wDW ^Ȓ,fԎ|h4yPuhaV̊oLbX ``t``u]崬/:*%S?\bggNlĔ/KsF Բ }} pG RR/@?^J/͇{i$`~Uǃ>} \@l,@u:-|%_92}ߏF 4;+S]]Xc 3gf ?sg NB ڶm|֑G"aXifkCB|)l^3zccHKZ&ktaxt:NG;;8F!W|8ܺo~V=[;-R?s@^PwF@~ y3Zh+WWV|߲,˲Lsuuuue677777UJKJED۽KLuZ~94 ]*i)5dT.ger\.BP(YVbz4?0ضm6$D"L&@VV*Obdddr\v7oB!qi֕/ooz' Oey|>2eEz^ #fY!ڵѩ4$*JR=󔙚Rvz߭Аʮ5B*JR:N JB5FտW|/(NH'{Xۃ+zh"?K?;GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gw.png0000755000175000017470000000233212161415523015311 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMlEf7ެbـ=H UP*zbPŖ8q{AB\@(b# H؆n!UKm63f'ر-y3ͼqC I$IZX#cdYeY a)&!"߁{fٜ,۶m! DgR qP0wnl.~^>T; 3+o|>sߋVmu]\7Bx|d,9psx> O̿q o-#2āGw>8y;| B1|d;c y?xUyOX?tcrA)~scc8K{d`ʃjٳr\P((\V h4;d`DIs}t:N D4ou]tvj+F9w4-˶][[[[+P( ^uyG7L,~)*ii@,b@&d2@nۧNq7oO,˲׋bX 0 W,"+:DžD =9sq]u]$2T*J% r9`v]I|A`Rv^jZ@Vj=8-.rfl s}d2z|rADn)~[O->ofS|$)x069x:ă_*GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bw.png0000755000175000017470000000213112161415523015301 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVAhG}3kWDF#h0TYSB PZJbҋ!$܋ACt/  VzHri9B, @zEk[ڕ׫_+" ^.o1qOs9qC\W=OQEQ׉{BW2cG;Xw[[JRIH-fx|s4MSF`W}X?_4{t@ﭡ|Ci{<8' KдTJӎVZuEQEk5fl6 :̼=#>3r\4&ݾz0 ǎ۝e麢躮:@h4/2nv7򨱪hi@"H$|>^wbaaaNӱr\.ggM4Msd3/"gn&$q0 0$K{G/T*JP,"m۶mKRT*JB{&3'$բvn^mND.ni۷76vj!d23rcĿ3"\<ϼc(; 0(|.Q{{xkEVGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ki.png0000755000175000017470000000304012161415523015274 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLXIDATXmlSUޮFS[Ʉpb2H/a AhH11&(º 16\n¶ֵ[_|yz{9ILb#BQEQ Q$bu]UUUU5mlFk᯻[!q ;6RR`0v]cBiք6lmmo!đsP77(GvXOZV5o:i'Z<"'A 6W8 <ls{1 6]$>V .@ìYo޽l?0Lfv{8B;]wl QO+G?S@4C+N]IǺʄr?>GUe?x˗u*ǡwS4冸%;ihn23- !ͨuO߱ysRNk58ZCQy5оly Wы'LˇgSM9 L4mO8::9M4MEU߾|UUPSR' 4!2OJʟL>ַ,,W {"e_xTl/z|QS#j[ڨ,=&_t:KCh&&&&*٬ }K*} GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/py.png0000755000175000017470000000277712161415523015341 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL7IDATX[lE}ew[ ؠn&UhM4P B <1} Pc># b"`Kհդ (ڒrۥ{^0˙9ߜ3nnpq+,5su]ztickmŔRJ)ǵP'p`eeCLp,ۑsDo 2_@قI[[cdI/=}E0\ر^ߧx:SѿNݤѭKD'?Ϗ=V$rͿkψGR!""2Edwѽ"]]Ct8*M|}Wvm)gAsxiݟ=g=д/`Y)9NvDr@;:w FEX4ֺq\W)8rxe;twӪ NcQP@ڮ%o j:r D4pn`=1B^eX˟@ zO ؅>_iiix<뺐ۑ;/\<Ͽ dQ/0نeh%Cؤ<,2K6rqҮTrxmz8RLh4D<ctl>_7wcgi4MvX#>BI|;Zl6C# {zx<u{{{{{z`````` wd7\+7mveM)t,ft[&,^Ν8 y ǽE;!{*puArs7P R =_ʯV/_ 6_ց… b ࡕ:C}xa]@i -`?W]w@u度N(;c`U͑N _tX^Hܳd}׷m_R?_e+ Geć(XbRڽ,C@ƣ`H5[eg*/lMM(2ڛc[cMo>Vz(y^*U68 w+ `zA)lyZ 6pV϶ATwE7kj_ F}!HnFBb ⹉4/v&cjjXeYϧ(*SlݵZnĶRXq~˻1HO*Z>xb57-󏅫n39Op?MM_Q] ˖}e4flx^WQ4MUU9= ?޵c[a83G|I=zNOk˖=[sX}nZ)v+ 9] ŵvvM?p盚u]4[e>Q({[u]:ɠc/\_)J&sy 7 q #FQEqJf r\NQ(M; /d2Ϧ{m޿/^ܹzBPBmm^b:*#Wd՝#eoO)>)@rS2H4]gM@~;{mz]IVZ'e`Y28}C"uWKCy7"`"H$#AyFo#;;o %%@^gnֹ/ ze*s" ^*@_~ <@)cVߍe~@̤۠|-ϟ+4qY@ڠVpX[@o@^h(Gw @bVK\78+L Z&sKW1@If`7Dz\_[޶QZ]Ds_)g(pA50IK*PQs1g~4XcUua=QtN[GN yTbѳAy7/6{ ]C)`k.Ni'{ـ1J u[dnO[B<bXv="Sɽio_h40 !dP(*,vwDr@-+j{{{{x^*JR\.y" z^pq8\Ht($ՖJR)B,8aJVjNtБ˝rL<8U;,͞i,d2jZ-PPPPPPFbh4ZS#MTVVVVT̙ò,8al6M3 0Ljc1bG3(XDHC!vn'IdOܑ ]]]]]]d2L$q4f ҵ)b4h!ѤH$Dp8'ЊYpU^.At:q 5B`UdIZH]䉊O\iA@<~τx||v@|F'Gxx#M\0 GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pl.png0000755000175000017470000000212712161415523015311 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMhGfڬ\APAHGK!RKEC `A/Ы qK(%R!P$l @dH+i;y+uwy3oޛy?,psXp9o˙ȹ)('K11 vrz^<Xe< t:v 6|{>rg;gc׍_OǏ뺮;i?%d|ķ%f:8$=qܖۚ_û]U8NI.39ݵ6 ʏ~3&`2 | s۽S E!"\QH/q]l躮_^jZ<s(@[ŕEcRq.vcX\r\"gj D T(M;o8Cn퀝wJudߗ͛f,CR8V "L.Z'9+o>$'Ϗ*? }:=@l:6gGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ps.png0000755000175000017470000000224312161415523015317 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVAhG}kש !mAzAbz0.5j J(ҋ{!P^{*9$(%Kni# Nֶ+ɫF_%BK/~gY$I51r]1\eY=dKQ'ΫVc1cd/_V*JrJf۶M~<;Q<BP(W~x~8ݓskXDGZV\7cmB߭u|\Ɨ相 n t UK AMXǝ6{ 8pi <#|;ǘ8ZV@]pg`as /z8%}@GܼɄp\4M4%Z&rL&$0l6ͦ$RT*X6 @ K&Q98P,b:a0η^ᰰ>>H$>] ݿy~[NyōڧRN?? (4HWO-GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/vi.png0000755000175000017470000000314312161415523015313 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXklU3ӝ݅--}.I%v14tQ hĦh6~6w EcCDИBQJEB M V>? Kh˙{=s3p7qBeY͑cPEQ]_ucɉu<s恺V]RʙqeIoo1cO+s;ssӚ5+Am~vHr`fֻ}-rre "Unף of5~L2iiy#pG9S~'Z;>-ԲkH)D gfWjC2w r }_K6[ k7뺮;(,e)s^z1Pu7N?}ۣ03 2w漏 ee'\򣐗*{fc)b/BlNYNi=|6n˲*$#"L`%x;Z- 7aڅ4WE;mq{aߦA/'S@;ZTRS} f\.p^p|m{o2cyb`zY*Rׁ Ha3 ]~ %,a 02 4M4Mx"BS5,/?uԩN]WUUUUE^0;r73 HP2alosn[ Vr+----5u`0 UUza#ŝpL,6ft:@4:444TryKEE BP8sssss@bcYE>yYWf;_jkkkkk!%b1Ydn  BE΋D"HYg6 /*(0t܍PXXXXX(IPM"6)o)I"\b^ɒOM/^@Ƃx|$GnL&/ ϯGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/rw.png0000755000175000017470000000244112161415523015325 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLYIDATXMhe3L6qc>?j1L4`m%R[=hbуi]"9i"BK<U@5&n݅M'~uvûo6Po_|?ϼvM'OmjiTg)WGK&EQEƱJD"hiT*[VH}uhooooom[[[._e[Lx$[ N|Եqor9;N q];jDGVW|>h#Eu(~xDY߷Y+VeIJu]û O$^Xw W\t7Q)B:ėO\3X{"c ~X'=}TC躞R࿕瓟վ`>m@E_}}}ziA7YC[,Gzw?`'p8b]}[z ([ ~i lvC2pq|^L__.New8*έŒammmmmm044444l&<((===={YeR.MMMMMM֚ifѰe~z(/4Ç18D"ʖ ~ ! B!r\NUGGGGGG|6%*W ɲ F_:NF:9AO l:;߾-xaa"=[vAo䚲|{>e'OkMtӕBÒ7BV A+u-GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/aw.png0000755000175000017470000000236312161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL+IDATXAlEMMi0EH4DiH "J0R@Hnpr@** >RR)ISve񦍝]pN8uCfga [aaG몱iy[W֛yj!BX\.m+bQ( !|)=]Wy-xv>87ex#i7OY3 l{y IؤvoUwr\^WG* 87+~-ޑWs_=$?> <Nf]й1#cǾ[nU%ɏAM& ?s@6T?wѠ)U/ !?O ik'y(EyDa8O? 6@=ؤ;wTm. =l1 vs@b0x8!V)7,<0M!`׉?ϘR Nh~(^!zzl۶7RTjyhY----i[z_?>4 fYP7jZW=_SFѨ#Tt+V0 >P(MLLL>_<d2 FVBLo\Bز,˲m۶! B!bX WBP(/\H$Dqq* QgPǛDu"4Bq\7JR)%SvD+$d2 T*Ja Qݛ[C[ZVoEHtzU2Ǐ+{W_);; p8u*P-t!V@@Y۪mS}Q\m>=:~Z)Z!ڮ?_ z(C *YވGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sv.png0000755000175000017470000000270412161415523015327 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?ޭf,L,w:mdHEL  ( d&FHd!LH$b4 &h"f^K6IA{pzVэ-_w~Ϲaa]VRiNN\>:b1!B1bnߎD"Hdxܶm[,Z_Jׅ*Q\ ޺uN4 n4ß%OBv&<R$(:n|Ƚ{t:NO"!T=! ;dZ3.il̈fl]¿*R!Vgܯwʥ[_ ĪܺL;rb)o{w&"f (crԏM,R^u~YJmv8(b^" G8a~Uxh^w˗C>)<]~@JyHq^y*L&R?* A4.{@ *]6 O꜏Gh`ͽPZ:<Fz@q^oWw<,n+r+kl1qG{x@ -kŊ^x<4z{appppp 9@)eޟzꜬ^SSSSS@KԨDbzVq>r-x`0m":V@!?z^,˲,~@ ёFeK-Y}t{{{{{{aa4FY:EL+@/q'a%StWf(H&d0Z[[[[[M||ЭNHVD"H$>9ElQt7_55R^6] Nob.-UTjZ^6tͧ诱"$=Й "?3i~\GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/hu.png0000755000175000017470000000203212161415523015305 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLRIDATXVOP\G lȨ"A,U2*-kWt#*KTSD8!!uDAI;{ᄏ{~G I$IܤdYeukGw]گB!8~z^m-˲7,<\xq:5Z4"-S"n f*3 }r8 ssLC:41ϣ^f<O'IYh 4ԃhSM/L !. n$"I,Y'A2)쮒i[X\4M{/0QUpXEehΓlhވTe JRH0MTNyUԁos[~77ys8p$L-7дEM{T*eUEQY>>>>.ZV!{Y& Χ}yt:N3L$(ѭmoEzn[֗/|>Tj Xtxc}XUUUUM4MbX,t]uZYՏZn[ַoBP(LMi0goD ۃ㇂+Ls˗q 0 CdȤP,"d2 t:NGr\."؛AA` jm۶mRT*?RߓJ$HCdd2u|P }p{V֡}l.~FSm? (t:فD6"QGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ee.png0000755000175000017470000000231012161415523015261 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMhGfV^ũ*(AhiN9^C! B ))=4驴CC HO94@`gmKfr^K6fޛyߛowRJٳbfbι(0q|~ !" =r\.GGU˲,ηk!2sƀP( l[xGFA ./?{fF^rOo[x8Vj @p\#ܼ]m6`[/~&]ܽ'ֱP:v@seBc?`!jzQs[. SSSׁ!J(|c1S([%M<@Ah$k9_*6#͕x7pXu}0 K@jQ(ᱼ {<~05 n| w] 6+a Zx`ƖF b1u4MSUEJp״^(C#3^o'~yg99TW1o 9l۶m[V" Kmz8Or\>Ϙ*b>JRY(XZgd;_͋x\ht"V wLRZ֝; 鴪t: bX-Ln=\4M]u]`0D"z^?~\?yZV-L&dFFL4M쬼e=-I!L)"cۆaA<2aw_Ȱf,L&$i6fT*JqkS4 'AjZ B|03HD؍ a< h4ux /l/K[ɼAr9DA}lo=_x. kPGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/il.png0000755000175000017470000000271612161415523015306 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]HTi93 Mn͎$ `&BPD޸DU{]DRMxQlI.M-*eGsftΙs:(.{9{yX:(44#ðǖzJi7=-B8C,D,b6D"!,k,7?eaسNgc%i_]eZtn.uٺ_TOKOf&M .KleFǏsWv vG>~Ltzq|+$ ]pwW'N؀ F). CabjbJf<ź<#`=Qk4g' {yX@n_V@Q:y,ּΣq ::I06umuopkV/_,:$[-xGKı,N}>'0gOAoT='\{1ܽyoֲڣ_t@ݵke`mbYɜѱLkL`j||.vrafÛBUeUAײ:pFϡqc].U8ZhSg''WiizBN={'g.v :O`2n>OȻ*PV() Whtv6oRx<EqTUUAYo7==Srv(,>i'm ވ7lYiVJ(>v4FP( IM4D2pw3Cb%qr0L[k%@y/lXe[`a20`$2MrTuxxxxh!.h'fd(˵fi]iIyn|>ƍNODGGoooo$rE"H$H73Ʌx9+n`0 ~hjjjjjٙJ:>S4M2ee(+(skDn!d< 6q #FQE-p8#JR)Eimmmmm"ARCJY|T[id2L&addddd$KN^u[~ZeeeeeeO6Νw%R:r\rR|n%?oDAR.~/JHV77:/6fGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/dm.png0000755000175000017470000000304012161415523015271 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLXIDATXmhSgϽ55_jMbg_8&"2!86̉20S()Yu&lm~(2QgSu*+n󅶮Qik㪩&i&1mj[Z6/>s{.a cx&EQezgPUUUU]Jpn B@x p8D$0*oR0tqk[3a0G>Y@z%!^ƧO!i4ܙ]w/6xfQ>3Ӹ T>㷛ljD"H t?LBu軄 *^_\aW(WC/L*Mc 8Ug-3@JZ,n +޶Q#/#N`4/ŀt!t\9aճ=i!z-xr [f,L7N luTɺ7Ϲ]8 2O86ƍ J5O"?t:ǍkiA6[ZZZh*/ JU.&[Y,k쁜\X^ҹw jC,7ט~_F9vn+ 5tL@n~m63kkkkkkJyOvn {!;;;;; #B:Ng~ӹreccccSki677775A{{{{{;of&^Ĥ^'W\\\\\ x<KɂС9~|ii(G"ǎ||>A$bndr'0ll68N px<F ֯].UTlY8G"N[`0 & ʍ(+(Bv"2X!~W2> z^/XbX,SJ!RgSb0`!,`6nhmmmmm#g͛Ms'* Lk۷GjPI۟^bmTJjI%K:zّg쁡E"ݪwGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/be.png0000755000175000017470000000222312161415523015261 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVoI}kŷ6"J et""MWX&)5JWDHwQ 7NJ}R"Til9 HN6zٽbX|w_o~5q!A>m>v]QEQtLv~qy.c1FqLNNtVVz=0 םU٫`D"H6 A}uM/K2<}9(a%| Z,-aC(/ޑp8H1^vM [+[+1#椏:DO1%zXm4 ,/u迁 ZZG1ѥpqEQW F\ >&plndluUUU5L}d(ˑH$";Nonq8#hI|(y6qP@엵[kTP-fYE9:u]3(p~ Lo73?|>v]m-p:wu| xܘs۶mۦH( :TuuUUwI$IŃ}jZ-cRryH}Ѿ\.(L&yϟ5MsmE҃ngoT*J*IjZfl_d)0:|XeYUUUUx<|>~߿s{e2L:}^ZVB>rL*HNx AL&pl[4MZy@-zb,XeY JRĘWy?4 ~R :4M4Fh48mmq.pH&9rRT*"?#p ={y 3m%^^q:}A~:u$ntO?U>uy u?T4qGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ao.png0000755000175000017470000000232112161415523015271 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL IDATXVOU2;(+ەdd6K#Bzh1KScK][i"\&'_oq~4!xk0!-_IH>'u8ZK\ wQ X g {,˲@@D1Vf̃sCNW3c`|a"~:./߽VVVEQ>TUU'&@eADQi{C>MvmӖ ?x<ͦi$9i'@{^+>]U9vnnlc{Zd/iIP^8xՁ(ʹsRT.[$I$bR@^!=<`boѺ|w]"H$͌DxmҞ`pa!l;]y3yI|jZ u"F ) geYePEQ  B! JR)zSX,9t:~NP( >i"R>:>,x9{qᘦ P,"d2 0gaf,c$LOI 2IjvnVj3˜iTD"?A=Dh4J~\p mlbn8V⹑bT\u4kIÉLχA8}_@wGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/hn.png0000755000175000017470000000270012161415523015300 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?ޭ` :p"  &:Dd3&hbH&&YMX"Yk6ޮݽp{֭+[4w{Ϲ,`FhiΝ4n۳KeOoNx\!PyLh4F+* 0 r6?Pm6MG[\k_Tby ]k h^UX mJkl'L2 x-78qò,˲(@ ߒ{c?ǀL:.r@/0AuDih}w󎥧3ssKmK/ֿ_>˵G.1 ,&ro$?CyGI&^~Qpq&u;+K0 e8\˗A){ZzizYMr:F%:}Mʞeo+{5OI9x7//h7ڍv)\~ؘ{;]{S'A۫[ / K< #kV^+~FT0Qe_,oC&wQxR1::l۶mLt]5r+83@<Z~ tPc%E uA^6.G@0_SAqwal9<ڲꁬV-) BT*o.---4KuRoga}k&FlV`SHF)J 2]lP&@ccccccYh,\ 9ӛV<@8&Avpg399џ1[R.`i*U Z[Sn?0`.rz0  @$D"ܐSJ00/w'|>Uu+*o'qDgggg r@ p8a87qgSp/vn^JhnnnnnTj||||F{ohhhhX)H$ ٮX,ŲUgՍ:BM"*l"f( BF'_ڠ(NiM~_\n*烢!V(^2L&0444444w;Wm#'&y\=+?Y8ڻG~[,ʹ/rɥ+9_}D搦VrTB:=7= y%|0~>lGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/fj.png0000755000175000017470000000310212161415523015267 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLzIDATXklUwfw [ۭXl 5`B -DI >B *F4 Ƅ*JRXT0VYavݝpٲP_9sϜsy܁*EQZ麵6MUUUU5kKiח0b1!Bq%ĵ p8O$ 0k5o4 ^uKk x\ww$?ol gF̀;k/[Zmb浑),L5w”3şONen1'ЀèR;?Ӌȅ l6^_?a;3 26l F !`9VޗF__/~؍_y4e& PF0ş=rd;xW2䓽]@ :JlAzjIK JǓO4l($ l_zkO 13~Q0]\̸z,4-. qvwbj8|,Dm} ]xI/.9i7=%kG)Ht@ PV<)HՌR 2Ne>d̹-pAQ: gGq7E?lreۯu D!;hta˥(*O1\ˀlu -@=kɂ㠧Xg &;#|_|nh$:'@ 8{@|v(-|'BP(ip8Nh*P-,Yrlԋ!@-?Y{QA zhw `5ez\vR&`ڇbyƃtH$4+U [y#xocos+9=+^݊[:]u]B|s洴ij[[[[k+tvvvvvuCJдwz&}r~UUUUUUiYVf5:T-.,??mۚM @:::::: ndp&`!_p8|><ZHzzzzN;&****g͊D1 A=D"\`Yy#J}z!'̞-,z( B"GfOBsssss3Ձ-NiE"}!}Qd2^vX̒+W*+d&cɓ'~'B+V\:Ė岤mҖw_Kz'˧KC R^~9dC:=0=7#GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/unknown.png0000755000175000017470000000245512161415523016401 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLeIDATXVK[f&NFMJvJAW\D|Pܔ,\ٍ(*ōtQ Bpč ĕ@.B&w%( NZ3y4b<>c69g~7 g<^,˲7*ׄpq=,gizsayp߿˲,ryy"J[c0 'DfٲY}(Wߔogg?{I~ 5NMioڛ2^@H !=f` X'< Oζ]>?/..... Y$o!Ux!8)ҽ޽޽NH"ãã#c?4N$O)wvfe|y81k|&}~[BP/ˍˍˍ@qF7΍< +r+++<0;; 555@?O$TÇ``0NNNNNNUodqh`ϷA@EQjZ NR˯gիD"PՍP( EQ1,i~mv!_3:qX,XLOOvn7`d2Legfffff&FFԠ6Ĉj%d2 ۷_Puuuuuu5t {sAX,Tr\rT>|.YOWC2nT? |d 1F=7D]GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/nl.png0000755000175000017470000000237512161415523015314 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL5IDATXV]UtBShE!N`nRR?XdC6E}Z H}Ai(lXSV6]Ia&d򳓹>ܽI6I%~/g{=߹;6 A)9GnjI$Imwb^;-޶z!"Xҙb6f{iuj@Ag̶x,{}.,,-.^M^>~;rH>_j.}E=Хˏ찶<1@/ \xYcuB`nsݗ 8GoC o%~ g_|<ō$Ƹ /Зπ% z'PSuppύ:H`ykPU _}w=޳osMm۶mRI"0)+?_]^HO y S"S<Ӝq64Ʈ{}tr 6a k&4M۱cv6L&+DEq:NJeY$ s><@N` WcI[^ \~~K08ޖ]8@?$E~+3 ÐeQ8?qs>zA|F?jjV:IQh˲,Hh*4մCffffqۖeYeIJ$xd2L7ds|AaLLĵuq@ bf?ot Tז] ŢiNNNOOOG"D"N4`Fw0pc8ZƊ(hivn7  P~6|b4o܈Fh0 0FbYq# x;QZ"Ä Dzd2Tl[/B,b@( B@_ZVp8LH6AHCXѐvR^T*J@*JRM9z(>~sݻ͠뺮"O\BN?bvݪD\<٬xoZ" aa|7T76/ d1 oB<GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/do.png0000755000175000017470000000307512161415523015303 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLuIDATXilTUsog@)[ .첊MEQQ ưHI5aJDE"[C-N,tz?.)mSs p pChiZn5Fnm4!Bh Ѷ.UWWWWWw BHV~:P4Mpn;6[6awߟ65GKm ˃LO' ;q{vp@sM/?\ 6730X|vŠp\Ϧ Wr?} 5Y<H=8w K3$nȮo8 lms!_kI.D`-auSOguqeiGA>sb MA|X5 |/C-w΢) ') 4t;-ut)ZbX_O/<Bͥ|2J(c A$GK2_[7-yr l~qM0ꩥ7@}U.9t\h >5 dw=ІAGsj/o,L= 2+'׼ Z,9"p72y|UG]]0M4DMu!ygCxާvz.1S\.%\'Mz }ud(sZ(Mm~c'0udJ))a:9|:&:Nөiv:D_5`۹rói@D^L:sH<`6@h_% 3G9Ƭ5 x ƕPE:huq322222~nT­a9P[[XXXXX(DUUUUuu"cUɵkih_HJJJJJ)@ @MM tHI1iJKKKLnv]?uԩ2C^+8wL_o[h4VUJWkrv=;C[7mCE=D"C|G KqGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/an.png0000755000175000017470000000300412161415523015267 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLʔ o] bq y/~g説F8&;ڙ:D~`pyeE/&ToeEkP>o,@U) 9ro#ǧ)Y o R`B`[= ,| Eצ>Nw}t;x;F5Nv]]iuf&&( K;K;E`ce?Kw[[|WcW5 ;6ex P|ްPeuvvhF<](tvIOmumukV08~Nn k}?ao߁5׎]?Va*S!\ח|mxkzB$I_x +SQr ̈fIs ZZ. AAF({桖8JvNwn6[ûpg X-VU@eYY&y(T0I&rEAx~xxx~ &g6 Mɴ_?]' `մ04 p8FOq8p8|> /2=l̐5EQE@$IjZV qF$f\SaC$Dݽyy`0 βu3KۉF|fH(qdx<c[Ft:N'`l6I&dvn'$ $kH6Z/b1zvTOe{ۯj*''qcL&dbqҠ:xpSNG%meR^d3T1\q/&.$=`υdrqz E^=MfGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bs.png0000755000175000017470000000251312161415523015301 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_TU?^w*#Xr׶Zq!X(A!va u-,j@i@T, %XpwYcflRΟ;p8N{;?sυ,`B4Mv#ۖcu]uǙռJ\mi!Bq? ܾJRL6*;UVj:455555ٶՕ_T[cc>vv @e';CV1<“,OBdG- ,$ hh/'p| z> p($tsu{Mqix}}9s9 0`Hxd/Ez~Yh{tx+rބn0wGM Բ nXO~n?l;8]l}ȓk%p%q3;w}>YN:rx3Xvpnf':hX2}&8x]ju|q4]Vh?h}@nw/HwmTi5T}XW)ٞS <^ lxkX,69Y1505u]ЏG=։u+Ȃ}@<XR!})@,xYPaRv}wZS7OTJ=kD*A}>ՐfyDAGGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/er.png0000755000175000017470000000271012161415523015302 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXMLTW{/3s"(*QT%MFĴImv&RݸMmIҮv]cMeX`hpFtƙ{8s&6n9=;3BUUUUDBMS4M caq!TEQc. x$p8Dd4jOCQz4 J$Dbɜ+ӧ]~=>Rymy3@ mֿb=yOJJS*Ձ?h_D&&d2/G";[]ʊn^[p$uH=!TSz/8 nnnm7Ȧ0G+VH7 3P`}[qϵoF:v/{tFW=^/t)gӱLSxYQ@PF`@`ñG_Kipqݣ.Uz/XwAVu,qA]Xͩc =ܰR+f{z|{"<,vz?{Գ<8;4zpbZآ 0 0BU4@p܂B;wn\sn{0'p_֝a5xbE`Mmz L~RTWve{^TD-???_UVM40A!f_ T ~_^Jz`w?Cdn @} h| F1Z)8*p8GaX( Y<H;ow߁b,]YiP:q7>0_M<\a&$D"!PA v{uݾ{wcVjj n⅗<iKe9N) 3kjD''^Twd8?rY.rYiarc9N[av͘'Mp{ۯRb3<ɯ^Y y PJ)>$~ $s5H?t{8,< gߵu]?v+0DjIȲ,-&`,}4E'D"Wi* ه(\5/^b0,;#?Dcຮ뺢ACT>7W BH(fT*Jrg`aw6KRuX, F7BJ=m~t}eYmӹ\.MNi7謸E|Xog7+Wa$-W|H&dhv[RT*"_ !h [qqRT*vqs++_}_:C8b\Bw>bN=DްyUۤDA? ahG7/ rE0GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bg.png0000755000175000017470000000203312161415523015262 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLSIDATXV;OP\G LMD( XtVlPԍdkÉ 0&v 8vӃ$MԨ t{y^׸5I$IZ_eYe3A=k4BGGz^OO۶8%T*J.I'&AM|w?-r_|c3*rznvހ<V}rudۏݺO/hyDc\ؼC`ǐ> 1Kc\|a?F )X?>0H[zr2tyI, 7@dyv bnN4ƍ_u]{F(,a%6[#X@&d2ɉi`W༧{is0U[>03 ຮ Q1~67iW*((|pppPZVtCv:H3w&30^^Ol6Xs~hp+]V<ON48R,"PV*8t#8 檪 hiH$rp~~vvvv>Y w..ڶm;ǏRT*MLif`37"gJ\ diIP㸮뺮KxtGƅr\.|>HjZT( d3'W گl6M0 0:^$' mX t:NB^]~$ň9/Gm>^7NOEH/9~Ah DGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pw.png0000755000175000017470000000262512161415523015327 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXmlSevZ[-Jx"!CBHLBd'*%148 I0EBLY'31]@wkv/[[>9ys09aZȲ,mJUL&ɤi+'4#$I$& Q$55Gˑ!''IOKc??ܸfT*HCIg,ԓt>֏3ò/E[oK Cᗖ?/u{s.`==u\_f\@CԚPсrj'f𾸩+v@\J>ب;oZK~v d?]`KsvFytݘ:X/_3n+ቯ; }@1yk<[|S'Ҿٚ󜨔Grׯ3XJa3}a{Fq.PSjCS:FqiVW'&Sw {Ȇg{};k`epV5 p|hWvZDHU/@\.鬭-ݙ2Bjl6YX;Уo}d?T͹6W Z գݡ9^p'amb_j c|gbfe6xEQ,c7RHܸ}oL֟T9ON ;u &g8PsQuPUUUU(`ܒr96@0ibL Dh4 YP7 ĹFNQlk3 Btlv{}D2yD___g|>H$@2iQ(W[[V NtBSSSSStwwwwwC:=111jEcuD"<}lVEQcxB_-D'Jqd BP($ˢe}"~z&d2Y핤(/1B BʍZxT*JA8vعӐ==-_mm4+3vn1Bw<uu[)y/JK 9įM*CBN^ |5d23ӃFgG;ez)GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/lv.png0000755000175000017470000000260012161415523015313 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXh[U?4}Җ+ f&nÍ#"P+LXa 6S7n\&MAIQ[2G.˯6m8_w;` kXCii/$w-뺮뎳4Urr#dBb?L&lֲ,K\w,>P8iےP+YL*^tQ aFOqqA 3/EEhzA{yIr\^lfyқ23bh/`^,wez* 0@CP>3.ˊhiQO3աcf1pO'ρ9Jv2C4ŭdz~eҤ4a7Lk;6pZ;Jb?5d;έ[㑈ZS)#Sb ޾=>>1QҀ٧>O__ֳf ALb<ԿPz#Ƀ]>^'=xi"hΦR[12u\affJ&λobJB[[[[[BP(l&l +0=fWi7111198^z$LNB"H$ '|ÊV^<  ضm۶dT+[w`&Z֥K####0x<%'U TZ0 04M4P[7EooooOϮ]l6kYW64RT*U52&ʠW UD(gch4j*wQalllll S,Ţ Qۛ ZCQzy\.A,b$9rDc|uwKZ*IzJ-@ T![ѹK,>UQOͼm.^6[Ύ?d,}$.?_P,y ܥPbwGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tc.png0000755000175000017470000000312012161415523015276 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVmle=w:a[`K ݤC3!AT$^EHE݂$D@Q(d"%`0l-16diKnׇقws f0{aaԕ$kEaYeYY\}L !x z^7// B!EP{EeXTmVV~M&â( spEf:w `YẂۀ=<\J{rgj<wD9@8+Ve ZJR>^Q߻XԉD"H/C}}m#@C'}$Sv8W8plުY|)y"i?Xn/ h.r  k  O6Tmz6܃)`0'erk|`Ƭkv($ T.//zO^vkg'sO#5`7'cP˄8h˿ \P&2`H 0ʫ?q;|pY+P#O3i3e:4 Z+< I$I4Z=&TRb2\p2qDZt:xӚyd2h4z D"ŋUl6.\, Cn۳DQE1vވT.$A󹻐GAaT9D/tuuuuù&b1iiiiii!$'!Q-Sp8rSEC*oT˩T ڕvAtTjtrTN|.>D7ݠ0|&bS^fpN鞴bGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sh.png0000755000175000017470000000302612161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLNIDATXmlSUޮt[( [7nlCB|AR d /Am~ /`4KTLP!(: .ҡkڮ{p{ѭ,[4~ss?\۸a((+Wd뺪jڭYek_8,B8B:7`00!FQi[oC9_5 IÚoi;;C!:I:o 9|KM/>8&+?Kps1"tNJ@/@}f z8555555VkWW( ͆0 27ӓkdpڇQwOAEzC2L&20K(-u8,immmz5l6fUmkkkz!0nK\y}9N)Fa)~ml6[~~mm8D{4444x7DA~%?#!2oH.GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bo.png0000755000175000017470000000270412161415523015277 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXmh[U$MdTfm[Y3Ɗ( GQ(vKDXEd"2Ne!cA@6aSޱ]^=~=M6--_p?n1/΁ɻ { 80Uxq'"(YMV@gIXYm,p7ݳ*+ Za7dOK~e#pCFO^Y;/8vZڝ9 taօNBy,)m. We>u#DTTvvNv`ltx"z~yL7׶[o< Xm<w̤)F XbwHL%kzL<zH /6-[&+C cd7_}{l Q)qx+p<]eYeyhoooool6mlO 6mۖJRNg<ㅃUgՋ:BM*!l☦aah-H$D\.iZWWWWWT(/E %UCJQmxL&@4Fla˽{~+=^SM={>b[R*(z/ɥ\*BĦ.!,=P_P"/?0*GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pk.png0000755000175000017470000000274412161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]LSg純vЁnbhdUA4D:c4hČa3eZpnXpřx2P"11(QQ@?svqZ)Ne7o}>?{`ǬeYj}cM3 AUf1/gZ~$I$8fB;g@ X D"aд 0$^Tl6fukVV|c&O> BO˚ Lo!ly'06K2޲}|>MN} 5 JOKg^;2665555553 H^$, K=<~t1T kS[6AoU*&jjqFhl{ 'OhiE괙q0CKʎY{ˎwUR3v~d33AN̘8!UjAٚ8G4Mr fXӓÚX~6gim'ﹶHĂ ,YYի ^޵G58)@׊ߺVݶmJuWqzAi(n]kȾ6,DDbXddށhC!%vDi~>rFZ1Blpl?T,>US41 K@ܑ`049$ y9y ٞKCT=iuŚ)@1r%gslj:ծ4B-x<E$"Y$+ʖ-^L&d0y088888 ti/$%\^'p8YZ:Rz'ˢe:~ <z0bX,&NtJR6AHC(H:e/FQ~y:>s]ݿ[29nv' ]BGusnU1Hx/u'eMH:sXτXz#S|BatGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ms.png0000755000175000017470000000302612161415523015314 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLNIDATX{lSU?޵t :¦! YDBPLD$D@b0D%hgPm斠Svݎ[{-{=\883BQEQa}RUUUUӜ|<|ӴńBDD"H$O$ i0Bη,ӄrðG]?? wΥHt3\}PY2^,' NuAg|?//NlqV/3v~Xio әL&Low< ԯ?۵ 2zg 9󶗯&W, ", 7P mI&_.gP̜)[wUQV^=@ѣkC3.,GoA8vG妢zׇPb\(^`~ZSp,+`Y[YQA_>h_kyyZ8u!Yj:;si-迅3Ւ aszK.7-_TjO/ 7O5Ŀ*;|7!Y3UN(;nc[?ە8ٻnz{tCǡ=W7K2OH6G4ziۭ(*D \\,2\i B BB]z,W[/0wŶ U5~~F MӴiӎ d2orUXXX(N*Xihse2 Y^ e+U͏`Y(N2Fu]םά' ykxwGdl&GھqA;eͲfYaDp MB**4mn4NT՞p8 ;gt^]]]]] @I)hx׬Dbkmu:[[[[[[! B!H$>ܣɍG+`#>Ur\.4M4z^!^^QSSS`exWySH<|{:wu]u}_}=}nnVp@y)5Z ir?k-@^Pˎ hmNa<9xyGw[<, HvqEHǑ_b-ϣNIl߁MС0I+|(@AG>/kvt;) 44jvqgJ5xɯp‰g'wX#K@y ߝ3@ ?(c.v<0 x8cpnv~}0<`A1/7P( sst:0GApns6N4Z t+5^@Gn{ò?W:>u +P8BV`0 $I.uآ8 B{O85<5̍꺪J&[Y~d[޴x0^ff hi˄-/'OŘa\.󳳳33@.r!LT%YWS B+yFLJjiiiij)eYQ._]x<ǁl6fE72{Yb`f[  (z@8Àr?>5E>qBeYQD"p:%I$u݈^-$jXѴt:N9L&$F(T*JbX,#V vv;0i0f ZJRT2L&ǏӔ#_==(߾@ 8UP =SCme쨹/jŞ3ޭؾzqyk}H 3|#XRٙ#VN GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mt.png0000755000175000017470000000266512161415523015325 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]lUcȜ0B6qs#YLTH h F $IbcԠ0D@"J"q`Qͬ@juЍ~l]/uƛo=9;wtEׅy*g[B{ irapNwNZz2q ͿH9@< LbO#[ (ҶgG:1<#ejm۶m0!R$6pa_PQ,! 4p} V^XeuwPәo& #Nșh{  ^GA.拗H[/|S{k˿>qH\&ˣr6`Tn}}}}}æW9v+#y |pkk|9P۶اGk㏨3x?jژeJO&dRg B#,DzVm4Mt8:;! AP/Ar$ _3Ԥ ЖUUё( |2Fc[[[[}>|>z{{{{{!S/ub:^kd[;N eYeeeeee CC#ӻrE.[Fmmmmmmp8;_DA\-$2_ȊB' @0ȔD+~------H$ax^+D&75ASCKݐlT.^<ӓfĶmJJa%_ 1( 9+˥۪eN{I.ݒOMwN(i|!٠a-'?HL/,/ uGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mw.png0000755000175000017470000000224312161415523015320 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXoEǿoő*ⷊD 8AħJ޹Abs,ae-YjnYrx3Y{ %gx͛NuSM$I$ݸA-ۦʲ,˲̦İCu:1ƘcRlvZV횦i ;~,xu L&I&k$6{p/X'Q/Ju?=Wݬ# p8/$(vۙoQn{E_??>Okhݼ=X)!,-׉o_s_K|Mmbzx7bE4oyg8aK \8#x=WNȹoO N~ÇTx뻥F]N^xgY4ƧaNb=k88$2cy n~|:3fqb\Y>2. Gbig꺮F(,@R.=>H5@&d2Xm}p}/䵽dt&'w]l۶m[x"tc\i׮Uj8("l6&@7䨃hFio\6f"3Dw:k+_t]Ӽ}{oooTRRT*Fh4ӤXVUUUU@4MӀD"H$\.\իnkr\.G"aM,2+nDAa "?ll0*u]uI[FߑJJRBP( eY%IbX,2M {DiZz^z^#lm7_(ܽ{t:x>>dR . q6OKxx Aaq̇ɲNf7/ ]]7WGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cu.png0000755000175000017470000000255412161415523015311 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV_L[U{6tRf7\E:S%貑i6;ƒ,f2D! qqL܃gf SĄ)QfĸL/ va-{}8 +j|wuqqǎёѱa ^t5O&;/Me;aןj/Fsv3̟c^B%IJKC!YżDQ4fy`Qٝ/%}B۞53]Vߺ~b;-j> 1r\ܜ( I`(fTK'Oۀ hMo0`?:YhJ{/4M4 #ʖ!IՒ cc. >>>6Dh4 r̮,@VٸxO6vnFt8hq&˷m;z4O$TőO|>"H$Tpgcg;@/4EQE@$IfxŅ{׮CDBU~7EQ%0,Y?wYN峚ȑ# GdYeX˨|"@ z{{{{{T*J8z^BrɐϟL̲Zd2p8^1'wpPDD+8NɂJ;sb2[s_䊋gvcq։SI3|5X !*[7^V)s/GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sd.png0000755000175000017470000000272412161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL IDATXKlTU̴2)fB#mpy 51ZE7&hԀ"qALЅH:CA B[:Ṃ3t]==wϹ0iLcLhiZe5J$nZ7oPH!Pq8{`093D"5 DLv|Kix<O"afd3{aNz -l0EH.Q yϊ?|,L!CLFr,=\ኔ wr.`N,!4ߤ&.&?~k/e7H$ J` d-(z7mjiiiim5Mnu!G;Ti9/ugx_YYYYYJ@,,@ Jy1< #|>|>HĺL9Vctct:z^˃*/_&JJJJ׬ HY32 0 cذRV݈JA5:*T%RPLda5N"Y<@/477777C]]]]]x<״z!R{SaZCdVK/FQxdE>^ -֭Z(*****RvaPMyA\VŶ"{Sm>/`P==,x7HsXPʧC<>yPԄ˗GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/li.png0000755000175000017470000000240612161415523015302 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL>IDATXk\U?:M ^``k)mDFAE@҅fqᏡRqgA\Xt'fFlY4Ḯ23vj6#3ouqfI&c&ys=sλv aaJbeԿZZu iIk>\Pn7/ >#wGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ni.png0000755000175000017470000000237412161415523015310 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL4IDATXVMhGfWZ".j:zhRI 4ӖRՇ*t.ѤBnIS M{՗J!1)ےJ64@`kH+a4^YJI{ޛ73  8trNyyyMgotzBaq N`kRT*PUUer0QjBi~SٯpsZU}6y$>݈vŋNt$@E&7npMب0pc]ĮǮ75qVvIauuΟ='P–'9 Z9XЁA7%Ҁ~sfX/ :놱Q(.Ĥp(`'4T+?ջlY~x:xJK.P}V}f?`po~5GWɷd!X.# 2>ڞ0 0 x3vF~$Wt>e,6%b h|#%dzZ$ibYeMM)rq <h;jj赨rShjx64<ɣBP(vj(@$/}O +Vx7;vnPw2]u]g,$0م$MOKҩS\.  |P(@\.}!{3[Ę]=Dz p%4Zzly<ϡC덆޿JR t: JR*}c[藏EQE$I$|> D"@ӶWW̱cFd2L&t*(UL`NdnuYeY82Jl6fx<GjZL&$!`' FYAFm~flbX,Q2?O^)Jnӧ{  cP4s2{/3cvT*kI? Vqh&__/HGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cd.png0000755000175000017470000000262312161415523015265 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX[lTEsmJE6J P"^x0!JCL4'5FZ41hb54FAjh7bܮ,mv9{Ƈvw3s`Ŵ0 0;qXJ4MtݙWLw]/B!tS!fND"H$O3LFH9Sf^-! f {Jrڵd>?w,/,8^1d8bH @ .R@}}~Audh(J$ N!vr#UBF\ @ ~q`ϰ#oo@\ psc|ꥻ^.֗(Qy>cYxOL 436| ɥbun8 ~!be Ot'qc H9EQIlwARmXھyюrwoG\w쇁rp8/'Rhz [)z\u]3 A.o@XUM 7s)Q6--18ζm{Μh4)e/yH'^ߺS9AȽ4XB c B%rd:>@2LZZ&^1彵.QJXYy'~R>S9%%㨍3<rwqN` U¶l{˖^׵,˲,ӌD"^x 9TXiB}g\Y'w׫BRJcܪھ=J3Ç;;;;C! BP!Q/>:0x K^۶mFFnаbt:ɜ>pYY2L&ue+ 7 ݉Bx&'iPqh4F CLɛBWWWWW`0\. ]Bnj/M -uAQl6f!b سGɶ^J^ 7j!mgB{b5)[Z,^);kDAZN? ]Rnl _Y_ku&:GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gu.png0000755000175000017470000000274312161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXmlSUkǠ{)06I( * !|0,DbX5h4 gb!1[4Ӹ (b[,ֽ]{pw֭ck<=y9,f1BeY3Gf bX,] ln78(I$I".'ᢢX,n T*Jdx<I֦dAHCXAdR˵_"H$?!PGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gr.png0000755000175000017470000000240212161415523015302 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL:IDATXMH\W=}( :W&P[C̦h BvBf4U6i :C4I4{]\dlK77<>#4M4mxXJ%9v]]u]wݭW[8lV!Pql؝7L&ɴr|>[v[B8 `$m۷ ~llxŽa2ܬmS?OAVݻr\.ϯC@8~Bj{||Z<8{`Zr\ @7u1l-j*Ç7p]=hߺ߸?X!Բ?pSצ? pƑ L3Hb+\ıGR@ɎV܊=>u\(JRIETA:L4fggg 1 0 ]K$ Nirs2`e7'`31z<_P3-K&:URV  f\>D,fX,A*JRˎ,/w%0upzcx4M4"H$Օ̌>v/x<onm۶*# *xPNg+ӧNL&ɤI@+LNNNNNB4FT,Ţ QMZZPPV%W( ,.....n'^ZoFkkҾ|P( YV_JōK,~U٦~Q-.^ٽOO&6H-ﰲϷBePݑoC2aȰ/GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/nr.png0000755000175000017470000000244612161415523015321 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL^IDATXMh\UubN*:}Ф6 @J)XYXTJW*"]#cW.-]t" 6XhgR4$3ͻ.nnd2Is=s9}MlbEaFwZ9ZKiivd9URB!c9LN&D"}{:d2Z j Xmit]@qؾ\;wItC^=_)P'2;r2 ݟzA@"@Y06xhŎ+ͣ}]sx8i~` HI)C\VcH,D;;:3g!xۻ@vÝphQc{<y֌w>t3¹B,`fFqKf/U߂/<l=G~nynN75׆?ϑgʅYg?vzz뺮k)?{nI.A^}n'8#RrGb3Z+Dmm-cch4͖,@zv]SN4|۶ :NB'N,~J*[(/ɥkQirq xHK )=\˭O7&/ pEUVGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/kh.png0000755000175000017470000000265312161415523015304 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]hUM_Ȑ,PK@Uu P4(zq# ()8(2A&`km6qѮi6MK?bM7lJ)Kil6ajj\0LBXv$D"tәL&RU!nvn/_QnɩdζiFQ"[\eqon; Ba2 av@&_NKh A3q; FA< -IV7 'SG+˺زEz=h>{r,AޢP9Tw߄B < .@lwYF ۣ]lpSðx*+ǣht~~KijWUUUe. qzwso8%_xfo[천[c/V d2t:fg ܼuxߛ^9U])|ްvn/*%-)@S;@n[V|^Ep[LڂtuF"p86666@<`K4(dѮST fS)JU____[{@*Ng2G0 bd2lb`ʱJd]u]xr\.~ommmm{t&sr( Bv{2L&ŅUeՋ*Fv*ٷOGh4ijLx p8~r\N@ 7VӯUAVkrl6%L:z'z5[‚wwz:E-t!655&V%^is7|ʮ:-nÉu+^0T![J_M_x㑂xGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ug.png0000755000175000017470000000256112161415523015313 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?^vh ,qȊH jfa`i0}X@xhy0Dc $3}%.R BX{}8=ڭ+[49~,f1IbdblۚifYS[oYbdRQEQdLMΝx<Rt:=UZ"m۲z^uu 844X'%*52H$8mLB@&.yt myJ*99;[R4ȶm{iDDB" 06n-Ku]5m``` A/d)m "Ҏ/xbү_S~_+DI)1mn[&T:}tOOOO0`0 B,bNYRbrR5v8 0 <ぎlvUSZZZZ/omMRt…޺D"H$Jee(+(+3De!d>D!ӌD"HDUe˄y"BP(@ `N>ݭ(ڔ6_ RʂTZ2L&h4FǭSخ^MMŽ+7Y)AHhC,].aViTߥ_85֤r" ai'?/|-ӛy|QT]^rGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ge.png0000755000175000017470000000312312161415523015266 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV}Le]^B[(c수LΠB Yt>ɖEt.ۢl,seq,F) Ȧ͂ Zʸ?n/J3~<}}{>~0-hiJ]IVa%ٗH&e{~?EQE<7^XQEE3[2-I6%eJ yZo22OɌrdZX+ lL`W-vZjK/怉La+ٽn#|! xU|֮M>'KF_ } K$H> ˲,F#M3 EkiJj3нZ{v:KceSۆ|qZ )jf礥_wNε,a4@6P]PTN^r\pF3 fYa`2n9˳oo9coa> uС5Y\b ,fbbHeё#GȽM|vhAXV6M$qrv߫ ,,zP[+++&X3$>vÂ(` ݒs!@+$I$LHPh-|Nϯ_t:̲,˲  R"cQRW\~?$L&)5Dɖe<DQ}í%F>Ldk8xyZVP(**RwwS@ ͭ)) &UcD-$A򹽐k)8r\.MrWjkkkkk]$D"4]WWWWWGQ$HOB "ICQ-`0n٧;UgϿۯ\UNLr`N#l6FhP)TS3yUѨJH]{O.b'r#~xn/$=L緃t>";//9GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/hr.png0000755000175000017470000000253612161415523015313 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV_L[U{K ]BͪI`̇YG&E}q̥cd&4a|0TbO̽8 E`$f6Bs{[J/ d~/=|~ a{ AA8qT)EQEM^r;#Y_y4! }d2L67g2l6@v ~pJ5 p:NSUl7 xʊߌhCٓZ@=ZT*J[@4Śbk׌=4Ou}Ưtfo|p(<o<+8 )@^9o5vy^5b|^Q2.Jy` w/`Ha ȟۇK{_KEV@[#Kەsev7o^}|W:n_{xVnf+@/ 5 Cp?z6qif (;  ^P€pHOP&|3]nj>{.H@:y~?]FA{X;)ĭْ6Y円h4- j $(n|uq۾Orp+ pƳ@P^-P3@/`〹_:..B x<͖J)HsQO}-{P8H)@/rOJ }re}sBm-3Ԡ=er[,I$I(F">=== JR0 @<@6ndr 0T-bdYep8|>(|E#Gd2L6;1133333c6+(w߈\_-$\ȱcGUh4>2&wP( SX,!0SK#;/r9 b ;&]:KK;vn7Qhhh%fj[ri/-_8$B\n? z(wo=_|UP;iGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ly.png0000755000175000017470000000167312161415523015327 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVo@~wQH"nPQG,QmҬ`ȆZ1e( R`;\_ v u[ݽwwwXc5RzrGǮ+ 3[0e8|~B8 xx4MӴ0MD=*p8t:N6bQuǗҷKmL|-|y~8."Bx<\ +C}^t3eՅ:HurEDOO;^oq'T 9o $aMLBIqJEqoR^BP(^Ou]hH$y=gয়7X9}Nxyϒ뺻m۶`ot_00vth4ͦ㈢( ZV v.!',dbhxvbX,b2onTUUGWn%qoyyYV"(t:i7{@*Lƒ$IcRT*P*Jh450 ӼjZ-u]u1V_D ENpضR-r@Vz^*JRذ,˲,JeYe?7a0 5PbA¨`0 vnOryf|yv^\.ˡBgg"[Qn ?pC(?_M {馁04Qx.V5?hP6,GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/dz.png0000755000175000017470000000234612161415523015316 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXMlEolhdA],DB*ȡR H/H@E%>T $D%C%Z=$q`Iloػ&vlc򿼝73o7p UUUU=^ 1mM4MR%,q^:((ҏj( ,@? ลP+5F~4 `۵kYy#npaa|5Ck7|7LkG[%Pۋ66D k'\C_tx`=ӝn\8rIxX_oeYeݪi5**@>0eXҝol̿h3P0 r˅Nrg`~fv<t^\sș#@\@ vR\t\Ngxg7~)KUY~OD怡pܦc=6 B =gccKK뺮뚶D"H%C-H7{}9}\+NDh.[[]]]]t&^>???z88d#-f`Ntaax<011111ݻJ_H&d7o.,,,,,8T*J ʎ(#(V!3QO9SQ8B4F*S&d_D"H`0|>U5 B!EMZZ! HRktiiB,b{ 19)WoB6k~iQBSS RJV/*KKj}$k7I:]9;,ey9d!oNm-Pxtۭӕ0GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mn.png0000755000175000017470000000235312161415523015311 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL#IDATXVOUf6Y ֋a 4B)"TXX BOPP$ R&.x4(HYQG BM$$563$zxyM2$$]~}}x&DQE52 &$I$0o^. ܏FW.麮s9JOdz6̸ +jUU@̿Ÿ`"w:N3q UT6KFkDDN8Dy埈A&CGkp;T:[Z0N;d\2>7]L~?& g1~/}xEut J_rn?Xvtj`iN(JRe2ؙꮷYnM (֝C?h;(2/ p>?uxFs]An%W 7FE@ ZMUUUn44Yj,bP*JnNx' nvP( iZ^/, 58 kqF|>;hucn3~p~ZMˀpvwo+˼6H8?8ZNcfV6GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mg.png0000755000175000017470000000224112161415523015276 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVOe}3tY]sQ8EMN ^dK.]/T`!R0A`nVyփnrKN),t*Mt'3d×&C~3_3 O  \Wמ'(;R\|?`1ƨI>4MӴn4My0i0|s] H$ px<>4:p}iZRK.G|;W9>~2n|DbXcxn]n>\qǂ2o ϋ= }8ZK^y ;9/ ÞՋ?<)=y!|lL&D$ hNw^=W`mug_cȻ8 _|O9[~^6fD" 4V,loFko˒T.2jZ`F/mLk_ ֲ,˲ (( 8r띜llKK._v]߯T*J%u]u0MnD ˂Nb|i"W0.QUUUUA#vF+Tj  Bl۶m[JRTbl\ Hdi AReYeflqs;un<޽E+RT*Eu|p _bFdCcŸ9eGyhi"A0A^g qSGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ae.png0000755000175000017470000000216712161415523015267 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMlWn X*U i MoT #cg3"!q)HO,F",ے%`n<lq[7oqC|$Its.˲,˞7Ӻ yv1#?իVjt,˲%޳`sy@<+ӣ|k-qů>5a҇pi۷^덯 15vm o_fs|XX`0;v'._穟K'>{'~#$E-+XƗ?ߏ}غj?xb xF`4ϷYϬgցߞ\I|G֝ sZm{08xSF|A9.ytkRkiGfj$HȲ,jɖ₵ f$Im:N33;;i"fݱqUBs<f~6S8#IBP(06Z {4IR ϶m۶z^ |Yp.wz% ~cOH&d21y"J6@V⩑bhx}aZ}^aP&>)8;@mt2qp|#ezZGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ir.png0000755000175000017470000000254012161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXOlGGM\q3RKTU UU^(ԅp!C*q^"@P'*8@MPũ\ ;a7 bR$_z P( 9z9|bb¶r6-.= ǀަTlGhsw.pdgbІ@ /U>*߶ȫWJR,P:vӲ.ܼrsrSLjxV忪k޳bymmu8-CuY0mqla@$ 0ukj?ȳWN^F[_LyVA8ƹ6hyK'JKƱjZwǏ2)b\-Rʣ/Oײ Γ'CC~Rȳѽtgw n BB|L_q~{]`JH1 Hqgę{A5g@q2lVboLRe5??]˫Y-˲6mj=knnn6 x<Y%:q4qG<E%8H@ޖT"D9Ub% k`"MbX,kim6M4j盿՝>?>})y){߽^>~{E-r 88Do` UeÖup:id2L: ^Uknuy::;;;;;v%H6͖JB+NO }}}}iRT*\.A^dUu_ި|>XeY`0x<C4;;;{>8(hc߾BP(zm۶m{ޱVVZAm:BxnKql6f CL000000D"H@S\.ˆL&ɤ}9ЬY733333cccccc58ޮxnNZ=D"H$CЙ3bҢXjn{/K׼uu{BÚ/VA_joGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/fi.png0000755000175000017470000000255712161415523015303 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVALG}^0$'-XK(n U@HCPE* rzHAH4BT4=DJ !Udljl5^ÂqZ»ϛ=q]@g,:neY׀o{1<d2tD#a~mK7/7{Ď|n޸>ފK"[d+|ΛƟx^u!p=iw"0cfx"pܧ x2cWގn^3gx>2OuׯB8;j0~'G#elwgg`뺮q.IBO,R?]]3Wvh UUM]f' Th4\%I`kakLM Xs/M4Mvv 0dYC yEBk?sҽs{ =88T !OĄ^P*J+˲,˒Tj @ t`XKtPhtNRh+Ǐ|^7MZYY]]]e9yRT*č,_-@6VEQ@UUUUD"H$L&dfh4N>SΝ3MӴW BPD 0 ß:K7"uAA;lճLqt]us2a^ȰP,"f,0jZ\.1&Hd!m۶mr\.w sss_~.ǏΐJRCHΝ!XLXm%;/d*> V&& &|7ah ?XqWGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ba.png0000755000175000017470000000313012161415523015253 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX[lTEsNwK- E*6K$&H7 bY-Dhx+$,FyPBB! 7 %al^۳s|8 [ |gn_9ppwi-Zd j뺮K94yp르 B@v+//FQ`C%`!ZoRv݆al33xZv0<o怨clZi%r@{M%H1t%n՜\_|wfz̮*.gAggggg'D֋rLmڷYZpmp8x<((((((z!1ò~(----)D"h- BaY" H*TU K8~Yʇ v_mdEFGtZZ+!d -Y]ݶWCЁVY+R;wύzܘy<> p_HGOZܻ2rN=ɟ<`9A{. [3X spAx~7 7xøA袗C rql 4'{ن4PD!,]4mp08(1Q_$pKX`##en+g p|qjU8@_􋒔X( tȼ0 0 C,!4qryZrRZg?pܑ?ܽ5 qm|G-#`ͤ2Q\zٙ_]bn4MV@N4y5At<':g#KE8ݬ']Vb_4u> 𠻬+~b[.Dpf,2wnBB S9ՕWܓMw.\.uuuuuuEҥ~?4>MV`bwӦή.ðl6b@ @N+ JJN Sv)u]uD&:$tnb---->|> @<.'܊:x,C?nvz^ ɱuQQQQQ^^]bsYYp8O9VUQeP3 Df"qt~MS%rD/Accccc#XST*Ҵ&!2{Sa&LPJL6yD"H@صKʆ뛯)ǥ뛯2g vo֌y\껒 m>e7_c~$JN~5TB*5?=gtaZ(zYGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sm.png0000755000175000017470000000254312161415523015317 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?ޮtXXF0L OF]f"!!!q01.5J /K Ɍc0J&GX B9:fPюvn[Gױ`|;s΅E,b7aa44㨱isWZotT!y̆x<Ǘ/Ol۶@ʹ0!uq$X XӶ_MWԎܸfyE B!ҖҖҖydC.r.+E[qtK%=+(-[6vٓ6sg9{:= P~p'~WyQdTZ"N kUSa˄@⑉`D>з0<>" eDsރ>vec;;FFA_/@ |*0{e!5p6J_BkW d ?x`њG2y뺮o)e+ojւ<| z=^+y^4= e_8mr3} <p?\6BTUYe-YrJ$,@OJKKK 5MV`ݟ[r*9ܹ7 \ */\8Lt7P$,ʲ6mv]zM@3T)ހ$s~j_}}}}}.@ϬVRV ,]eh*eGB^o( Bbضz%c|{|`YeYPQQQQQMMMMMM0>>666a~񢨭].Jlp8KJD"֝/ ,dF8H$2 OBggggg'477777'd2hmmmmm"_셠Y7ԊN4Dh4:m;{{U]xbBq_߭FqrPڽ{+߯Xjk^_85I3 )}k}>Őܚ_E_f86[GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/jo.png0000755000175000017470000000266512161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV_lSU{׻;a`sʶ.p/,*!eLgBLA 1$bQD#' #?UBUqM( ]z7χn]E~/{{} c$Ic|L$˲,˖5;yz cL1ln݊bX24 v Mcb=envj/)͛֟p[@YjzHqLlc{ # Va=9~_XbzWL&dP+ ]~6-Ϛ%A"!W gGD}}hx<_*PQ!ʏViCf`WutpG={PJ~@~d;u;kߵ#< J08pǚEj:g<`^VjjTUUKK\ v{YYY$),2%k=[j?T<1} HOZ hjo9,Waa} WvSQIb 8x^p躮+ 4C"pv{g&;jD GR0_E?e*^ ZDD@:N" -tTFU7m B~REQYh4 9!Q mOv]SSSSSH@̬B'&{t:[Zd0::4MQ4M4  &@nv@UUUUrV`||llllJ{w7khhh߰!L& ܹ@ l6]u]n,7PPssD"infqp8%I  i$~Xno h B|V_*JR@$D"Sqjkzrsիx<' BM~ppKrϵĺBbiHw'?> © $,eAmm{C VG ([t{a,)]mk| ~QYu>_1)h Cupw= /q'0m_pJ/Pdoh}'ɛ!+7~%x.1_8mauk@w]Zxk7:/q&`?qiۻ']Wv*s T7 el6*J[[[[[ܔ(/I )eAJQmt:H$GY z͚\Α==롶V)ڵEH*eY{QL.9/d'&˯T;rѐA^+ wP@V{~GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bj.png0000755000175000017470000000220112161415523015262 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV=l#Ef7l8G+lDtXJ\]2Dq:8]QآHй: $$먠$Ȣ& iQuݍ}]&|7ofW΄$I$ݿO#ϣqȲ,˲q}BcM4Muva;y? !x}>f٬u~~.nÃ#!߼=cȿjS{_G|PENNp8I@dca᱘HWx5ց$pw.TODvJL8HIx8b3?=!`Z}< SgL9ZϗK`Bۍ&|}?$Y@VFb%{1fbmM4ma!쨪(,@W@)XFj@jۇ?^Le%-T۵,R0L8:?(8޻>n컰+ yy 'pFд5Msgooo^}EQEFѨׁNtz!y\[rnz=3ZW( '$tla/{+Nlq>uEu]unmqE{Q+Lƪ hid2 P,"޼I?{&677776nݲmvjZV-˲,k1+/"+qRp%x&}[PxaaH8y jZVr\`0JRTMF= ,HTŝ纮@jZc~DJxX_'~x;r\.@-5@Ryn꽘n.gN|.n_/Ma`0\5L+:zȍGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sc.png0000755000175000017470000000310212161415523015275 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLzIDATXmlSUw:R6˦&.1M9㌁D2#8_%ac4QQQ55jHPYDHkp-Rnne{p8t9 /pgp bXnMiu0 0LszMSńBǩ'BP(TT'H9]:5R&Jjϛp${SNrT*J9$~wVlYi8rVer< 04??wqKUC>4Ցc2L&E%T#~)%RRJ龏U}/rtrۜ,NJyUJlz)Σ\*ORJ)j)dLnjybJ Wy Bp0̰&=^`ϭ^ؾ ~ ȼB`|Ï $" â[+*~v-xP$IqfN'S(>4~<ԣm ? // fv ]Tx~)@Y9䢏> ) ۍ0~ V$k :4Mt8,; 4F _w@S5@=7_R-i}.2+pԚ*?G_5A`G` 0'|c sؕB%46]1v>S&/f%/ jkKWAxUIwaD} AdWȫ02|!y'MCri2ȕ 8hNEgV555555H4l*l"7pUHGGGGGCCCCPv"Sߓɝ;U>۽P\\\\\ RX,6o)snnwcfl6U Ĵ^x<t:7Uc1=J'ft: bx<شټ^녁H$FV/w608\Lgnvnp\. ZZZZZZ`||lllVY?tHTWWWWU-^޽]]]]]]Vk4FYúz# jyt;[ɉ4458t n係|yT*JY,BΦTGC.T6d2L&! I]x^'&l-TVVVVVj;Yz/;o漜};\>7A=0H4~2tgB*5;9n36w( 4GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/lb.png0000755000175000017470000000246112161415523015274 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLiIDATXV_h[e{n6t LEee/-C$ ˃*)Tyʒ 8G_dcIXmܛ?7%i2񥿗sss]8@S,˲,Y*Y:qiZ{IZNFe 0 ChӞV:N}},2+@0_5 ZVUUiG$ K<&s;Qt$)rѮ!uCi {k@I/(;=r@ 3G?c_YọUz{34%b2/?^ν+ӧͣ[[G_2?a5`lZ/AgOa̰GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tp.png0000755000175000017470000000240512161415523015320 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL=IDATXV]h[e~sdV"Bx#L2a]vQ j*zMjD1bat/Yq&7)#7+ԤTL'kNҦNj/oӝfo:*po{kpq3Jj: (F]9sxOTns9`܋s O>1hā#_bH҃7fx_>Vr5g:OXZlaa\ > 'np}5:t~3=y-]su[X,˲ݞNg2Ɔep:NA$ށ}N)i*O_6%*oD} U,*H_C8;=W3_NMi0WtNV^5^4M4c+d_ƒd22 I$IT |7dc<`4&Fv=u`0 )94 ]*ӳxիѨ$Eh4 r\.FMы )4Ϸ;Ȳ,2vn7 B><̽3FFTUU噙X,l6EQE;ҍHnAh-Ӝ(ѴL&dZyWH$DpVjU"H$aUy+4 VRkJRTl6fq:yԽMKKzz^%t!ӮuO]-Ehx#v~ zjRs"V0fPۡZlh/GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pm.png0000755000175000017470000000323412161415523015312 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXmlu?3ݶ[.Gm5@*[ 44Trԣw(XsFs#Q1hR ) ҇n3bWM7||U\U\(i1RUc$Iiӳ9o*ib `1Dh4ZX+v].ӿ`uMvUհZ-3m8<<:*-N@leDM_a ]X-[m9jP~=e9Xp812߈G!њ7\#_{j?aMo~xuV`~ޝG6uSuoyOv 2ԿT#m%E/to`GuGP/Ciwޡw۠%Kd?}gh霈{,gW>k(jK]oln8[]=a_ŭ{L7N\yo?> y-NqWƏYii(J @m|n9h{ }(]i mjַB0ȃyd={2Jcf)K^M7O8(.xp8AQl\c ȶ4v<ぢ"hiiiiid2\ bŊx<W.VYeYllffM{JaV";?j`GU`0Ed_#?z{{{{{ ,T*JbGGGGG dkT`Jd3!SImD"P( ~4Ϡ; ޽WI;7}20$%6oɖ~-.W*>sL0ɓ/J*~)+ִGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ls.png0000755000175000017470000000302212161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLJIDATXV]hWl͏kkԆ &-%-BJ V, &BK)l>!J!HE%,d5Mf9}^V7&K}=s~=`+x&$I$in>2 >&X,4g1o!δ4~c1&CP(ϏFu]ׅ` 14"V-}5épXӀNlh. *2v8(@aC!eXa-f̜9X߽߳l2L&KP+ |D:DM\ziLJ"s?$)^ʈ@#хI"m۪N]=@hpphhxX\8P2'O5, |%|o5ukV_}|8,eHc^+o@n@۶$޳g7О]0xF^DY%d{aYg[g^nX1;8$|pˋrNʑ2H$*)_DZ <|S+$Wv6u9@aoaErL9xu4@xh;V2?c?v@E#oIXe`RB`#",Dz^COf/83&csH^.D&҅<}Z 0~$2B_____XD"$vKM A`!BiX,ŀ@ AWΏqwo\.~R%t({Api"{->.q?,h$m~H,ktyB?}oGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/eg.png0000755000175000017470000000253112161415523015270 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXMh\UD'UJdE]h PD*Pł jt!`-bETuIF!_Όμdf޼L&M҄v{=_s޹maqZyZKii֒!:'pV:NӍ٬뺮r=6R>zڭ>͛o;4'uxY.x, rʧ d_*Io4QAIpyG|k<7FUwbX\ xqk/~ _qZxhd ٢ m#V9y߀b)QtfEw_T'd.N`ǎeNh׉gO g8b//w4!7敺PAr'%/㾡z'&b1)S)Fɫ?ܿ39955=]X;wpx<ūB⳹<2종Z #4| -vM P7hN qE7Is̓L|oBTZkAZm#H$D9%Srpѡd4h]۬Nm BǏD(m2Pu_T7~VOmd'OEZ[ =\|~sֈƃ(>>GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/es.png0000755000175000017470000000214112161415523015301 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV?hWw(Z:8c :CBP44=PITH)DJt,ItЌB-աPئ$QA;^O'|:,"|}}8)s~ܹ ((7^]G}DgHyÚ^o#~!1 >>ryRVĒ|40 48i ~|"H<ϋ9WWOg} Z 0L4;PbXsUUE&,=D{\:rU2}~u 3߀L&d˲,UV@F{@I`B sGX#_7r9B .eB cq0_灙nv9/ B 7 a05HRC¨u^jZ@RT*vRܾ-ݻo_Rxqt:NSBw_bBo+ə}$='9)/*NN }I:ndz x#fL[#GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/jp.png0000755000175000017470000000250212161415523015304 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLzIDATX]hUwNִu+fBiBHCSBŇlV>ZE}X+RD)mb@4 Ib]t1dwƇ7dwIP|=s9X*V$4M4A9d|>sRٕ]W7=-B<C/`|Q'BO?ү> rGl6]x}C@N.!vV#7 `xun\RPDҾ,V wY\[{%#x>x0';>g[,P8-^/w|S(se]_H[nPA]O qvk8wyNO6/'[Dgu]u~Mq@<./4UhkjʩϿ^u_J p\ g#D(dvh4:;[eh՚r:&OuIHdbY)Nn8W08\#hx,sKa{X@|{~ge9q]Zey"/oM&oL&ɨLTKPh] ޽CC뺮>$D"< dޯ_koooooW(ziEynԬ_omR.F"D"x<|VXX_ila`itvvvvvLK>0 m۵˶m;뫪,˲|`Y"*}xP;QOa!{IL&FQMS[&ݰqq4-a!PJ_ JZt:X,IqǏrnNʑFhhhhhhPq:vlK/mUrM{QL.5Jɧ*I&&R Vry!T+qy=AY GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ne.png0000755000175000017470000000255412161415523015304 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXMh\UuIIGk/m(i>pQJ D EQ,҂4T܄"4.\(ZCA]؂ (Xf:3$d>ɛ\ܹt2&(n=s׻6B4M+˒ku]u^^%fordR!PqX=x<ǛRt:VrY !6x^kYRZ[[_SL">9Ҳ}ܾV6dؕL/#\.˭ԫNIBJVZۈympy}=*˚ؼؕ'bOaC _\sp߯GF\@G_iqFcM 8e!`kvt =D*u繟o|~`YW×y|/vi Ϣ8֙ܜA@潻a~1si~MZ;9$[{\~(CN~`|#6? p(*JV|qpX/<}>8 <|#GN.#'geܹsvmmmmݺub"S[с64M\:M3 ]uH_8z1̻y!/ƙ|%G$'-$>&======D"as$U8_/ S ۶mynz/8͎4eYeHT,'`f}}`0 ٶaax(X,!+..@qbʮ^SU (vYdRPwT*pattt7 !FQH,?B`jB$.riix<|>,..,,,%߼)KRtձD"H$ UeՍ*Bu*Drp,+aMS-@+@ Pf٬  Q> 䕠FC*HQ_&d2D"HɧOjo$~uk::::::<Kq}d۪(.^zOU&&R VՐͮM7/ "WR[GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mu.png0000755000175000017470000000212312161415523015313 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVkAfn4VsŰ&E4 *To!֛=5 AoA *%=\$6XdӤ]˦&1}3Y`ĆA4ضEQEѲ[ke;ͷ,_cQ` Q( HdA~vh5mY@ ɽN .-'3Gi˥XzYYjZ9x02Tnc3;i{r %Oo۶'R0fgUUTUUUr\0 ~#I6v:w˲,2((@,b@:>W=JaxL&࠮뺮; SeF = w!(De\8ii@-DT*Jx<ǁjZV!H$ $I,:W.2flC7NOzܮqs+BP(D8rKd\[\ly)ޤDZaAj;?ྑ7GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gl.png0000755000175000017470000000306112161415523015276 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLiIDATXklTEsovyUe (MhE+ 4(3DD$![X#Rb t{amR /;gfΜs?3 `@hiN˲ng5.6߶BG'ߝFE"h4R^!|)m ,˱\ssxtWiuO6~4't Ke9$=@z+Hn_ Ύ;JRT$ Sgys5&džO<'XHsOa󮯟g<^+ ;=YbA< :9ڗ!'0rohc˟mpW"ZO0\3.d>濵~k0gVhsEsNZbb5 `e8ql_ g>^ܵvho#Xr.p<|{в?k-HkY)Sr f殛X1fTB4M3`ECJY}M?Hy`^#Y'"#RۢqWR17IYc[*e$*aQ)_-Ѧ`PZ]]C۶mz5Mׅ^'cb 0n* 0V柹f-Ч}uv n/Ef$mϡam䦣rs[ZBP(Țv{<:$bܦU;HSnhuH5DKۈ6&r|  o6v)*;A{ZxgΘi Q`PS/d}g"`m{:TJ}'My4P fh?˲,RU|cma|p8 KHK2=/sNz^YYYYYJ@:)twm1bKtwG"Νuuuua@ :/sҁUe}\fvn|>򠼼x<5~(...>}H$FwL4M3XUVʞپ\,o"  G8 B-sUUUUUUL&ɤMllPP MjbPEÕnNu'ꡨHIÑƍczVs2ދLq~ŗ+>5o0?&M$=y_drhv|?R)x1GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/fr.png0000755000175000017470000000241712161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLGIDATXV_h[U{MlS*V:#s:Bq>=2aH l CtÇBL|h`BmzޜYқ%9}'BANd+dkEQEJKIݧiB{JR40PT*F@ [@ vNÕUU~|/ÛW'gο-%V%Mt~eXכo ;4 Pzh4HC%r+0Tyk[m(n^SH-u߰e;=q^vU9@^"R wkښ=*`Y;3 >s-7 )/ь} ˬw+|;`eiu< P+ڶRJ=A6>jo<@B5Z +\⊲v݂ ICxE8X+!yy߁vQO'.'x8}+0|_8u~xpY[SUUM쁳w^Yd2LR,&kVkW蘆r۝ >h4ZVi68A6ͮUM(;6???@$I$P( &dk,`.okbniE"H$i& њǽiZR޸1;;;JIR*JR@>@&2y`fֲ,˲ (( ~?bz~ ~ٷȑJRVoNtTUUUզc,Ao_v"x<[9z1l6fɝ[d2Lxpa $D"A79:wo .9!Z}ZV\.˵111Գ+drcɥzBPim@x&$Dx0I4R.mն^;;nݖ6_99|]` XPEQ;acRUUUUӜYJ\r6ӴB!dS!f.``  Bŋ#h4z˚3 !e&TVVVVV϶ϛ-``8 ߽vSG)LH cR,BFb։l>jS'+22JRTY g̩w%Vc`}Fi~ PR@j dθlM#WP^.V/*xaK>/`R u,Mmo%>%aphu9bVJt+K[]WT`/˦1,CPj$6R`|bB76N}oh\:»?n~G=՜$$W\ y̳aeeZ[;, +~a;4V+9_Wy N7>W)L@ c3E$siYR(*$.6!Yzv_ G1 Ϗyc׭}e`jW#`įpuMAhhƚi7x1Ju;HCPQ4MUU-liن`E,.8xݺn \';|Cp.<%P!nv ᰦ6 y#} >4+>_94M= n $ 0 0d&i(T<]N4M4U^oȌ l@il{x<iY]m7ztTRi[eeee[F"ٳmmmm^y^ ======7ӉɉX"[?p8u]up:N!:;͛f͚#H$p|p8Ӂeg(;(BDv#d> ٴI1@ E.-d2TV!)K RʆlbX,`0 f[67cݹFp\.KIæСCVR>[˺/%K9_I&4\簔S16}!o_++A6GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gi.png0000755000175000017470000000261712161415523015301 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]L[e8,0[!1..få4.Qt7yCMqDtf&s⌉7jM(9>"e`םB9=NjwB[4y<}<X*V,TUUUu~YG4Ml{e)哅۶7=((2PV. Fhsb# '6S-`? q嫗y+$:8b3zZiͪӱX8ľǜZgvn\+XmSN}C  p玘AZs-])x ࠲Wy2(ykWb`O3?|x-d';y2,522:kچoYX!M(dC"0g[T|9 ʛA#TEAn}o۶uk{>ѐRo KRT "H$YNÇwrnNȱ{|>cba.-R~JY^_>hTۤŅ䃼\}BH/*/ mLW|GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ad.png0000755000175000017470000000256612161415523015271 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMlEfYoRM KUA$H)J*["ɑ"Pr8HTrU@\*[lj &bg.X-yog8!Dpq84چ<73?3n^~!ٻx<b13VUUe`{ 9a Cv565[Q`+Pj&b:m'ٷ^:ϫeJ˿Qr|;Wz"bX_:1MnӀ75]Ց@B7bgТ} X?/n5H6̅IcҨ,8N 5p?vGh_'_-cs_l2up@RЂ4x"hPa^6Q+y}h 9^7~VqO] Eї_ X0<<nIڃfq)^46amw 58a`g!U-Ln`@7x}뺮6i2]|H^ w6׀U8g_w? piuwBzz$IڙbqP> 1i8XR6iSk ؟׺Q< _.Ԩj|>g%(@gsX}OCl+գ3VaVv*6h3M4McpGJI^YYYY]uAAU D" ?縙Bj{l 53AZ~L&P( UQ<9t-} x< B<6eR^6g|cʼnدC2{a`7B>q]OUW NWGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sk.png0000755000175000017470000000257612161415523015323 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVmh[U~νmfd[  ֭"~P)LT &X;'*Z† t\9pؙā-4K#Ko|&M-y9}y<l`X p0k*kS*(~lxMcBB#de` p$~tY[=BG;Me6o_?<;p{,Ho@KSlߛ[;'._C6zf>ﮮՏܻ7?5i<UO5u}/%+zui>fߚ~,M` c?[y<Ӡxm`zp|t4l8t5r?n> X^ y'k^읛[3M4M3A o%zOA, Ąpk 5|;ɬ@ij-N#{VG"ؑvrpoBeY&'^7/H;tz^/$ u6{w9Q`jDaDQ1 c'n6MfjZVanNQEX2x2=S}[TtiJ);e2;ǢpNhں1ZE(TUUUg ,#4dZ=glL$I$IvCf'6x\n<[' pϚVPKiQ[FѸiSKK(G"NrIr\ ܙ™`/t:eYed2L&fl6 b:6ݵkp8DJKEQ%31,yyn{;[R"MM GU^e̮? nvvn%D"Hp8jP!pip RHj֋Fh|>_ r4}IIf:bX,| _Y,r[s_䊋s^bkq)~s>_ ^bH$@ox!YGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tj.png0000755000175000017470000000233712161415523015316 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV?lUrV s5AHd!mY@`"%`T@0Ub`*rQP#rږ&9]|91smĒ}p#ၐ$Is\}YeYLvxz1 ?jZVOh4,˲H߯c=H$Duvt4l?2iS_?mw'S}kgrVju H1^1r\2ve#xV%xW/4Wqp@Ǐo, U4/ʩ.KL`&&P >ecoX{'T0{QTQk?:m2G!w`,9w pm"%Q]|Goγ ;ŗ=x/jC'yyѨ$2c7N~{ەi 6xC>'쟥Mň:xxl;Ʀ5Mƶ 0Sҕj$HȲ,ǵ/ Uz:蛳E JRhV3MTn(pW{'p'ճ?r0tN:;׭^'&|p]u]NMOkڙ3Ţ)(,onnn@RT*!;w31Z^ ֥t:M /tNԞX,_Z Z[[___uEu]u\.ewmt#$*ii@<@&d2@7?ϽߺNGGM4M3pL*H|XP'…x&r4㺆a!I2·BP( @6f8HR.rgK 4T^6h?۶mJRTt^339߾=d2L&O>B/1WG鷕x$t_vh ?*=t0^0qAPq#"UtGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bb.png0000755000175000017470000000274312161415523015265 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]lUwflmt٢|m-[hB є4(Ԋ1JM&Fcym"L̂ v7K[BPma:,n{s3(e4\K1M's7 _,&BXfQ9*0:j`QL8M$ht|hlu"F/8RV$K7S,Ay)̺aQX(*Ӌ_c>`D`Y -$a2yKh<ϯM;׵+;@/1q8I$ l6Bny9+`mt8nWUU&j郆C|GgH?F(I~Ri-4,wl.wU}[-8NxhA:([ GFhn7YRB&nB F"t{bVn~st:N2bP(R eenm]]]]݆avtw~&aKfsM?s555555iiΊ 3ѱH*uϯD-@ ~H$̉l^ 1q,Kkp8n .rA}}}}}=Rכ֯]^[Yys<'`0FhưYk"ZªDv",>8 BX%3܉_耆t:(MMMMMMBdj KZ rK&dp8o)57_{ה7oւx< ڿ?k@m-k^d7ݒsm>\.;փ90kXrdXυtzvzѹ%xfGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ie.png0000755000175000017470000000241412161415523015272 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLDIDATXV_h[U{MmS*>[[$fV'1M":Z e>HJE*& tmo{o\,I^~~;߿s 'x"AU2M,QEQ9sFj?4w2ϯn 4P蔥x \>xM2U]~EQsEYv\.A$V>s @ttϭeoc sy yowx@ZM*7 Лe}n]>^gd@ ]UUUIb6Kǡg,vvbX,#$GYwe=a.y<BP(dYi{~*JmmUGP~E|yuuuumRI$I5 fYM29W^m`|}?;/ A4M4 K@Jǽ9:ino/...8d2 `l"W+`Z˲,2((z@8@T,g0dhhhԩ t] ޽D"H$UUUUgv+aO6 kLRTJxȳB2L&@$D"@G\.˂F(!h$oyBZ BPt:>hbO7_olׂN&'mf[9w慽w6П0 Z̷B|<9ukH:uGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sr.png0000755000175000017470000000234212161415523015321 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV]h[e~sS.햭p2X#bz!P2n6:/腈HnEw#~uE$7  I֝iғs7?'KQs=~;p$I%2MmYeYLzݸexc1Fy.`k+bT*Hݫvcdoۖx^k\:< Tnӧ'g,w&9jZ֮קxg?<3ݻjX0%vTD|Dɝ"oN|lkVxõ_[F,{{{FT.-ZE |?gc`/UNq 3g;D)#>n7psp[c ~zsE(q=Rb{{,˲,$Yf <> 6hr{=7W,z"H$ÆapL:Hrzp6i-d~1M]u]$2OB2L&@$D"PZVF(c$tw15ۨW.2d2L9_/n }{wP@ n>B++C.gm%r>'& &n?ouF>P<GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cl.png0000755000175000017470000000250712161415523015276 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_h[U?4Mlkx*ڂ0}pmncs("u+2LALm0:t.fnr4LJitihQ|w~\X2qSa޽jj-iizRՓ=O !: pj.rW;NP(h= 5`! D"UڦZ{_WLN6|q& `%y ȣ<%_ɕmͯ/n5ۃKg}?yi?\VT*|\?w᱁AÕW/gx-7w /2VOc[<[rXqʇU{*Gisfjo"'  ޞge*w$:/-. G߁#=cgW@>aLFp5cLO+B)w_/Yf*Qxs7.pM?WQDž!g;ٷEk]y絶i NFyq#Bi$Oݽ@ `]gt?ݲ,…T*[6 `0~4M+|ɾ^zsNGHӀT oIWr CAwwwwwwkԔm۶߯nRN\yvc]g!N rޗR];9U kw]u].&jnY;vy9>>>>6l6͂!TjY݀´_g/b1]P5f B+WS(81<<>'[GFFB!8w ^N/:7ti DG.z1m&z25)P;hi< rG>M$Db, !"'֟#=75 6A.kǯ+yg@XTD0-YS".m:2)̒ex^߅m z7׬[ hZ3F6Vq OٰdK~g<[<mBޤݿi3\|K/<,G.vt/wI[ ֭]` Wkj`WVZ捁6Xi[o5 iN:v:'g{?rMO{ /@ )0࣌2͔R ]ρkOj|5,,ĺd:y'`YeYEEB@cO|$>i C%=6_]n;N7?))c _WWWWWWP#++eGGU+Mt.Ych$b^ax^ @ iY0pjT+Lgr<񱱱 dNQUUUv͑H$bWvtttttBP( *nDUAO Pz'u~߯ij$/\rbX,ӴF!{S!?Tk(Vj֋Fht^'&$ 7v*N <]T$Y*I/қKWS &MO$wXPφXl~~Hd.شGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pn.png0000755000175000017470000000313112161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX{lSU?Y;2bQ !%d h jb4"q-/S dXkwq9vtE| pPEQ띖a8mVUUUU:7~x嬗J !RDs;pT"H$t&H;m+ZBmYa8Vk OJ&!C_\5z>l-p޹_jU_ٌGV = E@tx0 cYbe=z p222biMN 6 :ܰym莃[!q_] e ?gн8Vhnp?rxRȦw=F/ʜY~{q^ہ32}xv/[S;(Jpx⥡-~d&=ڐU  | !/~Ȯ>9YuԲCӽ/YDwneMk {%3ّa8%m`0#0XP=O _p7Xb(蘢O;5Xw(l-<v ? u0j5{WhQjA}ϕަ>{ɜ+f|50a/e'KYP1<\JReYeUT( #gL pUv:G0_$.^jH ܍fƦYiZ- ϯ/~=t;8{`-_SFul ȎOyyyh* ~G|.xBe~`#;(&1}L=`O1P" ܨ4- B= wiO瀢8bx8L&5QMp@ wyp;x;n(څd|&.c9 gxy*۶0 0d{^SVuvvvvuYijwwwwWsCh;%x:qP( IdZ'ЩTOO4rԖM~睩T:lkZ88d2΍l0p!g6Y}x<뺮~?466666B.7:::~[ht:dvD"HN&d0e=ULB9ۑ+S8FѨȔ9+Jkkkkkŵ)Q^ 4$ˀ*flbX,ϡ&7moU[ؘý;C0 rzɢ a*Ut_.y'M6O"!IRlsX!#?~=Z?=ZK<|d~XuTgP&8얟W;?5p&>Dټ(l}G,W_>̍*^fEΜIRTjQ$3໮u ]˯=9N랱vtO.x |;% 8[ZVa}s?4.u3k1Svu[5g 86.c ?_rN;(śkaÓ^< z{۲O9`ý_..L&o;'¢ lMύLK71 eIڦ4WCNMí`De+`/WZ3{ 0c$ -bY0 mJ%olKg}}f{o˒ݿGKO׫/@_miW.|tew_~ق<4a[N6ؿ?^ =߬+:z{S(@u]m6YVIeL֗ÔC]7P5;ꜰeaU~b9dd{G?ޥiAؽH~3\xugSZI*)QUU0a VkNNN,[,(yC?sٵ<8`qT咩y38UyU׾8+85zڭow/4_veV=pǂOSՁ*07CyyyyyD"27Lwj5qn[:;;;J]΅B0X,F pxHrҥ----nX,~k+BP(<[)Xpz8y޼'}r\.4M4Lt4jH[v>qGX#_ υhH&f_.Q+#FGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/na.png0000755000175000017470000000311012161415523015265 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXmlSUޭkgIoC4 +CQ#QY0 q!&_CCԈ|U#eهEE$DhC bۚؕ{p{(9 ϗ=/sυ8Y|j iiyvƛ^*((RǙPΞx<_xa:m!Bg;6E4.ƛ?+VcPW뀍lTnss* .A)wz~JUWA~QN=Ȃ/6ڑ'FFFFFF7NbFfjj[ ]]ZȮ̮,FFIBd{A}Tjzǭ;XZwJ?ݿ/F8|/<C}pUU'8O>8-o'R˶po]IgGK] ?5 m) V5G^.hKcb ayYQ+8pǁ? Kv).u /o`N{аj>UÕa/7/m(l~Luwa(8I˃.ȋðOL C/И< l ruTUUۮj<:o>cI{xPoK7EN4M4NU4ElQ{|7ow>Q+?Gڟj:_I % _;%Vn5 c&#:T[Qu]+*~5L@vCUm6M4X8ˁaR@_cVZR9~kSOC:$_ bSn9̂RhTUz^t&f%)koTB@@ !.߱]#j!D5|>/Fz}Ϟ?0`6fi @,b`ݐ,(/-YW:Z8U& {VS)ir\IMiޱcǎ`f `h4ðndpɅehvn]u]耡l69Ӛ}~iڴt:6-[zzzzzzD"(N,++oDYA/m+NB9=62N>ᰪ-܅WBP~\.T5E)X !Yd,^&d2D"),Zez[|Dgx<GSe?yim\Vr_K|ƛ'O'7DƂK>tʏ\nbq(x>θGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bh.png0000755000175000017470000000204512161415523015266 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL]IDATXV=o@~FPFLmj9RS%Rvc]3@Tԭk̔)NFJo &-pw{~< np-8gu%I$f3Eq}cϟ^ݽkYm4?Wbvu5l_ 2ELυCd;pv`5u]u)J$B664mgl6[-ϓeYeI::::jnvB(&/@ /yJ,77Ec]J[t:}v[mppppPrVjaa-^dq4097VEQ@4MӀL&dRT*#!z˲,^U4M 6ҋHxQP'…x&fB8뺮S/Bh4@\.p8WjXX(4 QR;qqNt|)xoo|y)dl6} TJ0m%^ aq:#}z=uդntO?U>|]<חRGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/kw.png0000755000175000017470000000221712161415523015317 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMhGfZXע,QB*^BI.Mq{sz )H9P#Ӟ is齅 r(-6XxVciRV;=̾ڲ{wv̛y{Np I$IqCG9eYeϴn8`1(a zUͦeYq ȟs"H$qa Omצ |Og >-fcQ{K9[_QNtƘvp~}߄=%4_)> {p}I6ѣ$gN;w8P^OXƹ>9Jl^uooO&PhpFy"x:hYx?! ŕdٙp3) 4O4WBUB8b]\X4M-T`0$EeY~4Os3~ڱ$6H$4MEPU{ߋ-퍟^!OROu]W[þ s9qq(J` A4bX,\WQEQd\.K%Vj5@{M9]?]u]he4*n4 0Z-FʇBЩS׮5ͦe=|)J.r@ZVeYf70:[j~XUUUUM4Mp8RT*ZϞx<_Zxl6-|>4MnLҋH }p<)BP<\D8aaHL_( Bd2Ljv[l6el7 @ALj5l۶mT*Jg7ǫWxV!bh[X13#~[ދyI]Ft{xF'LJ_j.˜g.GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ke.png0000755000175000017470000000303312161415523015272 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLSIDATXmlSUqΎds,’q! ơј@b &qj&&LE|@ a]pQIM&][{pwV޲E<=OS5L@shCv\$kd8vkhl!;n{ݪ]`Odp0NvS T,l+F'`ޞy{-V '͓&lˇӷwwnaYap@)B|Zx?{.. ?_^^P5< hhh 8MF86y<վ˟[[k={ O.nYr.\ϔSˋ?.xyvgi;AǽV 9O0@ƉNj.hd#iǩSP(HLX2t:ssss50t]סgmhspK\ Wh#F8$_ޓx>$%=Ji/aaxDڗ+G A "H0y3s |ǫn)ΰRxftrW1~ %lH͡qN_RT*Rơe#0M+,0 `z{{{{{~!/ ( P2oթeY!EQny<O^޽ EGuttt~?@,f$B~t:`iz^/466666B"ǎEn5Fc@ ̉D"H$zU>{=SId7Bsi!˖ 8T( BFf˙'_|>烜d2L&5Yln*LJLD C8b[65*+PQQQQQVݶTJdR+9S)SFti!AJ>S!_Y__՝R:$GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/eh.png0000755000175000017470000000263612161415523015277 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]lUw҅-tM`FZb 6!%K5.jDy@& ~[A[Aö lvW3>~lݴj|=sι,` i$W\۶뺮[R哅-K !*Fҥx"H(=mր߶- *+++++3-.ε/*o`4?XWRo.Ϸ>\tp6f  T' }r8?Kom&Q PV6xE5G^^R+2Ϻ?sBzOWP|ⷊJֵ([-)!1 ,a\o 6ᕻ+CpW 8â ]PtBXpk"y04$9ddž5I܆}-F_/A~}RMKvo@꓿D.B%Gжd]C۽[?(%@X2(;P`/7/`ppXeYۭi.#% ·o='쭆ĩlzD;'>N ڈ,oqSl†կ@Ƴ0 ƍp8[2t:].K]uuc$^2jvl`}z, ^np5gK>WԸ̭q:A4MCZPJ\~Ήdmkw5=mVO\Vd&B,2۶A&d2*U *aTU͡P(iYpzWWWWg'!''(Vrr&r>~eY]-)*sx/޺5'[[[[A# ADBpO$6Dt:N0 0 z^|>烑T*jhѯ]klĹsmmmmmmŦi9XuV݈J/$rZȦMB' pXȤ":::::: (JtZZZZZZZB>}>(j(jK&d"H$d'Es~ۯj)GGysjjjjjjT H :4~R*Ys_KWrS~Di|HS VrTB:=7= 7&rGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cc.png0000755000175000017470000000314112161415523015260 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVmlSU~mwuat_ "8 È%sNVYVc1 %A0( d -бr~㏻قx}O9>sι<<qWSzj4F(S[6/M^QxD!<&L]z^oNN  l(MBzJ0L&IQ6q>jáD~lvnۀx4wz}~9 5v cgfɹ1,pַW|9_#rnx:jGFFx<_Qy#b]әKrz|WW@VݼA`ޛמjn]lٗ'͢ˋn񣌋7QPuLpu[-~x!Pz,LڗG(e*]X6g /޸}57 i3,+8 D:̑mU,V/p}C} ,=x`uf(ULgWp{ "m7j))7.zN ;g _lo Ph+l8 77 k.xFfK;pe\v- ;0m0.]vz ' nk@W+y 0LhSniiiii(tHdR,q^U`u{u;EB6MQi ΍kE+j'>R Ȳ,2˄dlXNGQt:Nhz{{{{zxىKr|]z5JVYX-Iw\.W$2M$)Ojiiiu:nہ T_dvYb,0Yx*_Al6h4jZH$+*o$%%%%ūW@0p8V+(3fًdL:HB*Yv\.XT;D/tvvvvv6f|4F@H6'dRK/ B!|޽s$I$].V-֜˲,˲ tw^g1(` lojZ69hi>p>(cϹH$ض3Ύa׾5\ANrX W8v}DwWfZ{}.&U4H}OsLMsn&&ܗ?% YϡClޅn/l~\o1$E/3靧{sZ)qH`oO`(@N"OJhwlR,[ݡ 88N0(I<LmCuff&Ns1MGg`jJ4ԩ-]蠪$),2pwşw'bb{s~sm۶)"K4mjJ BXtEQERT*jZVqC8䂘G!8~\d2L&FEujnoBЙ3׮덆i޿*J6f@RT*iY 95VUUUU@4MӀp8T*JfټrEX`/6ir\.7>naa,݈AGU›<cۺ.IT2!GB>@:NXjZd2 c$j ~ϲ,˲r\. !ow yx(ZbX-tfwv0($$Gm>SSHD$2Vk}{#?98'#GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sn.png0000755000175000017470000000240312161415523015313 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL;IDATX;l[U:Q 1j,, U$e@Bf`eBH1b"RQ%. Hxt vC"iƏعvl7Q_gr~G;wdpahm%cjͮI71^oξ˵8&y!.yiG{vhldE*JRiMB`Ґ$5>\,Y`#Zڕ^0,[eZzwv޼yfcy0AA0ZqIϫT88ٱ\{׋bXSUM4&Blkp[Oil=6\[+p?7A!0;5;_~qx f*۳@ z^׻tNgh7#$Bm@B#B8H=gxBL\8uvn:7Q?^U 䁛_ srr0 0 f s®@^Yd2EEQEAfEP(  ϸ1+Ik]zz. Ah+VJt:ǥKjڣGxb1kMVV`Uu:ZVU =J#7^>motl _߽TlSf{ދbZ|l]}EÌ|'zwrE>DavkwGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sb.png0000755000175000017470000000310112161415523015273 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLyIDATX[lU3nKaR ]APK RR[%h45M|4"  J.w,R0V*ݚlwnp(ݶ4%_^9s_wKK-ӴBhie]xeTEQG(N  pxx>񪨀+Ve'q 3!l-+JVvVru| Wo_[ ť敂{{QӎwPؤYα?7EcíG| qqoqtP+5}m \gb7`{Gi{ ;vBړPz)ǖ6׼akSkʺoCо /[I_@X8q~ذ,˲2W4RTd ݃& :9999뚦iPZFc* jNV$'[aN0y3u6):pKmU>^bh4v {mkmO`V{C~#eS,{AeXB|0M4ML` 8 (*23,Ku]5ZZZZZZ~!s(/Jw^|OrY\lSJ霶\.kȹs;;Dbݺ_~P( _dp&vڇj;N aPYYYYY ]]]]Sث;LPVĎ@ deEh4ڻ|e=};YOD[c`0 2/> |>8RT*Rժ*EԦ` !Yd0 /L&Ihnnnnn>oM˗+nm?x8 Np Am646TEQu=3u8~]gE"Bc?HB`0 ϝFUUU(͔̳AO$Ii̚ސUE~+_/@jQBj:P]rzSyz@_ q~3މ5wk"f"Ok"D"H/K<$ 6 4C&Z=K?*Gn`d[72 ((FIAu& ؋ˀu^Gں={/'^&_W0k_!3t3̻W#KB,"`{< LvzEC梍'"=~35N@:C:PNP0vuDZ0n|ni9?fҾ]u]QϚ<},?-?%.TK6V "//VE12"Iu}M&j_____!KKKK [KnU}'rG bFH$r<ʾ nC eajjjuh4Eqzzz@ X ss KI4M4,.fDv͛H4ϟ\Fr\#'+TR&d2,˲ XV vlmmnnnVV''IyyyyYٕ+h4^n۝((ɃyfyGq+@ |>'dQt:Nb MttNj~ߵѽ{(.f3; 6fs`jmy̜ǘmlH+>/9~@|o$? lŎfR; /%ܽhiGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mh.png0000755000175000017470000000314412161415523015302 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXileL;BɖR-@*H0XPBBTjAZ` z 1!!ĨC,"mH-TVؒ=E:.3~-mS /yy \U\e!I$Iee(7dž!˲,˺?[y !!#H$_7CNNNNNN>lTYo1ŘB#u16"zB\g| H 1Rd2^0[{GW} 0+ՕH$Do@3l{uuPxW*h6#'i@OyD&ǁLI@[|"[퐙أ'ƄA0u%2&lv.I"˲ ;5<guvGn$^v3Z#gWa\rwͽ&>,I@=M|c!Wx9nvgd9(Dwf3쬮5Ȥ*{rqz0aMӴQ ttp:ss ^]WEQYnjjjz! B!0; dû40k]zBxܚ9ahMtA[1|xqÑȎ5555x<`0 B$bvdr'NVD}flt:N'dgggggCyyyyy9twww;&'O3'#}jkkkkkUUUU5Y#Z+UDX\N<|>$Y%3P_____b$UUUUUU M }% %΋Fh@ hI&Ykϝ3y;\.e퓄)U.\bӜajqZJH+n}e@X@gԎ|_~$ְ*GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/lt.png0000755000175000017470000000211412161415523015311 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMhAf7n0+A4lBFwAA^ wj.=XwoDZI"[4qa|t$&ͼ7; la [ pY;((v{Kql|U*1ձ=%M4M4 4Mk@;mH$Xx_ u`;=n߯YYi4Fcc\>@`Fxp 3Gn;ر=@v=c;Y]peƞ}=1 S+pc(uHOP^%`m`&rl۶m;Qd 8r 8^ߓ: X\BˢQEQϟUUUk(P@@$IE(0n<$MP;/+paԡ3/ݱJ:';eYEkD21mK$I( @\.! mn@31uܼD"H$EFW*$5mBOW*assss$e2L&JR&v ;eYePEQ a L&IV[]]]FFFF3 0/l6u]uݝ:K7"uq6YOd|qX m/r\.RT*z^t:Nj $ ԐVR^ZV@X,MqLNr;5o5<_~ X,<.nX; rKd}+.zOWQ^y46i=V0ٍAz;?ད@rgkGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/nu.png0000755000175000017470000000255212161415523015322 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMlEvެ4jn Ώ IE,AhA nAPT5J@17H@#P[D66T8lGn.abrvμy{,`S,˲cd(diq[[:OV[dTaahlM`i)H$ -d2M۪[t:BFc|C˒=yfuK|NLc@̐|`>ο Px H#tEs#bX,nWÐ: ?.Mf|ە̧_}6Wojע}u/.,l]CGo| ``7ج<2mC/Cvk@8lYq@y;=7Z@e- p!ߗ,dHVUn54e9|yQ7-}S2_|)mH`l.벐wЋZ 蟨*ZY!Zr;:_z_6 h5_Tz( H+ri`w~@>aVIݞPUUUUe9ar]#I :4{$V2{3x֚8ô(F"H.KNdbY8`y@>+ oǕ*9|[[,KvK2)I&h;/=Qԑ#C%UIs vͮiv@QEQh&@ k(Cᰪ<<̄@<!$ S[^rbt]zOix<A JQ)ijZMLܹ@@ bX,2r#]Jn\z  (8x^ rl6{>5tw t&3> (I$IFvA;QYz" D"H$²en? P( >|>Y~&_T҂I~,˲ Dh4Z6'ƿb bjr\.SЩSk-bo+R\=]W-N"A֚wڍA+_ |m~F$WO8GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gp.png0000755000175000017470000000232012161415523015277 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXoE?v TdmD$P"r@$$VS!UPsd!q=6Rm]Tے^zdbǩclqv߾yo3}4MӴSmwu]u۪^xǑU*B!c7r\>rZ,R~ݫ{ !xupضwd;/ݻ '2E~K>"ZV;!d`o_~J@|zD^W|R`z}Xh=$O0|j7Wwv1 וZy_7=8 _[I(X_TH Q}lnJ 6{L734pknq'4]rǗ O ,W\'y sG'xbl0 7|I@|~߯i^:\ZzY0|@sk ?:0E'Fh40Mze9{WvRΕ^pG m۶*Q&ph 16f++++z^r*JRPlg:qaP( A<hԔ~횘8vĉjZ˗3L&1M4vbYu#*P+UN"33B Ƕ|>4d_l6f!H$ 4fid2L ѭM^^PPV5Wj B'Ҟ;p5>.޺5hH$DT67tҪVe=]'|we/Oi'^P簲wBu}#?I!NAGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cn.png0000755000175000017470000000223212161415523015273 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVOh#Uv:)JDÔllEJ֞Y'''mxÇY*VhWOL;?t7h3] @G⿖ǪWk ݭzevNuӭ@>]!;/7o \));/ğw-X,nEpƵ+3"~d24=qz'N缮w{@/K+R+G^ݝ&R>Ӏ)唔nfg-keessssk+4M4MUr\.!`t~azO/JR)WjugǶm^oV4NO?_]iZ.r@T*Jэ7 w*@ۇu]u,˲, b1 Ni^?888X\76뺮筭|>?9889|#r D8h j߷m۶mE/BP( @&d2Dh4f٬d3'_ {_Vj@X,].^$|+'><$uD"H$x.] ]A̿"\ycaT*vU PчW+8pKfNy Ñ#ћћX>V~^)ͣ}-//ܞ=u6(Gx !o qxylǖ phX . Xzd}ihzrVZNZqeEppnAshH[[{{cg:u\\ m۶Uu620M{=A~.~xa0^{`{Yt|n?ʫWNӳEu}Ϟ/%nw]]]j E >ΎN:XUm `ay9L&5M|J {.oa]`<'\纜sٹ 8i˲,˒6@zK<bmki5999<qD!Ro ~b_( Bi&JMMar?x?3nB>@ؽ4xc߫7ᳯ_:OA0Kykpo2Wy81s_&lT`JfsΟOaUg= |ƹPn b'p0JΉ/o[GGjYtćYȌ&^~6sNçN?~2KZZV7ױ@nI z<{ɩ>}gw?]ɷ*σ!b~'jHXMVuvwllm۶]]i.\1 0k7ᗿ>qx-ZW{I9/? S %>uZZ۪lE}Q*.^مO7O<6i:٠?˕yXGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/st.png0000755000175000017470000000264212161415523015326 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?ޭBhw:X5qYL|Pds>h M|@'hDx-QE @ߐ(&D$A#Hu XBtK(BۤA^Nݺu/>=s~~{΅9aSB4MӶn#Ӕcu]u˚^ud9{˒%B!c2FFbX,[ LR)0lim۲4x}E9p= +QwFXOr #KANq?(ݱwAV\.&W2Ih ~ Kb}p/'W7#վ.蘪.3&0z>= ȹozWw[۟nXhTJ}} ^adHO ضe!X%55dvlvf3}i'w.\?pw}Z}&5hIlp.Nt|$pA; 9yv]E:Psφ ,p0s8FGgL,˲\.Mu!0t|Ǟy `x]e%(fhA- ~>ʳէ,|@hۻt@ӄЄ3 èy3 2BZ]uYpW?u٠.q내ԟ`?nw~^!h|pu׸k4.>\x4ڶL4MSELB0:hoAr8Cׇ!FQ7 m+9>)b{OEP+e Jzvkj6mJ$Tԩ@@"H$TJ.6.T@X_nt:N'ax<Ɍ57Kq͚kd2x2cYu# *}xP(Ng"6!4CP(4U2)g>l6f5~!{STk(RN4p8<1#TUUUuѲ,vM4MVΫdkm/REQG9 \H$ĢEt&~ǩF@Pql,KՕwpddt4J`!v>Ё^9p(^xݾPe'\^( B (o "HaXu4G|;à| d8-z|PÕRz G@uÍortaŴ¡_`1 "`f-Lcv 8ΤCaO[߅߃!9,l9\U ν` |QiƄ~*XA$!u r.`]6 ;  ! 8/(~DE*"ul۶mSUMSD P`#G1E` mu D=#peh3-~vj (JsalVYDzUU5M@ Xa- u,} /`~ .zxff8`0 |ɤi\,=}/xQg0 .X \1qNRSStg w̜;bgeY%# P0fض߶u]u]axxxxx 9աXک%Y\W^)kkkkkk ș--Tjp0rIm~}}{{*Ng2ǎB B A&#^dqIDz]Zmx0 0:::::: ߰A*knڔNәp8ՙifqcɬ|%=WJ!㙞Ȗ-ebX,d= H$@WWWWW|>WnE)զDJҐVRIjel6 x<O'̞=8psji a/]@ },y |>aoT\r\ڹOO"!&T饛yK[>ZgQyJjIe3ޔGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gh.png0000755000175000017470000000271212161415523015274 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]lUwݖ\L@RqhĨ|41jT$(Ć -m4 9p`II7ޮ tQ| `?`qՓXE@ŇzOȧf>p++~|`|:Y88^apqV!hY}&<)Z=@<"6!vFԤy/5yD`.<[,_:!-˲7p8me  [` (hP @:\\Q)Y2&@J elc qKEO:qxr{Wm^̭X>'\)iU\бcOj)UL&dt&Ph(,ܲ6ovrL@ݐ7r|>9j]U M1n,\XSH$}Xkkkk0r`0h4mY\bz3=˲,RkUQYYYYQaC2LP( x< ;oDA_zL,d&Ʉp8lzdJ= t:NFSSSSSԘJ?45 j3744444H$Sb%~J z{g!'EC^U˂"\s%)N,Ɔ4ZN?NN7/B!Ts!&p^"H$ T:N8m/Ԁ !Tm[477777r2ZWW~Y ޽4o~m_~ش}[{{Û}a}N;r"|>?w}B>@``jz{?LW0l.۰a44vOxˢ X1}`BL@ 7kgOGylh[|V;~ Ju{-\i;?<@ן<'_M%ͯ-po.9V4*}%*޲X`9'0Yk.f jt޺FSS .vkák_<p(6óp M 78^q >@GGGGG3>npy9r{@5`=YH>A# AtZ.\Dyr\.a466666055999)w~]_eK*JCCP( ՙifqcYu#x_+$Md6!Eh4ijd^p8el6iBkSR4U $jd2LbX,+Y'͡p&|>ORBG̼2)|BVeR+[T^} kfHT:}>Ր..7//JcGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pr.png0000755000175000017470000000272612161415523015324 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]lUw;/Z[u[h BXЀ!A#X?V}A&b"b} Lx@ ~HeCnmӹ>Lo?nk/瞹sϽ,&i,K뺮=9yx*vB!TBL^@wP8+;5`!Ҷ!'''''Dz;?a]]wm-P?VÂB^R)}rء|ٚY!}-Hoн(@i`ۙB' ~ e_6 '>rCn  Ep_]ܹ#El5@EW낣y7VvpP^ _D"]Ʉff/á/L Ѳe,|႔wZX.|b8ӹNVf J\iߛZ7"HP208~ԼÕ<5&h0=TN_g{ 8tƫep;Fm`K}s<\ G<Vd< ȀX9o8, 2[m۶mh X]lz7 ] Mg<  "/`?V`p9(^f/d®Z;2/e^OPBnwbb[ -@M4ͤ$M3 ]u΃}>|l K7Bnv01soxZ#=VmO@ ` P;i<H` d*,OܶL)3e&XeYD0vݛ65777ضaazkkkkK ttttttsCm$GbuFJKKKKKUjf~>%mn ǎ{} @`4ꬺU=vJrnHH$Iȣn݊bX6LR)1`S`Ґ$o.ri9k*phx݋K_p)hI< åkK[qZzܹ̎r\_dZxIս7%?Dm82>8| ho¾C:9L[v~Xwqop,M[̬ݞ3zlK0:yTH0uci-p|dj}moüzW@?Jެ,mG.1M##Ak\>68hdឡv8 s\U ̫cAtMU:<\1]u]w8db$0g @ p%>-t -8ܖ^=XsV*I Յ+E?bfvYV5k>O]4}WIK0ozχrgŧqfu|^l k8x<(y""q&{SMuP?75YK)YD=o[bps1 4M4Md"ܣPՆU]OEQbh4F|!''h(LHr¯Lftttt 3zOԴt5d2J:ex<>XTVbp<]NBs7BP($ˢe~"~flV@ Bm /! aEAJIyt:NC8Ófn~hڱ1޸QivE jk+x ӊVNW|¯\XL|7Kw7=,l!*_le j 6XG&kGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/co.png0000755000175000017470000000231112161415523015272 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVMlEf&ެ+7`w#|p!R_C.HHA  7 {@*O z+p@B@ Ta! ũU$Ļ Φk%}o}}!qGRJ)w#`18ߪnW>rjBQuٟz\.ˣe۶ ~ iwpqZpmmc4ʹ߾仅k[$/烙 '庮{z DRiw@l(v}D_鬣[|G.`ﳏ_xk=.͝m_GBj˖.kO&O38a@w3 lnJ K[O[qiI:9~"goŋk[Ms9(e_W/ȧ1 +E.'0q ϴa ߿FW*P~RMc1ਗ਼V_?1y~w JP 9 /Տ@,b@bi2T;T<~m!1kY!ďɬN{.<)d8J6ZFv`ccqJ.ǹi1RT*,Pnlg:iiVU'{DΟ'R8HZB|0&j"[4hBٹ>Lol?|̽sν? ,biu2M{-뺮[R%[}B 1nE"H$RVrvn쥴,0M{w;͑h}|Ys8ȌB StOZ|J0G!p \L0Ko]z2zd2Lf^XaA6B]`s7l+mI,^7ñ_9Z}=2FޗF M]rsy'ҩNj0ϵA3=aaTWXe*[} )L#tuzf>^{ ɸ2mj>L#RNqr7[ ȣ!9NyB&9 x;!k|gX`n߶9XR B;8>ȼ^Ҕ] & G'W; R 8N\˲,**4]/ V{awϗӰmcu2h'p뗂E+6:v .+~:ĊBm/mBTVa䭀Rt=G\.]uc8cZ:مNUkpZdzH_C 8;/i.1i?sd++w!M?\FGhe-R(>vg-^nϮYSL2zϲ׀<"?_8D\/r\"%iD0K 'a~}oooo_e\.˥}}044444v?x%' Kɬ]}O֮^4D_éJJJJ7l;;;;C!+ B!xܞǝuL]Y*ܹovn7ax^ @ @*L&uu==fݺX,Ϝr:h42&ʠ]/PHccp8k*-nhnnnnnG:NӚ Tk.(j(2ݗH$ LӳΝlj̽z^O|>OMݻsDQ-oyK.^ɅO;'QOSEk Շt˿tAх%jFtCGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/so.png0000755000175000017470000000222112161415523015312 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVAhG}+WTAOʡ^ @rC9V T0Jr%JAjHvV֫F+ZdZz񻼝ϟ.qKL$I$ݻ'F-Ɯ˲,˲Lgb#kc1<NNFX\lM4IO+t7;m i08nsx|aOV{]p*{_Ggm`ޝ2=WgTn%>pd7qŹe n%`cݚXN(lm`? x(޼=/¶xK+8=j* ϖM&lΝ8Ò$˳@;ofڰZ_Rg:̃eMӴC]^32TP($EeYvH@|_F$)pIeK&d2n6 06! \?VܱەtNw|wG9F۶mۦHe,wдeM,QEQYT*^u@ 0/qt:M ʊ(tEt[H$rݻVm;; BjZxvVUUUU4M4 b1 d2vݍ }RvmϞb a*K/"U㋂vbh"o38뺮D[&W(JR flXeY$r\.xo^ xzNjZ z@[H$q!ZóC,`m%Ez6h&&*˚OȗQoCGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/am.png0000755000175000017470000000207212161415523015272 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLrIDATXV1hazikF WY.5KRDBqht젋RG&NP5A!!*$ZswM9\ziR .w81  e㈢(mdJvm\f1(fvvJRTu0 +@;mP( Y{:mϟ^/{Ƴ7ȯ_ZV5u ;-.%\\p{97V ӗ>6pS}㜼 ks]p>ˌ.χ,zpn k'Κ 4?:#@`vMm۶~AEƀk5%={qw|w'| Ե) lmV*- ,|> H("p W[#:sh4F]M4I&w^=G/o}pT9i\{aeYEu(cc2=fmK$I(nnnnr@X,!I6yy/b1"@0/tLT@ )u0VVS)IJRT ( B0 ~#&Fpxֲ,˲ ((   8P_w`ON꺮Z:NinL*HzNx A$25X ˣ'+d2L&$D"Uj*d2L2MB+}+hNL4M|y.ma.r{"H$}\z~~[Iy p{G>ODO&$ &~TNV rDGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/lc.png0000755000175000017470000000300012161415523015263 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL8IDATX[lTU}3L˔^RO` mjS_D5Xh4>QcH#Dї& D(ABL: FŪ\SN\陳}8-Li6ee/Z{,fqShiZM52 k,fl9U&S7MHD!P W}r`Y^Xd=<0킌>6d_ l(,u]3'˸;&:pX.^s >n`LP2O%h*{<Y(QûPw xm:q$\p8pX,FCK%nN@__CCCCC]]]]И"Ty=xtBnnnnn.TWWWWWKF"H^ޥK@ 3sG녅^Ujplmmmm VEXٱwc`j]z뜱uaaEEV#+Qmeeeeef]DX}}cccp~YY]nEL>c$}{Jp,~[MKRߕԺQMF2?A=3K,nhG=GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mq.png0000755000175000017470000000325412161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV}Lg]{=8:ʗN8(ɢd,3H68eq+۔ujlc.Mh 2[Rki`̖߽=>_=b/H$IrVqkA((%h<=ϋyA!1 9Nө|qaL6:BRRRRRRaQ*G˦pprsu.8JzHctOT V+/ޛ |S򣣙ӹjZ-P\\\\\,>NjTii,~}[[[[{;4M4Euttt8!':(:,70.^7hd2L&p8ĉ,^qǤ+ "R>ݚaaeYt:NJJJJJJ@ won&rssssrV|>5fY.wn{|c)D2(# 7uqajZIR*bX @  IVUUUUUDdoJ&5$զ;~n z"\^`9fFh4JCl}^bQT,J,%AOn~90 x2?Ɂȉ< jivG=GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ng.png0000755000175000017470000000223412161415523015301 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVoW;s)"J-d)s\* K&2d:FeK)jQ JP ҁ,Ts*F%qsi}.pBAnf#bcJEQEѶ'Kn߶=]'B x^˗ 4MI <;6 e1\0F4??64%M[B[{CD4!wwOU}CeU^F!,쒗]%w?%l,6@,W4#J.Rܿ3F>5cHҍL1CarKKR`St^./{1%7o?v''3`۶m^ x_ dmMQvΌ\bP=G$iI_2+тwh[V#Υ/w{+|}PD@X"H$zON4M$l߅th6l6%^LϲrʍgK~x<SjW6#EY[S7JR\mI$IŃrjZ `a. o80ϹFh,˲,2buH[>͛nI.===z6 0g BPp4M4mp0,<\ ^ g"?Á\Nq,KUUUUP(bHRT Xt:NG2L&!Mqq'dզkZV T*J:&a2<|BLvLzB8u4Imr/\K>o9AOl7.GNg6=uGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tk.png0000755000175000017470000000273212161415523015316 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_LSw?R,eN0?4JLLHf؃|{]%/,2M\o[E8HP$K'EG̈́@w? R%~Ο=ְe!˲,J̵a((,Źt2MOK$Ic)BP FQ0 nzH7 ]t:5Z->~<1Ï/̅B ИR{C`Y|0t;(45er0/o la W@+핶A2tt}~5[O݆OޞYy,z6pz%pTxS㘜|躮zN,+8~pE`hMGî wFƒ}uo. ̰QǦtHRqreee8heggg˲*$[81ԨM]` :硰 >\ո `muqتNz f%jr+fjjjjjjrr&'pXU[ܜ6[rޛ 1 GFCEEEEEI'RSBZRދTr}!WK>aO($~=mRn1rŘ=]]|m GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sa.png0000755000175000017470000000254612161415523015306 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV_h[UνIi?=YjMMX:f2ì(>ԁ>-TCвmNnJ. W`k{ޛù%E˗;~|6 AAd-`mJEQE43W+7M*!R^b2L& @i- B|JMz^0Xn/oҒ,[QJZ[[[-~ w-X̫[ _|,Nde%fٍU@Cg?!}D8m EC'RquKZSP[u+w{a#>~Юf.+6Pm0v79v%yjsy#2/W?}vQe?ԓ^鬮CE1ןwɬ-*d%`(ފDX|>sR)Ye>DO}9p=C/O9W{+ϱZ|JH)m 0 g.Ƃ$57K3333p8(D"HO%9lܼ.lia^]VZv*ONNNBG( B@<〪]\b| p++N$I$ x<~X[K}4hoVEQՉp8vYeY-+_D^A/no$ )ra1h4F'_!D" 뺮  !(/n μ Vi?M4MbX,hhȿ[ƙ ͮɁYhxxŘml+z/9o||^uIk s뛋/6/ FcV2GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sg.png0000755000175000017470000000231212161415523015303 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX햿oI?k:#Cu#슎"rN q>PW?P՜" h ]pJ"aN ;Y^17`Xɷy;o̼{ߝY8 NU͛bdb캚i8fw_((2PFTr\>sѰ,˒~UoCQ|upض[ӧϟU?~'Df**jU} >k\uDG|vnh"K_a ͺY'Ϟ<y]cK%Gԇ\Yvݣy WG8}&$Q#U*ݗݗs9@{ @Ŀ=cuurs9k"O#O\({{¹^@CܫWLcޞ`0]pꍫ77N̉\"x2yPj&88jPo7 -L4}i|o|= 4 WU]4͕Js{PUQx<ZZVu] 8 w n^޼boSND{/LS m۶-3z8 ÿ0H4Gu]5mgggg{JRTqC'(b޼D"H$$9;+ ]K)h+ OZ\ zx}}}=L&dX,E,q#ܸ)qc0 4MӄP( L&Ih[Vb7eel6Vj[XVVވ?8&r"c|>ϫl'rRT*NtT5NiEԦ00HiH+ 2Ljk6f BPaz /w]!FQNBBw|+[ 諾T|r޸uetФDA?? Yqt2(wGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gy.png0000755000175000017470000000311212161415523015310 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXYlTeߝv-m"8`ŀc*EHRM .Tq-1>`F1aQ"mN3--t{SڦD ssY{.\\%((WL\bX,>/B!$#pl$D"'bx<.1RF~;(ݞ%xzθ0ĮMknHݢ/H=:D==0^L/:AW nh.[H+9wN4Mӆ%!'1Ceɼb9 X) W-yaa'B<ǀ,gρ:{?2lUkqdؽ렳;sg.1W@u]EXq*ܐlg+BՏ9nޥ=E/{8'ʶCpn/pj}HwW [ d?~=~0|Ə;`X3YEd#r\Ƶ@29lrfbe Zz7ԏo2]֗^3v&|2R,tT~rUT{*),t5@\W ?y`fPz<pZi6KlfBtuuuE"َv'Vn~s #FI A\n˵lYKKKKk[Vj:uTk+p8 愼IX80ikoUUUUUUA&d2rgyhT*,,,,(X2]^z^BPqs"-I Տl6 \.Rdr````|'Deeeܹb}>竪j`Y9e>w}Msq Kq2@ E̔O係PWWWWWyT*J)JCCCCC)1~8֐R&dV_"H$ Lq)kk|~2iS yNf mtjÔUʼy\򽔗|nss`drH9b̏TjlzȝWكB_cbGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cx.png0000755000175000017470000000310312161415523015303 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL{IDATX_lSU?v:(v BƸUQ$L` DA`H$1@A4%De``Xd*XXgn0V/ߞ_9s΅GxG/EQi96 bXt/B!dB[@ dfÑH$"_o!Cvvvvv)mxf[[0{u<ǫ*0b@Lh><6p;2S4ܚmXq1% fG::D"7¬wGaX=0%~Clvg䔤"Y\+>n}Nz'=,ސ!E~ a PGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/id.png0000755000175000017470000000216712161415523015276 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVoZݺH_+:D"yPP@B &1ԠnX"W0tAzM1C,I.D28mb7ƾ N]yyzKs^89~ EQEyD|_PUUUUGK9z1qlt{{eYuR8CzbTFc/@&d2/Qqöʷ߬y 6"V:|ȉAi10&{ qڛ!M-uFcgw"=8@SyD1fBH.3\]p|uE]`_}yy` x1apm&Ԯ֮v.| ힹ9' wIii* LP:P*J0yyRT* cQnq jQm~뺮 ZV5d'ӧRO_KKR)Y#dl6KqBH =~Ku2)%Qr{ű,z:B@0'A;D*GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cy.png0000755000175000017470000000240412161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL%NX[k[m۶mwu5@i_!+~ʓS?ɻݟ 1*~ w(æiǎݿL&Mȅx<뚦]}/^v>?1ڈ1 \PUm% UeZ[r9]aԾk])Io:sNcB9`YeY2) Lsx4/^L$yu]uM[XXXL&d@ ! P/L5}j~`0 JrȈ(ljoy^owf>_(ܾ=777z$D"N4 EܸzVmo56 0 0M4M|>BP(gEx\=w. {h4us\./7 yr"Dzd2TUydX, apJR333333؛ [C,HVk_X,JRT:ASS_w52"xgGb@ qj-tZ sW`Uhl.9/'Zf! ;,yݐoR=;4G"tKGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/no.png0000755000175000017470000000261612161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVmh[U~νMzc3hVvf~Bb(QVۍq*ߔUi]qœnc &0]e4[욛^K&-y~< cXq?<󪺲d~dJ !R plN$d@V*_6_TZVUQU+($)6Z} vϕ!,yˈ~@J'jK 34Ym;7 Ўbl6./!G-@uG;7#N@]@ΓP#^+Τ7\ڗU'qcnx@fjQjl5)3`V#Ym՗eX]FLȩ-_矞t^8~=s]-o<@>$6")/w[o+4v}d>< 4\ [[~x7v`[feA@N߁dV̦?ؒFN@UUUUFyBlW4r #RT|]љ ݑ  s1q}Ԟg[sVBjjDQ++oLhQ zy@~߄^WE Nuvgc;}pD; lp8hT$I^$ {DUo~e:-=xr7U_OL3xAc+]0 CӴ*@QEQX$,e(TQݻ~bBUz^ɉ  B!4&)W8t:N'Kyl8R[&ɴa޽x"L;7:::@2I_dz󁱍Ph/  (bX,r\@&NtqP_ښH$z:$I$fe/" kDa!X<&F(q%c-rW|>pneYe# $+H1/JR)  E~T6:0`"a&?VRفyb[f>AGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/hk.png0000755000175000017470000000243412161415523015301 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLTIDATXMhSY6H?~S_H +AwQ±ˌp]W\(r'Ԋ`8m`4@D|Y\o$MBs=s` [º4MӴg4ضu]uݲKlfoYrtZ!PqB4Nd2L&;;3l6UznTƳ!m˂nӔ-~J rWJJȷoRT*ծke7D#~`hphqc;/0>7:ltOԵh@G:J7nҤC!E 닯Юk> `|^QvsCq5Nr<~~{?'\]<&oss-- .(&X^P#!ˌ=A0xW/ '`YeYnzaSL>>Z0NU6/x`_UtuombL2v*&@mw]`i*:; 0HIJh4D H$ /dّmˀ\[YU|>S ^,t:C, jooo߾t:fߟP( `aaaaaY"íSq fct:0 0x<@ |>?xPz9d2x8íT*JʪQUPǛDu!T<<)$qL3b1MS-r_h)bQӂ`0 *H=5/r9x|:)ΟrxreEʏ7ꡯO)CRҥ-rV[lz/ɥ,]3?ɤZmRVP,nL\;c_GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/us.png0000755000175000017470000000232312161415523015323 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL IDATXVAhG}3+%[:%u n+!RhBRJiKz=!ѭ4^ڞCOnu ŽTPPim i䘕;+EڵݝVU)]?3fgC{RJ)|,$I$ߊ^|5BȣdjZ9la?0_9FѨeq[pcS]~408(o=A_poy6ؗ p'>/<|/k#Ϟٶmvw\:u:"-K2~_\y_牛g՗ 'h0G=Ĝ,p\KCwRuoYeY"A.zJ8,˲,I"PT* o¶q%d2)ȩ)^FCHiW[( Fil6r.r@\.ˀan71!Nq H$T*J[[[['O՗H<;vtlB>~뺮 ʊQTPBt[O'3geJRDhOBP( @:NӀjZ-J3L&!īM^^Vgiiqs*n=zMMqï8 B,bb\Bׯb:*& 纮iȗqC -քO~>d2L&9躚FW_`E9^s2X95hB/sR9  (/R`wr"뺮kvzr0@0`__el6KhJtMD"|yuv]{zkkk˲tݲ,˲ZVS7:a`qX^KGƆai&L&$rpttxxxV----]⺮yob8588”Y)d D4I!o38A`۶mۜS? RT*|>1}P( ƢIfj bJȰV_t:@ZV=|xccZ\T||xw+t:MP-I+s<~[c"\G~i4_BħO2?6;/_0GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ca.png0000755000175000017470000000262312161415523015262 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?޶`0GFl?A4$<@ľ.L ̈́,ao,H4h80F1j1!N3_x`[qnko\u:eߗo;?{%,0 سGl[4M4,z_>.v^Ju_"!B8CNΝX,VJ&-˲q Bw)ڶ*pttl,u֞yXkr{4ރ/[k  l޺Owos~o #L&̏HB:̢'B )v|p5 JtN6`S <>h Pa8fc3p޾,:+0^f*>~ j D_{]/\~~' 8rvanQ1׸vțW/s?~x<[7[vi׳@)]0|O LL( fS_Iɍh4:=7----5 gnRZZ#`si}jŧ ۦ5$C)x `ؖ<߹ihp_0$0 Ux<(2 \}^X8BbjdR'ٝo_\`0 'L$իUFGu.|o޾>)=1>5!Tkxsrϫ{f@ m۶w֪B'ZJUQQQ|ΝD2iY]]]]D" e_nx bkz|>P( `zzjjjjF5P_eK2LZnw<㳎ueDBw":l&pl;FQ-S|WVpt:mBjS#=44ZRT*}U<3z~_СC^be./W[5rEs+>}A_`@BW!w"/ߎSz򗹸GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/si.png0000755000175000017470000000240712161415523015312 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL?IDATXVQh[UνMͺ*RKiQ(c 0N)MW˓OnPMYQTksvK]oܛ^NOo6 /^{ssv]l 8;} -yMsgVMW,B!, ;x$^U4Mc~ ͷ,|>3 u:\YY]U`w߾ ].U*C!=;N+u|tOtO8Ýw~rJyyVj-BW\u_uzx|ٗK#f@ږyRZس=ݸpaˏ. /{? +?m/I0h/0zɣMELlLrUh3X}uF[: &-cK$uu-.ʲ,W*M @Qt\.y 'F81 m?M;#% B]((چK~ES-c[wn ^0 `066tC~IDMSAx~aaaa~r\7d}4af POkOp8AZbIiC[i7o$L&$f,iFNmlwj,($I$^X,J\.:DW6=JRө((¬Fddq`h,g3caȲ,2DZQy"t:x<qD"HҨMff``ZW*Jd2L]5Q{[AjUj]! *71uԲVf E{f;j|=m4i3f`af-~X[A7./ :>+GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/is.png0000755000175000017470000000260312161415523015310 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV_h[U{ĦdR[+GU9}2nC d67fh_6{0"M+Ih\57zs'gҵiK/=|. l8JQZxy^UWLn%ZM_Uy4!XzD"H46r&0>hj X}we5MUfrJy]5ssɤ$緞sCŦxupe5з w|u֯ _xʨt?'ZbX,W bqr܎֛:u#3_'ԗk}8}l ,< ̑(I-Y;Y=3#QM˽c0PƷuT4N|} :^}c1ML۝!z4ArN6\0Qb(MME"H>bL`0Ff+ЧiҺpl [:)>:B_!WH*7 p\.2R)I$ARH7hɤ&TVӖv%'K+_\X,x<Gd9NhUQEqp8PUAAɉ qNȥR-czv݀(0I&:ftfa߾tZ3A@bX dD;\J~`0 ((Vj^|.INYL`0 zI$I*fee+De"?g(H$p+wB( B|P( '7VjflFht%==r8(],Z-8NA[%lRʨb^T6gtaCA(jyp:GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mm.png0000755000175000017470000000242112161415523015304 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIIDATXOlU?oNgaaTL6SRIWI HodFNx$j D'ݽKԚ6at7lL;umn4^7UbIajj,iiRk$هozZ!q,X>|>7m*|@ lc Cx<~fŽ^qDA>&okߎ '3\G9 /{2 @Ā- & }+9zl TG=T*Je& q?ZSWr~}v7 >#vVqI3āj$P:9 8Eh,ƍK#"EmW+ćֽsp39qAo\I!l3XaT\. b>_&ƒ39%yv]9% UnV]mm۶ 0 *+oǎ{ BqFGǛl6֝7WDu#t> ٷO(n2L&Gd<(bX,H$@ST*J1<<<<<,D575jkASCKݐZT!]@w~p68m U0paz9g5 %*} k;OܸUfn#%@`M]Ki02f{8Pr`=Z[PC`-SALY0OZ\ S/8X -k!ie >vXӁ 6ȁ`P3QCsl={֬3AN`|!9&`ےB0wz7{Nhf'Py[{pO{x/{/ ?W| ZUgt1Pf8$\7&=#[9 8^rhc'?|#luv 0q`}Ntp__^ٙѽ߷~wl? H47Z1t*+.,˲\.Mu!}$4p̉At NuᅛO] /,ykm| Moa>`OrVPQ[2 SPpT0 &Y PNgaaa9Pi @}/,H-[XQP{5Kg@+9,W<[.H8;2u:{]KJӬTw뮐5s'iqD>4yK.4MT.C{<@we9á====000000LmYl@iLOگN,+*d#E****4iɒH$Z[}>|>BPb1y#ÝNLm \kt:x<pn!L$yd.QUUU5{vmm4b~ߟp:ꬺU>s}PlB$i`0ijdR^}":;;;;; 0 CӼ^" ٠jH6/qkJyۯ )GG<}J#TVVVVV8iH 55] a:P sq1؃Ƹ6v8SZj, +3@롁ѽ uye/xW N3s1 b;aV*˲@ H & =pM4хفV+b&7^sb>:jaA/חFmn2 :=yj5)ymϗlsXȍr+85{B YL&HtP1XVUe\8nvf____o/p8 9Rmx-o/@y:yMMMMMM:mY] i*slX,O$n! B!H$ԍ6w.0k{<eY^|J64(ݢvx<O$;;;;;;].۶m9֕7g ݉BxLd @ `eJ< ]]]]]]Et:NF[[[[[(/M -uA Qmd2`0 oSbz%lV-%롦FAQhӦMԥJgEyE>-gJ>=o*?oҝ>}~'tB:===_npT>uGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ax.png0000755000175000017470000000257412161415523015314 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV_H[W{cLPgR:.c:&)QvBևl/ń>*iЧ2De062CDI$3`gg'L9}8p(AadT)EQEM;Q\O_{,!8rϞt:}|.|(=.ǟ B>l6ͦlA/owӯuM:x^V5Mx\hZn |8^x-:D h;jr`)r\aq:A&_+?0<:< f{]I!AG]xm}^NsZ1MKFU!8zU\_-/`ᕥ1ൗ A^n`qB(eLo&X<%>@ =`=>,Պ/ KqJ?g5Į@𠒁O*~p5Oͳ sاAMEŸJغLtW NU76dR/8K-f(C}2K)귑YJGޙ:ZOյh]E$Ijl.h2f (t.#H9}F;iŸd t:͙(Ȅvw8`tZժc4Mc}kIbX,vݔrl6{Ɔ,ց 4U Itz4bf4F(x,RT* Yk 3suw;U=rUUUUv; t6%<򭭭--7nd\>b(d4BP($d2 l"ڬfA_om2L& I$IjZx!"H$|> RT* $!8j(rT{P(  H$9Fw0z_l앿=Op8v>+{̘r6慾9׫wóRdo ^=7Q6GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/to.png0000755000175000017470000000231712161415523015321 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXMhSYҔh RfE6]"% f݌ψqc#Hq\80(Qwj .BLl1yw|$0lߜ={8 ]u]zUj590 0Uql#+4M4MձZwl69R,JѭݿvB8|>WIp{P[[ ?o58qu]H?O?|@D rGvvz^׃>_ p!w_L>0717-ʮLyߡ<;#f:: >ܔv .rOsOvn|@<ȓo[{{?@N3  -lA t>Q=$K z5WlVۤV"ae?o|/TE>a-: GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ht.png0000755000175000017470000000205312161415523015307 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLcIDATXVAkAf6n0q AmNK.IP{Ы4]#ޚxRBM*I jvl7;ƗM7&!}3Y_9?|(G+B((獷7NyrV1<h4E˲m&?1ߎc4_x<w]靛 Ƈ&-{iۛo0eQ]dG~z^o8nd6 ^29ij= k~'XX'xB7ލ<$ 2cppdv;.]AZ"`4́{;#pj <?|l$@Ü( ~'f猡 RT*i J\Rwzdsi%!ຮ뺔 'pt}eE77KR\PoAWMs1tGnY:a~r)ŒϭDd~iC7uӴ0cކg _ A0dzd&4kfr> jO/g<;sҚ 7mxZ[LK`{^!|..Ùs`E Rh'6&NN8=E8;"^f?nO[pysqs~;0 HNVU:_%F'|s HT4qBPqXF HWKJ+.SW7]WSv{xE׺z#DVp$&ֺnw(crݞ(-bg}㍳v3ʣ lf0;̎PLiĖ4K>Hǭsn *T<"6u']+]~,g$ ɫ9l뺮}Zh`GV1{rUWijMMMMu5444444uCvurXrt L[ drfvvJw{+----%e޼v?(--+++s:5t:N@sL.xy_cnp8Ȁ"::::&M_"rsssǍ>cm6bef(3(D|"?RX(uvEwBeeeee%CB8ÊRRRRRR"D|oJ$ 5$˄j}  x<eE˗[~Aiq]]-H;1X-fMl-%?hIx7 aݿ|_'!/`Ⱦe8GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pa.png0000755000175000017470000000311312161415523015272 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXklTE3wPmJB)6TC)Ę`@hD@* FP **HxD HJ[nWn7_w̙9sn)rgL:c 0 öoz@9>/I(7cu@.] :D,Qj 5rjYӻVt_}YbYça`a<4wb|̵{Pz(&5 6j:{CwCtަܠ0~֘v*Oy|r$|E@ͫkŝ+6 _'NX"3snmս>\ʎvtu dh¶m۶ӥ4 !UBv&NCh} Bo%g!%H9ߝcj>7lؠ =4)M0 ݬRോK=VE@.hqNA1N .ĒRsDF~60w,.?FBO`ͳY@Jwui:V\6y=ީٍUAUߓP8X} 'IS^`/O^`F+H&dR[AFkjjj:sƶM4M0Ϝ6p:dk8;Rs˵zeAp9Z[^כpa8D;wՙf]]]]]@ Ѩӑg>/,E>x<|>zzKKԩSE"H4z@}}}}} `:#jyxЙH ZGyD8L~/NC7BCCCCCTUUUUU+q)HMAfJmbX,~Z5kno N$>Vw(,,,,,)+SDzU+_(|{PdM 6M\\כ4=M6-/|}==l AA8vy )EQE]Bz]gb1B!d p:4Mqt;Z:`v{&â%6\ZZ^VUGZBOHy׆ṾI烼{Nde%fyE `%g_1>2?`3b?4|9* WCQRP)EZG >W䉔 0?aIj_Ӯwwsy q;qK3qm7V(eZ&詼=wtix+pvT7_"% `y[' E ?bW\^4@yS#>QA;M@_1PZh\Xѿtc]@GE%54@j7Jm2{Zs'jj&yHd躮,H{>r~>N[@OLanUd_j_bWcY*:?UA ZoЏMb:WS*ninVE1@ *8O岲2A$QE`4T[ot#4  (WV hsKv\Z>m]o4zmQot:fs$*I,kx;/˹=S`ddO)|J$ *ݯS}#ts84Zd2L&;l! ܬ(==3333~K$I(@( B!v=9Igur\.̖Ft,ƥ-jXqMpalll$z`0 Mc72{sȏeYePEQfl6vn J&Ɏ[x<״˗}>+-UUUUƜY~#ry<-I8Hw7ad@ ~d SSSSSSx<@I:Nӂ0<<<<cQMsi/&|zޑ{F^}`ekl@<6SmBKxZy̓YB{֬[ s7a8w={k8#z =<Hu9I&.}Oس@lO֭y.}w'3 W+s㫝l*کym۶m[t]G_̴$^c'@e NO<kM;5K+DWifK˕+X,% ]VM3 ]uXkI#ѣH?8m o|S 1 gyIq[4yp~wRT0M *qw*{9?qq8 @gZ 魕ߕϏvi˲,R( ,)4Lsh4m0 ёyCБ +9)jOůOPݲly<ҥ[әL6{P(dP( A"H$YJbjrT].4Mӄ@keEooooOφ L&͞=pss*JRFTTB:Q]D6mrp,+b1MS-rWD"H`0BP(4mpppppPT5JFr\.x<ϲb~)zuwKy㆔cc|>SˇXn)oMUEpJ.t_8ɤz*7f"J~3TPoE_IqC>GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ci.png0000755000175000017470000000221712161415523015271 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVkGf^GuM j+^H qH| ͽs 9Xg]J  =8?(%7KPBJ^C%#ZjZT '̼g8 EQE{W\WPUUUUG38}~&c1F~ Fh4Νkl۶iѫ`xu_~jݽ=.fi (B\(` xy޾("ӖJRT8oYir {_鍽͎IEV{sr] `ٓgv#=bnN9u]u =Ø77rR\4MTukkkRz^ BB|<209rO/Ni $ fs{4M>H$]Yi6[-~lcccPдBP(ZVۖ/2nr6 ƺabd2 n^*onŅVղ/bX,˲,0e^D Ǔ*O3L6뚦iP$OȇBT*J@6fTt:Ӵl6M`hhhhhrC)S K׷$ergyUqI%EV ?ÆP(>zټ^A:d,4v8nt:bh4]IJ~R]]]]UUW Bӝ`0 & QVPΧg ىBxNd*"~߯e} |>fȊx\U=QtnJdI )eA2Qm&H$@ ),c%wwU^nD’ׯ߯ i' BMMؚ˳m2+H'\rz3_M;LSLo_9_@q*GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/td.png0000755000175000017470000000214512161415523015305 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV=lg~4F(u*.HQR&(:dE{\!bAaca0PyK+TKwqw/s>Jgy~?SGB$In sYeYL8 {>c1F~Lnvϟ l۶i8ٻ`s@&d2'Vye} Fu`` ܼᅡULП};m.rX_wx<%Cm)BO;?yyP N`w2Nȋ|ڏ8;TOx?|^>Y{zc$r|~*0ivLtg#$I2Y"/r AL!eX|c1S苇* ~<&$Ҧ뺮TgY(bw4 s^Uy/Tzys(Dj:` 7MZ*X|yGPGT`9kڵkFl(rj5ii q.!>Z2/|>d6+aF{keee~0GvwwwUEVjt:Nm"MaV\OUUUU4M4 NiP( `4KWŋ/m?}ZjeYe)"Ri=* D4d W28gaD%<#z^JRT\u]W*JRa,ڛ8PkSBZ-ɞ8vn:'hkKpxf xr\.#=!D ݽy R)x!^Dm>ۥ_M0IP[hΗSkp_GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/bm.png0000755000175000017470000000304112161415523015270 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLYIDATX[lTEsv/Ͷ`dHc 6Bb >T$ZXQ%1EQ<B EJ%ے.4嶥{Ö@47?g}ǰ4MӴ+aXc)u]u4Gg5o$kiZEB!Nv-X,Ǖ@ 0ۑ!Z/ix;Za 'oY߻\0i=ᢽg Dv0dȧb"PƗr3cCt[]@v_Q '!.q \.(8.,>Psld`3CAxd ?A,r7WTqqȱ@8RZZBs o4k ruOu6\_0Ob7ˣ>osJ.m]o>.1Y ϾznpRr("@{&{L KnZs oki?h֙Ki+]{@;ӿy뱮pvqkePXzy_*}ѵw if^`T'_ ,pQ6?TkYr]#>҅L +/^;3~wEln`x L4BLzGgg0  t\.됪WdWm`dN2dU8&0~)΀܂ *l)%i"//Dv0 ә[ .kyw+@)AY$=sCO|NZopP$e,0 PиzMz/vӴv];:::! B!nȡZ+Zu}2|>S %%VQ%[rh4wllllljۛqFw&0q7ekt:N'x^ P[[[[[ d2YYiy?^ϘQUb99H$dʪQUPٳ ՉBxnOdBa 0`042= ~?RT*Ҵz!0}$(i(VIjcH$twwwwwgo֫A/^[eeeeeeOnb˜gmUl˺/ť+Wuc ӭ&ݞHPawUJݝol,JGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/za.png0000755000175000017470000000306612161415523015313 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLnIDATX]lUwfwv+[[`.%b ~eQ+"%*<`<&|E"1Fh[bmW,ۏms}.[ڦD 3̽;w:: M4M[%XJ]u]᭚7iez{BUǕD"HdX4MSÿBRZ|>ϗL^3sc}B4 G`;\/E#80isį ^3k%XK#5/s X C ogD+n%}`HOO*JRW7!>@wgGpBhm6Y q-oM=hYe0/HDo0fߓoRg˨ 檧οp̆/hMs˯}c@nk733 |Sѱo7VN{^@n8 ta1|ʷKH1JRZqwϾ}Ċu1Vy`ܛpsٛ4^>}`Џ ǬOϻӃFݶsrmT|> `9>{3'H}+2rl z,0zۓD3fl}:FM,˲<Mu! [=ş> w6rP98^7/wy~f&wDŞ b&Њ n  KuمGa6sU#Da\g΄BPD;+++K Cu {E.|f*dM7\&u=϶rq;05 .&I)e`jfgv޵niiiiiFa/ Uw{[w9~/d U~$< p#| #P'^O eg98)!L&IU"p _ٲ 0 C[ZZZ!aot )%^Γ^ "fNb7WI钶rrrr/LsÇ7zӴodp SX!?vn~^j++<)JJJJcX4hhhhhhp:h4MVU7gj'2깜N2 B-_jjjjjjH$ MCAICYՐ6Rx<ǡ}<۬^mu~Mbہ۞=;@ 8iZ!mo"S\꽲*>n8zI ;Cu~$$C|d QGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/zm.png0000755000175000017470000000240012161415523015316 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL8IDATXMH\W=}4cf!Ry6 ZJaHMjE\T,-CM..J)~dSUvYL$*dig7y;78ts{ιyiv\9\{뺮RU]WL !*J X]M$D9Jiy:P8R[__n_W+ښe߽\<;>zh߬2Ah=L g5 ;|!5 BPuqun { / z8:i  =x# [/|P!/}s XU/ͭy75i/_W t?#cilj,vGȌ^r. / ɛS_ٟ9ߝϼVx_vy쳀O >@3{ @@|`w4ܱde=ຮ뺁tW;9 nPS (C50J;0ymlwcY8[.d/oxtYM[eܵTߏ.New";W ;,].J]ğglqGe ئ 0v陟_Xp]0 ŅX^^^^^ByLXɭl-Ls~p8eG$:|(ll555556%T:}L$bH$EVJL\R}|`i  mgɓ2ܜ ՠFCIEHQu^&d2;)FF{|utHYR?kP( T"]T@RJ֕å)Zq YtPK\nozP:ÿs s=GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tv.png0000755000175000017470000000307412161415523015331 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLtIDATX[lUg¶PoYHk4*EIXL hh񖐢`"n/hƠ(mj]:ݝtK@4o3pgp'ixlK뺮;5yt]^<.B8&BLѣH$TU%d2RNUN!z)]jkkkkkYZ\\8h:G6wk @BJt"  #@ҡ/(MUcࢥK^Gr\ni«|g{>~?$w֌PIMrXo.DEq7KKe1 <^V8n#\z_ӌe;')'PY]m\=e.nk|"2@<B=P0QZ@*?e ."1ڷ ܀u j'S)31a?n ?-'-|pN#4o{V_vςwSq0LU7U}!76BɰVWsǟg?qfb1O~1@cU͹0xE\pv_I$vO3ONFB< ̏ݏjok31X˗+vPXe: B̤ |fs'ُ`nf¢sjZV[l7-fPtq[.H^*A{h p;X ܓMP,ˣQ۶mT9oS`K׮[ :dlrsK]{a %u %1ɠaCU~:8Ω١F> ^7fXGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/gm.png0000755000175000017470000000213012161415523015273 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXVkYv:ai% 8eDl@K.E,x(eA؅hBs0A/WOݓ$n]{I NaXg̤'3~tbR ^|{~o8!> AAXZ#cEQEo)4u~:c1Fyt'iiSSiYE~~7@,býA }?i™JnޑVj``!{02Dίx+?$=5s`U, ԝǐjZV72?~bXeYEQEh4t:ͽ lvvvٹ94MzP( q]u]ҍH$p|PP'|g\8@- bX,L&cm۶-l62&Hd 6hFh4JRT:⸹sەO[xvD"H$h\B1wo+ٱ}'{PѼAh=H/wl~P M5GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/my.png0000755000175000017470000000271312161415523015324 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?ޭtڱ1$j'&h\ ibpb20B4$>aIX|%b{$. )H;Rdtnpvѭ[4wߟ=0IiirdrlۺnYS[oYr!!B1bh4]0x\l{L67Pm۲vnӔy9y֭X >Yz?@ۢmǡxCx1 k1%v?Al´{`c%;Z`;Z} \b5"2V^Z{OAvdp0NI@Y?*ncT翂SSWg>{f;tyei]a͚U fOPoU $J:1x? Mki߶u~pg[@];juɦF0 Bc12N5r1ضԲ_M?t~^)y kvsfC jDIFR8&NEzL:V'vq ;,,*x7AUާ~cod} t-j V Pm^q;ԴX`~!YٻeqeYri +_nއQ/r%:$l`akO3, JPCMXH01Q^x<] B##9P΂Ms8t]~'u xUGߨ:ppccNc!&T]RV 4M~^\X,p9$ә9ϝ[x=N*;7cĶK0M4MJ` 9 㩭,p8tz{{{{{AސG-V<S}2|>S CCJJc*****,2xѶ@@"H$x\6t@">t:Nx<JKKKKK~;;EUUUՊa'ObX,q*nDUAeمPܞB 4CP(42ɳB0 yd2LjZsssssTe% Ū 6~D"H@8So֫Br*%ʕzT~2ڱc#fKmUu_dKW<[uFXnO$9xP}#߬Ǚ 'GGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/uy.png0000755000175000017470000000272012161415523015332 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX_lSU?޵kn2;7p5 \XDB4Jtb(ds>,M}@"1`jF(Pmp9-_}s.as'4M4mVkeZJ]u]7饲&s/B!TS!/?ᒒX,Ǖ@0BKiPVVVVVff˴˵;^sCEo.\2%AgYzF[x)yxb>0He4-(# 66;Jq]5t:N旣!><{сaɺ ^W CZ ?l>8qʅᝠr{["}t$@X*ŕJq[9P\x1* j[ :(πl[I$A7:'yB1A^䦩y̲!n ߟ_>s.M}Ngؓ#\j8ǁadTD!2P| J^QF3.4M4].Mu!ϖuP;m(F@-?' J~apR⯜Ef![FB{^o~`08:ep8N됬M^LC@(F'o%c%Dnh8 ÿ}9ж|>D"rG*qw8{cݖ %{[l'0 @]MRJY*0 0T&{P.r4vnn놜00oQ(JѨnhӦh4Ǐkkkk @   B!ǭS'pU\kp8z^x<`ttddddJkNQ]]]bڵX,6[$D"ΪQuP3׳Df#T> q # AMS#MMMMMML&ɤ MllPPR5$rK$Dz{{{{{'YbK66d*e7fCUUUUUgv-eI۪d^}I.^ْO'VOcC\H6sXɩ瓡: y#C8 GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tg.png0000755000175000017470000000246512161415523015315 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLmIDATX_h[U?6uYu[V5PU,AA6̗Fi!0e/{| i2kM˒tҮ{}89M6Z_}s9ֱuM4M;rD,KGu]m6+j\omBrI$DbӦt:dqj%Bw,KZ]Jz &wRsgw0Y$͓69!RH B;c +r^X,B@vh:=040 $ͧpknۂf?o(+֨)V\\.ҲhQe=!kg-|797$Ìv{@cņZ8vuyIk07'{{~[8OJ·Zo~ }m>u* X{;::;jm۶h S'o=TrZ3Nx3'@듍;ݼP a81F|Unjjj4u] gQ>}üd9 ^|Hpta3;JR!}V]>e4nyjy\J,0Ծ{iu,˲,KE `C aٶaaLOOOOO!(V8y>yJ씉W[^׻qco|:\0888F88d2Fw90BJn i mmmmmm  \.o\uյgt:\D"˕JRTyaYu# *{xPLg!Dzh44U2kBP( BP(hZP^ 5Tkzel6 X,-t侾7_ߗ<9~W![ĉX=UqC}Q\6WoDB=-ijPK2_Py#?,<m+GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mc.png0000755000175000017470000000177112161415523015301 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL1IDATXVoPgcTȨ H){eI)Rڮ4k&ÚUHq*$ c-w~}w3 +&88 GcyyӜmiu[o_cQ` <=)(ViF~˚Uo,BP0L_s |MߟSo`0 \0u^KKM[1gTs.,2cd4 pD"H$͌D6Ii@ X_?:j;M!yz^4 odD 0dYeehOdY(b d2~9.r9&Ip;A $5t]uVjyhѦ[H+ڇy#Dh4Jql..~?Zm%6q_Lޓ]T|-ӰID@aʻߟ0y#ځRjShGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/sz.png0000755000175000017470000000307312161415523015333 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLsIDATX[LTW} H"JѤ14ڦ⥦ T/Bk[1)ijS/>UBckS#CJM6u0ȴ 3a}8lA 6}Ygk <3*_ 90(3:?do Ϛ3צBkuS wcF-Mipۋp8/m,ܔ1X+L)dYeY.9B@F.]-/1W)mfm0yGq=;t?LpjF60ot{IH9rn(F+ #gfA2W=x@  odUbjbItt:x<pnʠ0 cl;zC(***1cH$FϞKM BP/ꬺU=YZHnʧ!%%&i~߯ijlW*HbXLӪH`j`Tn.hnnnnn~d-**lYY܊myF(,,,,,Tq`ShMl]=MlU2%H&ӒO 'T_Կa%Cu~8bOf/šs_GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/mx.png0000755000175000017470000000300712161415523015320 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL?IDATXYL\UP0J3 JXԆ jUiUĄ4E}1ч15ՠq I[۴/h 4jM4 0 wr@4ݳ|ii۶#]7RZ,bs7Ϸ0B!!B1b@ #HD+sBR\.˥jM4߆ |LGۭ# d< ԳSȳV,r<òpR59@$^Yq\6<DK%̊x<>ݿyĶNW+^2V#r'!4KPb;/a,p1Qt0t8}=0,]le.,9$e@zvn . c<8 ?}S]O\QJ83&퀓;x9XXRNj9 ; 9 2 0"Nh 83o×(`7\ԼT=V 04rN2 ~,2aS@N`5YAF| GU #9?})X 髋e딋f BpQ0 934440 p:5bf9:pyN (U/HVF ~[מ 2e7@97dw0n߉%z#D~v==^;66kjÑi6DC" ;V\!d,><ůK͐ھl4{bb+.U; pw10l",@ӄ Ar*w8 9ʛd233333Zp8 O@|{ή.ðl6b7;h:xZّV*`">p8pnFGGGEqqqqQQEE8G".Z`0 Nm2:ʠ' UD(n dza G׽^4U26X,4x<!0}6(i(V MjF(4Ϥ]L޿WA&_ >S0%TW7yMimU/ť+^ԺQFxPؑ VoGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/dj.png0000755000175000017470000000236012161415523015272 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxL(IDATXVoEv7ެkUn$r&SSTA@j4'J`Í*\ ?)7@=4\TBl%i׭7]6仼of޷3 cx!XeYvjtM8 qlAah>'OdYeСBAUU4`:4 p\.K׉biӧ,֣HMaÛoJR4uHaHC7`=:0/?V@[x ?$I$,mb BЧii,04j4i%Nbt:]G, n7;GÇݮx<] "ݏvbo+} E{j{iYOMO9Lmy=eiy &6GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/cg.png0000755000175000017470000000243412161415523015270 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLTIDATX_h[U?6iKf2q-s/:ځ_=/}ʼnBӡQFV@͖?Mvs'giӦi|{s.civٶ뺮;άF#fBVX]Mt+y%pݝl}]qǶ]ښeEwr]w+gevqA8OK1Z^zkdE)ryf B@`RXLn_7ZNj?{O &}1qg/HKq`xߴ:;wi3gEh,;=@G|q_'W>nƏ6$z_x'`rc_drOOK~uɟf۲~> TZq95N_}Bf|At]#i8i eߪv j `ޗ㛊BlN9hq!z{M4[[V@-z40t]C(wg|o uҏ!ɝ+͸i`0e2eYF[P{_7Vp]Xg5CQ[ʏ^]۶mV@{kg,,,,,.:aaz,-.B*JR _Ȫ!ו(ޘJ`Tj>UP( Tje_Lt6{V<z;:Νfs|~ffvvv65h4F!L&I,w1W[az^0M4M@FFFFFFX\___?vLZyS 04"""BG|+FV\#?thG"L&dIZ,.'_^U5nf@In;Gj'?tk- )b~!++@Ž֊{@HuÅB}YB)'PQ&Ԉ hоF{wv Pn8Ӥ,,YYzzp{pXIʼntZhm#%'ӷ@8ShHj gZq`ndnQHDZ^}\0~ '20d;zdžՏͨGdI2,})8Bj2q3Tb/SFmoOGƁw67}~j30h.]@vAv~ŊAH](bI$IR2Y0`(---8A |;@0[ۗl6 PEQ:eRz-l./FcxQK\.^q:f10),{6 EQEbX,H&eY/\ Դuk[[,P( efeUs ։Bx'gQI$I82k係vKRT $W ԊK$Dyk^gNS~r'444444s{sd2̋\q*>9샾X$/|1Ry>SgGZGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ec.png0000755000175000017470000000302412161415523015262 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLLIDATX[lTU}N;ҩSHS@b+m BI Lj0M@C'J&j>bUĈ`x!NKB[:9ۇ6_Y{`3iVRb"s,뺮Vōg'o|>!B1bb]]̞H9Q&~;>P4 HOOOOODLo||l|d vv޻}g ;@N7K#Goܠ\dx[Q0_;BzY#Fhtt$0ܣd~= #!'0>0.8{SJ `[4$&$X l.Gu8iGpeRR 0NA7vn[!KUc0wjX{8:K^XR9 +ԲO؜㖻 A[.B2YlMBHڱ` ҧﯼUEcqG"XW%4 %n.lHm=8"i15h_(>b3E|*ꀃ43J<6ǿ_W?- ?"m@h9@Eni=eaai  {vyv hZl'WaEQ(AjyWE϶?@Vp?_ ii@ a:Y)F HHhnvq @5111Q,]u `uK68Ka=@Xx d"X.>pLփ(j`D2P&a <&˳ٺ^b 7yu7(+#а2YRRF^ts')I`55ˀuH)D"HDe!8GQQCCCCcaX,ŢMMMM 9|^NL͋o~gh^AAAAA""33B|JJڲbNu,r F67PbC0llZV+8PZZZZZ }}P(bk"7777'gjj^ZXUV݈;.T'b IDž)HvnMS-3P_____NtB\8ÚVYYYYY)D6% eUAƓd `Z[[[[[řfӖ4mioߞ j!:p`pnʹUٸ"V\꽲7:zlH"Aʎ? UO7 /_ͥlcGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/la.png0000755000175000017470000000242012161415523015266 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLHIDATXOhU?o&lM 5L(PVD=6hMN"GB ƋK ͆ڐS&nI&I3޼f5%wo~~y8!i;'G-Ǯ뺮S_%8rtZ!Py솨.`e%JRL&fuBŻ@[[[[[mKk}}] WW- 2eC䪸7{ll Bۯ!d^z31,qqQ5 8xKws';?/𯱶o8k /}pĂͥď"$~|cGg:+rybN\L8m4MΝx<ڪ(@9|f!<=b CB~ nR&:8======~ښeYaH=w+~eΝuv8.v:';Wb7Vmu[m۶U&J@x0v뛟_Xp0 ŅXZZZZZyCt+V\ZRa*<^S pX P]]j 3gL&|yrrr23X, L&If,w11pq$>iiB0 D"lmmnnnDwww'Of2L6{T}eYe'VU7 Prꔐcx<k2O,@]>FѨ彩P^ 5TjZr\.D"HI<?^ۿRT\yR)I;T+7!/+XGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/tn.png0000755000175000017470000000217112161415523015316 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATXV?LQ;8i0\cMl i E'7袃 ql,L[7MS%M+;Gi(Ѹ[{߽}ws'BA<#cEQEnim_cQ` iiõaq[w0Fc@( BŽO].yyu6+=Lޑ_FA1^&|_[ nj|t>@f63 ZTGן9scJN,4䌜yXZ]ZblzAqN'@L Upn87`4<{Oɇ̇ k,,x[-䥼+]7gm۶~AEU`kjk `>|+W`oroWÊ(_| I8x=Ixx<wwu]ץ?;%οsnܾ温s;^8N eYEH;"p%V[ BXmI$IbT*J7yd81k4D" 43ᅮVIJGsZ cyy}}}=l6fr\.72nJ6nv˲,2((@0 @2L&_}cbصkZfL.r\*K7"U㳂:^ʧ$±,UUUUjgO_!y JR)4M4!NiڵIp󻁤A &5z^JRT:6nn"nh4uzs-k/EɞU|絎QZd;[Aios/7~ZGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/ws.png0000755000175000017470000000245212161415523015330 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLbIDATX_TU?ޝnڐܥ& L#}RBe "wz#1ćDʐ Ev);;p<;N#E/}=EakKii0yzS B!c>nr\nbT*@ʅB󠿿ukSSGx04KXDʣz}wG?O_yY!/|;AB /עO͛z^ϟA* "@]9ͥpߺ{^: KXs {39Qwݰ O`L8Eh,,` $/LG8J g]Px,'`jC\U,\zw](.+ e!t-ؾV稜u.xҟ-8['+/ $?r[OTӪk+q qd-0y›96{e䣜]`?y T&w-< 4{vzB ~`p \l۠!m%WRTVhYiOAy*&cs2>n8}}8߯F\}-Wxq+?z1nt>'͕o^X%* \u]WG40+`-mo6>>>>1y~dl6 lP9jƺH$D=spP%PЭ4[@ l / bth"'D"L&@nduЭ0ilYeY`۶m  Dh4 jRlܨ_(߲֯X,Kg|>qi8֙7ΠuP㺩T*J.;B2L&022222=ZVF<BF;{;ЬҮ:W.2t:4O݊c1U *Q|ZBP(~P-4<<{Omr_6~NO'OE+wXЙZ;;ȋ7*PG=GzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/by.png0000755000175000017470000000202012161415523015300 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLHIDATXVOP AiQV!RTJeFȜHLD´M"ELbDAD];wᄏx#q'$I$ikFKcߗeYemy0;n~ͦBy B&p~h4ӧm6G`X,.yggό xvvqaYoϿ./'&yy$2)Puoi3>!4MNNL4 B(,˽Cld2L×eYBo w^U=)f0T@Oz/,.gt --iFT*˞((\T*2P:@7)a p_Ot$Kxf󳳖eYdN%.H8ki-#{DBP(t:Nvn%)fY![.0qqjZVo#Kvoa!{z:iD"H$8NЇCLp,/W|n\FM%2 f; 8ۓ 1@sGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/flags/pe.png0000755000175000017470000000270312161415523015302 0ustar tamasusersPNG  IHDRbKGDC pHYs   vpAgxLIDATX]hTGs7ޘI4R(nb|TRCm6"BA-1`R)Z+})Z"TZlU( &i4&]1w;};ٸf1%s̜3?3% M4Mۿٶ;x<YXud>{qńB\x Fxܲ,K\ ^JǁJv 93MzӵPdԀoyZnޔ@[n=۶E5?ȝr#vD{Ȗ ~ l1`@a˻ ۑT*JƗ'!:mP0rcA;,oJ@w~exVBO;u՛7f kti~3?8 <%u .K\O9tg(+J1# M@:} âOS^/{xFi%tz@u΁h;92*OqxCT # H9eBB X1@,}Fž"L00 RBgOƃ17E&AIil92@*=Oj>\rRqq^Mx6`1#Hn#8O*kX< ndD4Mr 8-{7 r&FQQQwD?UaOoqyJ^+IY K{ :j6`uw_ 8$ rq[w|4MSOfT=oe`qe6?HiV-R1^` =oh@+<śҏOsdWg@X)g۶m*]6I8 kmw]u]xaxxxxx2H7Trv2eۻd욛UjeM[XLQi[%%{beuwD"H$pj76 0 |>******&'''nuߺ%Ꚛxܲ\-,4M4͌cUY" *}xP.DZZKBPHT\@+`0]]]]]]PL&ɤ~/D67rsAQCIU\T˷_"H$upeg[WNOrpq=*?:ztjוUɂ"\j^ŒO&=H.{XɹBU>C EGzTXtCommentxs.JM,IMQ(,PHUp HT0200VJ.MRPMLVW.IK- AڞIENDB`pychess-0.12beta3/sounds/0000755000175000017470000000000012176727272014417 5ustar tamasuserspychess-0.12beta3/sounds/obs_mov.ogg0000755000175000017470000001343312161415524016554 0ustar tamasusersOggSvD yvorbisDOggSv-vorbisXiph.Org libVorbis I 20070622vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSvMPK(#Ba3T`365)eH\w : xS^&^ښ3m!i|S4 -ẘg$H )PljUQnʈ&'q7ؼe01EY_~|}h=qYyR/r|UQ_c}<&!UJ^٪J7P޾+*@IbF1$ގ#;vWϵZqo?+]]]U*,^W[:HTLïw]a Va4$jz~>9]4_9ke)wόSU"p>A̰8?^3:دb@E\ѳ)"TȓRyYaT_+-_}iݑ2xsʢG4di}Lyg:c9Xi亣XEV7. qA8+>'+vf8YZd cs˲c*/nѾz*>,[/^DRA`M|_%mLW`Є Y#7M'J ̑L;v.t&M%Pտ'ǕZ&CLʎ *:tQJ#Zoqy榚N~|Q ]5esOՂcIѱ(ӛk˒;j=aVbxO[K <]Y2igј#ۛ:Tpm۪8Hcad[~?DRPAmۆhZ[1_ #ۤ ?'ЭMh^\jB^A" PG0\GF秫@$tfE5 U_3]6F~Ês >:*-) Ǜ)=9ƒO$~أs}]G}lfES>=x_h galatj_!UQB|}3PiQ!:[y` >E^HLڃUC!JduB 5hrMڻdfDM U?E5a5~:UUytՑJ{ϻ}ËgփsL0L4}[x_?a+9a䣜ڏQgjla Il\PK)<{CGKz"IRT|x56Kuj9JٯᲭNOy}|C/"zʠ  aS^D/޸9ۃE̮>3jUVUYYЫM*{ڗ;.kwa}əL\м RQ)w{S}īE|I-+'eYz,< !$My2–~^X>fm$(=B~#;̌2#U mn{oVWܻڧ{?UwcZX۬9pzzLIBav|3Zf1Luq4sxOM =y^Ȥ{׳k4UL>W9q溯u6K7if"+M/+\F d{UHO_OMNge=9eOx T8L;VɒTR)mEpychess-0.12beta3/sounds/castle.ogg0000755000175000017470000001356112161415524016365 0ustar tamasusersOggSo/vorbisD8OggSo7B-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggS;oŅe'"(&" ""*-'%,'!&!##&'=- /1 jjjh0L_'3yA3:^][=7޺j)ht\lǤ@ V?P)b9Dӟ%k !{sKPkRt葶&J#Lݓ*$ZmzmPXDsu* 0{RVz9,g42fyd,DRjyM\4\_ P#D-OϹwtsg)43aT3uh D<ï΁}m$,e3xAVS]Y*A4tc.֗2wkO<2f16 HOV{ )i%a4DOTWt)I}[bsgivo}ai;:v?nDqN %00KN-F >WHjx"񑻳Hf^Zfп8ك;#;5.#<Y'ˢkǕw}i?LۢoEY|˴>vԼp@OQ1BIGZx8L@Ť(*H5M3e IoE0Λc^k]kϹqq+Qv{>`B $_5nwi54Pv2>v_@ RZ pUΎ"}_0E[? GƳ'$"2D㇯fZmOAjo}b͇{C܊@iAަ4D4\>v_v4p` M PlZ'h>к-FXu1tq}4K53>,yO)rly,Yt5Zq(vpGN#B6PFaGȂ1(,:\ύzw;d>v_021:tw{,gwdVDuv^Z Vؘlnm n-4K93$Oe-sW^+ u8%{ϑ(6Opq>0KW\ nrY~>vpB M(c!@&bjsMFhe?]e+u I=&DR!D.G+C`d ]'R^nWaQ9v8hA"Yx*5!'>v_"L J`0A_0@(A +d2SJj=TQa$Jo־7膣đb2@. 2dS,d̩NV/F!4KψӝWXA),S>v_kedk|BR%q5eu/bTY ]l#X\ o߽b# '## ?' -=QM{dkqrZ߹2e:v}6ތs>G&gD+Ҋɴ2r$-PrWgҖlutlns=Kϋ=34'KW$Vk&{dIrYu Kkog!.g3[zm[6 *%[йCbW'H=l4u0#n xQ볢3*~>Y4@ߍ pychess-0.12beta3/sounds/start2.ogg0000755000175000017470000004572212161415524016335 0ustar tamasusersOggSxC?/vorbisDOggSxg-vorbisXiph.Org libVorbis I 20070622vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS"xϭ475GB88788GJFCDKHB69779FCKQ/>:LFA?IKD7:877DB@KDIMkLgo~+0@9pTg)~8B&`W>1ܟ-1UG_A P B\|ܚϿ#̅տR!Cc}c~Exo=88RE4K.w/S`vБeSJɭvĠ8Ġx^ooq: rɵN6_5uM)‰Q((=_^6pTVꝻ}r|q9߾>ds°٘¸/.PNjC'&s49߿miGWtP/ZIJ¥j[Los96Pn0vwL[BOHgd;@-||!/s>o}.v3bT} „vaIW/*F"=ҏ%gO2 2L7o;6=c Ĭ&fmO tq.ഩuzB#Co}qpf?7#SJy-,;1-[Q7ܿ!/h[?˗޺5?~9眙>9a{=2D[{w~?wNHWWkiOOb}jN_X[Cnw00[G~?-w}ƵjZJnGCԾ ;tۯo g>;7o!֗e_O^GMk¬ yP( 02 n9 E?̇lGs׃SK)WWx@O:!?͛?X ! _;e_Q~8kO=};=E=oQ7r9Wx"?y~P9O_A Q2xй>VFRa?8|! \Zo.x:MS gʆBw)? t͐d-&4'$usyK;)c)30gc} ccNg`"O'8拝wcaRƦœ^bI_.Gƶ_Onwr=րah}o/?no{tVP<V~ߞ|F*ӕWO{;(/yJX+χ}d6[ú{^7;//֗A1DҾ)|ɨS"Iʺ@~ -𧏥r4_f|??0> ϧ9=y}Z%}f07 #|4CB]~_u_g][}i|jJ"j۪)%9$O"v$ʦ; ЂoקO_?~SNjϚcщ`"TUU-;3ߩ_'ռtvztwb٧g=Lag1vP;s};3=Xw~ijzLpېտoޘ mf8ܘ͙\pibx#ۖ$c}dv7XBX-C8>OɊЪU0;h޶ sZcw>}E:ev?;ie$Y\ʣ]GRY2ETW2[-G+ϙ-Q&edӶ]sxEi&&M}`~~ ?>3_9 <Zٿ91|4wbH")=b#4%U؉,r')N4:da#'A9@M=6>M~{]6vpy$4?H[cG'lM7ͷ MPĢYNjێquuuu5Zczxk.~cc˓mǦpOrs{b99|9v~L3Lyis6l[q࿏:o|+8s876f|5eϙq''G7{ϐw`;}ۛ˜`ngS.0 i )F0Ż|)Y5F(PIVL j6_H \tR^}|=$do~h>ٿY\ҫ ǝ{K;- Zq H۶q7Pt͛[~`? Zc? p`OyϪ4[k-Z? i-mwN8x9?C nX*V.paQ$W+>3翺z{T\n}/S5ߜLyv}2jrτq¸.q Jo!@bͳ[oWSuw"3_wMhz'lB+ =9 FV 3^r YϗqS1TʉϏ jϢJW-TW+@ zcQ]]jp(n`89eW7y/nɬӋT=_mJkGDoU8Wo~;!vWvc _9?V&W>S)cK=3UWd q7s /}p>;8|fnM?l_#pM5HtP i^~Mzޟ WkN.:@c. TEl[ wNo!-# ~fȑ”So~oN{y;髧$]&XYB/K)_ fྛsn[W_y>{Ю|_G*C[!|?0D?qw#V+5 _y-uBjQIN*œ^Ǹ@}7q$e UcWM7?p|2~o?K _ֵqcoœߨ6mW= yc0.k^?,1{ϗFW T\WIU ō(ƹ*rߧ[^?sV\`l+OnZ?_>|έ8?e맭|ʯJ5ULfMQNl B1oޛ^UL6 [w@RFJ[ G꫎m@ðw~i31CtǿOj`/>[Tr5Sqi_~ 3pƧ:;m+ᇤ{7 slgI"DR_)f2Y#:zv`D YvDʘIT|V[Ofܴ~ss/ۭ<)*Zg,a㾕c! 0cſS:E#~ou+uŸ%VS.ɯ My#z;YY ]oɓEQoN>󚼟ʁᅮTp쳁>{Ϸ>Mim|NN8}ɀq|kK]-)XrOggSJxr 3Q@37668DGNKFKBI88729EBIK0>8OHADEKE57659GBEH4LMd`苬[ƀ ҍi+;ifx e!TZZIJ;WouLo^$" EgE~fK@?Hmfh )X47[Mcܔ8̜QN {*Dѽגb;:8M9=)_1?4dbfn}iϜ=?fp6쳡⫫a}o}9-&':ty5w/e(&h]𨷚l@둇J;dcв^Yl2n Mfm6t`@%qY o"@.~C1ˁ<+7\̵|?透ϯ`Y_=n/ Bk/R&Z+{bbt0|M1gZJu Bk jY G3 Щ}q?_ Lf4Xݸv{^K"LJ7_sӷ?l÷op˩9ȪJvaĩ'R-NvxұmpnKkI: b~#Ħ;HclP)pٗ_Ͻ^n޻y1~Uw3SYɟs?$kn]]pl3-mO.u<o߿}o~嫛SZ\\\\\\\\5!?tdj9}_Vסm0TIRWm!N¨ bzί>x0>[3|76F֦[淧@ݧko4w%QU깕$%Ymyj$)a%p#  0 !߼?Os/}o. d*7^ :$N5&/11_jXz:c^tyzzf}}o WN[MTB9+rUZo$Zoap~{uNS\"M<1oZsW,"l)A{ \߾mgd9׷'OqɜF6Ŀա{si܃-毯lc:V -Zroo7g>?4.w3x*p w7Vm-ϛ},xjR_f)m#w Cݳޜ8{`<8LnVr*E~vk!4zZv=}Dd#;JЂdߧOW;~qr?>ݳuy֚#YrW%{V;uH||fnq_=)}ޞ+!ϷTȼ5y{3{+YӨh7ow'Ǩl ېS0|}(\r/<{~+η};j9\)Hbz^U12VJ忖LNH K?ˀQ7WkVŀcmۜێN'?*A.s|QU%e)]&ar{QDy2o{ C/FCsr\o`-edWUU|v-_M'ImlƚtOּ9[3n_n9nN3<||A2Ni|8͞glo gw>} |wǾw8?pSl[l>gtSoQBnHׄ{jDDv:^tt6{xs0.'gstpI~ٯ!Vrף$ϗŝ$ @!ܑLxQo[-''';ժ~}53_??UaSjk4Uk5Uܿ`t(/E oi?8X!D6w_'/N_ c9zT,S˔zEl\]2upknwn[O>CI+:F{7) D!ZЛmg?fn1L0spvk]Ӄ1^7ynM¨,<Oj#cKw^o1[;'֟@0`Meu&?nE4MO 8B0T3I8iwf/?}K-J_IMv]Gasiop^eCC_:ms_|ŭUs>⫳柗~)Uv92%WS8 O&T unMMGHȗ՟R^p) 7%c&s=}#߾G`u:= mLΝ{&y|J9r.:os'sf@n*f{X(+o~rR{r1H=RZ!o` }y5i_n' _y&W9!h€?p ԝSW ןA;|˟gRzF[%] B}X e`{7vO)>o.~P-uyȟW% v~芪'LJht]; ^:6R}}罊m_y}j}ghZmwcy/T 5\vSe֕^2ݗz>?>5Eu?^&? *J5ըz1_Ո-*\G_\^T ;4Wvbԫ} u_klt+%a>9~;{kAGMWDjN :ofżx;_߅5{cB?H9D.Biz္zZ!cXHSk<;OFZns?UέD@7_URW^ }˶JT>ZvQ(Po3N;~L*f '훛߿l_~:utii>q6XcS/>}Xg;Lnw8qײ^[<]KVrQiE|έ?OP?ޘnMs?c:廊/@QRuQY}tmr&O =j߾?ׯ?z+}6=goŮ6ߜ0u['~NEG'j}>{V'΁8^]~mٲBKy!uHBr XB(|jpI张G31m0B(*9-KrR]|`7f5^4>^W@GHq?;}1O7| f1lxgpp@@ MDǞ[-3?ә?_u2B KT͝;l x8hw U!g#43na@^]ņ/g7ν_q3pJW0i@l'~"l;rA@~ƍlOܸo>|zۏ>#zU@,G|?|lՈW_)ok SϕŴU&zlBP-hq"³gO~3޿7t&`ijpw_կY/^0Z(ec" ]?8+*P˶Eiɧė8491bMo2{oR3BO =9~6ͷ<6;T4:}櫧e:x:ֻ|Sڤ?%lša }4 LwzO|?s*`vNj,ۤZO$Xi~q,:ι&;^6Nӄӂ , 9- e@f"x@Rv{ 561~|8PTO+G *X=l3.) i-}(|| ԃJnߋ7&u*ol[̷|N}- oK'&-h` =7ƻ1\q(pA 7X^~Օ.+*hX^ܺEMqھv$U|ԍeNr;o雲4O|]Z:fŋ__lJy жB AoL$~ J_ KxV6x8Xx% 藗 ŭ w7g`z/ T`;ٗ;?˝+8,_7ȲTڤ~M>oj/պ4"2Xt"%qnˀD-0!Zɶ1iv|ot:xSz9@oEgo^sFs9F˚5W;7~Sȭ{=m/#ZuLm44<߼5o7<Ӝ9 Y\'Z̗i-0zm:#\K:kAM@4 : aآ-Ң`EC4DjvTCGCP?4?:~4!e$%#k^u$%=)~ ]PpRo GeX';WUi>9mۃF:7L"svE{rRڶk_/̷}`if}yibĜΡs㜷霙sf|cvv}߻aρ}^-2i*;>9|S䞁[srO {sh )[S˲"J}"0ckkvcE 3a`?ZQ$$#vF z60#-M#>vl}&6>X_#eǣ&A۩~{Gs (sSO0;,b*Foit{z:IK'^lU>ᇹ\voہ/6ܦyf疧?3g.ρ8o96߁!9}۞nWTf'p9 ;{[1S9`}d A`[Ԓ [%>X%W w#q==$d>ZHDnM(ۡsew w~zXo{v7\]" pɚ?pw~3>ͲX@Ri*OߦޥBE,1c@ ewJ5ҳw?Z󭯾՟$@?^ A$L]8O_tRZu3{nrLL[odjo=_kG4M2Mѿ/.G8~_wsg+ tBh U)LoaO7 ,#7KygC0XW,+oh_FOF筇|bhD91{QviUDkҪ}SW ,lpmp}!sATiz'^FIimD^kܾF珛[I- llNɁ^7=8Ϸ s~F*4G%M)53}QЋ3*Ai` 8 ^jn.6c,>>]'>9UOƿNfG utSR-=o\_G/U?o^#7+ȯg\Un"h u-jv^5)B@/QgƶS-UxAgr=//0,csϖ&̏Bɧ{T[QRVﷱ}Bı=-7ԑAj{xzE6|&6[=I[c9gUcN7 0 />1*"!O1ۯ׻{aH wai&CF`[6]J(Ky[K@[^O*ZO%OggSćx.q#HC:GEHBBMGL8<:77:9EFBHKG8@EJ4AID8Ą\ȯ/@ۡh:{ofO!_>~?4uv~VŁ艓1I+UMbd2bv=\D޸aw YmLpVXL> kGxi<ƫm* D+~\žg6ReF?)x3irzR⫲ !UQ N{^G_jA⇊aX_mҧ>y!k<TO}JD4]דxwLk~'";qh/u`\'p{Hlvx0~z{$D_]fbLϓw=7$sܲR;'nߙh9Zp];HzK4Vڻ[okboǕurs>sV_'Bq9tZVġ}=qDwtgy0zNU8}gW=9+ﬠFwTB7yz}VK{˜ "bؗyxZ{_-p*iNZ_oM S4+ID_ =K"u9'-{(OQ->SÇe+wQo?}2Rްg,u$t$,SmK)ǎ$ן0&v(í.|YQ|K\x^z.!5laNsv}:ď_c<:1ۣ-~@7WBΜP?a};Q_Ι`]>{:$:&͟.??.gPfbOY{7uzp A$?27rRy$UU#A8`!-p21.b03FH@ɪ@='Td?f0D2΁A[,_5~ސGWeN !Zu%{.繪6¸w}\*S}ݯrS@E?Ξ?_߫PzYӕ})lC~hv9yvPL3P|}p ?~ u1ܾmpW;V,c@+ ')2:>EgNOL [?[<[oo~9f~Y_{|S"kC[ Z;Xzߩ7ay:\ޢ+ߨ9nk²?X>{/Vwܜ׿׼՟KOȱnB_xj|wLBf^z7ɯ޾1EY\|m<|HZ Wp._+<se{~4p8JnN,FS DGJ9W~Pټ]K }>Z%MX~h;VVݏcnbr}Rxq;JjN.ladQO37[̝}OۆyLr?~|S&WUd)UXWl7Yf< H};T U_gӜk_J~{̃ w# yU"Y@8†QwU탮9o}1.?.o$5TF3moVDc)qexLɒڬ|v"{?/FY,$wx{і9s?n+^ Pe!W`#/}3:8 Řٟ~?f+AxJX(i_ƥh?d]j, 4g=$>~<;vjC=WIY^;k-/Qk;&'/CWc?X{;TW8wy|ͷǷ|㧇LJTjRB Ϗ/p]6ӣ\Y1*VX]6~g}QYuyy뺯;8eYUYY}}V9~8+  }o_k}}8C,.....<_^^^^^<^^^^^^^^4 pychess-0.12beta3/sounds/check1.ogg0000755000175000017470000002403012161415524016241 0ustar tamasusersOggSpKvorbisDOggSp܂.:-vorbisXiph.Org libVorbis I 20070622vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggSBpU(-99`(j%"BffcV*BN00Z'ѨC 0pD"6әU!apD{6m,7 eƂ@,Xu$ >zQz#"MabtWl=ݠK7Usv˃_$to!{kKf-)?P)e;\"67։X $ޚ]g 0pfW6 ܷIYl0g9WUjXiXEG0A"bj QDZnS>Q{t+0>zk;B=튎#VӨ sLH{mYA @( ] _g4sƣ\fb1UΈ z+mcnF8@Inzjy/}p(@^zO88PzO8A `aiJ*Ū XcEm*6ٱP0mD P\,FEn. %JS7nˡVp_(J)=L-ϳF e$si$O[YJ9-/'5CpAN:/ӆ#{^Ι_?H[Jt*zM ulbrdW sgr  y=g10p38hpɖ&V,VU (ӢUL#Qb0>hL`PDҳQz$RU2?8eBBhLkT.:F!BFU*QxEGb7HUjBNwEZz̔=`:Δ8Sߦ7V+"ޑU-"g8L2h9=GQ0CGd=Dl2bUU5ƪZ ptp)h#BblcUQiۆVQ"?JBX2@ 2le(JdA " B)bWꪭ!Xdct{ٚwa<g%];)F,ͨAvA Qw>aݮ;Р*@3Y{;GO A@0Is,X.WUF5`qT-a:, jVT[U]mJ6m#B B [F 0`O %!J"(K 6PȨ*Hs#9=gBFLSAzOFӜw@UDCX N"1`>8bd I}kXvtR_ >(j`Y8\,GEET*j+!q c+?:P"D2 \F$$T  Q;0I) ˥XU`He.ǘ |+%|?tae阖sovmƒ-jшн_D?'&0#ʷ54v!J @~9{ 1> >z# # b9VUU!VPEUXb) BGȁ*~m,JMtZQJ**,Ӏfт$RriE  J^ %Bh22BrGդW锝jHӔAD+8=kC 11"Nh#;8'-!L nbm`` i (DKd(dhl &xsT2 fXUUPjN4$*XjtJjnT);8@,wcdY7q4`rP;E$(i'B ^M:Rņb lFkZ%(ߍvN5 ci:ݕ |x({ p'_/bŧ4:@EC٤Y; fSlK0"lm /J0i:i:媪 `:VlVbFkN)mGN5Q& MG$9Hr"E@ FH)@itlBR$ Ђ@Bdc &`rZrqN=!sUVn>îNx yaZR뼃V2&68!F"a+*FZ5ƞ݂t!H!&p !O)vc0ȒRl 1WJ>Ŋ0⏐]z(%~6W۳x3וP)jڰR˥3Ip)go D+,SKXHE T7M:h>PqeAYo AnL*+X*5FE(bs jj=sH@M+%c"a0d *L! `60P!fMFj(qd'5꒢6Wi>IqZq{&h 6ДG ذ?AJS.ӿuHZlkuѤn׵ 4Rmyxx[(fS ^%@!@U$Agf,+r\EPA+nAQTGQQ]R")HxCԵ +B mB˶,b¬`CA%40aJ)䏵 j@XH -iF]-uE vTNBlۍSn/K+=f~@e^)m;otS6\VfHި-kGQ[Q&"XbU5],V-8&F#hb"VbhѨ~uUhKƄ" %HixA: ] V@^(d<` FJmZ (ð83#f֮`hj_L:OFFP]h;. ɖJŬXKμ 7Mp}8Z 4x10<P %%+gU1* L!4&@j-M  !0mB+jA-9R ˞HYMXlY5;vsl*(h½Qb" BlI6Bm(Uѿ’ Y1/ BTqjmxIlD)J:ܢKYzVrHo3\i$/?Jد#jW΄Jl]9-Ct@1OggSfpXA ,4~x% ḞQR0H W25@&Q;s bΊX1QAPUTTՈ18&tS %QCr aF*atc;bawc@ -\ JResY3 BhmeYjs|-.g=L̽;ѨR=Sq;\[1|HtȿGGcףa=\N@= K0?0  (Ӳ+WPZ0UnZ,zL""UIV:TUނWUE]ߥv2꒪ I P&06P2"-_&&##X_s|) 䱁fi tuٛsw˾ѥw_PX_m񽮰ze Шv x4YAׅ=$1"@h|&a?ヶP4 3\Mj`\Y.Ǫ $&E ݪZccxb845®2x m`$Ia@ Q0@ )@Ai ,"@ زsRjR,Ɇ D؉ ' @ U`~Gg~ngHG݅*:PI B~VWN8kV&I;%CB}!WgkԜ?d x|# 4x|# `x#&"@33 ΐ*r1` bA,Jla8>TGIvfN1@%H[6L `Rc  *0.[R3  B $aSA|n#b}Qb^fL]NG-]dmfk$rN4K( ]K9 W\,^4> UֻG;:OY8n. ;ދDw~թ/AIv>h)0ec@4M'\ j;V4سFj5-fiq" h"t Y #豿(\` pe00J)/5x e3lpDd|O\s9?ҁ"16; )u#mYL9ɗbLNHb-ķ%Oʵkֿ$FJ zg|Ô);c[@`rFD4UU b &j)մ9:XMuvVtH[T]p탛)vRPX\Od 0纗 `KK 0X'IzSdD ;L:;?o^7zEpK#<)9!{ >ڿ8%,-:\1f|l8}b ú7m6G=EB0w1Ac: $"eI%sAs,fYXUA  `1F :jF˜(RlD(ZdFe Ba PBGv#($ P0 ;cVZTծPRqfđ8TX(btnɄ2 u&_[sh$PjDJ·3go_##8,%qlxq;2\`v @16%gB˔, s`rQEerUXMS,VHtTUu+& aLZz46mmi621$0 @p-JV1 ` #IQbd:C1@Nؘ'B$J乆?}TU_}Ҭ1G*&*Xk#QIڵ׮Ng=FB.@_S3eCB0# ܀ (_(#0ppychess-0.12beta3/sounds/draw1.ogg0000755000175000017470000005100612161415524016124 0ustar tamasusersOggSq~7vorbisD8OggSq`O-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggSMqe$#"#,-+ϔ^h#9o`mЉ{@քP` ؔV^H<ʺL2zB:^u s5*q<ܲFL.|@D!}  p`aYSl{REo!CߦZ@A!<6Mdc^TS#BRvTvj S]`xGwtJØHBB2_TVZ*ځ ұ$6I46.N*bCRj\clO_8K37U8q@܂NGk~ UV}J9~u?ƏW`*H'# 3Fȶ)(m[uɋY[ZT{W4 W֚ 'p(V") Yќ-a9鄇s8~>)/<n]7)lӢu/R&9yR>g`{YĜ*{m4 L_Ll/=6 055)2²f%.D T)RYtV[u¦ u:b@h")Q6 (G:*:@<2LjU0ҶV0M/֠C{V߱FɈ<_7ᩚ Q}tG"LduFEM'#}9 N 6Hv B-HꧼTPSw(Is`C6CVmCK@f~|_dg aB#OGHVt$υ[7g+'Fi&AՃ|`^Y.ϙ6ϖ呶cj[w f. ڃ^](\Nt<6bMcśpeR$_V :ŕFN'ޘȧyQFW 06TKTxn U^% V%.lj`T,׶?Et_l=DQ 7sODb[q13Q+u(Xw$:970* 0'@H`N *=mu2S#a%@VM(4 G"`&*@u+JJphT3XtQ#Z^qȶdkF?}3k3NmCǏˌ&4Rk!;h 3_ԡܞtJ۠ϔ>RA& Gͻt.z5=:'ݴ#$L /T<= &m҉X<2+bB7bmz] 9RK[<% d&mT{`~s}q`K0s^$W_RZR@5f5wsd<Nl| i$d_/}lX6CR/W(N732Ǩ0^97{$K-åjh<:{ >.Oh/Hڏny $(&=L^t&P|Rr;|@Cc)#Bc7"+f40 >'7 mսAvo\tDZ=7.2uX]i~ _{涰:@ W#?. C_~u},V脽p 6/ P!(ck^bwHiDSn+~L5(ku!V|f?I2{vp&X^( ϘgOj`}flk4JcjOl/c_FK.8Ysw4:^PۊPvGV~ x?,tTw^d;q3؀Mt,PZO]U_/.{j4 zW/zY*(@hCSM0tGW8dC%SG Pz8ҍaoyu桋_#Y=)|ia-4?l{1 U-rxmwVzvM!& D X7GWBz\=D>s=S?j)`']'.EP@VT/A_`xi0"%9F؜iNl|nOTmF+V(EMP#Gp;HenCd.Ck;|ѥϻj? 0<P ~CPcIޠ:#~?nPoG@D<AqBl€ @h}0@BJsh=l;)b5K5q5rs7Pq%6:mHq,.w=9&yQA4 o>/V6h+->('y%Āp,+ff5ǁnpD %(LCϧe /9Z?G)M+t`FRj 3:eY#s1HW`Z}w7+Ow(ǻ:B4DrM!A5Ygl[ %[n|ϓ^,ùLg0F< ߟ~XS*x5A;;ԕGѓt @ d%AiӤu4D]F-O{ Eh 寲C~*Pp TG"3P*hol xe wg|>W`^m[ 2y~ 댅h[nvl$ SL h1Hͻ+zϮW(u-'^68u@ 2xNNN,Ps|Cs>htWk^L]]E* $(H+'δRHj椁rAǓ7CwA\("g"9L#2DMlb! cZ㚛8o7IYɜRC~d]{_&-@\RFPSUY [w?S.w$B/ 9- k1Ehr,|~ C.gxc& w3)$>cO,3I$"O\SUt%3.lXQ_NLbLyhv< ;m{uc{5OggSq:e/*v.*ɬgX=%V I#1m-7)6hX`x *R:o"eՉx>9@{t2|bvjD3nSi :NR筨|*{8>@O3X%[0<7+SӼkXmVcs0a疸pIRѶbZ톰2c,AF SʗJb" ѻ-ФyO5WK1>dz_ՉV@DrQ2!(iww;~թ+h܈i@{Edyth/.ͅ&zmypYʭe Q֥eFd -rj+gT#l ;\Q&κtWpW9;KATX+(Y(}x]4-ly~L] 2%!(c ͑P߃Vd:z3D]WaDkgWfjGU"Kj+!I܊*'i>WB1LxZ$WkfK=?gfMJHtK<J>c>}aFdr3ḨOڊ*g{D2:I'V@ (~on^4XՈ=svF8(HhÕ>Ada^=wlk xMGqz]}&&ĎmcfwGk-Eݸ@I^ &oY* D;7Zm9r d JYއfylhL/hp#9@ <,P_މ6%P*J^} 3K^~唢|nRŢ Ci~kvepۑv:qrqږ,GϐJ]L,Jt?l iKu޳̵4J67'w`B+~c۶^ثtɖJ@c7|!G w9;/h*9Uۺ.m ]K"|?vm TJ{ݾ#{av#*j[Gl*zE\`N S> + ipël{=;i[ r^Vn oP]-%r_hIc*-=7C,pD љ0u=$v彩PfnzU9ˊ7FQ/ { xd %٤yy eI6@h* x0iADAϫ m 01z-2va\f5{vKO-&I3-kEf,#[^vM@ݭvizW h~WtT/^ rE`O Ѝ` AY:?o7~DA k;8'K]VqwVisr+%>v)u zPJS؉nϏdhar!,ii7b}ʷs )z1ۖlWH2[ˎ 1J w'`tvg @yhY%D~ mÒB%T)䴦@V9QWܬN%ttfb;cQWiִnǕkG(N6cq XlSĐُӓF\J{F^.X [V,*+"ihѽhOE ;JxJ&`38[XLgLTxe WjGhM[kT@6UPXeb{>= ;*4jB;Zw줼߇R|by8iD͹e8ic 3U>G%܋Qoٌ~Mq)Mٙi*Dwg|۾.o-Ĺ Rx'uF&it=@'3< !Q*s8_z/( d P$LPީQJ%#U} Hv<KmIᾭ&QAWq `я֭2n'Rm\orBior ur#3G_LO +ƨ(̗t}wG.1 dGIAyGK 84}c>4>^Dnš-jx;08ڣ޼'P8%'a6$θ|T{y5wu.anGR>or W'/+)RoUb՟Sގ&FfW0elPyi*=yp{)G̷dD>1٠.g8F F& AW Fݪˆ"P]$~#UAE}3\ R9 źǢCoVޖϚZ23ʴkN J$5I{T%S a[a`2|?stWivߺ9 $hS,W (Wbdޏ0&9@U &J&:J{=%yߣ<8zyBӠw * 8TPbdմOנW vuH~iA뫞TeJ:Q睬ޒJ&,& hQ);ԯ;}f]ȞUٿw~Tn+&[$V}0VQ7G(;Y,zP n&@} WSL~/܆#)v.0 KF| ߎ$[thUڏ'gU! Ebн0S84Jq;,_uUh/'$=VL݌Y#gf;4x]۔V wa=wlJ?K ۂqH2q|GkXlF#t'$2t,^眜;AU̥"W[ @9_ 4@|8m8D rW(|F8wKūW=Pam!1\FZeO $쳪9]qљ.7M3+;_:R .W:\Rx }Xɡi{5ct >hFܻ-U1Re9e9PwDZ:*@SXPUNr^%֠P7ʯ H*yQEF 9|b8MG -b孵FJI<Mp/`nג#^6t+9Q -Qxny@mC>ARU+]؄wvc_ֈb 6"8oIjP{^XЂ9;qawYD't h lxLe (Tdx#i]8OŽp мx<l [ ma~:ʏ֩w4wLѰgHˡq~v7U_S춛lN1m /Oݶ"_27獢8P7~9+`!;2W[,؅p&j(&s;ǜp_6p@$ GAц@[ Μ&W;T.UQ [RPu] +q#V+G~=6a [y;ǒx_.+,B`HZKp${E.cnGwZe0_|ŀY~ "Tbђ+as _uV؀NxhRAJ\}Ng7!"fJxgFck 07O515pޙcΦsŧc,暦Z<Fp$);%mDn9wXx%˻s 9HjA*HƒĸU-wAAfԨlrw> LH􃙋 l;/-$ d A9[[g)u쨪gvK4.8%Vq@)ȑ"> 0RnImԗq-$bQg,TKV(XΪ k,I&QVv4!28XUyt;Jbv1N>{r5~ ;+tcrm큀S00E%$xs6;VUEfR6LnQdD@zK `X;bF1&2sͮfhBd6??؅#[#JѶ4r^}3#} UD:2*wT3FGHƝl'J؆mY>7̧vJ:o,E2:L:@@  02MOrxjWWs' ӢKTwŻ  TCgv+x"ђx> po {6.i׷M^߮a}Z4 ] ۦ#x0 4k%Iun97D[v;&&37 Q58xN(slpf Z(%Ai^LHuz|E(NDHa|hm‡t0y;à[FOviәOÚh`N$r 5{\fx\,1iL}F{fm{l]zKm)!&̛ rʧ236hL&ົ p,S ҶDt9tsj0CPϫj5RI#E|)FHZr y( fLV13r,H^,J}{޾=8sJۡ[ux2Sd%I|g{mM#L?eW0%~ >7 :UtDƆȀHН p PC ee#rJPO\a @#X(Dj8Dj:J&+\Fӛg;uwDSg!frD .Z!qQYk1dm^pm~+WڈGjf2 Xncp`6Cӻ]- ߳> bAZ4\}xb\v6 Z˖Џ֬N9U=;PR5hnb}DlݦDz-Lc@/#e'̹WIQZrR$rl)6Lj%cHls}ͩr30fUbQT]$^?A |nR|q> rA~ҠMD@}%t`2tΤ (ת>i#+kWB:.$t h55zF0yιPހg5@.S-7B*Jea.|P2hƬz|f%GӌDk΀C *$dVE(9T_}H ~G d -]?Nhॎ ?%@_;GAεs{ե,#9+|~si:hkD'fUB$Ty~A΂llxSG'*nyMY{ϔYN WAw E=n>ےoؿ~&7_&em׎ "WA~zC儐Eb#Ƃ 5j`ϓ4(1d??iȻ;~Zz(_@TF<"XK=CH:>168Xygr n\rg8qs>nr*X'6e9$$oi1m*tfcV{⧻_֔}zI&Hˤ ai8 >' Dc5X'5'Iڐptb:Ƌ dI=%]M/}f)oKEPR/t:rZ4=ϭ.aۑۻɨ{H]exvE-r[90.GZw6Q7Qό:2NLINv2/}b(fFP*5mF> [ءuR0vyₜ[:@8/MwfG*W4rP/A(ZzuAA'@cD HoT bcUd8ͣ4[6[ 9cz EzzNuU2:{͎DW7 NBѝ "jׁ m[a=ЇmFnYHnT[UbppӀɫ|#)pYSkܞՁ%8ך\M mԫz2cHGv&'ouR|kȶoCN۶>[_r6 @!깜ZVg~ t rYhXЇ }a2"Ҷ#uTX~i0B}+=^K / 0Tc`&jwO /Z V O-F48+3Ll׎#篐X(Q'ϵw?#Kel; }{ġ6 -2@1lq}lH5&G94f(Fm=@;(s v tjcd>Iلf?ϛ^ޟ5jŊ]GgB+zD}sZ]=:ffcř}ܚ>WSD~{HEL@f"mS" zS[V]}g2у6mCzd#!kd4wG9p6QkEHZEd`Msn!G- 9Y7zϾ72XkU: GMDPsS$g9OSzD|Vv4G~Aeͭ)m\- ZytjP j8d5qjGl@x!(XWU-{9Ѡ#F J\@!InkeЙ66)xOI1RcX]e|(?*q!o7VuDHB.>>2gGDo}u;ĉб! 7}5 hQJǫuoڭ OggSIq&SǾ;Ŀ 怨Z;X `;xrA9e`кejcz4h8LR HI&=F$/ga< SsFl}ϚmcS?@)*Leͳ LߪlNh&]bjczf̑c/ ۡ0]&l;_z^S bAAq/3aP{΃ XQ2F_!gSm4 ;1`==zfR劂O QAeH@"Q o &琥 ݵ8'ʷAT/lf lf,)4ɭ6|bp#؟gh3 ]'=l.mI󣆡= $K  FAsdC;<" JQuoάؑ &- *"ҧȴ])zou {PÊP)zų~Me'eq Hhm`p}И7cdA۴5cQd留zBxy+P~+8Ro4Unifx,^[Q{/K vB%7T;kвef1`<@eh nbz>I)X*(tE󫊀;A*Zcwݬq:r@^YE?p%Vxg>pJftêc Vb& WN#g"v -SQo*NAT*5ž zTBx"$pdR/v7 (!92t%I&_]Azy P?F}KRQ.%8b*;ovUh=֋;ݣZaZ6n hXթ"kotq?:-.Ν7O{ћ) &Sf:ì"X݂# P'KbFAP.rs rs&VbDXBhU  Z7avűn jdx XCjɹe#6=Ej͒hc9E*1&h!K5QRO`/yܺ=U/k٣5&XfXt~F[ރ' \-{y1%hES6VeyF)R'. 䇢g`)E"MK.cp !/%u#1SFLB7u7h;ĻJQ4Yp=V}vd"Z/[+,ks6,.?{dWx~VG> q )Mr솴H0G:322egm31sU%T jZ)"@f@yPD P;y_L. KԡnRYXzS 7nt4ia4R⃥F붎Liy6R2?zpO[Їf$NTf49Ѥ4-2@(d6?'(?+٥d{BhMzdYo/b1d93,=+H>}S/,[Cq{u OU)xݐl>S 1_pú6Lb"3msۜ쉔8}vWa۝7I%^fS%DB{Y&t89vѽFe(ebࡦϯ5!վj҅`!(t4փ14T@T-}E=j&$JU ;>Ĭ-g5F,*xn;93{)8NO ʜO|4J[lJz"fKELdd~FtF':n֟^CS rLEszȹGI>Dp&#TxڶIyYU8)ܿ)] .2:*j2#K}&F-*ܚ2qHh d/P.ޚ$OfD{S?ZE-T[)5-mH[ Ammy/۬}m=z b"M"IDHݱބ"#VNۺJSiT%iXP{lؤ"-l u}`CI1EhH׆{m% ky$ $Ū4`bQ=E2:GeS t {9;9l`FƐ!(s<&K3#91g( @6,V6k80E(6 §PNWbݔ0֯#nI~OOBjrx>'o~{)e -ĀcI?S^#%O?7дrBx+gd=&V{c>vg%d VE+S h2b A9kIeCMxкP_[ 1R>`/M>J"z`9^@pG Mt+ȽЭۍOx oiȂl Ap-\/Lx}=Ji n}gډ|:Ntc"Ė:~>vԗBy{.q{Y+ke$Ыؙ fOuMLkd@ziL= )X^^|ʱ-=T-V`!l21tRGXn^&KqϜZ2}6̾cыC'qLg}HkksAs1ҁk&9o\!DbMjώ-ޖ`׷>vd{Aݦ*O{KMlkO\q[S89^Ff~,f!HX$hÂLg&zPR-7YN)|Ja-L2ⱌւlz[Tu[cZ%*甍?NN1F-c'\Q9D^w`򇊁)F ?icD >f{iQp4 udH!c\atG_M=i~ZmgQ-nTĈa  A, P0ˠ0铉5u+T*iIZ 6 BMDN0aV"ogNk&OͺXtN;ԪC྅yUVh~<.&OggSXqe_>f!܏V+{yBc;ِ&T * CP*uYFOs+_ 4! Bvk£G{YB6=† L#EֹΓqm3RG&,V8OGp KrECmCJV~¥Ƿ B%3D`-T\a&ol&$E[F:b+uC,QJqXF%WOL#KcɼvDi ?e N+u[ dXDO$ĭ[T[_8xgDDS.#f5  -bs%CVC=u- #HUk)ʆg>{/HґaT2:C{+ExNa~؟*i=aPVVtq&UwW{ZcgC'ԝ;01e 2,ǖ̯緞k7O]'+Oj S=a;$Z35SYΎ`u}Ku"XU *;esfi%`wg4n%D`^V`Ʉw!9w!ྲྀ pychess-0.12beta3/sounds/move1.ogg0000755000175000017470000000733012161415524016136 0ustar tamasusersOggSs/GvorbisD8OggSsda%T-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggS)s| "'%!$"**(z޷tIp pWWW>GlLs<]FנaC٣kg։t\lǤ +nW2 Dӟ% Aco{j3^=Fbj|Lݓ*$H@풛TaDdfO <|DSt;4eL,ݜHJm21e#p\ c@{æ43aT3uD<ïA Vڹs;,s qB+ DzU6mJܑ;&ɭj4}Y =|赯\YVj)$/ʽ`>2Sۺ*/{VMs3aipychess-0.12beta3/sounds/start1.ogg0000755000175000017470000003130212161415524016321 0ustar tamasusersOggSw !vorbis"VOggSw,A-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@B*c:!B)B!$C:5cGdBɁАU@WPrI-sWq s gq %s9r1sWr)-sGqsGqsm1r9s Rr5sgr %s gq s5r9s9s9s1s9sn1s9s9s9s 4d(( @qGK$  YHHXfi&z(*iʲ,˲. HPQp Yd`(8XYP GM$<<<<<<<  Y (dBCV@!CR\ BCBC)%cSA!|={АUa8$!b'Dq !$Xy$݃B{˹{ 4d B!B)RH)b)s1 2蠓N:ɤN:$Rk)SLc֜sA)c1c1c1# YdA!RH)r1BCVER$Gr$G$ɒ,I<˳<˳uXڸ|BQfX y BG(o[||tqeK<ȊL>,Zƃ3||6cج<{r >[N{)u!S׉}GG߱=y) ᣈ))+h2Ĉ>EY# DSi&A㊱ɯ>Qz 6BMO4jiQ3>Kc7?)Oe*faьӵ%xi O7Eg!Ұ,OGI:Rp̍ZN_\_yR~tش:X.y:n~ppC:ɡyll׉FcV-еjQL g'1ZBt8$II_.`4 1-s3HI |4"qS5z` jEe'rK.S>cFʳ-+@LGNXRVltҮ4R. .vv$)m՟K.4܂{ 5sf k|tUx}FSPG<=4QxC,8 W_߽*8:AoIDPD].yoO;ȃo}HCǵ|>M?Jssklwn]%4L> 4 7K#w  (Lx2hj0Th_._='ϣ$$)w[ѥM?Ԧ!֍0GgLZDCm+~8ؽYsKV $({㯽0NЭ?dKqi;]Y*r9T\ D;3@imէk-{hB!C=#~@|lbϔb. ?>/S]q;Jf*yr?YMmȐPa-}~?{,3 &6GjA"\F ~v`,kmw8iK#[m.7{*XDsRP5'u_ r& Ev9kIl˦" 4;)£\#P] %||8I O5;[2jxݻۆðWBZUV^*46Hxf$:CIe޵.F>;i!Mjb]y5㶯i sn3Lk}>4Vxa 9|!EIjN oAP{(QD"<9/|s̪"ư@G3$>N£֨\{t簾J59lMslDd0o@2؝?-'\3i凉l$JiQE)Ics,AȂ:}}8rxKN$kX4 ҲA޿c EzcirW#?;Ye9OlVJ949b%ht3ⓑP䂝o}8s L#DQ@Me?l?ʻCw>5wZR: Vm: Q*JϲrrNd;ĬqPv4;__71uHZ\/+ 'x|YDG6*~w$ʹEws0X3Uٟb~U&GOL9@4_>]3qtGc1=X~1qbbst WK[A2isbUP=M=q˱wN*{W!o&)4; XG>'.&הCW\L׈O dI9f} #zOʱy+B#Cnun^"sȠs774=uJʕ䉏CPӟjmʽԝ9'I,cUSkc8Z `.Xdr Kaii۾Ja:ADQz@,xX';ƾ9}Nge cCr@G֫:SGV᜖,A@۸T0+?;  L4%ǭWG> C<3lB/nnL*(䃳gLBu&((T \qd@3j=Q_bG8>: bh7 q/J) x]k⧋z/u: ?JgirLNQ8)TȂ'&>2IؽzXjfYN0ԙ,75Q{+A{K?tfek]Kմ$<_Rbď ?̓9H[OZܓ{3TGu-Z?w^x5Fܮ}aFupnhqǣF}>0[ƖO]׾'J;k$TO>plKsF JocB*1j_AbO$cb:u!XNN?C= O8fjxlutM M18f.&t2L0P-0Cq4S# F vNtx]ckt2Νѥ!B{S,\kſ:No5󻁟4]b&xh^ v4l|b-=>ogX~>Xv6A7Mw8ElUDW MA3My2|a%Giw͋bZ*f¹Nd- u!ޣ"ǀŏRt*9dG3$X(b1﯄'H[?:5={5onףQ_xgW}NVэK@$P?=t^\ADGRoůGlƯGs?⁍ S=-E}.&DyuR)/JDPk>#~;ddqҤr7J\ã|ۤVkth?Qk#Emϧǎ.t1H]أ,3牬A"+A}N{$x$9G tp/VpGj{GdZ^Sr2b-^2EkX^6)m='D6&\N 9(0Iڌ3\ NC32Qvm\Σr;Y=kpODkl'Zc|ݞ5i"eei/\ bҩoKt;`T/ WnOH>R\JT[v>t|CY!4E$3M? 1: ɼ߲ħ/7 ,6@BXA3X"O))o"<ǝۑyϭ8s: A],Iv 9Ѳnn1L/j-<&:O];$KpHyiQ]$Z>l+M<8QZH v\kʇڿƃ}m%AWIXA ׅA3~<B16CD(̂sfAHAdvї P6n{4š ORѝkz],}O!@ 5=ax#!-Q0or0 0= Sk;4ϗ&a-!i6zY47S3 G o7@;Y da6勷$k8UR0?Vx _}W? ]O-j1IlN/9L6tF (~^BR} Ae0[W%5cl>,Z6@A%ӥe/3:FYTr`7DK,C[&Xgz 5ecСݒ?%ñiv> x@Zl&a|\/mgs/ !}d0ymȍ̞ݟ@& <’\X,s_'4{nmv-OWvcYڴ,vZ2ԊKwH)j>F|>|d3!xt")u?zW0!?Oc1:,p,^:e=Hj(MJq09[RƧuht.y<}wTM$ kޥaPߏyE,;6-Gs2kosWG3%:ׇ8l~02ΟcC|t?>_>UhKn90*qViO:64AuT%Pʎq$^N6럯BHb8.p!y 1oGE=G' /ec@8-烟}89^<.&`-2]_UESČ+C+6Ñr"M-'pؘI,jh)qmĶL͕0^RcC=>9T]X<_$R9ï{3 ̦ /nԵL7,-qK|o啚6]^|y:m9}1^NC1LR2MtMmlVg;Wk,]{ r{ ?74X3'=m Rh;_XZI a͇ Xۊt1rOda!'?ay pƧ)̏%+UtIN.W`<kDkE'ꬕ~ q.aN06by]Qt74@~ *6^?+H.}`6B9/R~G x=:lj 7\Cۜ;k{Zlg r:mSYS_(Ӊ~76ѮzM:G-ĭs9H0G#u }"Q˩kikl'=L H4'kPqpפvu<'_f31jP3kbQD򖺾g^26#ub ݡ=f0Xj\X"adv?Ig[GeQڡSxgCJmiI"f^N͐s7~ 4/u`e_*#"1Ωo}?,]2ysv:ޭWZLX qt\ 5Bkﻎ+pw4mowUfY G:֫sVTc9>{R^Wוh [d } .Oʲzu2j3rr]/Q3<&rHkC^ض=%v_vCEC!޾YƺZITrW j7j8-6̼1h׷0S*`\,ʱ,|0anEWPsyGlFs3__^ZtA[ٍ=gr[фd۝\-KU1G:`!P\5k&\?Mw^Ȥ~}Bkur(/--B}ׯ;h"U'$Xr*H-gA!aV_GAf 3uEIXaRtpr糎7ij[}Oѥ8M) (ɧ9WeAbqFo7d'<2/ Vs0jq.XA#;ƺkrRgp\-Ī4x…V)D@XݓY瞮>q/U pY d()! D ^+-UZj_,>f7jM!cW{utF?l15NQ:B.&'z%_v Cn%,GzQVM^X^)ͨ 6/f3JS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggSm*.*)m3hA],7[@h 1pychess-0.12beta3/sounds/win2.ogg0000755000175000017470000005010512161415524015764 0ustar tamasusersOggSz&:vorbisD8OggSz1y-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggSEz;$8 "! */,0-¾$%#"#""'-2-)1+%--%#&%""+.#$%0/*-," j@̌Z$e޴lrؕ'g2BB[@NC_O @׎o*#U?F^(>G\"uDlY\da>S!`Ij՗K?Z;lDQ '^Z`$i%=:km&*ϝHT]YOV.{0K(w kz;M+ەr`[Ѝ4t6Io M3QCbʑ ŏjL,ςu?\t ƏP8,>4B_mHh/YMGpH5;w6i +1ƀ`LKĂ]񝞽$q;TӾ?dzmX80V^Ju5^t 0VЖZ}n1ӭ{'TEWg9}]K%۫״3y2ʉ:NbqFOmxA>x,i28l˘n@{ $g*Kޯfu嚻NSEDÂy@ÈU2 Y 'ƾ腸4}BN; 0o][>`AùN*]GYJl^!΅`P <; 8 v 6f,fү'6V1X]uw\\9ҧ0X v#Ayn@osUO{!P>Zmdkm0#pL> "zdm>ݚ@_O l3&ؾ66uy@Ol"m{~_oԦA%GAH G.Wp z7ƿR?7,)3?df>bH Y5: /wxbA 0kWAɲFVddZC%0ͬ8;Ks"Mu_XķT56y_ؐ;?eL*r<ٳoco{ H b'~ėfҖ!4ĆW.k<5?;Htf}@sϢ4WBҳBrܐس&KFSZn&A36vg@qR3@{o͗twO[P1_ __ӕYF5L﫫Z/e#l3*ձ;oZ'k'3'@oz`Fv9>J8h6v(&e=ۙ__Tt|ǜXt6J R`>&PPԜ;8+jݎV(*!ex'(PջKC1KLfߤSL%NuWPo"jճ* gk jm'%^Dgy؜݅ ³?J ,3".HdIXE[. $ϴ}bǝ"Hu Ru.;cҚވjq~? PHk3Z05ɯ#4'VJ:L:MO;^<>~ZMńʋd\7ercLfBLyW ׍mBFOXoꊡ8ZC/ܛ9 DEcxNR.zoB2"ޖ8f .«%i{J5%ZX_H i `>Vpe/v yt2sU]Z*R@T{ \*cC S٢DPa=m؏e|# ^l?:@@co֣퇰Q(oj\CΥaP?W>,ճb;:u/!is>B؄&8/s1Tƶk 8L"}Ϩa4{ΓL!i&a$=@r`]qډ|Qp2'rQ @anlX >޿W!Vv3̂·TN{ۧtG5@9AM辜ٝ UbScJ[^^V s8-^4Q`+;{#5Fy˕[x䘜.uhzlX%΋Uu`^jKY,{ܰ>ȫ<:5dg#9~^h}}a}8 h9gTe8u `z߷Oo]/kiuF#w:1)Q׋6+ccHl=tG@_{Q}hM&+i+2'݀>r9pL.ZyI;sRI`l (3$~Gj(($ՎVR|}wǎvbx*GӛdY|WV/PǮuZַOǽ|>Cgi4K 9Md|ԁGGnl^*w͌Fr mCk êC@wg{vѷ, .G.F&nߖgv=B5L0răSU5wB?}k7;)#!5Z0AgݿS"]D+9HY46ֽۧw^ϴ%{n\~[2 Gf(xٜ3]/h#޲kkt;<KoR~ZACjٕFQJjXQIu⢙ }eO^-ES^}XOuy}Kc?lt:)4[_rÓ-bj5[R4si'Ѵi~VURZ;!N2/D0 ?v1cI納"0@Ȣ`e}߰DM(8%rjk۳Iv).X3{'p.ff+R<۟GSs`[jSRN[GfDT%\6Vl[XhS;R sk^Mzvޗseb6}=V9- !fl0W&u!dcuA/N;Ig]9)ܔx)͡'ɗL%DmƼJĒW3C3. iT0*2ll|Zv>9C%q|49Šw$\sS>w [Cy#<&A)YCP_fT_>|-=tkY~aON_.-GN=& F:D*6`gZ{$5ID.>םH3R"z+_^sKkkGm  !V YѓEmvS%YJ^wB%>8Ad^3]b 3};?9z dX@mCLP4.s[^vMSĄpt .gskVuKc/=ٹx~wB];&|!WNlN-ȩ[6O9֧˲b%,p$nhh^w ?AlPx' kژ#Рw$ؽIOC~g8?A"Nρ^<5V.FǕJ4WXo2,o)dr(G+˘^FH.ɳh $m62t>"}yyb3+ Z4Z=6;yt93 v؏ȅl #''HQ%#Af}F_s%6"{iAZJ]I{K(j\R㓻kmx_Es%_[aAVlt "L@8;kU鉿0nnXš"JFla2Im{ΥN ܺ3S6 Jw{BDåڽZLBdX`qÿ&_Iʟ]6w0tǥ̋=MҫjU!5@^XQ~ϠǑOҰ]xW{t:FB yG(8 D4AP{kv-r2ݴ~р"z;VM{n\!bY-\!wyyݖw ɏG,}ߘòeN HrJ(bWqv 3s&^^k~(^}œQ߹xg2xЩhOתnν|]QwDLF~|&&R+OhMDi?;Z7&NJY!|7"Wx5Cѵ3_3V;_20X!~"?5NѱjԌJKƅQNv+~ vH ?'!3h-NqXt {rCXeg;Yb|Ne5M+oo fՈoNmV,8o\=FX핵Ґv]F*-ehsE5ڜ#7_F)>wGmPw9wl(7rg̿&k?{NS68ר;`5hRfbrTVKK,Kăi2s8p)ɦI?Q1;G#;a Á&P'@)AHhujvt S+y֞z] =uR^wFw~' q߸l;4ѡ5D YPu;}")^=Nw ~jaR={fZiJKq.Fj@\$SƩܮ_Kչ]}kގ4kMmD~3.}+xBG9#rUhJMkC>oC4X`P>(͓^3+ .FOOmxi?q`: L?tm* @QPH])o{̃Xh~8hr& ;rf8}p]04Zf,yHu;תN%1?V@%nh[k5"P+!R]vW ۰aVMwaP fo[Cv\ tc#Ig~$ɕg-&Vi5ZV[j_5۲d!p.L#m' Ig_|`=N#8L~D`Y7!5V]S |sp'7KcfY2G0ߺwD_~>">őo'}.>r}i)w1ƀ9 ;Ǘڱ1DKmG2VYyZ?w{Y=($䙕0`Z}>TO`^N6ղ*r5ca PV6wC=y>-\3!kS3ld<һ~mEpK\U:Beb`;lZҌжK$OggSzUDZ&¹Ŷ#$"(.)ķ"#"')*"!""")+w .{8:0 0I61L(I9mE$7ǹ1FWv#W#ahzs^3>ZF7MUL?~9ֽ&o&;|mʝęcT۷L9Wc^G r a<ԿB9IbGR`l;HQ.TO'2g>w4elsf̴p1ӣTI;<ØG"1_n7~ Vx^2d2&JD譧* }:݆6scbϑTI&6=,:ptQڄ0tKtlHCr~6hĨrߒh-9v][wtf=FL/cFI /þV)Yӽ^'Dk(NS{jsmYA,Wp83xmj`Ֆ9Zʼnx)jy*hwCEaߦ3WmZH{d #/y]o-,|}ND㍧71MjeeOhўwl Lzn5{R;MԶ&=m5|WkާA3 E9KӚj5>P$>DW_<}ķr_!\m$~h>Q~P]0|奧[Tz֛xB.qR٭5K@kqTӁv$P I1Q1Yd䜳BQB ;Ӵi{|}pz%哦M1Ey 7]疯2UT&jիߒ^fθ:e@6+џ a0 ccڢjgul;o'ȨJk9c-M`C{KCvp۝S vv %-3@FHcP`:7&/kY/0t4E)3OTמߐmlmJw]\$횚Ӓ'. OHm}~b#( AK WQʥц*v,ǃuiLtu mmm9p;o 7 @7@PH(GTc''S">ű@VV,nӕu '@FG` A+,䫥hF4K>i$X{Rw4Շ,iJBMY a=)`35?Gl豤_8&'j0G{})8¿{|!,q}՝0 ^`C&ֻIFyL'^r.v(^_R*@'kDcRT{aRco Gw'⦅mT(IǪާ8h}u6g}IK4gi0hkHZkT/M 1& ͰsJ)2WC6{uyE4"LRcn jat@jiLF\NZGntY۬+ @_ +A_=n4ZNv@j49٭,9ٕ_8jSP%Gn¹wWԼ:I"XUdYfh=~˞%zdڐeZEu$.,Ii+Hӧ_I`lլS՛MZ;zwd;Ƹ+@ 3,+dPl9s1~xp?g._dh,uww#ήVCl?f)G$ԯZ5G ]%ߧF>~s6^/p^^DeMdu`_Rc4кr-{Bv<>,9Jf9#L>\_޶̀YGzhPs=H^e|A0&hVly\xoc )Üo.7<>m >w&3KadN,(jI@Y۩gmQ2f ՖDUy߀*rz^M -w cZPϸ]T4kЈq C;m7<~N)y~xyb .154_A= ,.nRcMu> =[cqlollk[ * 륕:o' Mܐ]vn!\LϋQNP6mhMC>Ҝ'D5?7x% xsl V$ޔDjvy~x~,QŨX{,N4F%-؛ّB o4DX!+#wVvfįbG FI z/ROBr]z{]5A04z9 a]FVRȹ e7+3M/0$S8O. #3/\mȍ6oڐ;jy!-{m&x9dAD~]-,vdELj Z us@&~~y,IM= _o-P5z;_9pLl aYmHqgMvA7ҺMR&ؽumY@3]7ZR!1F_Ł鯿4O6 O~v~ ݷ1Sgaލl% 7V[+'z9]8D>@AI1^{Dd ¡ zfHEcu:44I ЊymAnfDVi'OVmxϹamc\Z$$mjQĨf F6k:+OggS<zk!#$%+- *.˽!#!#$#+/*ƶ~vR.@zw'6#;J[Ucz2S}/W{.[BD `NMQi(hXϛʘV^F|yQ( (L-GGK%;y =NkҴOܶCr,Q'[YqfNym'K0@̵Mwvnœ%YE^vԦAgϺ#utй9)I 8&q7Sm#ʆS1Wl:奋bHP *ˁ ճYQ 7GoVo|$*c)xD '`''DoHkK5.Dˋ~gu&6`|YZ%?_ ZZvnqQw7y|+Gi79QP,Pp.ƳHIL6{ImZqYP ]#zouz{w7` }&̠ݭP2ѺWD|o1%a&q`gCF7UۧMEg ۅnOTּ;`Vܭ#/ s@32K{5o>*f k+ q=GeASP+lpv9U"u>O[Swos=c&@yI?\KJmUMs ʄ:q|eN>z5|TՖYtP^oӁ!zud^I1VP6+0U'e'*nY%<_N2 bsܝƾuoܛ3G=m%זqSlrgƷye圙3&Q{0 f;j <_hXج1y94Wg^;#quӶnHrЄRU.a;x8N)3>x8TaR[ޏ-#+V] ^궾6vĩhpAuy2KA cJ(Ǒ5=ͪy3X]/o'ɶ!&.B;ZA@.kRghG mX}lJTWg~of1)6O}Sd[SQs#t 'L1;;p|X W k$ڄ%xM,Wa(5@q%c KTqq*I/9d62@zH#<1>qga)V1EH5\>-ۓ٢E}H@'̚Xׇv " h]唭Bœ>1.n #) m‰rgB % {J#ʙ933w^Ww]ZO5IQݏb#QzK (;)F)k2~B{Ƕ$xQNzvu!yO~266%̌@9K0],_=H7?Iir(6<_WZ'ˈOfd5,0E\ pOA"o;9pч%ʑtJq^ıj&=56΂~:m8 ϑDz9^1>>v̂93cʇÙvcQda3n1XMϬ}m,z TZn%ԗLw$deַ]ka*^dCŮ`#X¸X_,Sי]=[86`$%Qkb±"憮9ojcMO"KanaeTd qmD̓>vnB0.k*+=@$ cdi1*L=>5è5>L_NaXO6dv߿{Z|4*LMG[!Ɍ1]4MAhT$F$.t]䨝V>ﳓI냜e~LsYJ;آEyR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggStw?KG4f5 L7<b !sEXk8T*ګKNsqiOM4 Ly<ݻ&mZiKbv,0^@}K{]'sh wXW(ںx?}nj<4e(/U?e(' ҴYbLdAw5ej]Vq|IlZ~ZW+E~IR?[ZVef*tJd#52#JEôs3GtpUU3k ![Rj(XCQ֛mȫbjlL2&D0 +Q}%e+Q2+C-FFͪv,9ƬB(FmO{S(]AY/YBю oT[Gwn9$3S a#dYy7兑_zýXZگ-mKj~,Wud{C 4~(?S+ @6d#|~\ %zYIF}7g3TRB%$.q0.LqzcqJL&W+brȔ"q(2n%l UGFf1+;88 VJwZX+Ύ &VXóSx Ve`% ;ZOVJwN՚0YS;z)OԉN|<S'>5pkիS'*~xDv﫦<3/pychess-0.12beta3/sounds/capture2.ogg0000755000175000017470000001245412161415524016637 0ustar tamasusersOggSn\ QvorbisD8OggSn5~-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggS3(nJj".-+!!+(®²g>-:5 Iߌpz{/Џg\fQ,n=R{wY!!4Kf=He~x0J D};% s9:(ϾE]K9:5ZyݘɔW=9FΝc$Όd 3y}hufݱ&ح<>v֪ Su^^^^-ChuUeueuu֗DBug^Sr˄LfL6;Q}ޟ+K%_*/ .TwT骀3RV'|Ql}ı3M@6;z.ʱj^OGGR3#dO@-S$'dd0v0`p˚,E)u=CsAwKXwMe$Cf4:[77qX泓'$0׭OTY'QW>^n^ ,xޛ {&ߺ~,aʓu>_qDN}H" `&zIRs+!y&Du4+öL?xS帙L1 c$@* ΁;6Mb^5KVNgu=4jupS(*Km-*XO 9~+THb+Pr.f3^:B]և%PDO#GOlB_/n6`͗Vc~w8Q?A߶-Lc޿_=_ǣ-IVB=oSÏ2.'NX'$EFccT/R,1kd0Ϭ QBn ى&~R˖‰GM֌·V^ޕtE O;3,Oz9a@P0!rcϖ=]w? 257:l'׷PuXj]_ H6!XHXcH>VC YCʻÒ6LMaC|T9pychess-0.12beta3/sounds/obs_end.ogg0000755000175000017470000003441312161415524016522 0ustar tamasusersOggSu0vorbis8OggSuV-vorbisXiph.Org libVorbis I 20070622vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'R`FGHH!DD4OggSfuTHʀ#%$&$%!Є3_}g~'?N-A#fɎ9dyQEfaoFRjk&;yT&M3p*4ۃV;fO/6U+]IO!3q@9ꗟ#_ !Ct8Dn Q nMŽƣ# PJz}G%y≁lX~Ak5TXN2@X.˄B QPGmUPL[0?TZ`PC\P;*1uQLtlk}5R#o㍶<'՗Dž^Kl~m @|͖Wt:m[x6C lmEOk$ij7FF.l|:|W3H $c?{,͏R\GMWtTw j4{HZYR?WLJHCt#eG46[zWs Uo܆:+v^Úw3e8=N^N6$M0*2{tY |jdFqц7Vh ¿%FU0 Cf|gJ:#^ױ}<}@eX PZ$H[V4 CE]'fd?E{)E "OcZ}&~ёp,M @LgGQ J5#90,:ֵZeMu`ToeŽ|#P9!g&[r=Y9Q_!O2G|J̆KЏu# :GJ- nY9ft^]-ژAn޺݋`ws^yYԠ_pB3F4FڒJO'sQfAz鳙PKr=3R<W[~rm~ז`e'1-JEӛs Ԉ]-B4C D8{OU2fV]qsq++62M%1LJ<O?]㇖@կBNNWUA%K?s J4'xL| QyCKvi>)Q潙l[{K+w;5[>h6 h+Z &˦,"-mͯx] V {vt!_[Xս3tO< I.'?Hn&zEl[r@GJ`w֫icX)^ZL*f*4L9YpjR<60xvBےқDrbV@~-TY^LX9`OpH Ai;Q~Z ԭt) 7ŜzzT̠:KI6 +N ]L+Lw\uC0z/h[FD:=~ n}"J;9Vx;=e}9'_h$O$QC[mV9),فv=[+ϒ+Qk!@> ghǚ{RA_ @%Mg>rе(k5^r2[[z_]]AOLRML@طk'67',)OgA>فEX&ױԾBZ<9(fي5 ؼ-G {gb!ay:GN5}ٹqU)#L !ԭHt5XGMlv΋6[=iee*7} td34MYԛ#Y+@ȼ{P{$͚3Xx_Mo~NY0ӓˊ[B&KDPqer.JhKܯӓmkc8"~ kOo~.r^l[L4fH1 M&{X6\%, liG.$ Lb7$4} 7$=^7׼<*3d%T'a%4 R=MZ{"Mĺ[mm^;bՙ^%qgq$+9fβ jH 37sW2k lGa cs'lv4TlKe2YxB R+_ {v^aڲ! vvdF% Nbj|ط1߯iףu2;#K,7YdgEaG[u[mZc^L?31l)B5q@b'c<>kG]R^HG.7l%$֑ր g0dd /%^\Ğ(HP{Wڐ " ;cKo oѵأv=ZD"nlypM ^6m;ʴ*pMӿkVvDJJoR${ z=`>jW/ =۱EwHrH[,VܦJωTFZ )hy0DQYkLo(@0ѿMVUy=3koo;:{U(W8bhOu-~loqakSb mh5W[szЙ3 $ng'oͶ2.96C+ %BJNWڛ"kVqaXfvs:dū^ALj G3#fڽҳOggSu+%^\L 8"S$@v̫3:Zc?"#>t8z/܆ t!|YGti@cb'М߁)p\*i%b)z3]Нa:3  Z6LHv:?k4rA9iŖo7&rBY^%d//jCbk1p.W<l}>bWY:k$C*.?O|} -%6H\9E^> vMF,ɖĈ+| KiҹIurqԤ}3R121qW;Xmp y m} dmݫ@H- Q|Qc E oS~~h?cBA1!$G@D3zԯ#5 "U yvݸ}&,>>IRAKډ_g& r2t)d%Co?̍9Eoul"^1":Rۖm Hϧ5AΗKO<9נ;Kxge@1xLxZ J+*R9Ꞷ%n:!漄KO`_qAQK; +څzJA'*-&D½ފ,ӄ@y22A–CTBO)=dkq X~):bߡE2 $ }F>]´JByi{ EM7++8 [jo#(2̭~kZD2LCF@jB>fRNC Tq TFO 'T_cX3p%ͪF? `e[^%8W^B|{UB٪HwNI(;g݊V7Sڃ1l=~GT m%DGH뽴,,riPxM(6p8hc 3#V:O>wN O^#~^Qj'p@R5 ( p0= t>Zm-kWv%c'%PdG 'ȨQ_#{cKW?{6ENNyhk4KvZV^Q^3y+J fxcn eX4F> y1v/w ].XjDCŘd#kw՞~Զpqh@@vƃVE '>gLUb脚ݕ?Z*) b~省Lv ,FTHs  ,LMͭM='^i{f{?gKǒ?q~&Tx>*hobleTj H0jpo49&;FP ٘/H1n;&v7sዼ^z¡2~/FLѨ`&$Nf ]69jwyIxK~uEnW+bw۳EUŎ(c7kt \64wcG4FNL׹1oŗh-FumȄZ,/ $`QBl!"пOl}eOEXNTX z F\~ű;ke+ =z _\Ce=AoG*l`w/x^1&`}Ñۅm?r%.<4ocbuyb H-Sɢ~{^a~׶(AŒ `N"_OnJ I|zL_#lx*@VԨS\60z-h3uQY i2^|񛿱6^OJsm%C H і,mgHq1~:ɜ66wZ {Zi+gk% ǃ"lazCg8MP?^IJ_h,d#ҫ@Ӊf4=  ?e-k92œГLْ+36}, H*rb {Y5WެiTj  @ASlDWY:`ԊV+8G\NptaaS}z1TMn.Ӄ+{,ήӔUL^^ n|NMd(*yK+xK';ݤܸU>tZNXȆ;ކXni% -' 0LnZ7C{^_AMܿsԈ#5 ]m@+PNB-K (޵ z-yk85IX,ECGTꪔ/PF XAv\BvMa[,X8Ycl[!#sEml٫sEvSmrُ`fn_kdeA68O53mNQ1 "//vjs%7[Ii"X7#df%znʜF^ !c:ϡmIf$3*2#4űgX-BC_Y Ԗ +k#&{YoUxawǯp>NZyXs-~ ؤYY8e̲k/xz"n\W9'4YP}˴uOuU,ƥ$!ĶdJZk&J Ʉ*c!_Ƿȡ:?jI;Q-yqm|pٖÒ͐#UmnO}[oF|'SaZ\"p/o[~@vxrO 3iJeR]NE0 "w}#v(D1=fh5¤ j[Վ/,"$8bDe{a_ AfZ&k:[olfo{Fmw޵,.6VPdیyriZ2 g_2. `j6b#Җ:%S*'f1O%f7&` YgD8ì"Πu$aꔾؕL^у6ED3Gk@9i%W h^\> vt2o3f3<98D˯S\ en'zX;(*˪Y%LEZ {66(<`qՑ_^w$~sa;nU[f"0 hG>u,sysE׊NxC79@f+li=r^WD^4 ^mo 4rMaNbwo]CKĭHl'fk#SR^+UGzKxG둃O3αa$CWsh}gbR[wwM3_G#uH8=e) H0Qp^U}f{8lF'1"w#u܄qnnKA3{ɧk'MfSH=r *MODj2#v*K9߄#QAw HSd7X/.J޵ܚEz>5Jp1sEIjrtl~w˩:qo3Ҁ  rbGҁ/vF\x&…ǩ=ΚGJa`☙n_\}"5Oomd9$QʒI8弖vԊǦ z>tSNзi5oIH *n@aAM.g8rYec3Qw$N9Z %>/˄Vު4B#/w n6*3J dGDՉڶA=Ve!4\ҙ|V<_sc@0%* \=s4wkX*6(ZHk8=DrSgGG^AFseŌFs&IY~-Gkׯ67+2?"2fcnN=#y#V{*kEM/pXYX$G Mxay JbjєcMQT`h{ۍFj«|6G4b7^!Tpf:^]3^NzK?+jҶ|c\RAXVXέV9ښ,[4fh^|Iz>4iԊ^  "su;qF^r<8~~ Y#(j2HjXEtHV,TEM$?SYKX/  h"w.5><9qۆٚcKVY ЯQWE:~g}O1ڻ8r| ޵X ʼ>dVC:݉ZAA) E`12?{+LWT= w8=IKۮlmgn# W>7 !W+TSY:G1ýD?m qE{ޫ7t܇^x-#6K wf/#US+nyˁ㈱*#:TQ󇊶#-o,XJj xq G-Y~X+2ϱ)3pEҎ\,Д(&[lURXk޵\[2_GVR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS.y(47K3306DGS2>233374>OGJI78B:79@;\@W`ހc. UN}s wbk7aemiu% tx~̉hW޽Ǜo̾C_'GjrUU8{ I:?l\w{{\ܩƚ׷}9Nx4O dvdzus8^t ӗJS{d{kFKoMѮ}L{k#nup[;Csi!<~oXk c,c'Ad*L׉+j{o4޼YYE mt:;Yxr̮Sh[/\hМbbvvt=qhv)/H>(?}j?窞X{7F&8ڃӶ3s.3KwoלOw~zw/qy+_OPrϿzg[S|.a^ IH,KR\迮GFB)D/پv]PVOH6+sG]'CGBsmiVS7fXl>t} 8DžeC$Gm)ȥ+5:yL޷5g >@>fS3jF[ˡ' f*om؅f`h>aVD@/srXx(_#.ك ❴𘹲3> Wp5 TuОx'wXQгӦ'~5vz?:Y$ÖlXآ`#٭x[n]̽_o=X)fYrU$G_ŋW4۳CMg/*1gnsȔnAcM۪`o kQ_1yJ$˝r~:=6M|=[]鏩ͥ?]>P{~I՛?\_:ܪ=7g_~z3zLLA[Lݶs wՒ8>=09wfڟܚwT gwv[ќݣʺ<ӽm.>Q2%䒕k}{R&׷Ȳ,'=g>+?}}Zo}}YUYYr~_ʲ~y^^ּ*m `;`@ծ> +ʿY5i ǿۨJ`nJ= tm.FHwwwt4^Wۭuim-:*+ u6˘r"UUta.v:z<+J5yN}-n^悳~@³9/4Iv~g*hqڇ]G;46>}Zmen9C*G_v՜T. IA9]ee,?ԞJe9EƖ%ȋ^Ka,ɺd0?,=Gp#|?R/5݁.'{zb C<ˬ?߸([v$LbΎWPnjk5\T,Tv#ޖ<M AJݶ_؟ܷaIpv>~]~{y-Yݜ}1k?S:5{/#wVwUnHAoӢ82m{s>I=4LB _6Pdw`jgr v(G dtqL SDI+RJjX_Y(4 H;:lٗ+oݹ !嘿؝Q{>۠x0x'Z3|>LGsmVp@Չ_21V(Pwaح~]Ͱ-/Bܑ0쾴8no@` Xxdyۋ3 oTʵ?u v> s8)+0ƚaYtTy>O7~Q?6: T)+;"}n}4g>7/[jᕻx˖PO )R^WZT"zs|{ <_G~U߳1Y䳼 \a~6<߳c8}:򫣹ڲsd5oSOnJCFQQX:(x,8th,,~ʷ b#DZ&}~?8̍wf|u:M_Wb-TaCބ1k3qw|ooKn.o{***j^?=tf} T~]aj^V}WWp9Cu_Ls.LSÇ@+>wV eZS?z8nW?^r^+߁WV@ [`_R^b?,*5W.BYh@Pϯ*ck:swy{;wB aAtMJR-u)s`X6~xa#&XI`#bz=kN?^ɐTUU]%﷞tƾzm߶,0\|c uOdש3_7?8= {#CSa*4Jn>'ɨCcUBώ?a߆}sbcz]rk*->TYLIG?9C6?SP3?ɿ%kD 8y?RAT/!pU#8HRJ~YUDZ]i9T*y쒀Eӽ8sXf"6.deއ =Y%£B\c1 e hv)eQaOW?PUU\M 4u[RzbS'ތ߆aUAЏ\HTss_e[r.)9Y߿ǀ}~9΢1cT«0Wˏۏ˝8&NT9lOvqQf>˟>djp]7ǀӐJ<=r {1!LҋV664;YP)V~/?4pS;ढ़ӥM-GNbq_eun˅vPI^TΎQ%#T7#󧯝S' n4*lTUU1G߼לLuZ *{F&i­*wD/}ο(ϧu>$kMT;zzh|J,˩OD:Qݏ>dtwꆙ4>gnSu}|#9`{]xm U uzpI!U6YgBPqn9-)GZqgپTP< q,$֮}cDD^`Ô' K 4WW/W tלR3'S\[Aߎ A4HpM8o_}|TxoR&37en1z;/|ޘ;JǽF^zOB}N}o׻MRI3Ծ"ӛwFFk?/p;#)[=>}AwMկ$t%:ܭM쾜.oA {R)P8MúpX\Io1o$F6aXoOggSWyoY -9OOJVG9;9>98IIOLPN;?FG\<:69FHI_&7[],R7^h9{"%46mTMlsLť4ASKjيbX,rmUh9mۿmk۶U_>;\ݮ@uaGkQcз__أsσZe*9̷ZY*W#/OFZU_/]ǻ3RgzE_ Z;VLHG`=z|1O^xOŲi}zC*Ni2>Ȣx)!taRTۦD7#pp8Ա%{p?zބv2A8Rgg^~߿WQQ4ˤEn$[~phK{۽6K etv>K*ṡ_*J͓g4}?<>1L[o6|;?QYYY@O,Ҵ5uGq*??X_oϴ{= @VUϟ/Vlnu*z?ځeKq@p@{VX0MBtr;,Q4]B/4R6wDSd V$żwsGXs,^YvB6p HU+r,FL]]>l~v/?}F%'Cw'~`{_Oߧ.tsﭤ.5|wsƨcs5כqXIJ'k|owzQ40_4 CP'?#[g^E%ώâ]Ml_u=O}~0p,LfL*2$4\kf&9K݁:yߴ{Gk'6XdsQAʉv,y# p%)qHnh((`pg?~<<]w7'$꣊ vIf HwBnE:O>MǗo}|ڎ..쾖[ vt5Ft a~ <u=+!7 T.k!F4A#s` _߻î7|ѩ%4rA;;9ׯrIӱm)6o_\}Sѻ3yoq&Oc?z=7tgLwrd knt'sߴA)R!/ȦtF_{n ^JM\/KCX~}?z^?W/ncH{_\<ٶ,٩L.Z}(C~8X_0 IAEAAE$I~=ŋZׯ8Lߘ/~k0jX9(޹wZ%*=?z×[%گ_S3.+bUOٱGSTj ?AE=2.0N!{ik4a^s£gzM)Y_ͧ#=9/%[ƛ" :7T1(6֦gMWl0&xCRU>,rђJ9fu5 #KJԿmE`! Zu<ބL6\҃=U4X&&f4..|\iv"e,ؼ/9 |~_gݬwX2 iiUU+!ܓq5\- ހIQE-WS;Hh;Wn6M?txx׃o>34Qy*{J$azIP8g<>|}s6o0dOj,e1}zܪ+k@3 уLYbƟ>=y瞩 bYU{ ˷F9_^.et ᦖ8xԩ_HK߱Q_r׉˱^D~{SlwJ#+|4@N'&{cc͞_;˨r>PӃWUN,݋S3^Џe5+P=HdEz~ 3RZ??*˳ $\=W2܀pYSI)x%Oj{)$˸rCA߻)qbwZ8i+Wzv{}**/F|=0\Rrbꪨ__3_|=_rW>}wnqT9*=LMÓ?O4F0OW}dr.̜>O3i?14}>?/c lVB߾gy^fS=s<ƗGe|Pd˒CˏזťM Cw|zۅ'ǞXcT#S+H3|˯}燗795) ަ^^j%JM)D~O.I6U-cGl%d+?_o"G3ʔ@0iBUs!_Qi!W;5t0ӃǃǵƇ]/߼iN:sJ=^_m%N,˲屑0Hɲfx>2Zpnץ9k^hx'w ^HClsO+q[w><{;v(ũiSGi954O5wbGۇ7xt꛺$MWSaҤi[ ,ճ#_=;k`q%vikͷïwsq,n/E\99`"JX5)ӳ=\PS 8F\) VLU_"r̉CDvz~Kh[ە9*uϋdbS,*qwMc)N=b1oNԿ)266 óȉQ<{CT=?f/D{9g4ϩq? ,6iOggS)lyvGGG7;:AGF78GGFDEHECE@;3)B_~=c XeWMxK_PL7CG–yZT7wMeZw,6g]MN0rg-@Wꘗ<[kO>4ҭ'o[D)tÃFؒ)ՁyP/[m&7meU³eg27^LuP`۽{ׯ_?P*M)O1)LS-oq0}lD}ڳ{CN.De`:Coi'?p;R;S Dȳٝ˳Z&o=_+ATOR=~[s?9{?6׻}·Co]w2$'{N^tW|sOn_f?(6o~ S'|u5ˈ=BjE%Uaw~<_&ڝ))ķNVLj?g 㧂ؽ}OzXuâɿlVޢO xӗ]*ٯ׵>= 斬6ӑ:F= Õe>[FѭpMYD݉ !ɗ?vYOʮ5YRzvfc0c{d Ϋ?jmNgг#^UU?JIw wg 71,/utj\zλ3QqR;:!G˦Xקh۝L2#>TZogtg}/}6ήOұa }YIM!GuMafk>OU92aCUv|粺қ|\sLb+ $rrNtIJl y#ޣq"0w\gWCG"=bb଻CH|H"7{v$X5Bܶ ǑGs]CɈJ*KW.};;?.R8Ƈd;!T//۾}î~9Ξo[ڥIzx{C׮!k< 40yhV41p&-οڈ Ff) 552Ks}]m;16c?ӎs ۖFz:jݚjAj8EWl$B!btGtt׹WO/2C3jB[`VjҠ uyp&̓9u$ܲ#[:|U]FO PU՝s>NO'_4{y/yJrߵ|>}oϹ?sΦ2kǟ;gّ֤|^Ap>8fI3%~l9*^'2D/2iTDܐ UIg UbՏ}zS|-V^Yu ͽtN5RC[x%{t7i^>oz,UuAHHH:.dm•a`Ə\be'~%ͩhv',NfDS3%TU`Mo >lK~9~7ɏϑ+z8z6s$5ZJ2չ6S:kt_ٜ]SS=rT4'p?GL<ݻz}k[ NNSsݟ,>;YI%u>XJ/eR,¢:]uxYx~,֯UC@h99NNߪi^69991;']^f2pychess-0.12beta3/sounds/lose1.ogg0000755000175000017470000006042612161415524016137 0ustar tamasusersOggSrMNvorbisDOggSrX3R-vorbisXiph.Org libVorbis I 20070622vorbis%BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CSR,1\wD3$ R1s9R9sBT1ƜsB!1sB!RJƜsB!RsB!J)sB!B)B!J(B!BB!RB(!R!B)%R !RBRJ)BRJ)J %R))J!RJJ)TJ J)%RJ!J)8A'Ua BCVdR)-E"KFsPZr RͩR $1T2B BuL)-BrKsA3stG DfDBpxP S@bB.TX\]\@.!!A,pox N)*u \adhlptx||$%@DD4s !"#$ OggS(r ELHD5CEE@F<(%%-.3?<(%%%%%%>4\-dYz#*nU?uyϟϮl4jJHjnu4hO8m~<V #gok` >k~WUUjXyVT]vePQ|w v̟;ULy?BԆmvnĢ|1FMW VH`ެ$MPmϷOﷺ|/aa M W'FQ_~Zׯ_ +M W&#9zׯ_~+M W&#9zׯ_~'Wt|_<9b"{Rv{\7O=ݕawԭ?H@_*ڌrbяWL^彪L3|SKR"@3 %67$g]@t>56vxq HRle^:޶:Ͻm۶ oO&M~W|+t/*@0jtyr\֗=fwپKP^ M W'j2:(_~řSLQ+M W&d33tZUSL2e+M W&d33tZUSL2e+M W&d33tZUSL2e+M W&d33tZUSL2e+M W&d33tZUSL2e+M W&d33tZUSL2e|oisjB>@4 ӛVīʷCC^{ue]ϟ_mIi̻o,R&bf~_jZ{^mw>v'J.t.LvM8 lZKπmٿ*t6V.񮷴W4)la\7 mfd`\V:~o-2KRJQTniH\|f:f ei&,TvYum͞tUrմQW)I/qF.:o?ߧXUGCnk+zz} n6>X$K3'۳2 M W'FQ_~Zׯ_ +M W&#9zׯ_~+M W&#9zׯ_~+M W&#9zׯ_~+M W&#9zׯ_~+M W&#9zׯ_~+DSW:@z$oZQג:UgQUCzNj+Uc eٓ/QiZzWy1sn8Ԫ~yd1noƇoD?-,VTK? d=+ &iR|Ո=8~ϴ[6ޔL;WEYdEVffzfF4UU 8Yc4oݟN9eaRk|փmO䳧9glz*dCLAGHT:UbB8X#drZa`2 P4#G@P -rO/Ri4ٍ~/+K 2Bt!}"R  Pkx[Sv9^(S fA0Nt.8>@3$#^V5R1{<W*Z6HVrpy*W|&޽/@3 hy_q;8jiO:T45!*O^)~3 Zv{?@L+X܍mKkX,R |(|{m2|o\HiUSėRQA+\voχג A&|JU1I2QG>?}Q~z|G8N8S|oe/@` $-Z5ogTb^m;evc Apd3yAP:tkYNyOќ7LͩnoZfQ&Y}j)T"uo!eI`4ɪ~|y~\gm/\j])jeWz/Ta–lES&}[n ǩ ISk))\s2PTgQ\es>gd KYJEC?.u t>k=cj&:K0L\]}P[wo7njU2 \}e/@^̨ykS5|6N,[Ϲ&vnܠ14lP.|4$ Kp9ٓg|}=.:R#,hnڪvp<.|yнOd`&>Tѳ#F??ӼSNkdNϊJӴe\i)=\'ϋ lmix` tV,r5/g}v"X ,ӝw<{\Oa d!o+4)  yEvlH[Ί=+ ]մJUKNs$ LIz @u$?=|z[v^)BЛ'յBOggSTr]":4E?= 43-0:50-/0444=I4//>> 15EA(414DM?>A5146226@>@E.5@x`V?w;{=1{3ITUB}D}LsS1D!J!kIIQu%;Y։O0! %Soѥc%ߗ,_dgKSdFWvsZ[%?=skQ ~֕ݝHJr^n'GgИa,",TDDDtDsUU1"Y2jvؔvU|yzEwCb~:%>yx~BwlxuG1ăW^&1̤ Ui)Tnx"8P\AIlӥ݅M@&E ̤+jdPȖ/8#/&$0ai5{ =5̇%"p*t2=L6dQU' @/iUMQ;r^ܒgo\3NxK3Z>;Mg>jrwmrGb2ElˋmUX@M#OX֮^`f;u|i6tWkDi2p(pi=_o8+Zs(.8Ed퍯\k9ZC_ y}O|q4yv0ETT[ZfoO {9ef_S։waRxdw횭d_/d.& -g{Rk'\v/%0 a#2Mk^+BI\9m+>)i ^^{yDq;Wz}p` pgųSžɴgz7kL-#*ob?8PjǎxUv(O߹[=_#T癞7|3\`C*K}͙Jq,<,= rݿ>ԣL',,0pV.>M{o1OgL&8Y,[/d52^D @*@_XN帝g j") I?Mɛ}{1JNO?7:U]jӛjի"Zp/S2*c @8ϓ`hݿޙI(Ċ3)8qD>ۏ熂"JnV/٩o3qQA;*FҲ4L6QTnk*z$X=~cqU^gY2*;f4xL*~TS YΉyꎘ&TPN4]vi L<4 e @=LXBYSg!;߷jRԳow8Dv&}tSBHL֭e_Ie3ffIժ/RLJX%GmBst_v;k(7L:+WE2Rwt`/mVջ0Y`gr/}=F<9kͺ 9vR3o&J'4'h]܃rTX%n, d1Z521 t,FmY eA̋r nr-*̋0/ˬ  mleQư2,=eY8)f`_EbTQgV;M I+п0zI_Mꪕ&F2ft%'MXqh~4Um[zoS#u4K%J)_w[WAȚ"/Vؔ<xFGEfl9euco sOo./cd\ (YUT}iu}w=ysz_Zv>[c{Γnrwt[>>u}bg"]]5{3N=S:i<6 [@ 'O)!  @%aN1%w@k w= +NҦt&ouYh1[,5"{/ &AD 1f? Qrkz^~P  >-ym=>{ad=Vy~N6ӽ؝*ܗt.Q˫^OW|O,cΫ3׬1SorH#uEuk{z ZxfYNH}sfnb3=}yٕޫ*+(:% SktkhD0;Yt:ֿ~Q8wj:k~ϔ{c÷շl IeXFAe "dy: w&H9]Hu檭ηZvTmҤ OUQFz 2d~%`W|߾_^W&%RXc7q 9Y&D8f?5f9VUU/q.S:u^ߴ?jj l/nK~|Xso6?6O;̡ji\Yq?4 +ݹzaUh"L:$t99P*TZe`_Nf)% Q4FF—Wε)'Jl<:a>}-눕j"l =erdrs TSyW=Γ׹2aD!0éр$[)[@G {}"fqdO8 ꡩ 5OggS{r="V<3G8252DBA2?>H532AFDB+@@@3324@B@13DD?B44B@$cZK~6:2z^..i[S)u^rJdJU,il>@42[}}jw~EnDcvTۖeG#|ٸbr5eϺq@fL®tO{xQIg*WU*k!.R?ܨыLZrޖ&vϾH]g}?cܶ}_nwZ.ŧ/upE83:c,F,BB1 b @,,,''58;-: !mEϾ> *{}<سw?Hx9'ot(GRiݥ$e=Qp]HNi׻.faOxwI]3+9iq` %6׻I^(P6~\肩6{⫉S2U6r:d=9bT[\3VlVtG {; m)L+-no˭n)&+h0j7^7Jve[IEkKx Q Bk#K+oXB)A[J^EG]L^GkLk]>.+'?͕p! J9ԷjxDKUS&_yr؄u.S{ PYgOLjDbVUU83~v1اBq'Ʋo_3vK>}v͡rf]rp Hs~?[(*wNOu\+QՕK"TۥDtǨ@Sµ``+A\. aWZJcb#LЇmaE sj:]zMV'wvi%4$_>WWĶm釟BNg\r_ <ݗ֏[sZYb(ޝ94U N-o|2ja`*Ӯ^$F&Ԯ(:~ Agz*?>ZzFA+jE#)@ E+,z c}U;HB qw~3'j۩BVyi:]ML GZ#PPLY`vˆ6:^en8s;ޯړV6 ADf8jViEOſz--g}+̷>?$C2\j=֖ S-]~Q*|fkw X!KPdCy?lsf@1CYTʲo&H/, XgHf4HƒHKXCy6zil3)9bX5@@o0 1\ftB-R2 m9SZv`i Zhh,\7^}~^~; \dX @꫗f$oO.Gә/|KgܱMwyOO9?>i#է$ gSw?s q @0_x.O\f:9NY֟p%ϩF-#7j*c[e;,eh=L:3wDv-ƒ?NyW@߾[_S||4hpTv}/&©zv)H}@*p.7:6Y[1ځnSgǓk~yv ;vӺ2,t:̾|^}\]ɻ25SL-Gv߯۶նmS/HUdߪlH+eDF}76:zgRxX(LbA'oXU޲ rO@E{m^R_Q*(b$WN~T+|캥wݚ 3Yg+5a5% E@Mx.iƦ;ڪMեi24Mڊ[ٷɿøjMM/ /@R/\tcS yD䅋8@j/[TJڧJg,^,Mʚ%L_utk[j'&}g.^?|]4M%zm?ӧkb|{+Cm€(Xf~>jN=LƼtTpGާ]V%v^zEWO_<}m.ricF@X un@&z3KKfFIcUơmqy"q0|Zْv~g߾r/m<4.Nf;ĂW`*#8kP4wN9EȤ.7+-Iɢg$ w!N5n@ K˽"j0bDfb$7*f]59e@v;D+>ő -υWZ^aŽcY #sVd{Z榷r-q&(#uWM Έ 璫A 0 k;cO~IxykWUZmʈ1`]J+8(}" G^IB/@AϮki\?_.Md D|5>qޥWy2[ I 7~}£]aǯ =4O-$*Kv=KaL~oTTJ?UW7;_7# e?n@^[&SY~RGHu %;k^23o>e')zgiߚ_6~KRoFo˦Wo?+2v>^cSBYϾ`o eQ(Ƴ76>Zn㟋bybVM-T8@4T/kg?ۏ/9/a:^`HWUm%ILuNR ME-=C2ߥC{sY~xʥ9Tz}c_bZV螗Ecd|iOggSrL8(:3?>BEJDD558NEBA?A02314654FED35ED33429@LAD2/p0=t}cs>֊wfS`cUUU^Ԟ&8;譭fݗ6B/Gtp:u>us2tGCO<* lj%9\T1 +U2D.J#!&PzQʗ}P `@>dQ+r1 jw|oŊu#!JTE$xt Ӈ}eg鴃}8!SlKIiBs?>_/ J3O-n }EXJ.yp)_q_o~zϺWULϰ?nM#nYT&uzXmI2OO 7wn>X+|oj[W?ve4–\}C++ί]!ʔjl\K^.rM.FZmY57UOdS Uh>p}|v\ָ\}}ΚA [}w Rq17o6ޏ8{/2+Z P~:pji>Զv{s츐 c_O5T^GB&:z\}Kđw$6Zϊc޺ -d%cQ=e/|Բ<_f~;Ga㕚StwV۶}eF,ߑ[H.HE uO&-ؼxn*ymէJrZ][_+/<Ȼ4_1 SDY\.q)I[iiIyg% ie0locKY_V]%%M=?>gLVWMu(a6sw뵧5Z3u.r &n.|Y=yv?,B#wlR~+pE骱==sY%,>7 ڦV^}ʆBz$Dif{}uݚq*mW.6/)z}xs\}Wy-OG+&RϗWU`Yt5X#~_ea\IA嘫~z"v1~>6t岒ؔc%]72FK߾rLǏye}>ms?x}TZݵLTVo2 kh\9 a$Fv@8e : _Ƃ̘Ta <-S+f"+LRÝEt[o:H≡撷s8VRM[@8$O.D'Ǝ_% o N{8)53qc6x}_&& Dvن6ooo{|j=ߞb~3:7BDEQĊXUU6v.vpqL [NCN?|yOc콓`9,U|,* Xؒ ]P:ɉήbs ͓ IWmoO[Vɪ逼Y\.dNe/N6RĘ?z$Քq8*_i{D@O@K~yI픹eY;Yڛ *~u Y\xDxu/I}0I[CS;sYh j:@$n*oc34mۖ*!8SM#x~$3kUWu5NeBGZ*s^UQ=nM4U/ C?h-4 ^nɮF[į#ng7՟D*;R3UúV*,Mxzp!AZ ibއK_ ̄zq>'4W?V<.ɪӲzr L\aו)Ƌm,]YRD.贐\#O}X6Ǥ/[,&)z<,L,9e+^+S繚5"ވFѰV=䘈_U$Yf&D%>Tۻvj>q(fќD_TwZ8$Mֆt(3~f 2f+㟛zqzs*! XV;͵զYV/K~S$U><~WEv7svjjuz?ի̺>zY4)t7toҌu-,B[@|VQU6:)kD 1w0 HRh8 hX`X~cj[* Ï$[aMnU\6 hu'LX O 0)%OҺ}sYлRbUSTURi[ҡp<4})A!bSK_ o_NzfF͊Y];n'/k}Ibv^?tӵu<6;;qӲo{y{y[xO<]s;QzbLP(Ta 7Hȱ =ȠM"t@^JĨ)( #ف[7Cu5CQYǢ)..WeYe&ueWJ荞@t:L}}8E+;ty}~Ϛ+},K tvAhY]Qs*S2ĥιP#`YvJ?b5Z#)+?#Soy)ݓލc֟?f}ɬg፿4N]_vSXws3﹑@B4/l?}{GmD^zv;i݊O1T kƹ0nަjȄ-lc;r4+)^xyܹZDžr=ߧ-kN뾓<"&;8_;x`q}|~ZON]p|z}b;T>~o۠ک>*E]XBKUROUT,crk/ sko{QG5%fNH zV몵GUHE[UJSD_ 5[fR⌀<_!9 "zL(^}m+]UR $Ol#X4q 47yd_4Fᒊ˨0 Ͳ&a,WH$GL<&-8b"lR k%u:ihs-7OggSrf!2?C64/73CG*&,& -' OY! 9uh>1 z{gE I6. FLs2g {w/:(iUU-@?s1|uyѽ?C z{j*jXߋ=>̟ͯsy,.8c۳iLǾUVk2<ӑE0TϢG.l26}dZXFְJ ~ 2֔bMɝT kJ٩(,O?WN'_ɣ'2J*Sdf5{)Z?e,>ˤLϥr\>dp~.2p\&о!goG,GNc=2:_B-ȚIq΋bNgˉ|iżR*N\́g/K-r[Z^3fTWz_D,OT'[Es>,t;6XSn5!oˁY>^xu|>+ u=^zq{vh3<5xy( HP,,h2 n!\eתϺO8^gJҒ|nUl;t/Ezi5+2Uf+ ;^ѫ33*VU}wH)3zfzjI:?;/AvuA2d})Ra{귿.c8j6Mq>\jE4"$Ndìnp쬎ÝRvJ ]gX+鷨 F(Z!<جC eh6V,ZcAF*7{Q܅Kgܳפ׶60 +?Pv撎;cIa֏vI?O㥺{guL<v=RD<ƪIa}o=# vQU媪;s3sP %NyUi)JplfJ&z|$fs^,QzEhb%+őDhz~mT^G8y<2:[Mt%+VUwYzߜ|e _u^zn>XfS!\FW0Y\Ogvr]sQwޞԒQRCOgWMf݋${K]j;\;hq;% 㻐2au >b(29U0k\tSUuX~L[¶D|bߌWZ-lۣy ڸ @m$r?1ؿ /G+|4a|NJՎQǡq<~ިl+Amds]/Eʢ33\UUs?kۧз~!,-1.\v8ϟY'x^o+mNѭr/̳ލʦ澄g.Y!TΚlf;uJьZVɓ5C)u,\[/JJJ)7=-H:48` Ɩfw=R 0\Ryu鵱U.SNy# hCYwD=;XEyŵ,돾hWeWhw8eYC%B5w,5edP03)e0^`t:trUUHZ<7Ȳ*f V+Oz{\>ogrY_֋~U߻>sϭ w3߸ VUqO+S듙ayW k1|~깡BO0mkԾvH$pqqco6@aN:Dc4gX}dW)>5Zg}V ggzHY_alSm` Kk rA QrUr̯2(\DP.zq+ՆnOlG7ay\r0=?uq>@ZxGxNe/N{ţZ^dU٢pȊDFg T<28X!eJ6da `_^L*(BDZUDzv3(WdV!R{QH[8z{$3 }GWX[Dm NH"I X^ȘmMs,-fqG]4Lʒu[/f" ݳw9HԮ|aq'_Ȋ# WWe7&G.Kf9H֗ms6ն,VŲ,2=iYSie̓mTdM)yrٌ]MoӦŪl?Nq|jGq.FK cJpC!! kgFz.xo+nh8+N%%7b^+e4@ enڊ&ӈTQu>_60_,R 822}Է(?UA, pychess-0.12beta3/setup.cfg0000755000175000017470000000021112161415524014706 0ustar tamasusers[bdist_rpm] packager = Thomas Dybdahl Ahle requires = python pygtk2 pygtk2-libglade distribution_name = Fedora Core 6 pychess-0.12beta3/ARTISTS0000755000175000017470000000125312161415523014147 0ustar tamasusersLogo, icons: Karola Kreńskiego Thomas Dybdahl Ahle Max Froumentin Piece sets: Alastair Scott http://www.enpassant.dk/chess/fonteng.htm Armando H. Marroquin http://www.enpassant.dk/chess/fonteng.htm Colin Burnett http://en.wikipedia.org/wiki/User:Cburnett/GFDL_images/Chess Eran Karu / Ben Van Vlierden http://www.benvanvlierden.nl/ Eric Bentzen http://www.enpassant.dk/chess/fonteng.htm James Kilfiger https://sites.google.com/site/jameskilfiger/ Klaus Wolf http://www.enpassant.dk/chess/fonteng.htm Maurizio Monge http://poisson.phc.unipi.it/~monge/ Matthieu Leschemelle http://www.enpassant.dk/chess/fonteng.htm Peter Wong http://www.virtualpieces.net/ pychess-0.12beta3/LICENSE0000644000175000017470000010451312161415523014100 0ustar tamasusers GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . pychess-0.12beta3/pychess_book.bin0000644000175000017470000033352012161415524016260 0ustar tamasusers ΩP*ym@W !;gݐ-& ;Tf`:zjPK?yJXXMR_()1?g⎟Rg⎟Dg⎟ujoA jDPsV@?+zO1R^^6s}4e8[C $*C aMwS[Rwz}' ,̼֓S R+O o Mv@b>+S &= ,J0u b;vl^1R7%  7%o%Wz/y z/y -SjSS \S?grStˑd'};vo!+*9 $(bB DL̰ISDq&B&S!Q*PGC,S @_?tsfVҭ|juʡYgStlê"7Z͞KC?ж= P ,h;_hT=b3^\ GՖDkxDs kxD kxDjkxD kxD|bbYH[{?[TN)k n /O!6!s]X?7TNv:ɪr Q<R^%;p`Gv] #wgyΜYl̚ |Z_aDu F45aDu , aDu aDu aDu aDu aDu iSc1a9OWvU0sAZ\! $<[4jS:?Z;) R 숕JHՖDQHՖDN5N5gB Yn $_=RB6?#%K?7Q*OChdChGZFvIhJ#M53sT=CR _3mgU~[R-l,{*NO[INO[IvK }ɾݴ=B xIt+) ]Hs&" 6՞=MQSO l̖ \oHnjSjoSoSNoSww}>S{l! ; s@,|3 \?R5!w ?R5!wss ЛpWRAwYAw^QoOt'"z c??? 5n:]NYabbdLd"el*1l;mB tn`1.oR5p $     *7AF*e" *e"t ]TfN-Jאǚ.߉E~?߉E~5LG;[pmWs;[pmW?z RWh 3T9KL$)~A P L)VDa#pY_tͨ)o A}(~ۉ!s}(~ۉ! ,>,T #Ȗ ,C&ttC&t  C&t C&tC&t eC&tYY|< |<t|< i[ 9 [[Zo\ǁu ǁu 'z~v\ǸGX wc1Yy  x\p¶t x\p¶tR 6,Yө GIc Ĉ* %ME86 %ML&'! %MZ %M] %M %MU  %M %M %M N> j l de de  fA c *`Ѹ- xl; xl; e xl;  xl;  .cə[ 5P=bE $ Q Q  RN WȕB&: iP0X k\;? z j }k 4{? 2d  jj j  H> l כ(P Ń .,oPo |& (/M ܁T ,)" ܁T  ܁T 5:U ^ 5:U n bF Ў#G ŞUL    # FL ,`  9XڵuN :޹Ӽt E N c bj b nѷ< sbp0 tG  ugڣOh v.rb9H E}  E}R `'Wv @-j  Q/7 ?I AOoj ́#<  ́#<Y ́#< ́#< ," U'' L ] S   ?e ZsR H A# f' AX# tLB i IΤ UTTUs UTTUs] UTTUs Xz` _?ho  k{c[]BG wd')FR }q\1w z֜  H$K6 Ӡ!Z" כD WZS  ][< i -c$ =F rQ  l^U l^  l^ l^L l^ l^ ?Ij  䅶N 1[= y-xv #n  #n ,nj/ Bvʠ \ BvʠR Bvʠ hb+ݵ t6  t6Y V[=̀El S#e<I^uٵ|wK1@P{=솑 솑 tBT BTBT$!cOV (U.  _e p8 +~w ,iOVfj2 C@%etDWڡP҅WݩWݩQd1hj[WjtT]pevF ) $v1{ (@4sq i6v*H{) K mK $KNlƦX,ƦX,#a5yu7Q5yu7Kٹb:|Kpvp~(tDfs(tDf ]2"$޹  "$޹ "$޹ \+HO 3]R3]3מ& .ERIwSTΎ \\P1)c7$sni{@ow tqٮ ~c)6!?t>?f&Em f&Emf&Em ,.F-t(*cLvIL IL ILsIL?f4=,/ 6 øw(s/=]c*BPy+TkY-)8Y}cfk k k/7 ePlv ˊ壅 CXKaZ Yޚ^  ( ߃zrh#Vɢ?6Wjks ˄ ~  9Y`-t 9Y`-8=3P;1<1.tIDh%zS@+ S@+S@+ Tl_?_ (_rq lZmH6q$ mH6q  t$lN|V~Y/!vR''OU+f*R~{!a-!~{!) ~{!Rʯ7 SҴP|E󑫨 ,L#%w$/NGr /aUF6O=-˃>LWd0%WdWdWdZSk \[VI:Ii , i i (ii;n }m~X#/KO(Vkm/%:8؟ B; F*/wAR,]gCȲ t ' (t 'tns_*QӰ:#A18Y_[Ϧs뫣/ i Ooj Oojt %D . YQWu2It; -?M|"l:N<%PBc 2NR4^_?$ 8?(K-`@D"2OFvB ^֋tsa+ a+ a+Rm1>L aqAHA w;έxZh~b {/urU*/urU*Ke^ F(KYǾFɖ*]6Eɇj|$Qbxa< GŤ  `R `5XӇ/&'5XӇ 5XӇ=mCDe9K=mCDR8 *H+6oRL7EDkYkAtR`xvd1"Sd ;m;ad ;m;Rhd0tia<Nrо $rо uāp Ruāp onQh (#15=|15=j15= D>hrǔbo ǔboi:11 bbSPޝUtv çM* 5 xv+!ʰ+Sm (5a\ˏU w ˏU w # s?@iK?@i ?@i?@i )+v) ,OAa|9 z,~? ~kCm0LF FpRnC[F\\^) IaGZSp^ $yp[]t-?G@ ..txn H[ġQmn ?# a)DEMx Oؿ !g܌/]9~ $; wP $L 5M=s"Pa9w)s9w)  čXXtn+FsLz=]J ng6 g6v`+Yc D oR~Ew CD\ C01Aj~q c]܌ fS e4  e4 $  $)?5E?/zޢBʒSNiRNfNfvrb[O)unde"vvKb$v򂟶tzΠW?}@0Qy #~&?8b ~&?8 ଅvJFX*LJFX*S !v ,8ƍa+ E-N;/j RL#q aZ" 19D#4S/R8N 8RGX_7 $Znufc}vfc}vfc}vh8Ey3 jI2?s;ܛu g N"SD-"SD-j"0V ,T+A?&?[&?tsXyEt]`ERԉFZԉFJYt7 ,Oof  $Oof jOof sOof  (Oof  k5N a2 K a$2!ޘe%o6t %o6K(B(B1Y" #A3j& # J淅 ?c? u*\+ u*\+ au*\+ iR t  (͕Vĕ5Rl55Rl55l55  ڑ^?$${#(kr)1Z# *J?[jV;b@^ _dNA u!?zH\jrhg R$(6 E l 1{s 1{t9$T;9$T;9$T;j}jն ?SjJ]K( aLf/?|JV?gZ+Hs4Gb|+:S318j<~=! i<~=!?EʺT (LuP_ ,j/ j/Ludz_l`⩽ i~ɓpS. \pS. Z N ]kE8 c f.] f.]R f.] f.]mL ,b)PwW~ @ b 52 \ Tt.S i Tt.S? M†X FG a +\d  ;|_j? UC a‹zz wY+ $ M /pґ# aq` aq` , aq`  aq`  &Nt X[{N  GfR  ha \ <  ^h>R {hcD +!n !n!n![!-ωN%!/۩S!AUoަ!Zu #![[9C;kj!kdN!rz;s!|u F3t!}c!Ld_R!8ek !>O !`!J <j!Oҧ!S)e!/n !/nR!/n"9 "%]KOv#z̞#$r%&R #8E& b#hk8 #Zg. #Zg.#Zg.R #Zg.#Zg.#1 #u.S #u.S#u.S#u.S#ۍdlY#ǘ?$ $ $;Ó?$5P2vT$;$^F$=K"ui $Ex>R$J&wq ,$MӇT{$Z3땡 $i$i$xL@ S$'+t$F4X$c ݣt$WS׉N$WS׉$az  $k*]$MG[#$#]] a$#]]t$4k^$٩$}÷L$)ǚ$)ǚ$)ǚj$[@t$@Ïv$}A \$ܷ s$ܷ j$5u*Z% F% w3%/b%g;%~~*S%0O Ũ %0O Ũ ,%7qK6]R%DN+W $%DN+W%PDQfl%]nZd/U %]nZd/R %O[%٣%m}b% %ح`v%!Bmzs%!Bmzh%F%C;*%;E R%;E &?ym&)(=cq&/V%}  &]F*#L&&1D[3%&'e&0ƨf&<}{ӓ?&Gq&!8&)')*8&t~ġ&w).?&JKP&>С$&N`% #&Az, 'LP 'LPR' ?U ?'>=T a'L'EV ,'EV  'EV 'EV ']y']yU'# ';)h'+:b :'+:b :R',TkwQa 1',x (';I6QO ';I6QOh'TEGŐ  'TEGŐ 'TEGŐ'kU-f ,'kU-f ('\'em8h'em8h'em8h'nL$'aߨj'nh ,'炂'8%m_v'pRCa 's@ '\GkR'@v 'N$p?t'F6is'$$]' (n{" c( kF"(9 $(maas()Q(!sVM (!sVM 1(!sVMY(*h+,_SC(**݊(7Xoj(PW{(gd/1i(tQ D(}\4;JN(qhe(Gt j(:ТU(mvQֽj(mvQֽ ,(;: $)aSVd)8R)cS6R)%`=zh)%`=zhj)FşY)ZQ8$q)`B,wS)hLJ~ \)in)q(h>)yx0M)yx0M);N);R)-^?)}R)l)} )Csx )Csx)y&)j9!^pj)6"A# )i9}%u)52|*zWw *) I  *i J*X'sL* sצj*)EnC7N*;Z2TV #*;Z2TV*G1)z $*O XY*ZqFQ l*_ͰW*r| *n#*Tˊ3/0*ӏ-*0*C"/R*aVDZ*aVD* L+ćR+ Q8{R+ u+6f4R+;xgP c+=At +PW+V8+s" $+~F +~F (+ .> .`(%/'XMk/42~/42~S/&@zdV/&.?/&.s/ULcRH /eYeA /jaS/jkgosQ/m j/pq%h/Gk܅/01v/!j j/A# / @!pz /oiv+/HFt[/'ţj/]SvN /= /= /թ`aY/TFk/:5 /:5h/r!l湙/98 -/Go%?0 96t0 96 0n $0M.0{mN 0%d t07N>3s0=3}vs0@0R6>q20YP+Z0]TBG90my&DN0uZ 90eҞ 0eҞK 0- 2{ 0c 0ii00;I=s0$ "0]׳$0ȉR~ 0%05b kR0+V94s1]R19#=E~P1=s7Õ1=s7ÕR1U.?y a1Z3&_! 1`m- 1`m- 1dk ]v1hLJK1~F 21~F 1,C1ݫt1"s 1'Qs1?~1?~1at,?1at,s1K)v1K) 1fuS1JZԯ1KcR1zӦZR1pN26AN2%/8*f2-#d 2-#2-#K242q (H92|a2N2NeQ=o2Z2= j2 2Lp9] 2Lp9] (2Lp9]j2HM$N2Mpd2b3x 2#cU4 $2#cU4h2ᇧS2%+[t2%+[j2Bpd$22ȔO=2+| 2+| i2+|?3υcЉ3=˺;3'H3WD 3w3rPX 3 AR3+{-i3,8$3ArP3Bvi3GfKe3Vf'P*'#3e\3q 43r4f 3yh3IG+3Z[3m4 30pAN3sr锳1U3iGVR3z3*jsX3N~ٔ4?rYә4KM44-;h40d]; ~47%m1 47%m147%m1a47%m1]4DТ j4F15 4T t@_4Us4Us4UsQ4[uԫ4mp $4D6jp ,4SUsd$4` (4C]f2 4(4͒䔄 4SyoY4}BP c4t 4t 4'liR4m.%4m.j"4m. (5n>5)aN)5Oo:pT5Oo:pT5j$59j5sNOK (5sNOK5sNOK5sNOK ,5sNOK 5ΞZ5.%x@5= a5 qF5}αy5Q-Bc 5Ҍ<?5ֲ]Y5-ql5-ql5-qlt54c t5ewL5ew5X 5X 5X?6)EUQ6)EUN6:$_s6 DR6xX@YP 6?V6?VR6(#ʏ.$6Wt6_/7Z6<= 6"3ar j6/3 $6]$nv6~3 \6~36 o86 o86崻*6P1U6mS68K686ȕ8[ 6SOs6>6n,Jv6LW g6Q`Y6ע 6ע 7 ䷨7 (yf76* c77t,=7I A7J:=x27h‹V6N7ta6j7x`<?7~@0<s7~]*7t7~]*7t7~]*7tL7~]*7t7J[ 7eRVR7B7g7XD1L7j 7jj7j7js7p7#!?7JyE (7ijTc 7kT&7Dbl7}ȗOt7潬ޥR7 ( n 7a< 8{!Q/ ?8{!Q/ 8%P'd88h8d?8q7.R8tBa8tBZ8}7 \8~õ|N 8@=?8=;Y8FrյK8e6FR8 9@ŀ9,qw 9C UD9W"4ИG 9W"4ИG9$ޣr9+L&pQ9KNB-9qP> 9{v9`PH \s9Mg?9('N9ϝ>;19%ҭ?lu `9z(j :00%b:5KcW:5KcW \:<J :><R:><:A}ʪE:Fk({G i:Fk({Gs:Fk({G \:IQ2 :m::U%!Y:fhk :fh i:kowYb:: :`.VDR:RmN:息=9:i]^.Y:i]^.:>6$#;3~rF ;#q ;2l*:;3 ;M)/iFt;M)/iFs;WJ;t $;\VyN;c#%TM_;q -;} j;~O ;l] #;djY$8;djY$8 ,;djY$8 ;[pd;?ٟ^;2;"? ;NZ ;K h_ ;1l";]|{B<Q< r4<Q#SI<Pk<*.H{ (<- Ÿ/<- Ÿ/<- Ÿ/<>ThHg(?=..\j- =..\j- => #=?).G/=XB4iv=[2v =_AN =a??=KDe=z $=[QѰQ=[QѰQ =[QѰQ ^=[QѰQ =Vɭf= $=[K xY=[K xt=[7Q  =[7Qs=پ=Ҡl*=5It=)I:?=p?W=:<=h˞ a>#>#>7i?g>7i?g>JkLt>L쩱Ͻ >NQ>ULNf>` 6c$ >v0l >u3A\>b_1/>5=>#>Rq}!>Zzaz>Zzazt>ZzazY>̩R$d>e5 >][F ->p > 8-??"LKk ?# ?JFQ8 ?N*jIN?NªfY?R)^*" ?[r]?kvb|Q?qX7@ ?uhNq b ?uhNq b ?za˾n?|N ?}) k?\噿?C?n+? o ? o?`'3 ?DKj?EN?!l?￯?Y?h?i6@C1E e@T@!98~#@=|`\E@F.f #@F.f c@RϽ@Rݝ-L#@WhgNK@`v{R@`v{ @mhR|( @~LHR ,@}H @|JO7o@|JO7oQ@ 4@'Ӓ: @'Ӓ:f@J%S@03rR@0D8iZ@ୡ@5;@/J@)Es@XV2v @ @ rY@R ,@QTgAQPĦEA{bA{ A{YADA).RBA.FeB (A1GDA8;M ASJAqmTAvD|#2$Aiկ  A(A4|گvA9 Aݘ}vAfl?Ag1oAy' AD)a{\ $D39yED9'1 $D:@DAR  DEKU0 ?DEKU0 jDUH&q[Da2cT $Da2cT Da2cTjDa2cT ,Dt*n Dv{ o3 Dv{ o3vDwnT*f DwnT*fsDwnT*fD/ND4DA;vD D DWQ- (D[ Dn+>vEhKEy9  Ey9 Ey9 Ey9 E(N W a E,\:kEO EWc ,E[ŨvE[Ũv ,E^LE`u`_0 iEpI,kE}1jEM3b $Er0 jEAYf9?E.?EE.?EE[{RE[C?jEhE"yxE"yxEFMzV dE@j>?Ea0 "Ea0 " E4m E4mE4m iF`kF;kRF;F;F;F;F;F;F;RFT?nvFg 0Fq?4 $FDv6NF1FSjF_BF.]>FbZJ FYP+vXhFYP+ [JIFYP+ FF|7sFnpjc9FtsbFtsbF G 2E G n"yG  C;RGbS#nGbS#nG!H> G+BBɻjvG<\YGBS>@FGG{DoGHpp GHpp?GN{R}GQۛ}sGbR#rGeki<-Gx(I[ G{7.|k G&] GS4VG · GʸsGʸG{x G>O"vGk -Gk G0`J G0`JsG㯏^E G㯏^E iG㯏^EYG㯏^EHNH2M wH6Rf (H>UwVZHGtwHZ80HZ80Ht'oGRH[ Hi%_)uIfH-$?H=L %% cHd~-jH|@-? H ,H H"RHZq\NHHBR Hw-9Ii50 $Ii50 Ii50 ,Iˏv8  I5%P)bI9؅H ,IB^NIF \II,nyUI[2| IxƚT}NIy$INIh Pb IIdI-tYI-tI6lq!-I()<I碪9I碪9 $Iٳ-ԟU I LU I LUI LUIv\yIv\y ,Ij?IjjIj $J.O Z J ބ?J&?Dm?J.A?J8 X# JB|A4$Jh}¨Jk[ Jk[ J'RJ?w0 .'%J?w0 J?w0 ,J?w0 i J?w0 J?w0 Jj,ȭ Jƶg_tJZɥYJm Jގ|FdzJ߫[ J߫["JW ,JԖyKP%[Kvr (1J.Kvr Kvr Kvr Kvr Kvr eK!ɨCRK3<ݙ4K@FE~K?KCDڏxKJK`{ýxKpIBV sK ~*UK ~*K ~*hK ~*iK?K?KzLjK͊mKÁw:KÁw:KɯbY K/Žf K?okKѦF0K戕_ Kq; pKgDGKgDGK_3^ K_3^sK_3^ K_3^ $KR2DL T-^.L T-^. ,L3 LYR LYR L4Z|V-L:o ZF L;[LC #SLP jLP LTVMoLm~y Lvހ)RL|Z-_CjL|' OL~9G»B LT1!L .wcLe[L8mEL-c vLZRJ L} [LtLM \ vM4+Q \M.4eM; ,M4otP\j\>Pg$V Pho_P|Q/\PQkwDP;!ѽĝkP_2xRPRHP[FLP<:5 ^P<:5 P<:5P<:5 P<:5hP<:5 PvК7Pwj@sQQHKWtQQD*T+DQRwNnRsQ\Sɪ ,Q\Sɪ $Q\SɪjQ\Sɪ (Q]&l:vQ_RO?QansQm]t Qm]tQ8TRQc4;͍bQc4;͍b (Qc3 ,Q&g^  Q|vQKcYQ {CQvJQՖOQ=;SQ=;Q)sw4Q*mr ,QѴK۟sR١?R١R 7Ob )R >m#R&j%VR)][ R+w9 #R1+ -R=Fo#RN?l4#)RN?lRUҬ4 gRaf"9RcA) ws #RcA) ws cRt[XR_ $R_ (RQGZR,/iRjV RRRٮVDRRٮVDRٮVDR gRa{F0R?K~ZS SG~+USMq>sSMq> SP8i3SjO ,SsF-aNSu[NB=SXzbBDSS+[F/S۳ ݹS8S8SWSSq 2 SA”Tg]v^Tg]v^ Tg]v^ TnYT{񏦾 cT; T6y>nre$TD~?TD̄Q (T`TdA) \Te. cT};YT:sdT]TF0sT`bTc;O Tc;O ,Tc;O Tc;O Tc;O $Tc;O Tc;OjTc;O Tɒ%KTo T0wT/ U+ a<U+ a<U+ a<U+ a<U0=U1 w U<,V>NUGDSKUIr?$U]18kZRUk@qNUywB]nU'hŜ?U4h tUԟkUgC7:UgC7: (UkN$U˽~q !U˽~q?  UE_}qc$U˚ÎZQUUf_OU!+i U tUEmB ~U_#MU40U40V iVq]V$^EZV%H{ğ#8V%H{ğ#8RVH{J= VNϊ&Vl+B iVt2V~W D j V\rcR VUצDNVS?V?嵽aVRWHb V: h aVL*V£7X Vŕ &V@,VGhKWHUWj>ֳp W(G8 W3yXMWQ5*ΑJ sWZ’?W_@娠Wt3' ,Wt3' Wt3'j Wt3' Wws<' W$+jW! sW-ZW4`W Te W\Q՟?Wm0SWm0LWQjWbKWbWjҙ WaN W#6vW6PFvWQ> WW cX- aݍXA= XA= XA=XA=RXZ-Y,m?Xb"^ Xb"^ Xb"^ XhgB> &XhgB>Xmkn5Xa& ( Xa& Xa&X|ntGLX&}?X>;5jXǿGOX)gvX)g X*Xd_LNX,DEcX)tY0SY YIUY(: aY(: Y(: Y(: iY%t. Y%t. Y%t. Y%t.Y(SVY* kWS'v"#Y+ Y YMZ"jYm &kYr2M.@o $YvX)LYv'~vYF'3 Y1/bYT)ݾVY/x5ɊtYŷXh?Yχ8PY,BdYxjr YTJY wY wd Y w_Zu]5: $Z|FZ)D $Z**C&Z01nZO'I,Zf[yZ.ZnU&$Zo (Zu_tZ|?) Z}U*jZ}U*jZGE Zif Z{t|vZMQZZּ]MWZmY9"BZ華j [-FD  [-FD?[%p-J|?[,y&[,y&[>ꣂb?  [>ꣂb?S[>ꣂb?[>ꣂb?[>do1 [P31`V [P31`V [P31`V[grr[v0 ] [v0 ]j[9\?[_a[[=lx[y)>[Ac9OW[Ac9OWb[Ac9OWY[s[$[*S[Ǣ:B[Q_[ѨW [_+4u8[琟N][p#g [aqG [iPS[{'~x[r [r\ c40 \Ӱ(\ x,\ x,\WtQ\r8K\r8KR\3g/L\5Ό \=`s?\I䯹g:)\I䯹g\I䯹g\Vn??\X@ \YGU\]3J #\fgj'T\g YJ\\!^\™ %\׹*L\׹*\C ^\ V \Ӯ \ӮR\cyגN] CI^\@ g]6-N]!L]!]!]!]BZՀ]N<@6]N<@6]UI;j ]soGl ]wy[d6]{{;v]{U$]!Rؤ a]vUӳZ]Cj) ]Ch]kK˕ ]L*> ]٪+qfC$]i]+eaŒ0]6]>q ]o}P3^@끅Z}R^@끅Z}^TrBm \^wozE^wozE^wozE^{>tga^8S \^r:X[^^ ^GIF^ѽ<|˗ ^W˕;^զ ^[ d a^^y )'^\ۼ ^^c?_*Q _ |5P_h Y _|h'm_|h'm_A2} ~_vhR_' Τ\_2zڲ_2zڲ_;1,w_@5[S?_@5[S _@5[S _U71_X<j_c4Q_uM nԑ?_yĉ:0_X6_ _r':|_r':| $_B:/ #_-e _-e_ٱB`k_ވd& _L%lU ,_L%lU _L%lU a`+_:a`+_:`z(g_ `(ڟsR`{K`, #t`FRhD9y ,`O?zY)R  `iPeN`u`D-%A #`}˗(uj`lX͇{`lX͇{`Ov`J` Qý}v` Qý} `,'g[`۬Y  `۬Y `hu e`B>+`.X&?`V7 aQWWT<a = $a2d (a2dja2da6< a&33BV #a*LaDl[aOQ0i2 ,aSE .rja`3s}Saj{KNLakr^~ au3s.Jdazp`ۯ a ǧ)o atr?ainԳ/ainԳ/aN=jta%a%a% ah5J $aؽNac$(va%^2b1 aDRa _ja _bEfebEfeb%] b"nftbT6SbN +bAGBbFbMCw@ bS+~j bfsYbj@0u bk[ oZLjblt./ a blt./sblt./tblt./jbsP|fs -  bcL bcbcMx&\RbtIP ,bk<|6t bͺb4\<bG$U?b8`vbKb uQZb=jb ٤?b]~b ocO~h_cO~h_Zc Cd cbȠIc  cڒǃP?cxuYcR: ac(mcjї­jNcu&<c )̨E6 ,c )̨E6 c )̨E6 ( c )̨E6 c )̨E6sc )̨E6c7)j?(c7)j?(c7)j?(]cH]*L=cIꎴ)Wa cW0w:Cck8 ick8ck8sck8jczɯc Vrjere|J)gPe|J)gPke|J)gP (ehڣe[[3MKel/ReLtLyxeɍ e` e  e eCTe<f40 (f40fMJD f9v7'+f9 fPa f5c&^uf5c&^uRf9L9f;fU-fGe-v]%8Rfzg< f5C&;?fSQeN fSQef+8N> f+8N>f͹3%)fIR fUNЋ[ f|+YfϾ,ɝ?fՏO-f vf#>g %Z g %Zg>6` , g>6`g>6` $g>wѐjgT:sgZlNg(3g1MgM g9q[Ӌ?g; 3wvgp${ gE, gE, gTKm, gbe/ (gbe/ goJ g PQQ g*+9hj g*+9htg}  g} ggzD gBHUj +g'=gѶM;gsЪg6Pjg3u~x #hs78 xhs78 x Ah[I$1 hfm?h%2 hK$hrG2 ah%vK h3Qф$Q?h3֖Nh: _+NhB`Ni!4 #i!4 ci(ٰ=Li7%՞jiG qviПn)iDi/;~ Q ih 33iۯiG iHc2 iiHc2 iHc2?iHc2 jWw0j'eY$ ,j$A j3Ԋ#sj4!½Uj5,>j]ja%k:  ja%k: $ ja%k:  ja%k: ,ja%k: ja%k: jft{ jz?7*Rj|}#LjW-jhsQjhsjq2, j[~17wVj|Cj|Cj|Cj-YF$ j-YF$ j-YF$ $j" N $jͭajj ޱk讞 ak讞 ko1Jk$BrFk3bI)&k3bI)&k3bI)&kC@5|8 kDRkF-Rkf^v`]Rkn!Rkw[vk{ԙ#gk{ԙ#gkYk  ka e kj}Rk `; 2k `; kU&"  k'2Fojk'2Fol?lPl2h(l#4tl+\cRl6,'?lCw|֩RlF)lY~ p[lgS@ vlrز3l7&wl7&wjl7&w l7&w l(o\$l)ljq4l?lq xLlLel l؜sl@B7%l@B7%m6a #m^jİtm!ʘrvm&vCm+lI"ym4? im81<\_m9Pq ,m?*m.mwҳ47'my;r"RmFZmYj m~$mv+m3 m(Dޚvm> (mW mW mM #maen1jvn? \n$tUt n$tUn!xf[ Nn"&f] n"&f]?nZ_ +n_Unlq nw_n|:n9`t \ n9`t nt}/x sn4?qnGoRnGonתJRneY*kneY* nJ3n<qbn#+" \n#+"nUcn#U  od,Roo+4o^+XRo1,զR, ,o<`ajo=NJ)NoBE>0of澢2KoycRomMou"o^l\toRK?#oԷ5,"oԷ5oԷ5oԷ5RoT`|o-"p!zoPvoo oo//Շsp ůZFp&tp4İ#kp>;?p`Eu۫8Ypkz^wJ (pt/9ʊpJIpp}p M]p M]Zp M]]pL) RpL) pĴa pĴa pĴa p؂z}tpfGItpӰ۽s% p 1$p1*}GpEF,p?bp?bq N c  q 9fsLq"d0  #q!ys q!ysqE ޷uc qO}QqO}Kq[;kqiqxgqjZio6RqnF Ig] qpi#m quSy0SqɈB `rRqW Tq9nqg|Hqtq qqBۡq_ jq#tSqi r9?|r /(ctr#1^ O/vr'/ r([hmr.+$l r/Lr? &23rMYZwsrMYZw ,rU Q ,rr.IWշlr~ uCr]*7r"r7[IrD5/RrD5/r}s #r }ry}0 rAz rAz rAz erop r5;irBSWÿSr$pb rpOnVrdMGKrɑKFXrɑKFX rɑKFXrkURn r]r ~ s sLO%? sLO% sLO%ss^y swɁws(G^B>] s1Nlss9tuO (sABdsD?6sL~jRsYSi js_kE .sbv_7Lszh.sB@ ,sɁe٪sʧ s̰esq%sW jtz6,t|a&tĦt!?t"$ycv?t1ebUDtNq}*\??tNa1Z t\a^ ctd.05tw]t~=t2Lt:_E ,tAU t`L1[tLRtng`Rt7t6 t;rt)t)t|-Ytv^^ou=MS u*FP cu^u(W s u鐺 J u鐺 Juovu! au7r{4Nu7r{4u;7Yu?"}b #uO}֢Juh_usg"Nu"+ut榿s?umbǟu|J-uƣ%,_uuE"UY]uE"UYZuE"UYUuȯ auRQk uѺQaukrukr ,u`5x ufa' ufa'  ufa' ufa'v%~J?v wkv;=vdvj[pNvoSltvoSltYv/Rdvfh vfh avFXuvFXuv Z cv.R vy}s " vB2!vjlzRv[v# RwJº aw K/HwA-gN wL-f ,w4`Yz w5m3,{|Zw:F*C?wB9sRwQ"٘o  wQ"٘own `Yw% (w% $wS$Lw~fwim֩:wQ w[QPw[QPw[QPjw[QP wf.~] wf.~]twqLݣO wƻR[A rw+׍zAw+׍zAw␇Je?w/Z2dWw/Z2dWZwT||< x8fxӘ1?x;ZKxt1_x(OIx/)Qx/t~? ,xxQE6Nxm%Ltxm%L xOk?xOk x( x( xD@MJ UxD@MJ ,xU"?ݏxͧ}a_xͧ}3%xͧ}Z0"x^?ycu2 yuHz yYo^y5}y5}sy#5k !1yKNN2?yQӴٯiyTVvyUv܀ yXTxҵtyXTxҵyXTxҵ yZԧ\u yZԧ\u iyZԧ\u eyo*JywFgy y7 ѣyNaZ yNaZ cyNaZyyyyyykyOn` 6y\ m.by# yͱVIR-WRyͱVIR-WQyͱVIR-Wyϱnh!yv?yZ jyWL yI\vDz`EUDa z(;m[z{>9{7?Kk{r.v{,Ĵ{.@0 {.@0{3""!{96p}v{;yRM{BP0j~r; >~~j~&vVR~*f~5wX ~7TYaZ~Tl5~hx~i qy| ~i_K~lXa-~qMǮ'>~WM| ~2|jj ~">%~">% ~">% ~PHLjJ=~̍aH~r6=R~yӳ~wP ~Ew~9V~r # -}# -}N$$~o>$r+_ ,Hv(^ R4+ Zb]+Nk`nU[oe cf^ ( Hp>tr4:UC p8=`QLYv (LYvjЏu iЏu Џu  ߩ ,"ܦj$% $% $$% $Yh){$Yh){$Yh){R4TLco_4jY7 ;x B@w0hMXwaZd?b|`Ddnְ mpcFtlr0Q.s'&E%s'&E%]Z8Zral t)1# i>lri>lrSrlBzZUBzZ#]WT gasi*ӛ$>I $+9 ,\eA jY_l$MlV5ݥtvt .ftvt .|3piTfKjP%A ,ЉGQD-1.qMvB߶; SgrR_r \S[Bjd_D,  ,j90=sR3ӌSMv0A  v0A v0A +^|lUO  ,s 6g$K#QR#QRȞ v6~ <7T0=<7T0=B2aUz5A=:?X,m3 ,f  iWkSlNt.[yS ayS`&?Ս[Q -0-Bo^dˇXN?S{xsS{x ,Ӵe&4 FjRv _3(tE% /S+kMN?p Sx  cGYv@NJq^&|K  Jq^&|Zj U #g`\pjg`\p?sw cs'sھdsk}t? mSˆ-Sˆ- Sˆ- # @7y%v@7y%byjF?%;jk?%;jk Rs!'t P %`;c<C>M FA; +I0 LD'OZ2kSH j?zTlIL\I(osf >~td?PN:fh0ib0iba&0ib#0ibQ0ibR0ibZ0ib~j1k #  * $==+?cwP{;[$ 0ɭ (0§ 0§C^SO<AC^S =by8wL vbq)[mKǖv tc5)VFN -6_t*1&-6_ -6_-6_s-6_Y 32HIj`"OLXI]2~wl-N6y P3?TC!Q($&1Þ"+6"<"5 NP)N#hNP)N#tS}d~IkޔTQu $sWA!>~8#o ю2ȕ+RK d/%K  K R8;dtf\tݯ~V4\}"j)])GVtE2ԃH&`KrW:N3 $[~GV[d#7Jkϧoǟ)SRbǗ  A4&[]v r+S %W:  %W:?2p2S DV؏bG؃4 ?S6G؃4 ,0>)G؃4G؃4G؃4 G؃4jG؃4Y*`43ْto/oqev9Rw {}j'RWQt|Ygj.%<\69[ Z'p.? Z~qtZ~qsZ~qkz2}/ݣuRhRhR'2g  W0bPvռ褠f^ 1vd,/1vd,/=SBLav Zv m,T8n \,tsB 8y=N CM${Qf[xB\tY\jȈ1F$ Ȉ1F#th th S th L5$'|e*{?m"TTBmx`*菆E$  ] %  .Zbj; jɝv; jɝ KinQEpgTR/?|SsS]Ӯ^~] xYN N  JLeYijbY-Fw #/E ,Ji5x\ ,5x\ &ףt&ףta[zW>a3zW>a3vRAyB Fv\-B f݁Aso))' urTJz|аHmt&5#|аHm a|аHm \ |аHmb(pVȬV?ȬV ȬV 1o+o+ ,q +z޾e?)_ ޾e?)_̓`\/4S !* -/⇼ a%jD%jw66leKڿS7v謫NR+v tĩ2ĩ2)~)z ,ߋ"vL=՘_եuQ[) dCKdCO1ZS>Lz#*Bxu?4qSIEUX)vTTT'n[ ,Tv$Y~ XbrB|[TjY_#y׫Wq[#{%,jR h n$O n$O7v =_7]9% =Cv 9% =C ύ)^=ps$=M?M S$x-v. x?CT 7yX餥+X餥+ ,a9y 2ݿ y 2ݿ ,@Lk @Lk {6v555vq߉h3RIRmˡvl[~ F: (9GN)fR d,h~U6Y3^뱋CB>?;G?Bt.X D^ٯ\dQk\殕]_p9&]_p9&*]_p9&%tyrq<v  yrq< yrq< Vhl ʊ?EZ-R=T=d RN'6=d   =d =d ^" 5FhگQ"E3/2  "E3/2j(-U"c1- ,[  ezo  vjg#Eg}:)Eg}&Eg}R&Eg}(er uNj GPbM`Y a$s("\,#6E.\h8_;. sJBaTP8H ,Wvp$OcRs1sqX%3YqX%3 (C|RFC1ZE Ȉ kW!nA #Or!Ѽ?b~XDE NI0;E N E N:c4h2ޥk<Ƹ Iޡx ,ޡx /B656U?V\Nołz`3t~i@PGc `a `aj`aYg$ xDN mJKK mJK~: (~:Umt c\ _b? _b _b _b k_ * ZxnV㫶Dʵ<]2UcL:ePgcZ?B3 O΍NLBvW{xhvi[q|Qi[q|Np"=hp"=tw9.ro;*$OI҆MFCoOAhoOA _l  uu(D8(D8)PT J$6< $CL4Oa5&ve6n+GDR?P*ϺB &pwHRIF:Ѱ"#M-.^#d*Q^SqsiTX v'<$G%32 G%32e]?ȕzz)Wȑ YZS  YZZ ,7 $7s7  *sL *sY *sqE/qE/ 9a{Cs4pH2h ;ޒ@6Bhz}nSChTM`kH5'Hk Mk Mm<z6 jkK ($   inFRtw@D ҽBD M {jNTpw{&Zi{T{rN K#^z8-E5P 4/M 7E&? d\qBlpy?"e9"1nj_Ro<T1nj_ 1nj_1nj_1nj_7 #δG0cW[e:R:$y^$3>FZVTO sUA9n?[7wb ^@bptbU( bm cbm #p#yN4 v@ (~أb `~أb-t! l H ,i=`c ?zYDW2C?zY*,g6$&  6$&h6$&sR7XGbR7j_v3 ?TE Cvf%D k//_RB@WIC?L0$U Wx u+? A;v!A;v! m`߃b0}j@ɯ*tx T%/J# = 9 ee і𪦻RB0kbu% !z!F-)Y?3W=j}\S<߆EHzc0(^p!jp> ,q Pٙ^tC_l_& jl_& >p#tВ[Q?DUClQ8fUBNR\2j R\2  R\2 , Uن  @? @jA%|R YGN8;{+r8;{+r?9HLGaI<=mv]mvLmvUmvo47@  o47@o47@o47@zh Rhc 'n&5QJFo4JFo4JFo46m 6K9H9Ha#ĜR FŅ FŅѳ/2_> -$ =i'})=i'})O%G ,O%G u} ;` *(z ]LhL ( L;̡u?p͟Y3)NE: Ii=ljP3n_$DNr ,_$DNr_$DNr q@,y{jL݂ {jL݂? {jL݂ ɴjmN׸R_MXs {}'Y7²so} {'\?m$_NqSAoAo7DI:7KSRH JsN_do N_do ,PcآXH XHf?Rl~Ln5OY@Ѽo5W]Z% |V܊I,7Nՙ;]pBAT`R D  DlOY&d {R'&d { &d {Q,v@@Y/{5wF b5ZrDC_ |SH; \KzkA $YW #H]BS#GAj{Onz zk/ DCNfthtZ6&zmkzm /n}$s/Q"XX%h`=́_`=́_`=́_`=́_]vDDIvDDIx1{q c{e߁X?q9 ITuN6 yF[zKڌYj)-1!aAo-C*aAo aAo xQYHti.!?N \ORRs%?[)l1  )l13DGRAi(ybN*q, N*q,Qg"h_jQZNY QZNYVR KgaTqFpsvn3Y2P}WfB WfB (WfB (}.e $U>A}.e}.ej}.es}.e ffSSS?Ϧ3j[xzz?Q8i0'?6o j;P۶ ;P۶ , _@/  K_s{/R e:N $i%}WKKS1| }NӺtt?w wt<~Ȥ<~ȤKPJk,x a FI$ qW?xXpy&Ɗ ,K.Zed'a9Ȗ[466! e466! 硗Wv硗W )\  |Ljkh?rj4ubA$ \4ubA$ i$8s%F6Ͷ 3qާv3qާ 7xkr;eZ< T <>ί<>ίE ^ ,G3{z #J-vff_hט^ pV>Se w('!Nz5"nj ."ܝ mtD>sAhTS^+2*jȱv}I2 %{K'ikjJ[ ̤ sH) s] DX[ۇ*T vG">Pj#v$xv$x =7 h2ueR x>|R cOHyfs!5^d$'&&1$&&G 2@K2 9<SDZf l!x3ze|4A k[Ui n{[k"c HvuR?O?O?O?Od&zۻ-1"1"v B(ΕKryLEmѮYEmѮjEmѮRl[I^]3M c[g*|1`#ur87j yr7ޠ yr7ޠ yr7ޠRyr7ޠK 'BqI BqI iBqIjhFTdݫRU/tF`=QpNt[ ,t\M~0202:=6`kp./:猡j:D1v@όX`JĈZ ^nN}M[6?̪>Wb6og6ogUԳLI( Vj2eYؔ4bc'r78Ķj Ķj /L˂s}|zo 1ô?㓅R XbJl9RJl9 CD1dh.R2$dh.K.dh.#  dh.$~sRD ~sRD|.? .j-օoY@)% RR's; UQi{5?d(g`2 d(g`2kl2sЛɨ I UD; }l }ls}lj}lh:#[R9MaMO'MO'MO'נd $mA \@N1qvg**? Ss_}M* 2~ hR2~ h!bXB"e^auǓ .߇+K.߇+2K{?-3?M\8 M\8s M\8jdu z*Xz*L׸{ ޼}a:xu [ŪJr[|j [2'W+ И$ 1K  4:S4:7䗥/7䗥/ RRs s RRs  RRst4 |8N=v4Hz 4HzvhS3s" jT\LlebacNcW}A cW}AYcW}Ac.'Kn^b0 tP̌tP̌zD٢t.NRFRRFSH_)[$ h8LRUse^ yQ9Y](ivڱ~ ,_ [( ,  [( (9H\Rs?I?IM-/U|Kc%wGwG-,  GF. GF. I噵' R9O"^ ,R9O"^{w mR= ? = ?= ?t= ?sj2j2 mj2 ({=ɮ/-S%|B(19>󉜀S >󉜀xzD8 \p9?V#!IK7a26h7ҙ=D:[$ D:[$   D:[$ Rqj"u iRqj"u]qKf&^enB y1 +zO]s%zO]zO] (jI` ,E: $+~XT&d cX;[M֪ >|rutྦ@Rો8j}40 󊝩hn?SAۀJ+I J+Is(L ,1-.8և > |:v>"P4SH TEN_ a`f" i  `f" `f" e!.|,  [0 qCjvk,tS9stI ~ T]  T=rR% 1^qm,:[ЬKuE oi'm= 'm= MշW\@ 0۵ , O; v? a(dr#q Srj$* # ,B'7CVsNOt/ `$ a>r o=(,铥 $=TC =TCIݟ|n8s0Rj/  /  / ښ8?0 Ojc^ $iW iYq4|ׅ2ky7_y7_tւ9 # bV n#ڑO(8*B[0]|0]|2ĥ&S>_ұ? at? aYUhɡׯ?]³i8ߺvpqiyIyeɜ9®OP  1/i! IFj  IFtIFkhp\w2N !N}vZ-t  -t -tj-tY 0+Fjd2IMR TX" TX";MDZj4(7Ll8N.2Ã5-J1Z>H k>M AOsށjj~mԃo MR o M o M o MqғPvt0pY vt0p vt0pt}mN +`Jv p[ԓ/tԓ/ }|EQD.m ︽˂j^5j^5 X#S>ћ?Jgj5 / 571WOD\iB?  OD\iB  OD\iB iOD\iB OD\iB OD\iBRRӦwA8"RwA8"*wA8"wA8"Uj*Pl,=b kkNuB&S0-Є8AtJP   k!aZә  ә $AVzl.&N/یBAP[6SDSA cHz.E= LdhY}_ Zs_=_={s|CZhܯN|CZhܯp7* ^CX$JjKh֨l%Xb ΰ=qҠ٪EF~jKޮl3,v),v),v)*en )j+ G)j+ ,dMM)j+j<D3)j+ ()j+* c?>͜ H5# IH^- (T< VЖdobN riQD8 8o%c4mm&;#QUI؛H ܐ5BNgLJpX]zC (iW& UԎԯj?; s?\6VVon[Zn{4 {4ܴw -tW%%N=6`?U׏ y j2ۉb v{D -%W8Hԝ?J/G5MJR2JR2K4 @t $j.r j.r j.r pz527Y q5 .q5 . ,ush j\hr:r: %i0«7n8 *m~;Gm $ݢ [CƓ ʋG 1\jT)0#>I -(UEJ4_TK3\Y#K aM+YOFt`bV+ cf#PY &u&HE=x9)0(&z6|\‚qm'‰ ]Œ%*R’ 6 Ÿ jMŸ jM·tL¿ɠ#9r ;pC^tÚ`ﶨ Ú`ﶨ? Ú`ﶨ ãx^لRæ)ۑ ,ë=KZ ò]ܸӅI.?Y愕5? V ƞl/ ,ƞl/ (R?XnbX~0>\_?tdPNp aow#/~qY& w}e¬ĉzĉzRġQ:L;c %L ,ѸݞN`hl R}=12t0 12t0? n]NY§ ]E a xt"/q9 = R 8JƹKRR<2Z *᪾tBUAK<**LY*8 LY*8 W#__Lkb7=ҖNr;JBe r;JBeYr;JBe ir;JBe Njǐ7HjǞ3 Ǟv{$TsǨ &$Ǽ8.L Ǽ8.LtCѹ׮R@ÄN' ƢURx4isK(q TI  VcUGa! u+q.hŏ ?{Q`lvۈ+xMD{Vm[MRȓ? Ȥ2ljȤvO> Ȧ)vȷ _"tr  2z:A>: RHϛXm@^T9rNB=^T9rQ ^T9r^T9r^T9rR^T9rs\6AɁtBfuɁtBfuɆ1OLɚ{dɡ5YL!RWsYL!RW YL!RWS (jciZg`J s S8/vHW'2Ll% L{ĩO?dQ7vĂVS.[RVS.[``$c anyp>nyp>]o〉TubqdGE ({{o|E|\K}|qS~RʋjLʗ]Vm ʗ]Vm (ʪkY!Q $ʽ^A ʾnqb=*P0mM*P0mM?jla+F?j1}!}|  }| i}|?}| \ûAV:!Z%Y #{M2 [.d,(*<~JVO<*7=O<*7?gt^gN~-}J ˁ0CGNˏ]fD6R˯{? \T1NV1?hKy\/$??䳥NQF:G+[Ss}%tO'S.\ .\ i2t w4WN==6? >?CkMsY SZⲻSZⲻSX^*/"Y`T3,DqGjvaf-x $̄|W̝jW] R̟W;1Ṇ,RI #m7/0tBĽRߍ-shK) a+K<-`I Cʻ?EmXtEmXt ,U #ZC%Q.ZD> ZD>Y]S _)?sjgx s,ǨZOzNX9NC)*o?͈J e͍;dn͠Cnq c%$ͤe$@Ͳ9]t2B ΢7uRظ tx ?P> h 2/V ?F܎ck\SxdN9  A]RtRC&NPݩ0Q\*G c[&df G h#zrŹe} iΆKS·YY0Έ1RSΐ aΕ{ʯ?΢6ԒÉ$Φ2*hά!Ъήe:jήe:δߢlO δ\p9ν#$^bν#$^bѕ ѕGovr2NIV&(  O~nP& #   2o c5>ptH?$우jO .vO(<Y_~TO_snm=UKDBeT} $BeT}hϹ?]Ϲ״(g[31@D31@Dr9vTJ ,r9vTJj787878 # H„ u$*8cL8{*QL.roerpoerpoerpj{\a {\a Ѕu-?@51А,P_oАfEeZ Д7 ZС3*YЪsKkЪ.<Zк, }Eo; Z' ; Z'; Z' =Js^?NjF9X[P%vP= Ƨ 2Fuvc5Lv#= cȸ) S~5e5ejr9Y:S(Zoks3W v3W v5 R8{cj8;K $9`GF[;H ?Or9fx%kԃJ7D@ Ԛu'fԩqoFm ԱzQPRԷ- sԾK{ˠjEhEhRFaYE!FaYE!++s+ L&RRW ] υ ebs4 a bs4sbs4jbs4tkq 㺕mr"l0 sYo *sYo zV4 ,Մ^kY ՍC ՙs ՙs ,ղ?{gյ%T# ջ]?ջ]s8߄$ߛ1YǯFXOo ٕ|>Ef嫛 ޒ2]?,bc}RYeNCCr  ͼ ͼ&TFS&TFDeNEKE:)tE:)E:)Lo1x U;dW ,W W ց=4փ5%3Qօn1~Z\$֌])M ֥0?֥+,'C֥+,'CK֯x"֯xR ֱ@q.ֹ2z+j{91p -@)kEaI/u (LbŇ NW Re uyMb(u R(u =DcQ \B{c #Iܼ>Tbĕ2qϹh[(/psiq5ON k 9R׎rgf׎R*0Lד/{ssףs! ף ' ץ 'lצD , u*s`g9[7}b \[7}b s0h;? b$ $ $ 'gf'gfs'gf 'gf ('gfj5퉲;BG v ;BG S͐; S͐;tv cZsv cZ s؏`múvؙث&c.شYxGStORO>x]Ef[t< ZHxGH?GHW`GH$GH ړD9` ڕ0}Tڬ :M (ڴ#-'G?ھjwR0v3cP ع:R4#)n~  n~hFa !jhEA$,R(ϩ.p`ۃL .p`ۃL R;oj E ,S@T>Uw^ (Uw^j Uw^ Uw^ ,ۅK-- ,ۇ"( (ۇ"( $یHyۙ(-oj̊) +[+hu @yݡj1o?S]Nvغ:,T|,T|L. 5R4= c @g?@ApGvGDDŲ IOS4kIOS4`L^|EROVrRVBѓSasaKwf;!M զe9NܖU&^dܗT 4sܜөF ,ܼ" lYܼ" l ܼ" lj6|$}ҔB{9 w$:̮y ()[2 2jwPj941wPj wPj ,wPjwPjjwPj 7 p͐ QJROiT:T OiT:TOiT:ThE (̫Q1@y cY ;$;rew+Oa9L |8̟R߃׷at c߅=w$6K߆%bPDt߇%RߓBa>jߓBa> ߕJUE ߨǼӽb/d%[R '(j '( 1  -!cl-!cl-!cl7v89@BXL>hWP>hWPKKx+'ve@pK. G[ME/1K%eܒ +oD+9   dٺS|N BtՐ}K` `OD}k C4$R! c* $3ћK5YX< ,V8e\dm`}uohby?hby k,Yy"r |d2U[ /蹅1懯y1懯yRWw}S៻ۗtLs\ C2[i ?- ?- c [ࣇRĪq @⧐n<|3J1]b\3¸~z3¸~zt;q$(?Iɟѻ $IɟѻjIɟѻ _ia5﹎ a5﹎Qa5﹎cBzV,a▖@ 4☁JlXq'VhZ @qI #QB QB Nw _n# ļy:j"P?>3u+C|_vX]a  ev׊ pYzٱh㎻e nh%ի 㗒MnN@K㤆J mememe $mexa)j=az"wبessg呭 3fC%$%oi c 3N"{6ŨC6ŨCj;}Բ $Djb$YEg\tfC!·jT$pT1}f 䅆j ?͚h ͚h ~+R"(,s9R(,s9(,s9|LYfÇ ,2ˇVN6r#m(K#x9Y&V "v|  "v| i "v|  "v|? FD;f+#'2ːj-ZDqs02c>02c>02c> 02c>02c>02c>R1yDZ?U4EO«tWZ3Z WZ3Z l3!PtH |i)|i)ꑙ{[ ꔿ1ڎyjZjƓ%깗.66*2Kꄆ$ WyC]}/ ̖" sr%[ Ԫ2t8 .v $QRJ?(fU 6?9*f&D5 ,LEb6 \X`\X`cf 9lqN oN R raX s֧#H{qY}v| RGUJ0"l|2l$ϋ̮9gt?:d 2U5{*RQgX~t?Y.T#pY.T#pbM_ifKK kt~Әx+HPzܽ  zܽzܽ izܽzܽj{Vks~0G ,)pFv퐙hH$j퐙hH$?홚ZqsI:,t/M1tt/M1kؽ) sJ |*~1cap p? az  az \ Q&8 9N.d  ۏX _ϭ#ک2 +R5<-kV7;/=d i4֪Qzb4֪Qzt4֪Qz 4֪Qz ?>f UtU?U[`i d*PLawhͷLsk6ڐ `p5S+!  hteuGj NxUl[Bs} ##Vg E-k `N1W R |Lbt8E~ 8E~ sz !Z+rX ^% x]($D)JS)J0 ye!b 0 ye!bs0 ye!b (SfH $ SfH SfH SfH ,SfH ZYBd jf~Rd jf~LoD}jkFk;w~f)^J[8C (80j9 ,C# Ihm= Ihm=jL*ZS X*Z<= gä][l{.k (𙴵 ? a)%oВTҖ_#l:Җ_#l:{( i`cƎ4 2@NLsS磺.k" c15 !.pFR.pF" $\"B4\sk|?9xuR ;d\;d\jBIkcC)Mjht LL \U.51UU.51`cb,(? `cb,( ebJ}'BNwsgE8 x+ s2h<-jl1y 7E : jcWזJ ,%څ-|u9 a$`<ִDp DN *P]  ݂ ,/huOa>Lx  >LxsAIQ%$l90g#8& g#8& g#8& Lg#8& IJ?MW;Df $$*bcZUDTv ̻.}xC\ qQP rsl' x9;|fv󕷧SL }r[]BxY[7Rv]$RɄ` IWC?ZoZZ?̜tA✄<A✄<)|o4,&7͕ $6m$=yS8 %̠?BUBUC3NL Kia3i0JKia3Kia3RqNczmCl RTJ-. ^TJ-. \5:vdB1MXTm , XTm  XTm $XTm s-GE9_8vPJV E.2 ,QPt t2Z%N c$Le-\xL(8D , k *$oL$oLj(DD fh+\V! (<*Oq*R#wy+s R#wy+sRwe) UKe^tkF:vlRp;x v*"uպEx +!yKzA yKzAyKzAyKzA{ 2}چs؏S: $ŵ6t aKXU (@HKE , D'JnE1H1Tb (#V< a  h3 P5e%!⬸?5N<97aiD6ED/U (Xl)DZ\d,wX[J\d,wwK8}/Yal $̀[> ,Գ9.bc. ai[<6݉*dNueq?g ut& ,zQث)? -rv 4d?= 4d?=j 4d?= *a K =gלP'(A|ke~ke~Yv"ȯYaM8 3|-XKyCUӻa>Ifx*0 m|RūhKFI;d᭗[& lM>` (kwC-NauM\k$ q+ZģjX=kjX=k (y$ ,K/G5Ś] ȶFv o@ [zy`ZCAFڞe W96 9vP 9vP  6{4 #e?L 4vj4v4v $6xE$<a>M LLb +cWwfBEB;ָ?o \o zN. +/uD#A$77ΐƭBRv l~ GHuѨ8uѨ8{pvi 0RR0>0!<ʌ AYUOQBZ+_o^riJm -Ċq%mz ervkV yG2zW)J=Wl? ֻESѼ[ Ѽ[Ѽ[?t v?t jΥŜ-~N?ӟ>ߠ֎eߠ֎eLpJ 09 R09 4sb!$Y ,*'o%jNYd QP=]N_rZyAh|:2%RF{'XcÇeO1UEY E E 1oTYζA7xJjaqbL4Dtc(sC\Qmk Qmk Qmk fL"!^ $fL"!^Yl (l fg8 PiGSNHCb>rIXIgN]]j] ] ,&ſ 6 MK곾,S @v{9>? aJ S[oN: g%kڎ%kڎ*ϫ4E.ʁ 0, "Can't undo when ply <= 0" for i in xrange(moves): try: row, view, other = self._ply_to_row_col_other(game.variations[0][-1].ply-i) model = view.get_model() model.remove(model.get_iter((row,))) if view == self.left: model = self.numbers.get_model() model.remove(model.get_iter((row,))) except ValueError: continue def game_changed (self, game): len_ = len(self.left.get_model()) + len(self.right.get_model()) + 1 if len(self.left.get_model()) and not self.left.get_model()[0][0]: len_ -= 1 for ply in xrange(len_+game.lowply, game.ply+1): self.__addMove(game, ply) def __addMove(self, game, ply): #print "Am I doing anything?" row, view, other = self._ply_to_row_col_other(ply) if conf.get("figuresInNotation", False): notat = toFAN(game.getBoardAtPly(ply-1), game.getMoveAtPly(ply-1)) else: notat = toSAN(game.getBoardAtPly(ply-1), game.getMoveAtPly(ply-1), localRepr=True) # Test if the row is 'filled' if len(view.get_model()) == len(self.numbers.get_model()): num = str((ply+1)/2)+"." self.numbers.get_model().append([num]) # Test if the move is black first move. This will be the case if the # game was loaded from a fen/epd starting at black if view == self.right and len(view.get_model()) == len(other.get_model()): self.left.get_model().append([""]) view.get_model().append([notat]) def shown_changed (self, boardview, shown): if not boardview.shownIsMainLine(): return if shown <= boardview.model.lowply: #print "Or is it me?" self.left.get_selection().unselect_all() self.right.get_selection().unselect_all() return row, col, other = self._ply_to_row_col_other(shown) with self.frozen: other.get_selection().unselect_all() try: col.get_selection().select_iter(col.get_model().get_iter(row)) col.set_cursor((row,)) col.scroll_to_cell((row,), None, False) col.grab_focus() except ValueError: pass # deleted variations by moves_undoing def _ply_to_row_col_other (self, ply): col = ply & 1 and self.left or self.right other = ply & 1 and self.right or self.left if self.boardview.model.lowply & 1: row = (ply-self.boardview.model.lowply) // 2 else: row = (ply-self.boardview.model.lowply-1) // 2 return row, col, other pychess-0.12beta3/sidepanel/chatPanel.py0000755000175000017470000000350312173202156017307 0ustar tamasusers# -*- coding: UTF-8 -*- import gtk import pango import time from pychess.System import uistuff from pychess.System import glock from pychess.System.Log import log from pychess.System.prefix import addDataPrefix from pychess.Utils.const import LOCAL, WHITE, BLACK from pychess.widgets.ChatView import ChatView __title__ = _("Chat") __icon__ = addDataPrefix("glade/panel_chat.svg") __desc__ = _("The chat panel lets you communicate with your opponent during the game, assuming he or she is interested") class Sidepanel: def load (self, gmwidg): self.chatView = ChatView() self.chatView.disable("Waiting for game to load") self.chatView.connect("messageTyped", self.onMessageSent) self.gamemodel = gmwidg.gamemodel glock.glock_connect(self.gamemodel, "game_started", self.onGameStarted) return self.chatView def onGameStarted (self, gamemodel): if gamemodel.players[0].__type__ == LOCAL: self.player = gamemodel.players[0] self.opplayer = gamemodel.players[1] if gamemodel.players[1].__type__ == LOCAL: log.warn("Chatpanel loaded with two local players") elif gamemodel.players[1].__type__ == LOCAL: self.player = gamemodel.players[1] self.opplayer = gamemodel.players[0] else: log.info("Chatpanel loaded with no local players\n") self.chatView.hide() if hasattr(self, "player"): self.player.connect("messageRecieved", self.onMessageReieved) self.chatView.enable() def onMessageReieved (self, player, text): self.chatView.addMessage(repr(self.opplayer), text) def onMessageSent (self, chatView, text): self.player.sendMessage(text) self.chatView.addMessage(repr(self.player), text) pychess-0.12beta3/sidepanel/annotationPanel.py0000644000175000017470000005734212170521125020546 0ustar tamasusers# -*- coding: UTF-8 -*- import datetime import gtk import pango from pychess.Utils.const import * from pychess.System import conf from pychess.System.glock import glock_connect from pychess.System.prefix import addDataPrefix from pychess.Utils.lutils.lmove import toSAN, toFAN from pychess.Savers.pgn import move_count from pychess.Savers.pgnbase import nag2symbol from pychess.widgets.ChessClock import formatTime __title__ = _("Annotation") __active__ = True __icon__ = addDataPrefix("glade/panel_annotation.svg") __desc__ = _("Annotated game") class Sidepanel(gtk.TextView): def __init__(self): gtk.TextView.__init__(self) self.set_editable(False) self.set_cursor_visible(False) self.set_wrap_mode(gtk.WRAP_WORD) self.cursor_standard = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) self.cursor_hand = gtk.gdk.Cursor(gtk.gdk.HAND2) self.textview = self self.nodeIters = [] self.commentIters = [] self.oldWidth = 0 self.autoUpdateSelected = True self.connect("motion-notify-event", self.motion_notify_event) self.connect("button-press-event", self.button_press_event) self.textbuffer = self.get_buffer() self.textbuffer.create_tag("head1") self.textbuffer.create_tag("head2", weight=pango.WEIGHT_BOLD) self.textbuffer.create_tag("node", weight=pango.WEIGHT_BOLD) self.textbuffer.create_tag("clock", foreground="darkgrey") self.textbuffer.create_tag("comment", foreground="darkblue") self.textbuffer.create_tag("variation-toplevel") self.textbuffer.create_tag("variation-even", foreground="darkgreen", style="italic") self.textbuffer.create_tag("variation-uneven", foreground="darkred", style="italic") self.textbuffer.create_tag("selected", background_full_height=True, background="black", foreground="white") self.textbuffer.create_tag("margin", left_margin=4) self.textbuffer.create_tag("variation-margin0", left_margin=20) self.textbuffer.create_tag("variation-margin1", left_margin=36) self.textbuffer.create_tag("variation-margin2", left_margin=52) def load(self, gmwidg): __widget__ = gtk.ScrolledWindow() __widget__.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS) __widget__.add(self.textview) self.boardview = gmwidg.board.view self.boardview.connect("shown_changed", self.shown_changed) self.gamemodel = gmwidg.board.view.model glock_connect(self.gamemodel, "game_loaded", self.update) glock_connect(self.gamemodel, "game_changed", self.game_changed) glock_connect(self.gamemodel, "game_started", self.update) glock_connect(self.gamemodel, "game_ended", self.update) glock_connect(self.gamemodel, "moves_undoing", self.moves_undoing) glock_connect(self.gamemodel, "opening_changed", self.update) glock_connect(self.gamemodel, "players_changed", self.update) glock_connect(self.gamemodel, "variations_changed", self.update) # Connect to preferences self.fan = conf.get("figuresInNotation", False) def figuresInNotationCallback(none): self.fan = conf.get("figuresInNotation", False) self.update() conf.notify_add("figuresInNotation", figuresInNotationCallback) self.showClocks = conf.get("showClocks", False) def showClocksCallback(none): self.showClocks = conf.get("showClocks", False) self.update() conf.notify_add("showClocks", showClocksCallback) return __widget__ def motion_notify_event(self, widget, event): if (event.is_hint): (x, y, state) = event.window.get_pointer() else: x = event.x y = event.y state = event.state if self.textview.get_window_type(event.window) != gtk.TEXT_WINDOW_TEXT: event.window.set_cursor(self.cursor_standard) return True (x, y) = self.textview.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET, int(x), int(y)) it = self.textview.get_iter_at_location(x, y) offset = it.get_offset() for ni in self.nodeIters: if offset >= ni["start"] and offset < ni["end"]: event.window.set_cursor(self.cursor_hand) return True for ci in self.commentIters: if offset >= ci["start"] and offset < ci["end"]: event.window.set_cursor(self.cursor_hand) return True event.window.set_cursor(self.cursor_standard) return True def button_press_event(self, widget, event): (wx, wy) = event.get_coords() (x, y) = self.textview.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET, int(wx), int(wy)) it = self.textview.get_iter_at_location(x, y) offset = it.get_offset() node = None for ni in self.nodeIters: if offset >= ni["start"] and offset < ni["end"]: node = ni board = ni["node"] parent = ni["parent"] if event.button == 1: self.boardview.setShownBoard(board.pieceBoard) self.update_selected_node() break if node is None and event.button == 1: for ci in self.commentIters: if offset >= ci["start"] and offset < ci["end"]: self.edit_comment(board=ci["node"], index=ci["index"]) break elif event.button == 3: if node is not None: menu = gtk.Menu() position = -1 for index, child in enumerate(board.children): if isinstance(child, basestring): position = index break if board == self.gamemodel.boards[1].board and not self.gamemodel.boards[0].board.children: menuitem = gtk.MenuItem(_("Add start comment")) menuitem.connect('activate', self.edit_comment, self.gamemodel.boards[0], 0) menu.append(menuitem) if position == -1: menuitem = gtk.MenuItem(_("Add comment")) menuitem.connect('activate', self.edit_comment, board, 0) menu.append(menuitem) else: menuitem = gtk.MenuItem(_("Edit comment")) menuitem.connect('activate', self.edit_comment, board, position) menu.append(menuitem) symbol_menu1 = gtk.Menu() for nag, menutext in (("$1", "!"), ("$2", "?"), ("$3", "!!"), ("$4", "??"), ("$5", "!?"), ("$6", "?!"), ("$7", _("Forced move"))): menuitem = gtk.MenuItem(menutext) menuitem.connect('activate', self.symbol_menu1_activate, board, nag) symbol_menu1.append(menuitem) menuitem = gtk.MenuItem(_("Add move symbol")) menuitem.set_submenu(symbol_menu1) menu.append(menuitem) symbol_menu2 = gtk.Menu() for nag, menutext in (("$10", "="), ("$13", _("Unclear position")), ("$14", "+="), ("$15", "=+"), ("$16", "±"), ("$17", "∓"), ("$18", "+-"), ("$19", "-+"), ("$20", "+--"), ("$21", "--+"), ("$22", _("Zugzwang")), ("$32", _("Development adv.")), ("$36", _("Initiative")), ("$40", _("With attack")), ("$44", _("Compensation")), ("$132", _("Counterplay")), ("$138", _("Time pressure"))): menuitem = gtk.MenuItem(menutext) menuitem.connect('activate', self.symbol_menu2_activate, board, nag) symbol_menu2.append(menuitem) menuitem = gtk.MenuItem(_("Add evaluation symbol")) menuitem.set_submenu(symbol_menu2) menu.append(menuitem) menuitem = gtk.MenuItem(_("Remove symols")) menuitem.connect('activate', self.remove_symbols, board) menu.append(menuitem) if board.pieceBoard not in self.gamemodel.variations[0]: for vari in self.gamemodel.variations[1:]: if board.pieceBoard in vari: menuitem = gtk.MenuItem(_("Remove variation")) menuitem.connect('activate', self.remove_variation, board, parent, vari) menu.append(menuitem) break menu.show_all() menu.popup( None, None, None, event.button, event.time) return True def edit_comment(self, widget=None, board=None, index=0): dialog = gtk.Dialog(_("Edit comment"), None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) textedit = gtk.TextView() textedit.set_editable(True) textedit.set_cursor_visible(True) textedit.set_wrap_mode(gtk.WRAP_WORD) textbuffer = textedit.get_buffer() if not board.children: board.children.append("") elif not isinstance(board.children[index], basestring): board.children.insert(index, "") textbuffer.set_text(board.children[index]) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.add(textedit) dialog.vbox.add(sw) dialog.resize(300, 200) dialog.show_all() response = dialog.run() if response == gtk.RESPONSE_ACCEPT: dialog.destroy() (iter_first, iter_last) = textbuffer.get_bounds() comment = textbuffer.get_text(iter_first, iter_last) if board.children[index] != comment: board.children[index] = comment self.gamemodel.needsSave = True self.update() else: dialog.destroy() def symbol_menu1_activate(self, widget, board, nag): if len(board.nags) == 0: board.nags.append(nag) self.gamemodel.needsSave = True else: if board.nags[0] != nag: board.nags[0] = nag self.gamemodel.needsSave = True if self.gamemodel.needsSave: self.update() def symbol_menu2_activate(self, widget, board, nag): color = board.color if color == WHITE and nag in ("$22", "$32", "$36", "$40", "$44", "$132", "$138"): nag = "$%s" % (int(nag[1:]) + 1) if len(board.nags) == 0: board.nags.append("") board.nags.append(nag) self.gamemodel.needsSave = True if len(board.nags) == 1: board.nags.append(nag) self.gamemodel.needsSave = True else: if board.nags[1] != nag: board.nags[1] = nag self.gamemodel.needsSave = True if self.gamemodel.needsSave: self.update() def remove_symbols(self, widget, board): if board.nags: board.nags = [] self.update() self.gamemodel.needsSave = True def remove_variation(self, widget, board, parent, vari): for child in parent.children: if isinstance(child, list) and board in child: parent.children.remove(child) break if self.gamemodel.getBoardAtPly(self.boardview.shown, self.boardview.shownVariationIdx) in vari: if parent.pieceBoard is None: # variation without played move at game end self.boardview.setShownBoard(self.gamemodel.boards[-1]) else: self.boardview.setShownBoard(parent.pieceBoard) self.gamemodel.variations.remove(vari) if parent.pieceBoard is None: self.boardview.shownVariationIdx = 0 parent.prev.next = None else: for vari in self.gamemodel.variations: if parent.pieceBoard in vari: self.boardview.shownVariationIdx = self.gamemodel.variations.index(vari) break self.update() self.gamemodel.needsSave = True # Update the selected node highlight def update_selected_node(self): self.textbuffer.remove_tag_by_name("selected", self.textbuffer.get_start_iter(), self.textbuffer.get_end_iter()) shown_board = self.gamemodel.getBoardAtPly(self.boardview.shown, self.boardview.shownVariationIdx) start = None for ni in self.nodeIters: if ni["node"] == shown_board.board: start = self.textbuffer.get_iter_at_offset(ni["start"]) end = self.textbuffer.get_iter_at_offset(ni["end"]) self.textbuffer.apply_tag_by_name("selected", start, end) break if start: self.textview.scroll_to_iter(start, 0, use_align=False, yalign=0.1) # Recursively insert the node tree def insert_nodes(self, node, level=0, ply=0, parent=None, result=None): buf = self.textbuffer end_iter = buf.get_end_iter # Convenience shortcut to the function new_line = False if self.boardview.shown >= self.gamemodel.lowply: shown_board = self.gamemodel.getBoardAtPly(self.boardview.shown, self.boardview.shownVariationIdx) while True: start = end_iter().get_offset() if node is None: break # Initial game or variation comment if node.prev is None: for index, child in enumerate(node.children): if isinstance(child, basestring): if 0: # TODO node.plyCount == self.gamemodel.lowply: self.insert_comment(child + "\n", node, index, level) else: self.insert_comment(child, node, index, level) node = node.next continue if hasattr(node, "hist_move"): if ply > 0 and not new_line: buf.insert(end_iter(), " ") ply += 1 movestr = self.__movestr(node) buf.insert(end_iter(), movestr) startIter = buf.get_iter_at_offset(start) endIter = buf.get_iter_at_offset(end_iter().get_offset()) if level == 0: buf.apply_tag_by_name("node", startIter, endIter) buf.apply_tag_by_name("margin", startIter, endIter) elif level == 1: buf.apply_tag_by_name("variation-toplevel", startIter, endIter) buf.apply_tag_by_name("variation-margin0", startIter, endIter) elif level % 2 == 0: buf.apply_tag_by_name("variation-even", startIter, endIter) buf.apply_tag_by_name("variation-margin1", startIter, endIter) else: buf.apply_tag_by_name("variation-uneven", startIter, endIter) buf.apply_tag_by_name("variation-margin2", startIter, endIter) if self.boardview.shown >= self.gamemodel.lowply and node == shown_board.board: buf.apply_tag_by_name("selected", startIter, endIter) ni = {} ni["node"] = node ni["start"] = start ni["end"] = end_iter().get_offset() ni["parent"] = parent self.nodeIters.append(ni) buf.insert(end_iter(), " ") if self.showClocks and node.clock is not None: self.textbuffer.insert_with_tags_by_name(end_iter(), formatTime(node.clock), "clock") new_line = False for index, child in enumerate(node.children): if isinstance(child, basestring): # comment self.insert_comment(child, node, index, level) else: # variation if not new_line: buf.insert(end_iter(), "\n") new_line = True if level == 0: buf.insert_with_tags_by_name(end_iter(), "[", "variation-toplevel", "variation-margin0") elif (level+1) % 2 == 0: buf.insert_with_tags_by_name(end_iter(), "(", "variation-even", "variation-margin1") else: buf.insert_with_tags_by_name(end_iter(), "(", "variation-uneven", "variation-margin2") self.insert_nodes(child[0], level+1, ply-1, parent=node) if level == 0: buf.insert_with_tags_by_name(end_iter(), "]\n", "variation-toplevel", "variation-margin0") elif (level+1) % 2 == 0: buf.insert_with_tags_by_name(end_iter(), ")\n", "variation-even", "variation-margin1") else: buf.insert_with_tags_by_name(end_iter(), ")\n", "variation-uneven", "variation-margin2") if node.next: node = node.next else: break if result and result != "*": buf.insert_with_tags_by_name(end_iter(), " "+result, "node") def insert_comment(self, comment, node, index, level=0): buf = self.textbuffer end_iter = buf.get_end_iter start = end_iter().get_offset() if level > 0: buf.insert_with_tags_by_name(end_iter(), comment, "comment", "margin") else: buf.insert_with_tags_by_name(end_iter(), comment, "comment") ci = {} ci["node"] = node ci["comment"] = comment ci["index"] = index ci["start"] = start ci["end"] = end_iter().get_offset() self.commentIters.append(ci) buf.insert(end_iter(), " ") def insert_header(self, gm): buf = self.textbuffer end_iter = buf.get_end_iter #try: # text = gm.tags['White'] #except: # # pgn not processed yet # return text = repr(gm.players[0]) buf.insert_with_tags_by_name(end_iter(), text, "head2") white_elo = gm.tags.get('WhiteElo') if white_elo: buf.insert_with_tags_by_name(end_iter(), " %s" % white_elo, "head1") buf.insert_with_tags_by_name(end_iter(), " - ", "head1") #text = gm.tags['Black'] text = repr(gm.players[1]) buf.insert_with_tags_by_name(end_iter(), text, "head2") black_elo = gm.tags.get('BlackElo') if black_elo: buf.insert_with_tags_by_name(end_iter(), " %s" % black_elo, "head1") status = reprResult[gm.status] if status != '*': result = status else: result = gm.tags['Result'] buf.insert_with_tags_by_name(end_iter(), ' ' + result + '\n', "head2") text = "" event = gm.tags['Event'] if event and event != "?": text += event site = gm.tags['Site'] if site and site != "?": if len(text) > 0: text += ', ' text += site round = gm.tags['Round'] if round and round != "?": if len(text) > 0: text += ', ' text += _('round %s') % round game_date = gm.tags.get('Date') if game_date is None: game_date = "%02d.%02d.%02d" % (gm.tags['Year'], gm.tags['Month'], gm.tags['Day']) if (not '?' in game_date) and game_date.count('.') == 2: y, m, d = map(int, game_date.split('.')) # strftime() is limited to > 1900 dates try: text += ', ' + datetime.date(y, m, d).strftime('%x') except ValueError: text += ', ' + game_date elif not '?' in game_date[:4]: text += ', ' + game_date[:4] buf.insert_with_tags_by_name(end_iter(), text, "head1") eco = gm.tags.get('ECO') if eco: buf.insert_with_tags_by_name(end_iter(), "\n" + eco, "head2") opening = gm.tags.get('Opening') if opening: buf.insert_with_tags_by_name(end_iter(), " - ", "head1") buf.insert_with_tags_by_name(end_iter(), opening, "head2") variation = gm.tags.get('Variation') if variation: buf.insert_with_tags_by_name(end_iter(), ", ", "head1") buf.insert_with_tags_by_name(end_iter(), variation, "head2") buf.insert(end_iter(), "\n\n") # Update the entire notation tree def update(self, *args): self.textbuffer.set_text('') self.nodeIters = [] self.insert_header(self.gamemodel) status = reprResult[self.gamemodel.status] if status != '*': result = status else: result = self.gamemodel.tags['Result'] self.insert_nodes(self.gamemodel.boards[0].board, result=result) def shown_changed(self, boardview, shown): self.update_selected_node() def moves_undoing(self, game, moves): assert game.ply > 0, "Can't undo when ply <= 0" start = self.textbuffer.get_start_iter() end = self.textbuffer.get_end_iter() for ni in reversed(self.nodeIters): if ni["node"].pieceBoard == self.gamemodel.variations[0][-moves]: start = self.textbuffer.get_iter_at_offset(ni["start"]) break self.textbuffer.delete(start, end) def game_changed(self, game): if game.status != RUNNING: return node = game.getBoardAtPly(game.ply, variation=0).board buf = self.textbuffer end_iter = buf.get_end_iter start = end_iter().get_offset() buf.insert(end_iter(), self.__movestr(node) + " ") startIter = buf.get_iter_at_offset(start) endIter = buf.get_iter_at_offset(end_iter().get_offset()) buf.apply_tag_by_name("node", startIter, endIter) ni = {} ni["node"] = node ni["start"] = startIter.get_offset() ni["end"] = end_iter().get_offset() ni["parent"] = None self.nodeIters.append(ni) if self.showClocks and node.clock is not None: self.textbuffer.insert_with_tags_by_name(end_iter(), formatTime(node.clock), "clock") self.update_selected_node() def __movestr(self, node): move = node.lastMove if self.fan: movestr = toFAN(node.prev, move) else: movestr = toSAN(node.prev, move, True) nagsymbols = "".join([nag2symbol(nag) for nag in node.nags]) # To prevent wrap castling we will use hyphen bullet (U+2043) return "%s%s%s" % (move_count(node), movestr.replace("-","⁃"), nagsymbols) pychess-0.12beta3/sidepanel/scorePanel.py0000755000175000017470000002070112161415524017504 0ustar tamasusers from math import e from random import randint from sys import maxint import gtk, gobject from gobject import SIGNAL_RUN_FIRST, TYPE_NONE from pychess.System import uistuff from pychess.System.glock import glock_connect from pychess.System.prefix import addDataPrefix from pychess.Utils.const import WHITE, DRAW, RUNNING, WHITEWON, BLACKWON from pychess.Utils.lutils import leval __title__ = _("Score") __icon__ = addDataPrefix("glade/panel_score.svg") __desc__ = _("The score panel tries to evaluate the positions and shows you a graph of the game progress") class Sidepanel: def load (self, gmwidg): self.plot = ScorePlot() __widget__ = gtk.ScrolledWindow() __widget__.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) port = gtk.Viewport() port.add(self.plot) port.set_shadow_type(gtk.SHADOW_NONE) __widget__.add(port) __widget__.show_all() self.boardview = gmwidg.board.view self.plot.connect("selected", self.plot_selected) self.boardview.connect('shown_changed', self.shown_changed) glock_connect(self.boardview.model, "game_changed", self.game_changed) glock_connect(self.boardview.model, "moves_undoing", self.moves_undoing) # Add the initial board glock_connect(self.boardview.model, "game_started", self.game_changed) uistuff.keepDown(__widget__) return __widget__ def moves_undoing (self, model, moves): for i in xrange(moves): self.plot.undo() # As shown_changed will normally be emitted just after game_changed - # if we are viewing the latest position - we can do the selection change # now, and thereby avoid redraw being called twice if self.plot.selected == model.ply-model.lowply: self.plot.select(model.ply-model.lowply - moves) self.plot.redraw() def game_changed (self, model): if len(self.plot)+model.lowply > model.ply: return for i in xrange(len(self.plot)+model.lowply, model.ply): points = leval.evaluateComplete(model.getBoardAtPly(i).board, WHITE) self.plot.addScore(points) if model.status == DRAW: points = 0 elif model.status == WHITEWON: points = maxint elif model.status == BLACKWON: points = -maxint else: points = leval.evaluateComplete(model.getBoardAtPly(model.ply).board, WHITE) self.plot.addScore(points) # As shown_changed will normally be emitted just after game_changed - # if we are viewing the latest position - we can do the selection change # now, and thereby avoid redraw being called twice if self.plot.selected == model.ply-model.lowply -1: self.plot.select(model.ply-model.lowply) self.plot.redraw() # Uncomment this to debug eval function return board = model.boards[-1].board opboard = model.boards[-1].clone().board opboard.setColor(1-opboard.color) material, phase = leval.evalMaterial (board) if board.color == WHITE: print "material", -material e1 = leval.evalKingTropism (board) e2 = leval.evalKingTropism (opboard) print "evaluation: %d + %d = %d " % (e1, e2, e1+e2) p1 = leval.evalPawnStructure (board, phase) p2 = leval.evalPawnStructure (opboard, phase) print "pawns: %d + %d = %d " % (p1, p2, p1+p2) print "knights:",-leval.evalKnights (board) print "king:",-leval.evalKing(board,phase) else: print "material", material print "evaluation:",leval.evalKingTropism (board) print "pawns:", leval.evalPawnStructure (board, phase) print "pawns2:", leval.evalPawnStructure (opboard, phase) print "pawns3:", leval.evalPawnStructure (board, phase) + \ leval.evalPawnStructure (opboard, phase) print "knights:",leval.evalKnights (board) print "king:",leval.evalKing(board,phase) print "----------------------" def shown_changed (self, boardview, shown): if not boardview.shownIsMainLine(): return if self.plot.selected != shown: self.plot.select(shown-self.boardview.model.lowply) self.plot.redraw() def plot_selected (self, plot, selected): board = self.boardview.model.boards[selected] self.boardview.setShownBoard(board) class ScorePlot (gtk.DrawingArea): __gtype_name__ = "ScorePlot"+str(randint(0,maxint)) __gsignals__ = { "selected" : (SIGNAL_RUN_FIRST, TYPE_NONE, (int,)) } def __init__ (self): gtk.DrawingArea.__init__(self) self.connect("expose_event", self.expose) self.connect("button-press-event", self.press) self.props.can_focus = True self.set_events(gtk.gdk.BUTTON_PRESS_MASK|gtk.gdk.KEY_PRESS_MASK) self.moveHeight = 12 self.scores = [] self.selected = 0 def addScore (self, score): self.scores.append(score) def __len__ (self): return len(self.scores) def undo (self): del self.scores[-1] def select (self, index): self.selected = index def clear (self): del self.scores[:] def redraw (self): if self.window: a = self.get_allocation() rect = gtk.gdk.Rectangle(0, 0, a.width, a.height) self.window.invalidate_rect(rect, True) self.window.process_updates(True) def press (self, widget, event): self.grab_focus() self.emit('selected', event.y/self.moveHeight) def expose (self, widget, event): context = widget.window.cairo_create() context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) context.clip() self.draw(context) self.set_size_request(-1, (len(self.scores))*self.moveHeight) return False def draw (self, cr): width = self.get_allocation().width height = len(self.scores)*self.moveHeight ######################################## # Draw background # ######################################## cr.set_source_rgb (1, 1, 1) cr.rectangle(0, 0, width, height) cr.fill() ######################################## # Draw dark middle line # ######################################## cr.set_source_rgb (0, 0, 0) cr.move_to(width/2., 0) cr.line_to(width/2., height) cr.set_line_width(0.15) cr.stroke() ######################################## # Draw the actual plot (dark area) # ######################################## sign = lambda n: n == 0 and 1 or n/abs(n) if self.scores: mapper = lambda score: (e**(-5e-4*abs(score))-1) * sign(score) cr.set_source_rgb (0, 0, 0) cr.move_to(width, 0) cr.line_to(width/2 - width/2*mapper(self.scores[0]), 0) for i, score in enumerate(self.scores): x = width/2 - width/2*mapper(score) y = (i+1) * self.moveHeight cr.line_to(x, y) cr.line_to(width, height) cr.fill_preserve() ######################################## # Draw light middle line # ######################################## cr.save() cr.clip() cr.set_source_rgb (1, 1, 1) cr.move_to(width/2., 0) cr.line_to(width/2., height) cr.set_line_width(0.15) cr.stroke() cr.restore() ######################################## # Draw selection # ######################################## lw = 2. cr.set_line_width(lw) y = (self.selected)*self.moveHeight cr.rectangle(lw/2, y-lw/2, width-lw, self.moveHeight+lw) col = self.get_style().base[gtk.STATE_SELECTED] r, g, b = map(lambda x: x/65535., (col.red, col.green, col.blue)) cr.set_source_rgba (r, g, b, .15) cr.fill_preserve() cr.set_source_rgb (r, g, b) cr.stroke() pychess-0.12beta3/sidepanel/engineOutputPanel.py0000755000175000017470000003506212161415524021065 0ustar tamasusers # Authors: Jonas Thiem import re import gtk, gobject, pango from pychess.System import uistuff from pychess.System.glock import glock_connect from pychess.System.Log import log from pychess.System.prefix import addDataPrefix from pychess.Utils.const import ARTIFICIAL __title__ = _("Engines") __icon__ = addDataPrefix("glade/panel_engineoutput.svg") white = addDataPrefix("glade/panel_engineoutput.svg") __desc__ = _("The engine output panel shows the thinking output of chess engines (computer players) during a game") class Sidepanel: def load (self, gmwidg): # Specify whether the panel should have a horizontal layout: horizontal = True if horizontal: self.box = gtk.HBox() else: self.box = gtk.VBox() __widget__ = self.box # Use two engine output widgets for each player color: self.output_white = EngineOutput(True) self.output_black = EngineOutput(False) if horizontal: self.output_separator = gtk.VSeparator() else: self.output_separator = gtk.HSeparator() self.output_noengines = gtk.TextView() self.output_noengines.get_buffer().set_text( _("No chess engines (computer players) are participating in this game.")) self.output_noengines.set_editable(False) self.output_noengines.set_wrap_mode(gtk.WRAP_WORD_CHAR) __widget__.pack_start(self.output_noengines) __widget__.show_all() self.boardview = gmwidg.board.view glock_connect(self.boardview.model, "game_changed", self.game_changed) glock_connect(self.boardview.model, "players_changed", self.players_changed) glock_connect(self.boardview.model, "game_started", self.game_changed) return __widget__ def updateVisibleOutputs (self, model): # Check which players participate and update which views are visible gotplayers = False gotEnginePlayers = False gotWhiteEngine = False gotBlackEngine = False if len(model.players) > 0: if model.players[0].__type__ == ARTIFICIAL: gotWhiteEngine = True self.output_white.attachEngine(model.players[0].engine) if model.players[1].__type__ == ARTIFICIAL: gotBlackEngine = True self.output_black.attachEngine(model.players[1].engine) # First, detach from old engines: if not gotBlackEngine: self.output_black.detachEngine() if not gotWhiteEngine: self.output_white.detachEngine() if gotBlackEngine or gotWhiteEngine: # Remove "no engines" label: if self.output_noengines in self.box.get_children(): self.box.remove(self.output_noengines) # Add white engine info if white engine is participating: if gotWhiteEngine: if not self.output_white in self.box.get_children(): # Remove black output and separator first # to ensure proper ordering: if self.output_black in self.box.get_children(): self.box.remove(self.output_black) self.box.remove(self.output_separator) self.box.pack_start(self.output_white) self.output_white.clear() self.output_white.show_all() self.output_white.setTitle(model.players[0].name) else: if self.output_white in self.box.get_children(): self.box.remove(self.output_white) self.box.remove(self.output_separator) # Add white engine info if black engine is participating: if gotBlackEngine: if not self.output_black in self.box.get_children(): if gotWhiteEngine: self.box.pack_start(self.output_separator, False) self.output_separator.show() self.box.pack_start(self.output_black) self.output_black.clear() self.output_black.show_all() self.output_black.setTitle(model.players[1].name) else: if self.output_black in self.box.get_children(): self.box.remove(self.output_black) self.box.remove(self.output_separator) else: # Show "no engines" label if self.output_white in self.box.get_children(): self.box.remove(self.output_white) if self.output_black in self.box.get_children(): self.box.remove(self.output_black) if not self.output_noengines in self.box.get_children(): self.box.pack_start(self.output_noengines) return def players_changed (self, model): self.updateVisibleOutputs(model) return def game_started (self, model): self.updateVisibleOutputs(model) return def game_changed (self, model): self.updateVisibleOutputs(model) return class EngineOutput (gtk.VBox): def __init__(self, white=True): gtk.VBox.__init__(self) self.attached_engine = None # engine attached to which we listen self.white = white self.clear_on_output = False # next thinking line belongs to new move # Title bar: self.title_label = gtk.Label() self.title_color = gtk.Image() self.title_hbox = gtk.HBox() self.title_hbox.pack_start(self.title_color, False) self.title_hbox.pack_start(self.title_label, True, True) # Set black or white player icon in front: if white == True: self.title_color.set_from_file(addDataPrefix("glade/white.png")) else: self.title_color.set_from_file(addDataPrefix("glade/black.png")) # output scrolled window container: self.output_container = gtk.ScrolledWindow() self.output_container.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) # Allow the user to make the output pretty tiny vertically # (to save space, only the last output line is really important) self.output_container.set_size_request(-1, 40) # scroll down on new output: -- not reliable with multilines added #uistuff.keepDown(self.output_container) # scroll down on new output: -- brute force variant def changed (vadjust): vadjust.set_value(vadjust.upper-vadjust.page_size) self.output_container.get_vadjustment().connect("changed", changed) # Text field for output: self.output = gtk.TextView() self.output_container.add(self.output) self.output.set_editable(False) self.output.set_wrap_mode(gtk.WRAP_WORD_CHAR) self.tag_bold = self.output.get_buffer().create_tag("bold", weight=pango.WEIGHT_BOLD) self.tag_color = self.output.get_buffer().create_tag("color", foreground="#0033ff") # Add all sub widgets to ourselves: self.pack_start(self.title_hbox, False) self.pack_start(self.output_container, True) # Precompile regexes we want to use: self.re_thinking_line_cecp = re.compile( r'^[0-9]+\.? +\-?[0-9]+ +' ) self.re_thinking_line_uci = re.compile( r'^info (.*) pv [a-hA-H][0-9][a-hA-H][0-9](.*)$' ) self.re_move_line_cecp_alg = re.compile( r'^(move +)?[a-hA-H][0-9][a-hA-H][0-9]$' ) self.re_move_line_cecp_san = re.compile( r'^(move +)?([QKNB]?[a-hA-H]?[xX@]?[a-hA-H][0-9]\+?#?|[oO]-[oO]-[oO]|[oO]-[oO])$' ) self.re_move_line_uci = re.compile( r'^bestmove +[a-hA-H][0-9][a-hA-H][0-9]( .*)?$' ) self.re_extract_cecp_all = re.compile( r'^([0-9]+)\.? +(\-?[0-9]+) +[0-9]+.?[0-9]* ([^ ].*)$' ) self.re_extract_uci_depth = re.compile( r'depth +([0-9]+) +' ) self.re_extract_uci_score = re.compile( r'score cp +(-?[0-9]+) +' ) self.re_extract_uci_score_mate_other = re.compile( r'score +mate +([0-9]+) +' ) self.re_extract_uci_score_mate_us = re.compile( r'score +mate +\-([0-9]+) +' ) self.re_extract_uci_score_lowerbound = re.compile( r'score +lowerbound +' ) self.re_extract_uci_score_upperbound = re.compile( r'score +upperbound +' ) self.re_extract_uci_pv = re.compile( r'pv +([a-hA-HoO].*[^ ]) *$' ) def __del__ (self): self.detachEngine() def appendNewline (self): # Start a new line if text output isn't empty: if self.output.get_buffer().get_char_count() > 0: # We have old content, append newline self.output.get_buffer().insert(self.output.get_buffer(). get_end_iter(), "\n") def append (self, line, tag=None): # Append a specific string with the given formatting: oldenditer = self.output.get_buffer().get_end_iter() self.output.get_buffer().insert(self.output.get_buffer(). get_end_iter(), line) if not tag is None: enditer = self.output.get_buffer().get_end_iter() startiter = enditer.copy() startiter.backward_chars(len(line)) self.output.get_buffer().apply_tag(tag, startiter, enditer) def appendThinking (self, depth, score, pv): # Append a formatted thinking line: self.appendNewline(); self.append(depth.__str__() + ". ", self.tag_color) self.append("Score: ", self.tag_bold) self.append(score.__str__() + " ") self.append("PV: ", self.tag_bold) self.append(pv.__str__()) def parseInfoLine (self, line): # Parse an identified info line and add it to our output: if self.clear_on_output == True: self.clear_on_output = False self.clear() # Clean up line first: while line.find(" ") != -1: line = line.replace(" ", " ") depth = "?" score = "?" pv = "?" infoFound = False # do more sophisticated parsing here: if line.startswith("info "): # UCI info line # always end with a space to faciliate searching: line = line + " " # parse depth: result = self.re_extract_uci_depth.search(line) if result: depth = result.group(1) # parse score: result = self.re_extract_uci_score.search(line) if result: score = result.group(1) else: result = self.re_extract_uci_score_mate_other.search(line) if result: score = "winning in " + result.group(1) + " moves" else: result = self.re_extract_uci_score_mate_us.search(line) if result: score = "losing in " + result.group(1) + " moves" else: if self.re_extract_uci_score_lowerbound.search(line): score = "lowerbound" elif self.re_extract_uci_score_upperbound.search(line): score = "upperbound" # parse pv: result = self.re_extract_uci_pv.search(line) if result: infoFound = True pv = result.group(1) else: # CECP/Winboard/GNUChess info line # parse all information in one go: result = self.re_extract_cecp_all.match(line) if not result: return infoFound = True depth = result.group(1) score = result.group(2) pv = result.group(3) # Clean pv of unwanted chars: pv = re.sub( '[^a-z^A-Z^0-9^ ^x^@^?]', '', pv ) # If we found useful information, show it: if infoFound: self.appendThinking(depth, score, pv) def parseLines (self, engine, lines): for line in lines: # Clean up the line a bit: line = line.strip(" \r\t\n") line = line.replace("\t", " ") # PARSING THINKING OUTPUT (roughly, simply identifies the lines): # GNU Chess/CECP/Winboard engine thinking output lines: if self.re_thinking_line_cecp.match(line): self.parseInfoLine(line) # UCI engine thinking output lines: if self.re_thinking_line_uci.match(line): if line.find("depth") != -1 and line.find("score") != -1: self.parseInfoLine(line) # PARSE MOVE LINES (roughly, we merely identify them): # We want to clear on the next output info line # when a move arrived, so that for every move # we freshly fill our thinking output: # CECP/Winboard move line, long algebraeic notation: if self.re_move_line_cecp_alg.match(line): self.clear_on_output = True # CECP/Winboard move line, SAN notation: if self.re_move_line_cecp_san.match(line): self.clear_on_output = True # UCI move line: if self.re_move_line_uci.match(line): self.clear_on_output = True return def clear (self): self.output.get_buffer().set_text("") return def setTitle (self, title): self.title_label.set_text(title) return def attachEngine (self, engine): # Attach an engine for line listening if not self.attached_engine is None: if self.attached_engine == engine: # We are already attached to this engine return # Detach from previous engine self.attached_engine.disconnect(self.attached_handler_id) # Attach to new engine: log.debug("Attaching " + self.__str__() + " to engine " + engine.__str__() + "\n", engine.defname) self.attached_engine = engine self.attached_handler_id = engine.connect("line", self.parseLines) return def detachEngine (self): # Detach from attached engine if not self.attached_engine is None: log.debug("Detaching " + self.__str__() + " from engine " + self.attached_engine.__str__() + "\n", self.attached_engine.defname) self.attached_engine.disconnect(self.attached_handler_id) self.attached_engine = None def __repr__(self): color = "black" if self.white: color = "white" return "Engine Output " + color + " #" + id(self).__str__() # def __str__(self): # return repr(self) + " (engine: " + self.attached_engine.__str__() + ")" pychess-0.12beta3/sidepanel/history.glade0000755000175000017470000000663612161415524017551 0ustar tamasusers False window1 True True never automatic True False none True False 35 True False False False True False False True 0 60 True True False True False True True 1 60 True True False True False True True 2 pychess-0.12beta3/sidepanel/bookPanel.py0000644000175000017470000006455612176677365017363 0ustar tamasusersimport os from Queue import Queue import gtk, gobject, cairo, pango from pychess.System import conf from pychess.Utils.const import * from pychess.Utils.book import getOpenings from pychess.Utils.eco import get_eco from pychess.Utils.logic import legalMoveCount from pychess.Utils.EndgameTable import EndgameTable from pychess.Utils.Move import Move, toSAN, toFAN, parseAny, listToSan from pychess.Utils.lutils.ldata import MATE_VALUE from pychess.System.prefix import addDataPrefix from pychess.System.ThreadPool import PooledThread __title__ = _("Hints") __icon__ = addDataPrefix("glade/panel_book.svg") __desc__ = _("The hint panel will provide computer advice during each stage of the game") __about__ = _("Official PyChess panel.") class Advisor: def __init__ (self, store, name, mode): """ The tree store's columns are: (Board, Move, pv) Indicate the suggested move text or barWidth or goodness Indicate its strength (last 2 are 0 to 1.0) pvlines Number of analysis lines for analysing engines is pvlines editable Boolean Details Describe a PV, opening name, etc. star/stop Boolean HINT, SPY analyzing toggle button state is start/stop visible Boolean """ self.store = store self.name = name self.mode = mode store.append(None, self.textOnlyRow(name, mode)) @property def path(self): for i, row in enumerate(self.store): if row[4] == self.name: return (i,) def shown_changed (self, boardview, shown): """ Update the suggestions to match a changed position. """ pass def child_tooltip (self, i): """ Return a tooltip (or empty) string for the given child row. """ return "" def row_activated (self, path, model): """ Act on a double-clicked child row other than a move suggestion. """ pass def query_tooltip (self, path): if not path[1:]: return self.tooltip return self.child_tooltip(path[1]) def empty_parent (self): while True: parent = self.store.get_iter(self.path) child = self.store.iter_children(parent) if not child: return parent self.store.remove(child) def textOnlyRow(self, text, mode=None): return [(None, None, None), ("", 0, None), 0, False, text, False, mode in (HINT, SPY)] class OpeningAdvisor(Advisor): def __init__ (self, store, tv): Advisor.__init__(self, store, _("Opening Book"), OPENING) self.tooltip = _("The opening book will try to inspire you during the opening phase of the game by showing you common moves made by chess masters") self.opening_names = [] self.tv = tv def shown_changed (self, boardview, shown): m = boardview.model if m.isPlayingICSGame(): return b = m.getBoardAtPly(shown, boardview.shownVariationIdx) parent = self.empty_parent() openings = getOpenings(b.board) openings.sort(key=lambda t: t[1], reverse=True) if not openings: return totalWeight = 0.0 # Polyglot-formatted books have space for learning data. # See version ac31dc37ec89 for an attempt to parse it. # In this version, we simply ignore it. (Most books don't have it.) for move, weight, games, score in openings: totalWeight += weight self.opening_names = [] for move, weight, games, score in openings: if totalWeight != 0: weight /= totalWeight goodness = min(weight * len(openings), 1.0) weight = "%0.1f%%" % (100 * weight) opening = get_eco(b.move(Move(move)).board.hash) if opening is None: eco = "" self.opening_names.append("") else: eco = opening[0] self.opening_names.append("%s %s" % (opening[1], opening[2])) self.store.append(parent, [(b, Move(move), None), (weight, 1, goodness), 0, False, eco, False, False]) self.tv.expand_row(self.path, False) def child_tooltip (self, i): return "" if len(self.opening_names)==0 else self.opening_names[i] class EngineAdvisor(Advisor): # An EngineAdvisor always has self.linesExpected rows reserved for analysis. def __init__ (self, store, engine, mode, tv, boardview): if mode == HINT: Advisor.__init__(self, store, _("Analysis by %s") % engine, HINT) self.tooltip = _("%s will try to predict which move is best and which side has the advantage") % engine else: Advisor.__init__(self, store, _("Threat analysis by %s") % engine, SPY) self.tooltip = _("%s will identify what threats would exist if it were your opponent's turn to move") % engine self.engine = engine self.tv = tv self.active = False self.linesExpected = 1 self.boardview = boardview self.connection = engine.connect("analyze", self.on_analyze) engine.connect("readyForOptions", self.on_ready_for_options) def __del__ (self): self.engine.disconnect(self.connection) def _create_new_expected_lines(self): parent = self.empty_parent() for line in range(self.linesExpected): self.store.append(parent, self.textOnlyRow(_("Calculating..."))) self.tv.expand_row(self.path, False) return parent def shown_changed (self, boardview, shown): m = boardview.model if m.isPlayingICSGame(): return if not self.active: return self.engine.setBoard(boardview.model.getBoardAtPly(shown, boardview.shownVariationIdx)) self._create_new_expected_lines() def on_ready_for_options (self, engine): engineMax = self.engine.maxAnalysisLines() self.linesExpected = min(conf.get("multipv", 1), engineMax) m = self.boardview.model if m.isPlayingICSGame(): return parent = self._create_new_expected_lines() # set pvlines, but set it 0 if engine max is only 1 self.store.set_value(parent, 2, 0 if engineMax==1 else self.linesExpected) # set it editable self.store.set_value(parent, 3, engineMax>1) # set start/stop cb visible self.store.set_value(parent, 6, True) self.active = True self.shown_changed(self.boardview, self.boardview.shown) def on_analyze (self, engine, analysis): m = self.boardview.model if m.isPlayingICSGame(): return if not self.active: return is_FAN = conf.get("figuresInNotation", False) for i, line in enumerate(analysis): if line is None: self.store[self.path + (i,)] = self.textOnlyRow("") continue pv, score = line move = None if pv: move = pv[0] board0 = self.engine.board board = board0.clone() ply0 = board.ply if self.mode == HINT else board.ply+1 counted_pv = [] for j, pvmove in enumerate(pv): ply = ply0 + j if ply % 2 == 0: mvcount = "%d." % (ply/2+1) elif j==0: mvcount = "%d..." % (ply/2+1) else: mvcount = "" counted_pv.append("%s%s" % (mvcount, toFAN(board, pvmove) if is_FAN else toSAN(board, pvmove, True))) board = board.move(pvmove) # TODO make a move's "goodness" relative to other moves or past scores goodness = (min(max(score, -250), 250) + 250) / 500.0 if self.engine.board.color == BLACK: score = -score self.store[self.path + (i,)] = [(board0, move, pv), (self.prettyPrintScore(score), 1, goodness), 0, False, " ".join(counted_pv), False, False] def start_stop(self, tb): if not tb: self.active = True self.boardview.model.resume_analyzer(self.mode) self.shown_changed(self.boardview, self.boardview.shown) else: self.active = False self.boardview.model.pause_analyzer(self.mode) def multipv_edited(self, value): if value > self.engine.maxAnalysisLines(): return if value != self.linesExpected: self.engine.requestMultiPV(value) parent = self.store.get_iter(self.path) if value > self.linesExpected: while self.linesExpected < value: self.store.append(parent, self.textOnlyRow(_("Calculating..."))) self.linesExpected += 1 else: while self.linesExpected > value: child = self.store.iter_children(parent) if child is not None: self.store.remove(child) self.linesExpected -= 1 def row_activated (self, iter, model): if self.mode == HINT and self.store.get_path(iter) != self.path: moves = self.store[iter][0][2] if moves is not None: model.add_variation(self.engine.board, moves) def child_tooltip (self, i): if self.active: if i < self.linesExpected: return _("Engine scores are in units of pawns, from White's point of view.") else: return _("Adding suggestions can help you find ideas, but slows down the computer's analysis.") return "" def prettyPrintScore (self, s): if s is None: return "?" if s == 0: return "0.00" if s > 0: pp = "+" else: pp = "-" s = -s if abs(s) == MATE_VALUE: return pp + "#%s" % MATE_VALUE else: return pp + "%0.2f" % (s / 100.0) class EndgameAdvisor(Advisor, PooledThread): def __init__ (self, store, tv, boardview): Advisor.__init__(self, store, _("Endgame Table"), ENDGAME) self.egtb = EndgameTable() self.tv = tv self.boardview = boardview self.tooltip = _("The endgame table will show exact analysis when there are few pieces on the board.") # TODO: Show a message if tablebases for the position exist but are neither installed nor allowed. self.egtb.connect("scored", self.on_scored) self.queue = Queue() self.start() def run(self): while True: lboard = self.queue.get() if lboard == self.board.board: self.egtb.scoreAllMoves(lboard) self.queue.task_done() def shown_changed (self, boardview, shown): m = boardview.model if m.isPlayingICSGame(): return self.parent = self.empty_parent() self.board = m.getBoardAtPly(shown, boardview.shownVariationIdx) self.queue.put(self.board.board) def on_scored(self, w, ret): m = self.boardview.model if m.isPlayingICSGame(): return board, endings = ret if board != self.board.board: return for move, result, depth in endings: if result == DRAW: result = (_("Draw"), 1, 0.5) details = "" elif (result == WHITEWON) ^ (self.board.color == WHITE): result = (_("Loss"), 1, 0.0) details = _("Mate in %d") % depth else: result = (_("Win"), 1, 1.0) details = _("Mate in %d") % depth self.store.append(self.parent, [(self.board, move, None), result, 0, False, details, False, False]) self.tv.expand_row(self.path, False) class Sidepanel: def load (self, gmwidg): self.boardcontrol = gmwidg.board self.boardview = self.boardcontrol.view widgets = gtk.Builder() widgets.add_from_file(addDataPrefix("sidepanel/book.glade")) self.tv = widgets.get_object("treeview") self.sw = widgets.get_object("scrolledwindow") self.sw.unparent() self.store = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, int, bool, str, bool, bool) self.tv.set_model(self.store) ### move suggested moveRenderer = gtk.CellRendererText() moveRenderer.set_property("xalign", 1.0) c0 = gtk.TreeViewColumn("Move", moveRenderer) def getMoveText(column, cell, store, iter): board, move, pv = store[iter][0] if not move: cell.set_property("text", "") else: if conf.get("figuresInNotation", False): cell.set_property("text", toFAN(board, move)) else: cell.set_property("text", toSAN(board, move, True)) c0.set_cell_data_func(moveRenderer, getMoveText) ### strength of the move c1 = gtk.TreeViewColumn("Strength", StrengthCellRenderer(), data=1) ### multipv (number of analysis lines) multipvRenderer = gtk.CellRendererSpin() adjustment = gtk.Adjustment(value=conf.get("multipv", 1), lower=1, upper=9, step_incr=1) multipvRenderer.set_property("adjustment", adjustment) multipvRenderer.set_property("editable", True) multipvRenderer.set_property("width_chars", 3) c2 = gtk.TreeViewColumn("PV", multipvRenderer, editable=3) def spin_visible(column, cell, store, iter): if store[iter][2] == 0: cell.set_property('visible', False) else: cell.set_property("text", store[iter][2]) cell.set_property('visible', True) c2.set_cell_data_func(multipvRenderer, spin_visible) def multipv_edited(renderer, path, text): iter = self.store.get_iter(path) self.store.set_value(iter, 2, int(text)) self.advisors[int(path[0])].multipv_edited(int(text)) multipvRenderer.connect('edited', multipv_edited) ### header text, or analysis line c3 = gtk.TreeViewColumn("Details", gtk.CellRendererText(), text=4) ### start/stop button for analysis engines toggleRenderer = CellRendererPixbufXt() toggleRenderer.set_property("stock-id", "gtk-add") c4 = gtk.TreeViewColumn("StartStop", toggleRenderer) def cb_visible(column, cell, store, iter): if not store[iter][6]: cell.set_property('visible', False) else: cell.set_property('visible', True) if store[iter][5]: cell.set_property("stock-id", "gtk-add") else: cell.set_property("stock-id", "gtk-remove") c4.set_cell_data_func(toggleRenderer, cb_visible) def toggled_cb(cell, path): self.store[path][5] = not self.store[path][5] self.advisors[int(path[0])].start_stop(self.store[path][5]) toggleRenderer.connect('clicked', toggled_cb) self.tv.append_column(c4) self.tv.append_column(c0) self.tv.append_column(c1) self.tv.append_column(c2) self.tv.append_column(c3) self.boardview.connect("shown_changed", self.shown_changed) self.tv.connect("cursor_changed", self.selection_changed) self.tv.connect("select_cursor_row", self.selection_changed) self.tv.connect("row-activated", self.row_activated) self.tv.connect("query-tooltip", self.query_tooltip) self.tv.props.has_tooltip = True self.tv.set_property("show-expanders", False) self.advisors = [] if conf.get("opening_check", 0): self.advisors.append(OpeningAdvisor(self.store, self.tv)) if conf.get("endgame_check", 0): self.advisors.append(EndgameAdvisor(self.store, self.tv, self.boardview)) gmwidg.gamemodel.connect("analyzer_added", self.on_analyzer_added) gmwidg.gamemodel.connect("analyzer_removed", self.on_analyzer_removed) gmwidg.gamemodel.connect("analyzer_paused", self.on_analyzer_paused) gmwidg.gamemodel.connect("analyzer_resumed", self.on_analyzer_resumed) def on_opening_check(none): if conf.get("opening_check", 0): advisor = OpeningAdvisor(self.store, self.tv) self.advisors.append(advisor) advisor.shown_changed(self.boardview, self.boardview.shown) else: for advisor in self.advisors: if advisor.mode == OPENING: parent = advisor.empty_parent() self.store.remove(parent) self.advisors.remove(advisor) conf.notify_add("opening_check", on_opening_check) def on_opening_file_entry_changed(none): default_path = os.path.join(addDataPrefix("pychess_book.bin")) path = conf.get("opening_file_entry", default_path) if os.path.isfile(path): for advisor in self.advisors: if advisor.mode == OPENING: advisor.shown_changed(self.boardview, self.boardview.shown) conf.notify_add("opening_file_entry", on_opening_file_entry_changed) def on_endgame_check(none): if conf.get("endgame_check", 0): advisor = EndgameAdvisor(self.store, self.tv, self.boardview) self.advisors.append(advisor) advisor.shown_changed(self.boardview, self.boardview.shown) else: for advisor in self.advisors: if advisor.mode == ENDGAME: parent = advisor.empty_parent() self.store.remove(parent) self.advisors.remove(advisor) conf.notify_add("endgame_check", on_endgame_check) return self.sw def on_analyzer_added(self, gamemodel, analyzer, analyzer_type): if analyzer_type == HINT: self.advisors.append(EngineAdvisor(self.store, analyzer, HINT, self.tv, self.boardview)) if analyzer_type == SPY: self.advisors.append(EngineAdvisor(self.store, analyzer, SPY, self.tv, self.boardview)) def on_analyzer_removed(self, gamemodel, analyzer, analyzer_type): for advisor in self.advisors: if advisor.mode == analyzer_type: advisor.active = False parent = advisor.empty_parent() self.store.remove(parent) self.advisors.remove(advisor) def on_analyzer_paused(self, gamemodel, analyzer, analyzer_type): for advisor in self.advisors: if advisor.mode == analyzer_type: advisor.active = False self.store[advisor.path][5] = True advisor.empty_parent() def on_analyzer_resumed(self, gamemodel, analyzer, analyzer_type): for advisor in self.advisors: if advisor.mode == analyzer_type: self.store[advisor.path][5] = False advisor.active = True advisor.shown_changed(self.boardview, self.boardview.shown) def shown_changed (self, boardview, shown): boardview.bluearrow = None if legalMoveCount(boardview.model.getBoardAtPly(shown, boardview.shownVariationIdx)) == 0: if self.sw.get_child() == self.tv: self.sw.remove(self.tv) label = gtk.Label(_("In this position,\nthere is no legal move.")) label.set_property("yalign",0.1) self.sw.add_with_viewport(label) self.sw.get_child().set_shadow_type(gtk.SHADOW_NONE) self.sw.show_all() return for advisor in self.advisors: advisor.shown_changed(boardview, shown) self.tv.expand_all() if self.sw.get_child() != self.tv: print "???" self.sw.remove(self.sw.get_child()) self.sw.add(self.tv) def selection_changed (self, widget, *args): iter = self.tv.get_selection().get_selected()[1] if iter: board, move, pv = self.store[iter][0] if move is not None: self.boardview.bluearrow = move.cords return self.boardview.bluearrow = None def row_activated (self, widget, *args): iter = self.tv.get_selection().get_selected()[1] if iter is None: return board, move, pv = self.store[iter][0] # The row may be tied to a specific action. path = self.store.get_path(iter) self.advisors[path[0]].row_activated(iter, self.boardview.model) def query_tooltip(self, treeview, x, y, keyboard_mode, tooltip): # First, find out where the pointer is: path_col_x_y = treeview.get_path_at_pos (x, y) # If we're not pointed at a row, then return FALSE to say # "don't show a tip". if not path_col_x_y: return False # Otherwise, ask the TreeView to set up the tip's area according # to the row's rectangle. path, col, x, y = path_col_x_y if not path: return False treeview.set_tooltip_row(tooltip, path) # And ask the advisor for some text iter = self.store.get_iter(path) text = self.advisors[path[0]].query_tooltip(path) if text: tooltip.set_markup(text) return True # Show the tip. return False ################################################################################ # StrengthCellRenderer # ################################################################################ width, height = 80, 23 class StrengthCellRenderer (gtk.GenericCellRenderer): __gproperties__ = { "data": (gobject.TYPE_PYOBJECT, "Data", "Data", gobject.PARAM_READWRITE), } def __init__(self): self.__gobject_init__() self.data = None def do_set_property(self, pspec, value): setattr(self, pspec.name, value) def do_get_property(self, pspec): return getattr(self, pspec.name) def on_render(self, window, widget, background_area, cell_area, expose_area, flags): if not self.data: return cairo = window.cairo_create() text, widthfrac, goodness = self.data if widthfrac: paintGraph(cairo, widthfrac, stoplightColor(goodness), cell_area) if text: layout = widget.create_pango_layout(text) w, h = layout.get_pixel_size() context = widget.create_pango_context() cairo.move_to(cell_area.x, cell_area.y) cairo.rel_move_to( 70 - w, (height - h) / 2) cairo.show_layout(layout) def on_get_size(self, widget, cell_area=None): return (0, 0, width, height) gobject.type_register(StrengthCellRenderer) ################################################################################ # StrengthCellRenderer functions # ################################################################################ from math import ceil def stoplightColor (x): interp = lambda y0, yh, y1 : y0 + (y1+4*yh-3*y0) * x + (-4*yh+2*y0) * x*x r = interp(239, 252, 138) / 255 g = interp( 41, 233, 226) / 255 b = interp( 41, 79, 52) / 255 return r, g, b def paintGraph (cairo, widthfrac, rgb, rect): x,y,w0,h = rect.x, rect.y, rect.width, rect.height w = ceil(widthfrac * w0) cairo.save() cairo.rectangle(x,y,w,h) cairo.clip() cairo.move_to(x+10, y) cairo.rel_line_to(w-20, 0) cairo.rel_curve_to(10, 0, 10, 0, 10, 10) cairo.rel_line_to(0, 3) cairo.rel_curve_to(0, 10, 0, 10, -10, 10) cairo.rel_line_to(-w+20, 0) cairo.rel_curve_to(-10, 0, -10, 0, -10, -10) cairo.rel_line_to(0, -3) cairo.rel_curve_to(0, -10, 0, -10, 10, -10) cairo.set_source_rgb(*rgb) cairo.fill() cairo.restore() # cell renderer for start-stop putton class CellRendererPixbufXt(gtk.CellRendererPixbuf): __gproperties__ = { 'active-state' : (gobject.TYPE_STRING, 'pixmap/active widget state', 'stock-icon name representing active widget state', None, gobject.PARAM_READWRITE) } __gsignals__ = { 'clicked' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)) , } def __init__( self ): gtk.CellRendererPixbuf.__init__( self ) self.set_property( 'mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE ) def do_get_property( self, property ): if property.name == 'active-state': return self.active_state else: raise AttributeError, 'unknown property %s' % property.name def do_set_property( self, property, value ): if property.name == 'active-state': self.active_state = value else: raise AttributeError, 'unknown property %s' % property.name def do_activate( self, event, widget, path, background_area, cell_area, flags ): if event.type == gtk.gdk.BUTTON_PRESS: self.emit('clicked', path) #def do_clicked(self, path): #print "do_clicked", path gobject.type_register(CellRendererPixbufXt) pychess-0.12beta3/sidepanel/commentPanel.py0000755000175000017470000002400512161415524020034 0ustar tamasusers# -*- coding: UTF-8 -*- from __future__ import with_statement import gtk, pango from pychess.System import uistuff from pychess.System.prefix import addDataPrefix from pychess.System.glock import * from pychess.Utils.const import * from pychess.Utils.repr import reprColor, reprPiece from pychess.Utils.lutils.lsort import staticExchangeEvaluate from pychess.Utils.lutils.lmove import FLAG, TCORD, FCORD, toSAN from pychess.Utils.lutils.lmovegen import genCaptures from pychess.Utils.lutils.leval import evalMaterial from pychess.Utils.lutils import ldata from pychess.Utils.lutils import strateval __title__ = _("Comments") __icon__ = addDataPrefix("glade/panel_comments.svg") __desc__ = _("The comments panel will try to analyze and explain the moves played") class Switch: def __init__(self): self.on = False def __enter__(self): self.on = True def __exit__(self, *a): self.on = False class Sidepanel: def __init__ (self): self.givenTips = {} def load (self, gmwidg): self.gamemodel = gmwidg.board.view.model self.gmhandlers = [ glock_connect(self.gamemodel, "game_changed", self.game_changed), glock_connect(self.gamemodel, "game_started", self.game_started), glock_connect(self.gamemodel, "moves_undoing", self.moves_undoing) ] widgets = gtk.Builder() widgets.add_from_file(addDataPrefix("sidepanel/book.glade")) self.tv = widgets.get_object("treeview") scrollwin = widgets.get_object("scrolledwindow") scrollwin.unparent() self.store = gtk.ListStore(str) self.tv.set_model(self.store) self.tv.get_selection().set_mode(gtk.SELECTION_BROWSE) #r = gtk.CellRendererText() #r.set_property("wrap-width", 177) #FIXME: Fixed width size #r.set_property("wrap-mode", pango.WRAP_WORD) #self.tv.append_column(gtk.TreeViewColumn("Comment", r, text=0)) uistuff.appendAutowrapColumn(self.tv, 200, "Comment", text=0) self.tv.get_selection().connect_after('changed', self.select_cursor_row) self.boardview = gmwidg.board.view self.boardview.connect("shown_changed", self.shown_changed) def changed (vadjust): if not hasattr(vadjust, "need_scroll") or vadjust.need_scroll: vadjust.set_value(vadjust.upper-vadjust.page_size) vadjust.need_scroll = True scrollwin.get_vadjustment().connect("changed", changed) def value_changed (vadjust): vadjust.need_scroll = abs(vadjust.value + vadjust.page_size - \ vadjust.upper) < vadjust.step_increment scrollwin.get_vadjustment().connect("value-changed", value_changed) self.frozen = Switch() return scrollwin def select_cursor_row (self, selection): iter = selection.get_selected()[1] if iter == None: return if self.frozen.on: return row = self.tv.get_model().get_path(iter)[0] board = self.gamemodel.boards[row] self.boardview.setShownBoard(board) def shown_changed (self, boardview, shown): if not boardview.shownIsMainLine(): return row = shown - self.gamemodel.lowply try: iter = self.store.get_iter(row) self.tv.get_selection().select_iter(iter) except ValueError: pass # deleted variations by moves_undoing def moves_undoing (self, game, moves): assert game.ply > 0, "Can't undo when ply <= 0" model = self.tv.get_model() for i in xrange(moves): model.remove(model.get_iter( (len(model)-1,) )) def game_started (self, model): self.game_changed(model) def game_changed (self, model): for ply in xrange(len(self.store)+model.lowply, model.ply+1): self.addComment(model, self.__chooseComment(model, ply)) def addComment (self, model, comment): self.store.append([comment]) # If latest ply is shown, we select the new latest iter = self.tv.get_selection().get_selected()[1] if iter: row = self.tv.get_model().get_path(iter)[0] if row < self.boardview.shown-1: return if self.boardview.shown >= model.ply: iter = self.store.get_iter(len(self.store)-1) with self.frozen: self.tv.get_selection().select_iter(iter) def __chooseComment(self, model, ply): if ply == model.lowply: return _("Initial position") ######################################################################## # Set up variables ######################################################################## color = model.getBoardAtPly(ply-1).board.color s, phase = evalMaterial (model.getBoardAtPly(ply).board, model.getBoardAtPly(ply-1).color) # * Final: Will be shown alone: "mates", "draws" # * Prefix: Will always be shown: "castles", "promotes" # * Attack: Will always be shown: "threaten", "preassures", "defendes" # * Moves (s): Will always be shown: "put into *" # * State: (s) Will always be shown: "new *" # * Simple: (s) Max one will be shown: "develops", "activity" # * Tip: (s) Will sometimes be shown: "pawn storm", "cramped position" ######################################################################## # Call strategic evaluation functions ######################################################################## def getMessages (prefix): messages = [] for functionName in dir(strateval): if not functionName.startswith(prefix+"_"): continue function = getattr(strateval, functionName) messages.extend(function (model, ply, phase)) return messages #move = model.moves[-1].move #print "----- %d - %s -----" % (model.ply/2, toSAN(oldboard, move)) # ---------------------------------------------------------------------- # Final # ---------------------------------------------------------------------- messages = getMessages ("final") if messages: return "%s %s" % (reprColor[color], messages[0]) # --- strings = [] # ---------------------------------------------------------------------- # Attacks # ---------------------------------------------------------------------- messages = getMessages ("attack") for message in messages: strings.append("%s %s" % (reprColor[color], message)) # ---------------------------------------------------------------------- # Check for prefixes # ---------------------------------------------------------------------- messages = getMessages ("prefix") if messages: prefix = messages[0] else: prefix = "" # ---------------------------------------------------------------------- # Check for special move stuff. All of which accept prefixes # ---------------------------------------------------------------------- for message in getMessages("offencive_moves") \ + getMessages("defencive_moves"): if prefix: strings.append("%s %s %s %s" % (reprColor[color], prefix, _("and"), message)) prefix = "" else: strings.append("%s %s" % (reprColor[color], message)) # ---------------------------------------------------------------------- # Simple # ---------------------------------------------------------------------- # We only add simples if there hasn't been too much stuff to say if not strings: messages = getMessages ("simple") if messages: messages.sort(reverse=True) score, message = messages[0] if prefix: strings.append("%s %s %s %s" % (reprColor[color], prefix, _("and"), message)) prefix = "" # ---------------------------------------------------------------------- # Prefix fallback # ---------------------------------------------------------------------- # There was nothing to apply the prefix to, so we just post it here # before the states and tips if prefix: strings.append("%s %s" % (reprColor[color], prefix)) prefix = "" # ---------------------------------------------------------------------- # State # ---------------------------------------------------------------------- messages = getMessages("state") messages.sort(reverse=True) for score, message in messages: strings.append(message) # ---------------------------------------------------------------------- # Tips # ---------------------------------------------------------------------- tips = getMessages("tip") tips.sort(reverse=True) for (score, tip) in tips: if tip in self.givenTips: oldscore, oldply = self.givenTips[tip] if score < oldscore*1.3 or model.ply < oldply+10: continue self.givenTips[tip] = (score, model.ply) strings.append(tip) break # ---------------------------------------------------------------------- # Last solution # ---------------------------------------------------------------------- if not strings: tcord = TCORD(model.getMoveAtPly(ply-1).move) piece = model.getBoardAtPly(ply).board.arBoard[tcord] strings.append( _("%(color)s moves a %(piece)s to %(cord)s") % { 'color': reprColor[color], 'piece': reprPiece[piece], 'cord': reprCord[tcord]}) return ";\n".join(strings) pychess-0.12beta3/sidepanel/book.glade0000755000175000017470000000200512161415524016764 0ustar tamasusers False window1 True True automatic automatic True True False True False pychess-0.12beta3/lang/0000755000175000017470000000000012176727272014025 5ustar tamasuserspychess-0.12beta3/lang/sl/0000755000175000017470000000000012176727272014443 5ustar tamasuserspychess-0.12beta3/lang/sl/LC_MESSAGES/0000755000175000017470000000000012176727272016230 5ustar tamasuserspychess-0.12beta3/lang/sl/LC_MESSAGES/pychess.po0000644000175000017470000024237412161415524020246 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2010. # , 2013. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: CroatianFan \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\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" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess išče vaše programnike. Prosimo, počakajte." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Povežite se z internetnim šahom" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Naslov" #: glade/fics_logon.glade:70 msgid "text" msgstr "besedilo" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Povežite se s Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Geslo:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Ime:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Prijavi se kot _gost" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "_Vrata:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "_Prijavi se" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Izzovi: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Pošlji izziv" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Izzovi:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Bliskovito:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Običajno:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Hitro:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer naključna, črni" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sek/potezo, beli" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Uredi povpraševanje" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Brez časa" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minut: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Dodatek: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Nadzor časa: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Običajno" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Nadzor časa" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Vseeno mi je" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Vaša moč: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(hitro)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Moč nasprotnika: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Ko je ta gumb v \"zaklenjenem\" stanju, bo povezava\nmed \"Močjo nasprotnika\" in \"Vaša moč\" ohranjena, ko \na) se je vaš rang poizvedovanja spremenil\nb) spremenite različico šaha ali čas igre" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Usredišči:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Odstopanje:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Skrij" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Nasprotnikova moč" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Beli" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Črni" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Vaša barva" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Igraj navadni šah" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Igraj" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Različica šaha" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Rangirana igra" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Ročno odobri nasprotnika" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Možnosti" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internetni šah: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Počisti povpraševanja" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Sprejmi" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Zavrni" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer naključna, 1800↓, črni" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sek/potezo, 1400↑, beli" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, ročno" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Pošlji povpraševanje" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Ustvari povpraševanje" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Povpraševanja / Izzivi" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rang" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Čas" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "_Grafikon povpraševanja" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 igralcev pripravljenih" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Izzovi" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Opazuj" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Začni zasebni pogovor" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Seznam _igralcev" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Seznam i_ger" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Ponudi _nadaljevanje" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "_Predam se" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Ponudi neo_dločen izid" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "_Predogled" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Odloženo" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Novice" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Pokaži _klepet" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Odjavi se" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Orodja" #: glade/findbar.glade:7 msgid "window1" msgstr "okno1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 od 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Prejšnji" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Naslednji" #: glade/findbar.glade:161 msgid "Search:" msgstr "Išči:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nova igra" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Začni igro" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Črni igralec:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Beli igralec:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Igralci" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Hitro:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Naglo:\t15 min + 10 sek/potezo" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Običajno:\t40 min + 15 sek/potezo" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Igraj navadni šah" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Igraj Fischer naključni šah" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Odpri igro" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Začetni položaj" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Vstavi notacijo igre" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Napredovanje" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Kraljica" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Trnjava" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Tekač" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Konj" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Povišaj kmeta v?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Šahovski odjemalec za namizje Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess je prosta programska oprema; razširjate in/ali spreminjate jo lahko \npod pogoji licence GNU General Public Licence, ki jo je objavila fundacija \nFree Software Foundation, in sicer različice 2 ali (po vaši želji) kasnejše.\n\nPyChess se razširja v upanju, da bo koristen, vendar BREZ KAKRŠNEGAKOLI JAMSTVA; \ntudi brez vštetega jamstva CENOVNE VREDNOSTI ali PRIMERNOSTI ZA DOLOČEN NAMEN. \nZa več podrobnosti si oglejte licenco GNU General Public Licence.\n\nSkupaj s programom PyChess bi morali prejeti tudi kopijo licence GNU General \nPublic Licence; v primeru, da kopije niste prejeli, pišite na Free Software \nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Podatki o igri" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Dogodek:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Stran:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Runda:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Podatki o igri" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Datum igre" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Možnosti" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Prikazano ime prvega človeškega igralca, npr. Janez." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Ime prvega človeškega igralca:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Prikazano ime gostujočega igralca, npr. Marija." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Ime drugega človeškega igralca:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Skrij zavihke, ko je odprta le ena igra" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Če je nastavljeno, potem skrije zavihek na vrhu okna, ko le-ta ni potreben." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Samodejno ob_rni ploščo k trenutnemu človeškemu igralcu" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Če je nastavljeno, se bo igralna plošča vsako potezo prestavila tako, da bo prikazan naraven pogled za trenutnega igralca." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Način prikaza iz obraza v obraz" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Če je nastavljeno, potem bodo črne figure nastavljene z glavo navzdol, kar je primerno za igranje s prijateljem preko mobilne naprave." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "_Prikaži notacije" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Če je nastavljeno, bo igralna plošča prikazala oznako za vsako šahovsko polje. Le-ti ne bodo prikazani v šahovski notaciji." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Dodaj figure v _notacijo" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Če je nastavljeno, bo PyChess prikazal slike za premike potez figur namesto velikih črk." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Možnosti splošnega prikaza" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "_Polna animacija plošče" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animiraj figure, šahovsko ploščo in drugo. To možnost uporabite na hitrih računalnikih." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animiraj samo _poteze" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Animiraj samo poteze figur." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "_Brez animacije" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Nikoli ne uporabi animacij. To možnost uporabite na počasnih računalnikih." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animacija" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Splošno" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Uporabi _analizo" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Uporabi _nasprotno analizo" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analiziranje" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Odstrani" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Ak_tivno" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Nameščeni stranski pulti" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Stranski _pulti" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Uporabi zvoke v PyChessu" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Igralec _šahira:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Igralec _prestavi:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Igra je neo_dločena:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Igra je izgub_ljena:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Igra je _dobljena:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Igralec z_apleni:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Igra je na_stavljena:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Opazovani prestavi:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Opazovani _konča:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Predvajaj zvok ob ..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Zvoki" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Igra" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nova igra" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "_Igraj internetni šah" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Naloži igro" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Nastavi položaj" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Vnesi _notacijo igre" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Shrani igro" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Shrani igro _kot" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Igralčev rang" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Dejanja" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Ponudi _prekinitev" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Ponudi _odložitev" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Ponudi _premor" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Ponudi p_ovrnitev poteze" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "Sporoči padec zastavice" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Prosi za pre_mik" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Pogled" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Zavrti ploščo" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Celozaslonski način" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Zapusti celozaslonski način" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Prikaži stranske pulte" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Pregledovalnik _dnevnikov" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Svetovalni način" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "_Vohunski način" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Pomoč" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "O šahu" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Kako igrati" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Prevedi PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Nasvet dneva" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Zapri PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Zapri _brez shranjevanja" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Shranite %d dokumentov" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Obstaja %d iger z neshranjenimi potezami. Želite shraniti spremembe?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Izberite igre, ki jih želite shraniti:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Če ne shranite, bodo spremembe trajno izgubljene." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "Naspr_otnik:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Vaša barva:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Začni igro" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Prijavi se kot _gost" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Uporabnik:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "Prijavi se v FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Nasvet dneva" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Prikaži nasvete ob zagonu" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://sl.wikipedia.org/wiki/%C5%A0ah" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://sl.wikipedia.org/wiki/%C5%A0ahovska_pravila" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Dobrodošli" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Povezava prekinjena - dobljena napaka \"konec datoteke\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' ni registrirano ime" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Vnešeno geslo je napačno.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Povezovanje na strežnik" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Prijavljanje na strežnik" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Pripravljanje okolja" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Prijavljen" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Odjavljen" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Nerangiran" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Rangiran" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Zasebno" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Napaka pri povezavi" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Napaka pri prijavi" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Povezava je bila prekinjena" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Napaka v naslovu" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Samodejna odjava" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Samodejno ste bili odjavljeni, ker ste bili nedejavni več kot 60 minut" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Zmaga" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Neodločeno" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Poraz" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "Na FICS, vaš rang \"Divji\" zajema vse sledeče različice vseh časovnih možnosti:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Elektronska pošta" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Zapravljeno" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "skupaj prijavljenih" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Povezovanje" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Neznano" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Trenutno ste prijavljeni kot gost.\nGost ne more igrati rangiranih iger in zato je ponudba iger manjša." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registriraj se" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Ime" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Vrsta" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Ura" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Aktivna povpraševanja: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s sek" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s sek" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Hitro" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Bliskovito" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Divji" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Beli igralec" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Črni igralec" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Vrsta igre" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Trenutne igre: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Nasprotnik" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Datum/Čas" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "Verižni gumb je onemogočen, ker ste prijavljeni kot gost. Gostje ne morejo imeti ranga, zato je verižni gumb brez učinka, saj ne obstaja rang, na katerega bi se navezovala \"Moč nasprotnika\"" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Izziv: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Ta možnost ni na voljo, ker izzivate igralca" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Uredi povpraševanje: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d sek/potezo" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Ročno" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Ne morete igrati rangirane igre, ker ste prijavljeni kot gost" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Ne morete igrati rangirane igre, ker je možnost \"Brez časa\" omogočena " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "in na FICS igre brez časa ne morejo biti rangirane" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Ta možnost ni na voljo, ker izzivate gosta, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "in gostje ne morejo igrati rangiranih iger" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Trik" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Drugo" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Ne morete izbrati različice, ker je izbrana možnost \"Brez časa\", " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "in na FICS igre brez časa morajo potekati po navadnih šahovskih pravilih" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Spremeni odstopanje" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Skrbnik" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Slepi račun" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Računalniški račun" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Ekipni račun" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Neregistriran uporabnik" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Šahovski svetovalec" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Storitveni predstavnik" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Direktor turnirja" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Samodejni turnirni upravitelj" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Velemojster" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Mednarodni mojster" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "Mojster FIDE" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "L" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Nasprotnik je ponudil premor. Sprejmete?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Nasprotnik je ponudil neodločeno. Če sprejmete, se bo igra končala z izzidom 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Nasprotnik želi nadaljevati. Sprejmete?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Nasprotnik je ponudil prekinitev igre. Če sprejmete, igra ne bo vplivala na rang." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Nasprotnik želi nadaljevati. Sprejmete?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Nasprotnik je ponudil odložitev igre. Če sprejmete, bo igra odložena in lahko se bo kasneje nadaljevala (če bo nasprotnik na voljo in željan)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Nasprotnik želi povrniti %s potez(o). Sprejmete?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Nasprotnik želi povrniti zadnjih %s potez(o). Če sprejmete, se bo igra nadaljevala s predhodnega položaja." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Nasprotnik želi nadaljevati. Sprejmete?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Nasprotnik želi narediti premor. Če sprejmete, se bo ura ustavila, dokler ne sprejmete ponudbe o nadaljevanju." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Nasprotnik želi nadaljevati. Sprejmete?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Nasprotnik želi nadaljevati igro. Če sprejmete, bo ura pričela odštevati od tam, kjer je ostala." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Odstop" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "Zastavica je padla" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "Ponudba za neodločenost" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "Ponudba za prekinitev" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "Ponudba za odložitev" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "Ponudba za premor" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "Ponudba za nadaljevanje" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "Ponudba za spremembo strani" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "Ponudba za povrnitev poteze" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "predam se" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "sporoči padec nasprotnikove zastavice" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "ponudi neodločen izid" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "ponudi prekinitev" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "ponudi odložitev" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "ponudi premor" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "ponudi nadaljevanje" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "ponudi spremembo strani" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "ponudi povrnitev" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "prosi nasprotnika za premik" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Nasprotniku se še ni iztekel čas." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "Ura se še ni zagnala." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Barve med igro ni mogoče menjati." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Poskusili ste razveljaviti preveč potez." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Nasprotnik vas je pozval, da pohitite!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Ponavati to nič ne pomeni, ker je igra nastavljena na čas, vendar če želite ustreči nasprotniku, bi morda želeli nadaljevati." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s je bil zavrjen s strani nasprotnika" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Nasprotniku lahko kasneje še enkrat pošljete ponudbo." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s je bil preklican s strani nasprotnika" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Nasprotnik si je premislil." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Ni mogoče sprejeti %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess ne more sprejeti ponudbe za %s. Verjetno zaradi neodločenosti." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s je sporočil napako" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Šahovski alfa 2 diagram" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Ni mogoče naložiti diagrama '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Položaj šaha" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Enostavni položaj šaha" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "Igra ne more biti prebrana do konca, ker je nastala napaka pri analizi premika %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Premik je spodletel zaradi %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Šahovska igra" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "proti" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Zamenjaj" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Datoteka že obstaja" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Datoteka '%s' že obstaja. Ali jo želite zamenjati?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Datoteka že obstaja v '%s'. Če jo zamenjate, bo vsebina prepisana." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Ni mogoče shraniti datoteke" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Napaka: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Ciljni strežnik je nedosegljiv" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Umrl" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Krajevni dogodek" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Krajevna stran" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Kmet" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Kralj" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "S" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Igra se je končala neodločeno" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s je zmagal" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s je zmagal" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Igra je bila prekinjena" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Igra je bila odložena" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Igra je bila preklicana" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Ker je bila enaka poteza ponovljena trikrat zaporedoma" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Ker zadnjih 50 potez ni prineslo ničesar novega" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Ker je obema igralcema potekel čas" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "Ker je %(mover)s v patu" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Ker sta se igralca sporazumela" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Zaradi razsodbe skrbnika" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Ker je igra prekoračila maksimalno dolžino" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Ker se je %(loser)s predal" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Ker je %(loser)s zmanjkalo časa" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Ker se je %(loser)s odjavil" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Ker je %(loser)s izgubil vse figure razen kralja" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Ker je igralec izgubil povezavo" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Ker je igralec izgubil povezavo in je drugi igralec zahteval odložitev" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "Zaradi vljudnosti igralca" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Ker je igralec odšel. Ni zmagovalca zaradi zgodnje faze igre" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Ker se je programnik igralca %(white)s prekinil" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Ker je povezava do strežnika prekinjena" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Neznan razlog" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Asimetrično naključen" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Na slepo" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Kot" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer naključna" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Konj prednosti" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Izgubarji" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Običajno" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Kmet prednosti" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Kmeti so zaobšli" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Pritisk kmetov" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Kraljica prednosti" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Naključen" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Trnjava prednosti" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Zgoraj navzdol" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Niste še pričeli s pogovorom" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Samo registrirani uporabniki se lahko pogovarjajo v tej sobi" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Ni izbranega pogovora" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Nalaganje igralčevih podatkov" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Več sob" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Več igralcev" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Pogovori" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Informacije o pogovorih" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Ponudi revanšo" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Igraj revanšo" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Razveljavi eno potezo" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Razveljavi dve potezi" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Igra naložena" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Shranjena igra" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Poslali ste ponudbo za neodločenost" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Programnik, %s, se je prekinil" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess je izgubil povezavo s programnikom, verjetno zato, ker je bil prekinjen.\n\nPoskusiš lahko zagnati novo igro s programnikom ali poskusi igrati z novim." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "proti" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Skoči na začetni položaj" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Korak nazaj za eno potezo" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Korak naprej za eno potezo" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Skoči na zadnji položaj" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess ni mogel naložiti vaših nastavitev pulta" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Vaše nastavitve pulta so bile ponastavljene. Če se ta težava ponavlja, prijavite težavo razvijalcem programa" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gost" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Popravite potezo ali začnite igrati s tem, kar se da prebrati" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Odpri igro" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Shrani igro" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Vse datoteke" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Samodejno zaznaj vrsto" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Vse šahovske datoteke" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Neznana vrsta datoteke '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "'%(uri)s' ni mogoče shraniti, PyChess verjetno ne pozna vrste '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Datoteke '%s' ni mogoče shraniti" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Nimate ustreznih pravic za shranjevanje datoteke.\nProsimo, preverite, če ste določil pravo pot in poskusite znova." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess ne more shraniti igre" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Obstaja %d iger z neshranjenimi potezami." msgstr[1] "Obstaja %d igra z neshranjenimi potezami." msgstr[2] "Obstajata %d igri z neshranjenimi potezami." msgstr[3] "Obstajajo %d igre z neshranjenimi potezami." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Želite shraniti poteze pred zapiranjem?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Shrani %d dokumentov" msgstr[1] "_Shrani %d dokument" msgstr[2] "_Shrani %d dokumenta" msgstr[3] "_Shrani %d dokumente" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Želite shraniti igro preden jo zaprete?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Če je sedaj ne shranite,\nkasneje ne bo mogoče nadaljevati igre." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Okno informacij PyChess" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "od" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Človeško bitje" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Naglo" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minut:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Dodatek:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d sek/potezo" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d sek/potezo" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Neenako" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Vnesi igro" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Odpri zvočno datoteko" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Brez zvoka" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Pisk" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Izberi zvočno datoteko ..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Neopisan pult" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Novo igro lahko pričnete z Igra > Nova igra, v oknu Nova igra, kjer lahko izberete Igralce, Nadzor časa in Različice šaha." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Izberete lahko 8 različnih stopenj težavnosti za igro proti računalniku." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "Različice šaha so kot figure zadnje vrstice, ki bodo nastavljene na ploščo." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "Za shranitev igre pritisnite Igra > Shrani igro kot, dodelite ime datoteke in izberite, kam želite igro shraniti. Na dnu izberite vrsto pripone datoteke in pritisnite Shrani." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "Ali ste vedeli, da lahko sporočite padec zastavice, ko je nasprotniku potekel čas z Dejanja > Sporoči padec zastavice?" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "S pritiskom na Ctrl+Z lahko prosite nasprotnika za povrnitev potez." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Za igranje v Celozaslonskem načinu pritisnite F11. Za vrnitev ponovno pritisnite F11." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "Svetovalni način analizira vašo igro. Omogočite ga lahko s Ctrl+H." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Vohunski način analizira nasprotnikovo igro. Omogočite ga lahko s Ctrl+Y." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "Šah lahko igrate s poslušanjem zvokov igre. Izberite Nastavitve > Možnosti > Zvoki in omogočite Uporabi zvoke v PyChess in izberite želene zvoke." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Ali ste vedeli, da lahko pomagate prevesti PyChess v svoj jezik? Izberite Pomoč > Prevedi PyChess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Ali ste vedeli, da je šahovsko igro končati v samo dveh potezah?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Ali ste vedeli, da število možnih šahovskih iger presega število elementov v vesolju?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Klic" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Klic šaha" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Neuradna soba %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "poteza potrebuje figuro in notacijo" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "zavzeta notacija (%s) je nepravilna" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "in" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "neodločen" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "matira" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "postavi nasprotnika v šah" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "izboljša kraljevo varnost" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "neznatno izboljša kraljevo varnost" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "premakne trnjavo na odprti stolpec" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "premakne trnjavo na polovico odprtega stolpca" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "premakne tekača na bok: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "poviša kmeta v %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "zavrže" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "povrne material" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "žrtvuje material" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "zamenja material" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "zavzame material" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "reši %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "preti nad zmago materiala z %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "poveča pritisk na %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "brani %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "pritisne na nasprotnika %(oppiece)s z %(piece)s pri %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Beli ima novo figuro v postojanki: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Črni ima novo figuro v postojanki: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s ima mimohodnega kmeta na %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "napol odprt" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "v %(x)s%(y)s datoteki" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "v %(x)s%(y)s datotekah" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s je dobil dvojnega kmeta %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s je dobil novega dvojnega kmeta %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s je dobil izolirane kmete v datoteki %(x)s" msgstr[1] "%(color)s je dobil izoliranega kmeta v datoteki %(x)s" msgstr[2] "%(color)s je dobil izolirana kmeta v datoteki %(x)s" msgstr[3] "%(color)s je dobil izolirane kmete v datoteki %(x)s" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s premakne kmeta v formacijo kamnenega zidu" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s ne more več narediti rokade" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s ne more več narediti rokade na kraljičino stran" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s ne more več narediti rokade na kraljevo stran" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s je ujel tekača na %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "razvije kmeta: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "približa kmeta zadnji vrstici: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "približa %(piece)s nasprotnemu kralju: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "razvije %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "premakne %(piece)s bolj živahno: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Beli bi moral napasti z desne" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Črni bi moral napasti z leve" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Beli bi moral napasti z leve" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Črni bi moral napasti z desne" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Črni ima precej utesnjen položaj" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Črni ima delno utesnjen položaj" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Beli ima precej utesnjen položaj" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Beli ima delno utesnjen položaj" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Uradni PyChess pult." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Otvoritvena knjiga" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Otvoritvena knjiga vas bo skušala navdušiti med odpiralno fazo igre s tem, da vam bo prikazala običajne poteze šahovskih mojstrov" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Pogovor" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Pogovorni pult vam omogoča sporazumevanje z nasprotnikom med igro, ob predpostavki, da le-ta želi pogovor" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Komentarji" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Pult komentarjev bo poskušal analizirati in razložiti igrane poteze" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Začetni položaj" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s prestavi %(piece)s na %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Zgodovina potez" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "Preglednica premikov sledi igralčevim potezam in vam omogoča krmariti med igralno zgodovino" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Izid" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "Pult rezultatov poskuša ovrednotiti položaj in prikazati graf poteka igre" pychess-0.12beta3/lang/ja/0000755000175000017470000000000012176727272014417 5ustar tamasuserspychess-0.12beta3/lang/ja/LC_MESSAGES/0000755000175000017470000000000012176727272016204 5ustar tamasuserspychess-0.12beta3/lang/ja/LC_MESSAGES/pychess.po0000644000175000017470000020574512161415524020223 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. # Masato Mukoda , 2012. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: Masato Mukoda \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - インターネットチェスに接続" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "パスワード(_P)" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "名前(_N)" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "ゲストとしてログオン(_G)" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "サインアップ(_I)" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "超早指し:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "標準:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "早指し:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 分" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "白" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "変則チェス" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "オプション" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "同意(_A)" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "拒否(_D)" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "レイティング" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "プレイヤーの一覧(_P)" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "ゲームの一覧(_G)" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "投了(_E)" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "プレビュー(_V)" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "ニュース" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "チャットの表示(_C)" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "ログオフ(_L)" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "ツール" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "前へ(_P)" #: glade/findbar.glade:132 msgid "_Next" msgstr "次へ(_N)" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "新ゲーム" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "ゲームの開始(_S)" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "黒番(_B):" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "白番(_W):" #: glade/newInOut.glade:336 msgid "Players" msgstr "プレイヤー" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "昇進" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "クイーン" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "ルーク" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "ビショップ" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "ナイト" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "ゲームデータ" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "アナライザを使用(_A)" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "アナライザはバックグラウンドで動作し、ゲームを分析します。 これはヒントモードを動作させるのに必要です" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "アンインストール" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "サイドパネル(_P)" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "テーマ" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "ゲーム(_G)" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "新ゲーム(_N)" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "ゲームの読み込み(_L)" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "最近のゲームの読み込み(_R)" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "ゲームの保存(_S)" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "ゲームを別名で保存(_A)" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "盤面の回転(_R)" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "PyChessを終了" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "保存せずに閉じる(_W)" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "ゲームの開始(_S)" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "ゲストとしてログオン(_U)" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "FICSに接続する(_C)" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "ようこそ" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "サーバに接続中" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "サーバにログオン中" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "環境の設定中" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "オンライン" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "オフライン" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d 分" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d 秒" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "接続エラー" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "ログオンエラー" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "自動ログアウト" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "60 分以上動作が無かったためログアウトしました" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " 分" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "対戦相手のレイティング" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "白番" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "黒番" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "投了" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "ポーン" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "キング" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "分" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "秒" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "ゲームを開く" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "ゲームの保存" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "ヒント" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "チャット" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "コメント" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/nl/0000755000175000017470000000000012176727272014436 5ustar tamasuserspychess-0.12beta3/lang/nl/LC_MESSAGES/0000755000175000017470000000000012176727272016223 5ustar tamasuserspychess-0.12beta3/lang/nl/LC_MESSAGES/pychess.po0000644000175000017470000022011212161415524020223 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess zoekt nu naar uw grafische stuurprogramma's. Even geduld alstublieft." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - verbinden met internetschaak" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Titel" #: glade/fics_logon.glade:70 msgid "text" msgstr "tekst" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Verbinding maken met FICS (Free Online Chess Server)" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Wachtwoord:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Naam:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Aanmelden als _gast" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Poo_rten:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Reg_istreren" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Uitdaging: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Uitdaging versturen" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Uitdaging:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Bliksem:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standaard:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Blitz:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer willekeurig, zwart" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sec/zet, Wit" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Verzoek bewerken" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Zonder tijdslimiet" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minuten: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Voordeel: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Tijd controle: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standaard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Tijd controle:" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Maakt niet uit" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Uw sterkte: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Blitz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Sterkte tegenstander: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centrum:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerantie:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Verberg" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Sterkte tegenstander" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Wit" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Zwart" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Uw kleur" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Speel met de normale schaakregels" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Speel" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Schaakvariant" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Gerateerd spel" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Tegenstander handmatig accepteren" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opties" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - internetschaak: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Accepteren" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Random, 1800↓, zwart" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sec/zet, 1400↑, wit" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, handmatig" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Verzoek versturen" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Verzoek aanmaken" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Verzoeken/ Uitdagingen" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Ranglijst" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tijd" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Uitdagings_grafiek" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Spelers Gereed" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Daag uit" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Start Privéchat" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "S_pelerslijst" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Spellenlijst" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Bied he_rvatten aan" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Over_geven" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "_Remise voorstellen" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Bied A_fbreken aan" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "_Voorvertoning" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Uitgesteld" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nieuws" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Toon _Chat" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "Uit_loggen" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Extra's" #: glade/findbar.glade:7 msgid "window1" msgstr "venster1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 van 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Vorige" #: glade/findbar.glade:132 msgid "_Next" msgstr "Volge_nde" #: glade/findbar.glade:161 msgid "Search:" msgstr "Zoek:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nieuw spel" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Spel starten" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "Zwarte speler(_B)" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Witte speler" #: glade/newInOut.glade:336 msgid "Players" msgstr "Spelers" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:\t 5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Snel:\t15 min + 10 sec/zet" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normaal:\t40 min + 15 sec/zet" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "S_peel Normaal schaak" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Speel Fischer Willekeurig schaak" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Speel Verliezersschaak" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Open Spel" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Startpositie" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Spelnotatie invoeren" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promotie" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dame" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Toren" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Loper" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Paard" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Pion naar wat promoveren?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Schaakspel voor de Gnome desktop" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "Dit Programma is vrije software; U kunt het verspreiden en/of wijzigen onder debepalingen van de GNU Algemene Publieke Licentie, zoals uitgegeven door de FreeSoftware Foundation; oftewel versie 2 van de Licentie,of (naar vrije keuze) een latere versie. Dit Programma is verspreid met de hoop dat het nuttig zal zijn maar ZONDER EENDER WELKE GARANTIE; zelfs zonder de impliciete garantie van VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU AlgemenePublieke Licentie voor meer details.U zou een kopie van de GNU Algemene Publieke Licentie ontvangen moeten hebben samen met dit Programma; indien dit niet zo is, schrijf naarde Free Software Foundation, Inc.,59 Temple Place, Suite 330, Boston, MA 02111-1307 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Spelinformatie" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Evenement:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Locatie:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Ronde:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Speldata" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Speldatum" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Voorkeuren" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "De getoonde naam van de eerste menselijke speler, bijv. Jan." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Naam van de eerste menselijke speler:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "De getoonde naam van de gastspeler, bijv. Marie" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Naam van de tw_eede menselijke speler:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Tabs verbergen wanneer er maar één spel gespeeld wordt" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Auto_roteer het bord naar de huidige menselijke speler" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Algemene schermopties" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Geen _animatie" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Gebruik nooit animaties. Gebruik dit op langzamere computers." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animatie" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "_Analyse gebruiken" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "_Omgekeerde analyse gebruiken" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analyseren" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Verwijderen" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Ac_tief" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Geluiden gebruiken in PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Een speler _schaak staat:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Een speler een _zet doet:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Spel _remise is:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Spel _verloren is:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Spel _gewonnen is:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Een speler een stuk _slaat:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Spel _opgesteld is:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Geobserveerde zetten:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Geobserveerde _eindes:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Geluid spelen als..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Spel" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nieuw spel" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Speel _Internetschaak" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Spel laden" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Stel positie in" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Voer spel_notatie in" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "Spel _opslaan" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Spel opslaan _als" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Spelers_ranglijst" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Acties" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Bied _afbreken aan" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Bied _pauze aan" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "Vlag _claimen" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Vraag o_m te zetten" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "Beel_d" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Bord draaien" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Schermvullend" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Schermvullend verlaten" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "Toon zijpanelen" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Logboek" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Hintmodus" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Sp_ionmodus" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Hulp" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Over schaken" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Hoe te spelen" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Vertaal PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Tip van de dag" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Sluit Pychess af" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Sluiten _zonder opslaan" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://nl.wikipedia.org/wiki/Schaken" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://www.chessvariants.com/d.chess/chess-dutch.html" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "De verbinding is verbroken - heb \"end of file\" bericht gekregen" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' is geen geregistreerde naam" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Geen ranglijst" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Ranglijst" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Verbindingsfout" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Aanmeldfout" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "De verbinding is afgesloten" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-mail" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Online" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "in totaal" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Bezig met verbinden" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Onbekend" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Nu registreren" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Naam" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Type" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Klok" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Snel" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Supersnel" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Witte Speler" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Zwarte Speler" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Speltype" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Tegenstander" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Uw tegenstander heeft geen tijd te weinig." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Uw tegenstander vraagt u om haast te maken!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "In het algemeen betekent dit niets, het spel is immers op tijd gebaseerd, maar als u uw tegenstander een plezier wilt doen dan kunt u dit doen." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s werd geweigerd door uw tegenstander" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "U kunt proberen om het voorstel later in het spel opnieuw te sturen." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s werd teruggetrokken door uw tegenstander" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Kon %s niet accepteren" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess kon het %s voorstel niet geaccepteerd krijgen. Waarschijnlijk is het voorstel teruggetrokken." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s geeft een foutmelding" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Schaakpositie" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Simpele schaakpositie" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Schaakspel" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Vervangen" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Bestand bestaat al" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Een bestand met de naam '%s' bestaat al. Wilt u het vervangen?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Het bestand bestaat al in '%s'. Als u het vervangt, zal de inhoud overschreven worden." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Kon het bestand niet opslaan" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "De foutmelding was: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Lokaal evenement" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Lokaal" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Q" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Het spel is geëindigd in remise" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Het spel is gestopt" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Het spel is uitgesteld" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Het spel is afgebroken" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normaal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Geladen spel" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Opgeslagen spel" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "u een remisevoorstel heeft gedaan" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Schaakcomputer, %s, is gestopt" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess heeft de verbinding met de schaakcomputer verloren, waarschijnlijk omdat deze gestopt is.\n\nU kunt proberen een nieuw spel te starten met deze computer of later te spelen tegen een andere." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "tegen" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gast" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Spel openen" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Spel opslaan" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Alle bestanden" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Type automatisch detecteren" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Alle schaakbestanden" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Onbekend bestandstype '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Kon bestand '%s' niet opslaan" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "U hebt niet de benodigde rechten om het bestand op te slaan. Zorg dat u de juiste locatie opgeeft en probeer het opnieuw." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess kon het spel niet opslaan" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Huidige spel opslaan voordat u het afsluit?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Het is niet mogelijk om het spel later \ndoor te spelen, als u het niet opslaat." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Mens" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minuten:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Extra:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Spelinvoer" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Geluidsbestand openen" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Geen geluid" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Piep" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Geluidsbestand selecteren..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "geeft remise" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "geeft schaakmat" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "zet tegenstander schaak" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "vergroot de veiligheid van de koning" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "vergroot de veiligheid van de koning enigzins" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "plaatst een loper naar een open lijn" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "plaatst een loper naar een halfopen lijn" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "plaatst de loper in fianchetto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promoveert een pion naar een %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "rokeert" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "verovert stukken terug" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "offert stukken op" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "wisselt stukken uit" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "verovert stukken" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "vergroot de druk op %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "verdedigt %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Wit heeft een nieuw stuk in outpost: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Zwart heeft een nieuw stuk in outpost: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s plaatst pionnen in Stonewall-formatie" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "brengt een pion dichter bij de achterrij: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Wit zou een pionnenstorm over rechts moeten doen" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Zwart zou een pionnenstorm over links moeten doen" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Wit zou een pionnenstorm over links moeten doen" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Zwart zou een pionnenstorm over rechts moeten doen" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Zwart heeft een nogal verkrampte positie" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Zwart heeft een enigzins verkrampte positie" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Wit heeft een nogal verkrampte positie" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Wit heeft een enigzins verkrampte positie" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Openingenboek" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Commentaar" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Uitgangspositie" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Notatie" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Score" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/gl/0000755000175000017470000000000012176727272014427 5ustar tamasuserspychess-0.12beta3/lang/gl/LC_MESSAGES/0000755000175000017470000000000012176727272016214 5ustar tamasuserspychess-0.12beta3/lang/gl/LC_MESSAGES/pychess.po0000644000175000017470000022451312161415524020225 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess está a buscar os eus motores. Agarde." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Título" #: glade/fics_logon.glade:70 msgid "text" msgstr "texto" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Conectar ao servidor Free Online Chess" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Contrasinal:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nome:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Entrar como _convidado" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rtos:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Re_xistro" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Desafío: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Enviar desafío" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Desafío:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Iluminación:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Estándar:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Partida rápida:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer Random, negras" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 seg/mov, nrancas" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Editar buscas" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Sen tempo" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minutos: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Control de tempo: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Estándar" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Control de tempo" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Non te preocupes" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "A súa mestría: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Partida rápida)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Mestría do opoñente: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Cando este botón está no estado «bloqueado», a relación\nentre a mestría do opoñente e a súa propia forza será\npreservada cando:\na) cambia a súa propia cualificación para o tipo de partida\nb) vostede cambia a variación do control de tempo" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centro:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerancia:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Agochar" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Mestría do opoñente" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Brancas" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Negras" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "A súa cor" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Xogar coas regras normais do xadrez" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Xogar" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Variante do xadrez" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Partida cualificada" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Aceptar manualmente ao opoñente" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opcións" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Limpar buscas" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Aceptar" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Random, 1800↓, negras" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sec/mov, 1400 ↑, brancas" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, manual" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Enviar busca" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Crear busca" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "Bu_scas / Desafios:" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Cualificación" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tempo" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "_Gráfico de buscas" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 xogadores listos" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Desafío" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Lista de _xogadores" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Lista de _partidas" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Ofrecer _reanudar" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Ofrecer _táboas" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "_Vista previa" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Aprazar" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Novas" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Amosar _conversa" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Pechar sesión" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Ferramentas" #: glade/findbar.glade:7 msgid "window1" msgstr "xanela1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 de 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Anterior" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Seguinte" #: glade/findbar.glade:161 msgid "Search:" msgstr "Buscar:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nova partida" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Iniciar Partida" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "Xogador _negras:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "Xogador _brancas:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Xogadores" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Partida rápida:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rápida:\t15 min + 10 seg/mov" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40 min + 15 seg/mov" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Xogar xadrez normal" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Xogar xadrez Fischer Random" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Partida aberta" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Posición inicial" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Intoducir notación da partida" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promoción" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Raíña" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torre" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Alfil" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Cabalo" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "A que promove o peón?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Cliente de xadrez para o escritorio do Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Información da partida" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Actividade:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Sitio web:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Ronda:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Datos da partida" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Data da partida" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferencias" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Nome a amosar para o primeiro xogador humano, p.ex., Xoán." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Nome do _primeiro xogador humano:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Nome a amosar para o xogador convidado, p.ex., María" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Nome do _segundo xogador humano:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Agochar lapelas cando só hai un xogo aberto" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Se se activa, agóchase a lapela da parte superior da xanela cando non se precisa." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "_Rotar automaticamente o taboleiro cara ao xogador humano actual" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Se se selecciona, o taboleiro xirará tras cada movemento, para amosar a vista natural do xogador actual." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Modo de vista \"Cara a cara\"" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Se se selecciona, as pezas negras estarán boca abaixo, axeitado para xogar contra amigos en dispositivos móbeis." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Amosar coordenadas" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Mellor figuras nas anotacións" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Opcións xerais de visualización" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "Animación completa do taboleiro" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animar pezas, rotar taboleiro e máis. Usar es máquinas rápidas." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animar soamente movementos." #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Animar so movementos de pezas." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Sen animación" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Non usar nunca animación. Usar en máquinas lentas." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animación" #: glade/PyChess.glade:1264 msgid "_General" msgstr "Xeral" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Usar analizador" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Usar analizador inverso" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analizando" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Desinstalar" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Ac_tivar" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Paneis laterais instalados" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Paneis laterais" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "Usar sons en PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "_Movementos dun xogador:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Partida en _táboas:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Partida perdida:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Partida gañada:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Movementos observados:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Finais observados:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Facer sonar son cando.." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "Sons" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Partida" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nova Partida" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Xogar xadrez na _rede" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Cargar partida" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Introducir _notación da partida" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Gardar partida" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Gardar _como..." #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Cualificación do xogador" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Accións" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Ofrecer i_nterromper" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Ofrecer a_prazamento" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Ofrecer _pausa" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Ofrecer _desfacer" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Chamar bandeira" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Pedir que _mova" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Ver" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Rotar taboleiro" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Pantalla completa" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Saír da _pantalla completa" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Amosar controis laterais" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Rexistrar a vista" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Modo agochado" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Modo es_pía" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Axuda" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Sobre do xadrez" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Cómo xogar" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Traducir PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Consello do día" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Saír de PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Pechar sen gardar" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "Gardar %d documentos" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Hai %d xogos sen cambios gardados. Quere gardar os cambios antes de saír?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Selecciona as partidas que queres gardar:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Se non garda, os novos cambios perderanse definitivamente." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "Adversario:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "A túa cor:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "Comezar partida" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Entrar como hóspede" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Identificador" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "Conectar a FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Consello do día" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Amosar consellos ao iniciar" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://en.wikipedia.org/wiki/Chess" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Benvido/a" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Perdeuse a conexión - ver mensaxe" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' non é un nome rexistrado" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "O contrasinal enviado non é válido.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Conectando co servidor" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Iniciando sesión no servidor" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Preparando entorno" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Conectado" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Desconectado" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Sen cualificar" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privado" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Erro na conexión" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Erro ó iniciar sesión" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Pechouse a conexión" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Erro no enderezo" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Peche automático de sesión" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Pechouse a túa sesión porque estiveches ausente máis de 60 minutos" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Gañar" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Táboas" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Perder" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Email" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Gasto" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "conectado en total" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Conectando" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Descoñecido" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Actualmente accedeu como hóspede.\nUn hóspede non pode xogar partidas de cualificación, e por tanto a oferta de xogos será menor." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Rexistrarse" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nome" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tipo" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Reloxo" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Buscas activas: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec) seg" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Partida rápida" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Lóstrego" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Xogador brancas" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Xogador negras" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipo de Xogo" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Xogos en proceso: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Adversario" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Data/Hora" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Reto: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Esta opción non é aplicábel xa que está a desafiar a un xogador" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Editar busca: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manual" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Non pode xogar partidas cualificadas xa que entrou como hóspede" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Non pode xogar partidas cualificadas xa que está seleccionada a opción «Sen tempo», " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "e en FICS, as partidas sen tempo non se puntúan" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Esta opción non está dispoñible porque estás a retar a un invitado, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "e os convidados non poden xogar partidas cualificadas" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Outros" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Non podes seleccionar unha variante xa que está marcado «Sen tempo», " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "e en FICS, as partidas sen tempo teñen que seguir as regras normais do xadrez" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Tolerancia ó cambio" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrador" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Conta" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Conta de equipo" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Usuario sen rexistrar" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Director de torneo" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Gran Mestre" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Mestre Internacional" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "A" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "O opòñente ofreceulle táboas. Acepta?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "O adversario quere abortar a partida. Aceptas?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "O adversario quere aprazar a partida. Aceptas?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "O teu adversario quere desfacer %s movemento(s). Aceptas?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "O teu adversario quere facer unha pausa na partida. Aceptas?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "O seu opoñente quere reanudar o xogo. Acepta?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "A oferta de táboas" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "A oferta de abortar" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "A oferta de táboas" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "A oferta de pausa" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "A oferta de reanudación" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "O oferta de intercambiar lado" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "rechazada" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "ofrecer táboas" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "ofrecer abortar" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "ofrecer aprazamento" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "ofrecer unha pausa" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "ofrecer a reanudación" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "ofrecer intercambiar lados" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "pedirlle ó adversario que mova peza" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "O teu advesario non finalizou o tempo." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "O reloxo non se iniciou aínda." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Non podes intercambiar cores durante a partida." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Intentaches desfacer demasiados movementos." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "O teu adversario quere que apures!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Podes enviarlle outra vez a oferta o teu adversario máis tarde." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "O teu adversario debeu cambiar de parecer." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s devolveu un erro" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Non se puido cargar o diagrama '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Posición do xadrez" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "O movemento fallou porque %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Partida de xadrez" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "vs." #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "O ficheiro xa existe" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Non se puido gardar o arquivo" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "O erro foi: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Evento local" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Peón" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Rei" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "C" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Ra" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "Re" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "A partida quedou en táboas" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s gaña a partida" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s gaña a partida" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Finalizouse a partida" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Aprazouse a partida" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Abortouse a partida" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Porque os últimos 50 movementos non aportaron nada novo" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Xa que ambos xogadores quedaronse sen tempo" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Xa que os xogadores o acordaron" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Por decisión dun administrador" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Xa que o xogo superou o duración máxima" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Porque o %(loser)s se retirou" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Porque o %(loser)s se quedou sen tempo" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Xa que o %(loser)s se desconectou" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Xa rque o %(loser)s perdeu todas as pezas e o rei" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Xa que un xogador perdeu a conexión" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "Por cortersía dun xogador" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Porque se perdeu a conexión ó servidor" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Descoñécese a razón" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Aleatorio" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Non abriches ningunha conversa aínda." #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Só os usuarios rexistrados poden falar por este canle" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Non se seleccionou ningunha conversa" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Cargando información do xogador" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Máis canles" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Máis xogadores" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Conversas" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Información da conversa" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Ofrecer revancha" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Xogar revancha" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Desfacer un movemento" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Desfacer dous movementos" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Partida cargada" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Partida gardada" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Enviou unha oferta de táboas" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "O motor, %s, morreu" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Saltar á posición inicial" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Retroceder un movemento" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Avanzar un movemento" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Saltar a última posición" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess foi incapaz de cargar o teu panel de ferramentas" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Hóspede" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Abrir partida" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Gardar partida" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Todos os Ficheiros" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Detectar tipo automaticamente" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Tódolos arquivos de xadrez" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Tipo de arquivo descoñecido '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Foi imposible gardar o arquivo '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess non puido gardar a partida" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Gardar movementos antes de pechar?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Gardar a partida actual antes de pechala?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Xanela de Información de PyChess" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "de" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Ser humano" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Rápida" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutos:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Beneficio:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d seg/mov" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d seg/mov" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Probabilidades" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Introducir partida" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Abrir Arquivo de Son" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Silencio" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Beep" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Seleccionar arquivo de son..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Canle non oficial %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "o movemento necesita unha peza e unha coordenada" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "e" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "táboas" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "mellora a seguridade do rei" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "mellora lixeiramente a seguridade do rei" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promover un Peón a %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "incrementa a presión en %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "defende %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Panel Oficial de PyChess" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Abrindo Libro" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Chat" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "O panel de conversas permítelle comunicarse co seu opoñente durante a partida, sempre que el/ela queira" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Comentarios" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "O panel de comentario tratará de analizar e explicar os movementos realizados" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Posición Inicial" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Historial de movementos" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Puntuación" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "O panel de puntuación trata de avaliar as posicións e amosache un gráfico do progreso da partida" pychess-0.12beta3/lang/es/0000755000175000017470000000000012176727272014434 5ustar tamasuserspychess-0.12beta3/lang/es/LC_MESSAGES/0000755000175000017470000000000012176727272016221 5ustar tamasuserspychess-0.12beta3/lang/es/LC_MESSAGES/pychess.po0000644000175000017470000025053412161415524020234 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Adolfo Jayme Barrientos , 2012. # , 2013. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: karv \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess está buscando sus motores de ajedrez. Por favor, espere." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Conectar a servidor de ajedrez en internet" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Título" #: glade/fics_logon.glade:70 msgid "text" msgstr "texto" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Conectar al Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Contraseña:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nombre:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Conectarse como _invitado" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Pue_rtos:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Darse de alta" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Desafío: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Enviar desafío" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Desafío:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Relámpago" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Estándar" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Partidas rápidas (blitz)" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "Aleatorio Fisher, 2 minutos, negras" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 minutos + 6 seg/movimiento, blancas" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Editar búsqueda" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Sin cronometrar" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minutos: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Ganancia: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Control de tiempo: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Estándar" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Control de tiempo" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "No les importa" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Su fuerza: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Bliz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Fuerza del oponente: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Mientras este botón esté en el estado «bloqueado», la relación entre\n«la fuerza del oponente» y «su fuerza» será preservada mientras\na) su calificación para el tipo de juego buscado ha cambiado\nb) cambie la variante o el control de tiempo" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centro:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerancia" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Esconder" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Fuerza del oponente" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Blancas" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Negras" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Su color" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Jugar según reglas normales del ajedrez" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Jugar" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Variante" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Juego clasificado" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Aceptar oponente manualmente" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opciones" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Ajedrez en Internet: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "Limpiar búsquedas" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Aceptar" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Declinar" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Random, 1800↓, Negras" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 seg/mov, 1400↑, Blancas" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "min, 1200-1800, Manual" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Enviar búsqueda" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Crear búsquedas" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "Búsquedas/Desafíos" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Calificación" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tiempo" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Busque Gráfico" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Jugadores Preparados" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Desafío" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Observar" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Iniciar Chat Privado" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Lista de jugadores" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Lista de partidas" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Ofrecer_Continuar" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Rendirse" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Ofrecer _empate" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "A_bortar oferta" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Pre_visualizar" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Aplazado" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Noticias" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Mostrar _charla" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "Mostrar consola" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "Desconectarse" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Herramientas" #: glade/findbar.glade:7 msgid "window1" msgstr "ventana1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 de 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Anterior" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Siguiente" #: glade/findbar.glade:161 msgid "Search:" msgstr "Buscar:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nueva partida" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Empezar partida" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Jugador negras:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Jugador blancas:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Jugadores" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "Sin" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Relámpago:\t5 minutos" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rápida:\t15 minutos + 10 seg/movimiento" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40 minutos + 15 seg/movimiento" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Partida normal de ajedrez" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Jugar partida Aleatoria Fisher" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Abrir partida" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Posición inicial" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Introduzca la notación del juego" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Coronar" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Reina" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torre" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Alfil" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Caballo" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Coronar peón como" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Cliente de ajedrez para escritorio Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess es software libre; se puede redistribuir y/o modificar bajo los términos de la Licencia Pública General (GPL) de GNU como ha sido publicado por la Fundación de Software Libre; o bajo la segunda versión de la Licencia, o (por tu decisión) cualquier versión posterior.\n\nPyChess se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA ALGUNA; aun sin la garantía mencionada de MERCANTABILIDAD o IDONEIDAD PARA ALGÚN PROPÓSITO PARTICULAR. Véase la Licencia Pública General (GPL) de GNU para más detalles.\n\nDebía de haber recibido una copia de la Licencia Pública General de GNU junto con PyChess; si no la recibió, escriba a la Fundación Software Libre, Inc.,\n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Información de la partida" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Evento:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Lugar:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Ronda:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Datos de la partida" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Fecha de la partida" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferencias" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "El nombre que se mostrará del primer jugador humano, por ejemplo, Juan." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Nombre del _primer jugador humano:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "El nombre que se mostrará del jugador invitado, por ejemplo, María." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Nombre del _segundo jugador humano:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Ocultar pestañas solo cuando un juego está abierto" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Activado, esconde la pestaña superior de la ventana de juego cuando no es necesaria." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Orientar tablero al jugador humano actual" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Activado, el tablero girará tras cada jugada ofreciendo al jugador actual su vista natural." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Disposición Cara a Cara" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Activado, las piezas negras se muestran boca abajo. Adecuado para jugar en dispositivos móviles." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Mostrar coordenadas" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Activado, muestra encabezados de filas y columnas. Son útiles para la notación." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Usar figuras en la_notación" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Activado, PyChess usará figuras para expresar los movimientos en vez de letras mayúsculas." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Opciones Generales de Visualización" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "Animación completa del tablero" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animación de piezas, rotación del tablero y otros. Usar en equipos rápidos." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animación completa" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Sólo animar movimiento piezas" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Sin animación" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Desactiva las animaciones. Usar en equipos lentos." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animación" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_General" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Usar _analizador" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "El analizador se ejecutará en segundo plano y analizará el juego. Esto es necesario para el funcionamiento del modo ayuda" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Usar _analizador invertido" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "El analizador inverso analizará el juego como si fuera el turno de tu oponente. Esto es necesario para el funcionamiento del modo espía" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analizando" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Desinstalar" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Activo" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Paneles laterales instalados" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Paneles laterales" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Temas" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Usar sonidos en PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Un jugador _jaquea:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Un jugador _mueve:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "La partida está _empatada:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "La partida está _perdida:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "La partida está _ganada:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Un jugador _captura:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "La partida está _establecida:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Movidas observadas:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Observados _finales:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Reproducir sonido cuando..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Sonidos" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Partida" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nueva partida" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Jugar ajedrez en internet" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Cargar partida" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "Cargar juego _reciente" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "Abrir base de _datos" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Posición" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Introducir Notación del _Juego" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Guardar partida" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Guardar partida _como" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "_Exportar posición" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Calificación del Jugador" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Acciones" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Ofrecer_abortar" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Ofrecer aplazamiento" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Ofrecer pausa" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Ofrecer_Deshacer" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Reclamar bandera" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Pedir_Movimiento" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Ver" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Girar el tablero" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Pantalla completa" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "_Cerrar_Pantalla completa" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Mostrar paneles laterales" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Visor de sucesos" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Modo ayuda" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Modo _espía" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "Ay_uda" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Acerca de Ajedrez" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Cómo jugar" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Traducir PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Consejo del día" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Salir de PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Cerrar _sin guardar" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Guardar %d documentos" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Hay %d juegos con movimientos sin guardar. ¿Guardar cambios antes de cerrar?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Seleccione el juego que desea guardar:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Si no se guardan, los cambios en los juegos se perderán." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Oponente:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Su color" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Empezar partida" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Iniciar sesión como invitado" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Ma_nejar:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Conectar a FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Consejo del día" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Mostrar consejos al inicio" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://es.wikipedia.org/wiki/Ajedrez" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://es.wikipedia.org/wiki/Reglas_del_ajedrez" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Bienvenido/a" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "Id" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "B Elo" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "N Elo" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "Resultado" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "Evento" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "Sitio" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "Ronda" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "Fecha" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "Base de datos de jugadas de PyChess" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "La conexión fue fallida - se obtuvo el mensaje «fin de archivo»" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "«%s» no es un nombre registrado" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "La contraseña introducida no es válida.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Conectando al servidor" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Iniciando sesión con el servidor" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Preparando entorno" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "En línea" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Desconectado" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Disponible" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Jugando" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Inactivo" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "Examinando" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "No Disponible" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "Corriendo un Match simultáneo" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Sin calificación" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Calificado" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privado" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d seg" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Error de conexión" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Reportar cuando Error" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "La conección se cerró" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Error en la dirección" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Terminar conexión automáticamente" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Ha sido desconectado por inactividad durante más de 60 minutos" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Victoria" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Empate" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Derrota" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "En FICS, su clasificación \"Libre\" abarca todas las siguientes variantes:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Sanciones" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Correo Electrónico" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Gastado" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "total en conectados" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Conectando" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Desconocido" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Se ha conectado como invitado.\nNo puede jugar partidas clasificadas, por tanto la ofertas será menor." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registrarse ahora" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nombre" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tipo" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Reloj" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Búsqiedas activas: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s seg" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Aceptar Reto" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Declinar Reto" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Ignorar Reto" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s seg" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "Rating del Adversario" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Aceptar Manualmente" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Carga" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Relámpago" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Salvaje" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Estado" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Jugadores: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Jugador Blanco" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Jugador Negro" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipo de juego" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Juegos en curso: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Su Color" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Oponente" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "Está Conectado" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Control del Tiempo" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Fecha/Hora" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s es %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "Solicitar Continuar" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "Examinar Juego Aplazado" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "No Hacer Nada" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "El botón de la cadena está desactivado porque ha entrado como invitado. Los invitados no pueden establecer clasificaciones, y el estado del botón no tiene efecto cuando no hay \"Fortaleza del Oponente\" a la que fijarse" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Desafío: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Esta opción no está disponible ya que está desafiando a un jugador" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Editar búsqueda: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d sec/move" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manual" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "No puede jugar partidas clasificadas como invitado" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "No puede jugar partidas clasificadas al estar activado \"Sin tiempo\", " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "y en FICS, las partidas \"Sin tiempo\" no pueden clasificarse" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Esta opción no se encuentra disponible ya que está desafiando a un invitado, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "y éstos no pueden jugar partidas clasificadas" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Desplazado" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Otras" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "No puede seleccionar una variante al estar activado \"Sin tiempo\", " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "y en FICS, las partidas sin tiempo deben ajustarse a las regals normales del ajedrez" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Cambiar Tolerancia" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr " ha declinado el reto." #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "Examinado" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrador" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Cuenta a ciegas" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Cuenta del computador" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Cuenta del equipo" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Ususario no registrado" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Consejero de ajedrez" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Servicio de Represntación" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Director de Torneo" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Gestor Mamer" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Gran Maestro" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Maestro Internacional" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "Maestro FIDE" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Gran maestra" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Maestra internacional" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "Cuenta Falsa" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "A" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Su oponente le ofrece tablas. ¿Acepta?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Su oponente le ha ofrecido tablas. Si acepta, el juego concluirá con puntuación 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Su oponente quiere abortar la partida. ¿Acepta?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Su oponente la ha solicitado abortar la partida. Si acepta, el juego concluirá sin cambios en la clasificación." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Su oponente desea aplazar la partida. ¿Acepta?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Su oponente le ha solicitado aplazar la partida. Si acepta, la partida quedará aplazada y podrán retomarla más tarde (cuando su oponente esté conectado y ambos acuerden continuar)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Su oponente desea deshacer %s movimiento(s). ¿Acepta?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Su oponente le solicita deshacer los últimos %s movimiento(s). Si acepta, el juego continuará desde la posición anterior a los mismos." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Su oponente desea hacer una pausa en el juego. ¿Acepta?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Su oponente le ha solicitado hacer una pausa. Si acepta, el reloj se detendrá hasta que ambos jugadores acuerden continuar la partida." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Su oponente quiere continuar la partida. ¿Acepta?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Su oponente le ha solicitado continuar con la partida. Si acepta, el reloj volverá a ponerse en marcha desde donde se detuvo." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Se rinde" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "Reclamo de bandera" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "Se ofrecen tablas" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "Se ofrece abortar" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "Se ofrece aplazar" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "Se ofrece pausa" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "Se ofrece continuar" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "Se ofrece cambiar bandos" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "Se ofrece deshacer" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "Rendición" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "Reclamar la bandera al oponente" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "ofrecer tablas" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "ofrecer abortar" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "ofrecer aplazar" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "ofrecer una pausa" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "ofrecer continuar" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "ofrecer cambiar bando" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "ofrecer deshacer" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "pedir al oponente que mueva" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Tu oponente no está pasado de tiempo." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "El reloj no se ha puesto en marcha aún." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "No puede cambier de color durante el juego." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Ha intentado deshacer demasiados movimientos." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "¡Tu oponente te pide que te apures!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Generalmente no significa nada, ya que el juego se basa en tiempo, pero si quieres complacer a tu oponente, te deberías apresurar." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s fué declinado por tu oponente" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Puedes tratar de enviar de nuevo la oferta a tu oponente más tarde en el juego." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s fué retraído por tu oponente" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Su oponente parece haber cambiado de idea." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Imposibilitado de aceptar %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess no pudo hacer que la oferta %s fuera aceptada. Probablemente porque ha sido retraído." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s devuelve un error" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Diagrama Ajedrez Alfa 2" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "No se pudo cargar el diagrama '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "Base de datos de PyChess" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Posición" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Posición de Ajedrez Simple" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "La partida no puede leerse completa debido a un error en el análisis del movimiento %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "El movimiento falló a causa de %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Partida" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "Exportar posición" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "vs." #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Todos los archivos" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Imágenes" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Reemplazar" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "El archivo existe" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Ya existe un archivo con el nombre '%s'. ¿Deseas reemplazarlo?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "El archivo ya existe en '%s'. Si lo reemplazas, el contenido va a ser sobreescrito." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "No se pudo guardar el archivo" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "PyChess no pudo exportar la posición" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "El error ha sido: %s." #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "No es posible alcanzar el servidor de destino" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Muerto" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Evento local" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Sitio Local" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Peón" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Rey" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "C" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "R" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "La partida terminó en empate" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s ganan" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s ganan" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "El juego ha sido aniquilado" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "El juego ha sido postergado" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "El juego ha sido abortado" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "Porque ningún jugador tiene suficiente material para dar mate." #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "La misma posición se ha repetido tres veces seguidas." #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Los últimos 50 movimientos no han aportado nada nuevo" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Ambos jugadores han agotado su tiempo" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "%(mover)s está en punto muerto" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Los jugadores así lo han acordado" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Un administrador así lo ha decidido" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "La partida ha excedido la longitud máxima" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Porque %(loser)s se resignó" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "%(loser)s agotó su tiempo" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "%(loser)s está desconectado" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "%(loser)s perdió todas las piezas excepto el rey" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Un jugador se ha desconectado" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "Porque ambos jugadores acordaron aplazar el juego" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "Porque el servidor no está disponible" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Un jugador se ha desconectado y el otro solicitó aplazamiento" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "Porque %(black)s perdió la conexión con el servidor y %(white)s solicitó aplazar el juego" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "Porque %(white)s perdió la conexión con el servidor y %(black)s solicitó aplazar el juego" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "Porque %(white)s perdió la conexión con el servidor" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "Porque %(black)s perdió la conexión con el servidor" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "Porque ambos jugadores estuvieron deacuerdo" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "Por cortesía de un jugador" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Un jugador salió. No se declara ganador al estar la partida en fase temprana" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Por que el motor de %(white)s murió" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Se perdió la conexión con el servidor" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Razón desconocida" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "min" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "seg" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Asymmetric Random" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "A ciegas" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "Peones cultos" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "Piezas ocultas" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Corner" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer Random" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "un jugador empieza con un caballo menos" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Knight odds" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Losers" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "Reglas tradicionales de ajedrez\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "Un jugador inicia la partida sin un peón" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Pawn odds" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Pawns Passed" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Pawns Pushed" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "Un jugador inicia la partida sin una reina" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Queen odds" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Random" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "Un jugador inicia la partida sin una torre" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Ventaja de torres" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Boca abajo" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Todavía no se han abierto la conversación" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Solo los usuarios registrados pueden usar este canal" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "No se ha seleccionado conversación" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Cargando datos del jugador" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "Recibiendo la lista de jugadores" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Más canales" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Más jugadores" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Conversaciones" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Información de la conversación" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Ofrecer rejugar" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Rejugar" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Deshacer un movimiento" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Deshacer dos movimientos" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "El juego se ha pausado" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Partida cargada" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Partida guardada" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "Analizador iniciado" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "Pediste abortar" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Has enviado un ofrecimiento de empate" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "Pediste pausa" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "Pediste continuar" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "Pediste deshacer" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "El motor %s, ha muerto" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "Pychess ha perdido la conexión con el motor, probablemente porque ha muerto.\n\nPuedes intentar empezar una nueva partida con el motor, o probar a jugar contra otro." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Anular" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "Este juego puede ser cancelado automáticamente sin pérdida de rating porque aún no se han hecho dos movimientos" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "Pedir abortar" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "contra" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Volver a la posición inicial" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Un movimiento hacia atrás" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Un movimiento hacia delante" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Saltar a la última posición" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess no pudo cargar sus configuraciones de panel" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Su panel de ajustes se ha restablecido. Si el problema persiste contacte con los desarrolladores" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Usted" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Invitado" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Corrija el movimiento o comience a jugar con algo que pueda leerse" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Abrir partida" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Guardar partida" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Todos los archivos" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Detectar formato automáticamente" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Archivos de ajedrez" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Tipo de archvo desconocido '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "No se pudo guardar '%(uri)s' ya que PyChess desconoce el formato '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "No se puede guardar el archivo '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "No tienes los permisos necesarios para guardar el archivo.\nPor favor, asegúrate que has indicado bien la ruta y prueba otra vez." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess no pudo guardar el juego" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Hay %d partida con movimientos sin guardar" msgstr[1] "Hay %d partidas con movimientos sin guardar" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "¿Guardar movimientos antes de cerrar?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Guardar %d documento" msgstr[1] "_Guardar %d documentos" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "¿Guardar la partida actual antes de cerrarla?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "No es posible continuar posteriormente la partida, si no la guardas." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Ventana de información de PyChess" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "de" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Humano" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Rápido" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutos:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Ganancia:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d sec/movimiento" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d sec/movimiento" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Ventajas" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr " ajedrez" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Entrar al Juego" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Abrir Archivo de Sonido" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Sin sonido" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Seleccione un archivo de sonido…" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Panel sin descripción" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Puede empezar una partida nueva en Partida > Nueva partida, en la siguiente ventana puede seleccionar Jugadores, Control de tiempo y Variante." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Puede elegir entre 8 niveles de dificultad al jugar contra el equipo" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "En las Variantes de Ajedrez la posición de partida de las piezas de la primera línea varían." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "Para guardar un juego, vaya a Juego > Guardar juego como..., escriba un nombre de archivo y elija la ubicación donde desea guardarlo. Elija la extensión del archivo abajo, y después haga clic en Guardar." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "¿Sabía que puede reclamar bandera cuando el reloj está de su lado en Acciones > Reclamar Bandera?" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "Mediante Ctrl+Z puede ofrecer a su oponente deshacer movimientos" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Para pasar a Pantalla completa, pulse F11. Para volver al modo ventana pulse otra vez F11" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "El Modo ayuda analiza su juego. Actívelo pulsado Ctrl+H." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "El Modo espía analiza el juego de su oponente. Actívelo pulsando Ctrl+Y." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "Puede activar los sonidos de las piezas en Ajustes > Preferencias > Sonidos, activando Utilizar sonidos en PyChess y elegir los sonidos que más le gusten." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Puede ayudar a traducir PyChess a su idioma en Ayuda > Traducir Pychess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "¿Sabía que se puede ganar una partida de ajedrez en tan solo 2 turnos?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "¿Sabía que el número de partidas de ajedrez posibles es mayor que el número de átomos del universo?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Shout" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Chess Shout" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Canal no oficial %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "El movimiento necesita una pieza y una coordenada" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "la coordenada capturada (%s) es incorrecta" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "y" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "empata" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "mate" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "pone al oponente en jaque" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "mejora la seguridad del rey" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "mejora levemente la seguridad del rey" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "mueve una torre para abrir una fila" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "mueve una torre para medio-abrir una fila" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "mueve el alfil en fianchetto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promueve un Peón en: %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "enroca" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "recupera material" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "sacrifica material" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "intercambia material" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "captura material" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "recupera %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "amenaza captura con %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "incrementa la presión sobre %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "defiende %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "El blanco tiene una nueva pieza en la avanzada: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "El negro tiene una nueva pieza en la avanzada: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s tienen un nuevo peón promocionado en %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "Medio abierto" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "en el archivo %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "en los archivo %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s consiguió un peón doble %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s consiguió doble peón nuevo %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s tiene un peón aislado en el archivo %(x)s" msgstr[1] "%(color)s tiene un peón aislado en los archivos %(x)s" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s mueve un peón en formación de muralla" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s ya no puede enrocar" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s ya no puede enrocar de reina" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s ya no puede enrocar de rey" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s tiene un alfil atrapado en %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "promociona un peón: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "acerca un peón a la última fila: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "acerca un %(piece)s al rey del oponente: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "promociona %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "coloca %(piece)s más activo/a: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "El blanco debería hacer una tormenta de peones sobre la derecha" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "El negro debería hacer una tormenta de peones sobre la izquierda" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "El blanco debería hacer una tormenta de peones sobre la izquierda" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "El negro debería hacer una tormenta de peones sobre la derecha" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "El negro tiene una posición bastante incómoda" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "El negro tiene una posición levemente incómoda" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "El blanco tiene una posición bastante incómoda" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "El blanco tiene una posición levemente incómoda" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "Añadir comentario inicial" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Añadir comentario" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Editar comentario" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "Movimiento forzado" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "Iniciativa" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "Compensación" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "Contrajugada" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "Presión del tiempo" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Panel Oficial PyChess" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Libro de aperturas" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "El libro de aperturas le puede servir de inspiración durante la fase inicial de una partida. Le mostrará movimientos habituales de los grandes maestros del ajedrez" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "Calculando…" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "Agregar sugerencias puede ayudarte a encontrar ideas, pero ralentiza el análisis de la computadora. " #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "Mate en %d" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Charla" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "El panel de charla permite comunicarse con el oponente durante la partida, suponiendo que acepte" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Comentarios" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "El panel de comentarios analizar y trata de explicar los movimientos realizados" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Posición inicial" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s mueve %(piece)s a %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "Motores" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "Ningún motor (jugador artificial) está participando en este juego." #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Historial de Movimientos" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "La hoja de movimientos registra los movimientos de los jugadores y permite navegar por el histórico de la partida" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Puntuación" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "El panel de puntuación evalúa las posiciones y muestra un gráfico del progreso de la partida" pychess-0.12beta3/lang/pt/0000755000175000017470000000000012176727272014450 5ustar tamasuserspychess-0.12beta3/lang/pt/LC_MESSAGES/0000755000175000017470000000000012176727272016235 5ustar tamasuserspychess-0.12beta3/lang/pt/LC_MESSAGES/pychess.po0000644000175000017470000021456012161415524020247 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Connect to Internet Chess" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Título" #: glade/fics_logon.glade:70 msgid "text" msgstr "texto" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Conectar-se ao Servidor Grátis de Xadrez Online" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Palavra-chave:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nome" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Iniciar sessão como _Convidado" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Controlo do tempo" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centro:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Brancas" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Pretas" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Conexão ao Xadrez na Internet: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Aceitar" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Enviar pesquisa" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Pontuação" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tempo" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Oferecer _Empate" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Notícias" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Mostrar _Chat" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Sair" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Ferramentas" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Novo Jogo" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Iniciar o Jogo" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Jogadores" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Insira Notação do Jogo" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promoção" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Rainha" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torre" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Bispo" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Cavalo" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Promover peão como?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Cliente de Xadrez para o ambiente de trabalho Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess é um software livre; você pode redistribuí-lo e/ou modificá-lo\nsob os termos da Licença Pública Geral GNU (GPL) como publicada pela\nFundação do Software Livre; seja a versão 2 da Licença ou (se preferir)\nqualquer versão mais recente.\n\nO PyChess é distribuído na esperança de que seja útil,\nmas SEM NENHUMA GARANTIA; até mesmo sem a garantia implicada\nde COMERCIALIZAÇÃO ou de ADAPTAÇÃO A UM PROPÓSITO EM PARTICULAR.\nVeja a Licença Pública Geral GNU (GPL) para mais detalhes.\n\nVocê deve ter recebido uma cópia da Licença Pública Geral GNU (GPL)\njunto com o PyChess; se não, escreva para a Free Software Foundation, Inc.,\n51 Franklin St, Fifth Floor. Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informações do jogo" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Evento:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Sítio:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Rodada:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Dados do jogo" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Data do jogo" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferências" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Esconder as tabs quando somente um jogo está aberto" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Opções Gerais de Apresentação" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animação" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Usar _analisador" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "usar o _analisador invertido" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analisando" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Usar sons no PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Um reprodutor _verifica:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Um jogador _movimenta-se:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Jogo está _Empatado:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Jogo está _Perdido:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Jogo está _Vencido:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Um jogador c_aptura:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "O jogo está _configurado:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Movimentos Observados:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Fins _Observados:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Reproduzir Som Quando..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Jogo" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Novo Jogo" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Carregar jogo" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "Gravar Jogo" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Gravar jogo _como" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Pontuação do _Jogador" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Acções" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Chamar bandeira" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Vista" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Girar tabuleiro" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Vusualizador de Log" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Modo A_juda" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Modo _Espião" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "Ajuda" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Sobre Xadrez" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Fechar _sem Gravar" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://pt.wikipedia.org/wiki/Xadrez" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Regras_de_xadrez" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "A conexão está quebrada - obtive mensagem \"fim de ficheiro\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' não é um nome registado" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Sem Pontuação" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Pontuado" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Erro de Ligação" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Erro de início de sessão" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Conexão foi encerrada" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Correio Electrónico" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Gasto" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "Total no online" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "A Ligar" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Desconhecido" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registar-se agora" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nome" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tipo" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Relógio" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Relâmpago" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Jogador Branco" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Jogador Preto" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipo de Jogo" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Adversário" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "O seu oponente não está sem tempo." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "O seu adversário pede-lhe que se apresse!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Geralmente isto não quer dizer nada, como o jogo também é baseado em tempo, mas se quer agradar ao seu adversário, talvez devesse ir andando." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s foi recusado pelo seu adversário" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Pode tentar enviar a oferta ao seu oponente mais tarde durante o jogo." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s foi retirado pelo seu adversário" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Incapaz de aceitar %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "O PyChess foi incapaz de aceitar a oferta de %s. Provavelmente esta foi retirada." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s devolve um erro" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Posição do Xadrez" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Posição simples de Xadrez" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Jogo de xadrez" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "Substituir" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Ficheiro existe" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Já existe um ficheiro chamado '%s'. Gostaria de o substituir?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "O ficheiro já existe em '%s'. Se o substituir, o seu conteúdo será re-escrito." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Não foi possível salvar o ficheiro" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "O erro foi: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Evento Local" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "C" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "R" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "O jogo terminou empatado" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Este jogo foi terminado" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Este jogo foi adiado" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Este jogo foi abortado" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Jogo Carregado" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Jogo Salvo" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Enviou uma oferta de empate" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Engine, %s, foi morto" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess não conseguiu conexão com o engine, provavelmente porque já morreu.\n\nVocê pode tentar iniciar um novo jogo com o engine, ou tentar jogar com outra pessoa." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "vs" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Convidado" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Abrir jogo" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Guardar o Jogo" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Todos os Ficheiros" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Detectar tipo automaticamente" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Todos od ficheiros de xadrez" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Tipo de ficheiro desconhecido '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Impossível gravar ficheiro '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Você não tem direitos necessários para gravar o ficheiro.\nPor favor assegure seus direitos de gravação e tente novamente." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess não foi capaz de salvar o jogo" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Gravar o jogo atual antes de sair?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Não é possível continuar o jogo mais tarde,\nse não o guardar." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Humano" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutos:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Incremento:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Abrir ficheiro de som" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Sem som" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Beep" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Seleccione um ficheiro de som..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "empata" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "dá mate" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "põe o adversário em cheque" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "melhora a segurança do Rei" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "melhora ligeiramente a segurança do Rei" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "move uma Torre para uma coluna aberta" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "move uma Torre para uma coluna semi-aberta" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "move o Bispo para o fianqueto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promove o Peão a %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "faz roque" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "recupera material" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "sacrifica material" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "troca material" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "captura material" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "aumenta a pressão em %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "defende %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Brancas têm uma nova peça na posição: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Pretas têm uma nova peça na posição: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s move peões para uma formação stonewall" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "As brancas deviam fazer uma tempestade de peões na direita" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "As pretas deviam fazer uma tempestade de peões na esquerda" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "As brancas deviam fazer uma tempestade de peões na esquerda" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "As pretas deviam fazer uma tempestade de peões na direita" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Livro de aberturas" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Comentários" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Posição inicial" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Histórico de movimentos" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Pontos" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/da/0000755000175000017470000000000012176727272014411 5ustar tamasuserspychess-0.12beta3/lang/da/LC_MESSAGES/0000755000175000017470000000000012176727272016176 5ustar tamasuserspychess-0.12beta3/lang/da/LC_MESSAGES/pychess.po0000644000175000017470000024123212161415524020204 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess finder dine motorer. Vent venligst." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Forbind til internetskak" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Titel" #: glade/fics_logon.glade:70 msgid "text" msgstr "tekst" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Forbind dig til den frie online skak server - FICS" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Adgangskode:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Navn:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Log på som_Gæst" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rte" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Opret _bruger" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Udfordring: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Send Udfordring" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Udfordring:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Lynskak:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standard:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Hurtig:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer Random, Sort" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sek/træk, Hvid" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Redigér" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Uden tidsbegrænsning" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minutter: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Ekstra: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Tidskontrol: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Tidskontrol" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Ligeglad" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Din styrke: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Hurtig)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Modstanderstyrke: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Når knappen er \"låst\" er forholdet\nmellem \"Modstanderstyrke\" og \"Din styrke\"\nholdt ens, når\na) din rating ændrer sig i spiltypen\nb) du ændrer varianten eller tidskontrollen" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Center:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerance:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Skjul" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Modstanderstyrke" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Hvid" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Sort" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Din farve" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Spil med normale regler" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Afspil" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Skakvariant" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Rated spil" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Acceptér modstandere manuelt" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Valgmuligheder" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet Skak: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Nulstil alle" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Acceptér" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Random, 1800↓, Sort" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sek/træk, 1400↑, Hvid" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manuel" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Send opfordring" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Ny Opfordring" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Op- og Udfordringer" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rating" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tid" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "_Grafvisning" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Spillere Klar" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Udfordring" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "S_piller liste" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Spilliste" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Tilbyd genopta_gelse" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Opgi_v" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Tilbyd _remis" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Forhånds_visning" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "Uds_at" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nyheder" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Vis _Chat" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Log af" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Muligheder" #: glade/findbar.glade:7 msgid "window1" msgstr "window1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 af 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Forrige" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Næste" #: glade/findbar.glade:161 msgid "Search:" msgstr "Søg:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nyt spil" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Start spil" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Sort spiller:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Hvid spiller:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Spillere" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Lynskak:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Hurtig:\t15 min + 10 sek/træk" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40 min + 15 sek/træk" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "S_pil normal skak" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Spil Fischer Random skak" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Åben spil" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Udgangsposition" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Indtast spilnotation" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Forfremmelse" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dronning" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Tårn" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Løber" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Springer" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Hvad vil du forfremme din bonde til?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Skakklient for Gnomedesktoppen" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess fri software; du må redistribuere det og/eller modificere\ndet under betingelserne givet i GNU General Public License som publiceret af\nFree Software Foundation; enten version 2, eller (efter dit valg) en senere\nversion.\n\nPyChess distribueres i håbet om, at det vil være nyttigt, men UDEN\nNOGEN GARANTI; end ikke en underforstået garanti for SALGBARHED eller\nANVENDELIGHED TIL ET GIVET FORMÅL. Se GNU General Public License for\nflere detaljer.\n\nDu skulle have modtaget en kopi af GNU General Public License sammen med\nPyChess; hvis ikke, så skriv til Free Software Foundation, Inc.,\n59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." #: glade/PyChess.glade:57 msgid "Game information" msgstr "Spil information" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Sammenhæng:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Sted:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Runde:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Spil data" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Spil dato" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Præferencer" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Navnet på den første spiller, f.eks. Jens." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Navnet på den _første menneskelige spiller:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Navnet på gæstespilleren, f.eks. Kirsten." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Navnet på den and_en menneskelige spiller:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Skjul faneblade, når kun et spil er åbent" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Dette skjuler fanebladet i toppen af vinduet, når der ikke er brug for det." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Automatisk _rotér brættet til den spillende menneskelige spiller" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Dette drejer brættet efter hvert træk, så det vises naturligt for den spiller, der skal trække." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Ansigt _til ansigts visning" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Dette spejler de sorte brikker på en måde, der gør det nemt at spille med venner på tavler." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "V_is koordinater" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Dette viser række- og kolonnenavne på skakbrættet. Det er brugbart for skaknotation." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Foretræk figurer i _notationen" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Dette bruger figurer, når skaktræk udtrykkes, i steddet for store bogstaver." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Generelle visningsindstillinger" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "F_uld brætanimation" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animér brikker, brætrotation og mere. Anbefalet." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animér kun _træk" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Animér kun brikkerne." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Ingen _animation" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Brug aldrig animation. Anbefalet for langsomme maskiner." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animation" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Generelt" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Brug _analysator" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Brug _omvendt analysator" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analyse" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Afinstallér" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Ak_tiv" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Installerede sidepaneler" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Side_paneler" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Brug lyde i PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "En spiller sætter _skak:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "En spiller _trækker:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Spillet ender i _remis:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Spillet _tabes:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Spillet _vindes:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "En brik _slås:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Spillet er _sat op:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Observeret spiller rykker:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Observeret spil _slutter:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Spil lyd når..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Lyde" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Spil" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nyt spil" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Spil _Internetskak" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Åbn spil" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Set position op" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Indtast spil_notation" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Gem spil" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Gem spil _som" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Spiller _Rating" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Handlinger" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Tilbyd _afbrydelse" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Tilbyd uds_ættelse" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Tilbyd _pause" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Spørg om lov at fortr_yde" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Kræv sejr ved tid" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Bed om at _rykke" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Vis" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Rotér brædt" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Fuldskærm" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Forlad _fuldskærm" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Vis sidepaneler" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Logviser" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Hint mode" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "S_pion mode" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Hjælp" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Om skak" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Hvordan man spiller" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Oversæt PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Dagens tip" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Afslut PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Luk _uden at gemme" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Gem %d dokumenter" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Der er %d spil med ugemte træk. Gem ændringerne før du slutter?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Vælg de spil du vil gemme:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Hvis du ikke gemmer, vil nye ændringer til spillene blive tabt." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "M_odstander:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Din farve:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Start spil" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Log på som g_æst" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Brugern_avn:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Forbind til FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Dagens tip" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Vis tips ved start" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://da.wikipedia.org/wiki/Skak" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://da.wikipedia.org/wiki/Skak#Spilleregler" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Velkommen" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Forbindelsen blev afbrudt. Mødte slutningen af strømmen" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' er ikke et registreret navn" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Det indtastede kodeord var forkert.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Tilslutter til server" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Logger ind på serveren" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Sætter det sidste op" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "online" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Afkoblet" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Ikke rated" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Rated" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privat" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Forbindelsesfejl" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Kunne ikke logge på" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Forbindelsen blev lukket" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Adresse fejl" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Automatisk aflogning" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Du er blevet logget af fordi du var inaktiv i mere end 60 minutter" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Vundne" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Remi" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Tabte" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "På FICS, omfatter din \"Wild\" rating alle de følgende varianter ved alle tidskontroller:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Email" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Brugt" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "på nettet totalt" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Tilslutter" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Ukendt" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Du er lige nu logget på som gæst.\nEn gæst kan ikke spille med i ratede spil, så antallet af spil du kan se vil være mindre." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registrér nu" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Navn" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Type" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Tid" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Aktive opfordringer: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s sek" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s sek" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Hurtig" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Lynskak" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Wild" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Hvid spiller" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Sort Spiller" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Spiltype" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Igangværende spil: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Modstander" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Dato/tid" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "Knappen er inaktiv fordi du er logget på som gæst. Gæster kan ikke få ratings, så knappen har ingen effekt." #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Udfordr: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Denne mulighed kan ikke bruges, fordi du udfordrer en spiller" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Redigér opfordring: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d sek/træk" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manuel" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Du kan ikke spille ratede spil, fordi du er logget på som gæst" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Du kan ikke spille ratede spil, fordi \"Ubegrænset\" er slået til, " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "og på FICS skal alle ratede spil være tidsbegrænsede" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Denne mulighed er ikke tilgængelig fordi du udfordrer en gæst, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "og gæster kan ikke spille ratede spil" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Shuffle" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Andet" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Du kan ikke vælge en variant fordi \"Ubegrænset\" er sat, " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "og på FICS kan kun normale spil være tidsubegrænsede" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Ændr tolerance" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrator" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Blindskakbruger" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Computerbruger" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Holdbruger" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Uregistreret bruger" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Skakrådgiver" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Servicerepræsentant" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Turneringsleder" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Mamer Manager" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Stormester" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "International Master" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "FIDE Mester" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "L" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Din modstander har tilbudt dig remi. Vil du acceptere?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Din modstander har tilbudt dig remi. Hvis du acceptere dette tilbud vil spillet slutte ½-½" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Din modstander vil gerne afbryde spillet. Er det ok?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Din modstander har bedt om at få spillet afbrudt. Hvis du accepterer dette tilbud vil spillet slutte uden ændring af ratings." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Din modstander vil gerne udsætte spilet. Ok?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Din modstander har spurgt om du vil udsætte spillet. Hvis du acceptere dette tilbud, vil spillet gemmes på serveren, og du kan fortsætte det en anden gang, hvor din modstander er online." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Din modstander fortryder %s træk. Ok?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Din modstander har spurgt om lov at fortryde de sidste %s træk. Hvis du accepterer dette vil spillet fortsætte fra den tidligere position." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Din modstander har brug for en pause. Ok?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Din modstander har bedt om at spillet bliver pauset. Hvis du accepterer dette, vil uret bliver stoppet indtil begge spillere er enige om at fortsætte." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Din modstander er klar til at fortsætte. Er du?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Din modstander har bedt om, at spillet bliver genoptaget. Hvis du accepterer, vil uret blive sat igang fra hvor det blev pauset." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Opgivelsen" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "Kravet om tidssejr" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "Tilbudet om remi" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "TIlbudet om afbrydelse" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "Tilbudet om udskydelse" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "TIlbudet om pause" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "Tilbudet om genoptagelse" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "Tilbudet om at skifte side" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "Tilbudet om fortrydelse" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "opgiv" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "kræv sejr ved tid" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "tilbyd remi" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "tilbyd at afbryde" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "tilbyd at udskyde" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "tilbyd pause" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "tilbyd at genoptage" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "tilbyd at skifte side" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "anmod of at fortryde" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "bed din modstander om at trække" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Din modstander har stadig tid tilbage." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "Uret er endnu ikke startet." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Du kan ikke skifte side i løbet af spillet." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Du har bedt om at udskyde for mange træk." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Din modstander beder dig om at skynde sig!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Generelt betyder det ikke noget, da spillet alligevel er på tid, men hvis du vil glæde din modstander, kunne det være du skulle kommer i omdrejninger." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s blev afslået af din modstander" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Senere i spillet kan du prøve at sende dit tilbud igen." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s blev trukket tilbage af din modstander" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Din modstander har skiftet mening." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Kunne ikke acceptere %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess kunne ikke få %s accepteret. Sandsynligvis fordi din modstander ikke gidder længere." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s returnerer en fejl" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Chess Alpha 2 diagram" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Kunne ikke hente diagrammet '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Skakposition" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Simpel skakposition" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "Spillet kan ikke læses til ende, fordi der var en fejl i trækket %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Trækket fejlede fordi %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Skakspil" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "mod" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Overskriv" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Filen eksisterer" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Der eksisterer allerede en fil ved navnet '%s'. Kunne du tænke dig at overskrive den?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Filnavnet er allerede brugt i mappen '%s'. Hvis du overskriver den, vil dens nuværende indhold forsvinde." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Kunne ikke gemme filen" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Fejlen var: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Bestemmelsesstedets vært er utilgængelig" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Døde" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Lokalt spil" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Lige i nærheden" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Bonde" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Konge" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "B" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "S" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Spillet endte uafgjort" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s vandt spillet" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s vandt spillet" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Spillet er blevet dræbt" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Spillet er blevet udsat" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Spillet er blevet afbrudt" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Fordi den samme position har er blevet gentaget tre gange" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Fordi de sidste 50 træk ikke har bragt noget nyt" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Fordi begge spillere løb tør for tid" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "Fordi %(mover)s satte pat" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Fordi spillerne blev enige om det" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Pågrund af en admins bedømmelse" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Fordi spillet overskred den maksimale længde" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Fordi %(loser)s opgav" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Fordi %(loser)s løb tør for tid" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Fordi %(loser)s afbrød forbindelsen" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Fordi %(loser)s tabte alle brikker pånær kongen" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Fordi en spillet tabte forbindelsen" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Fordi en spillet tabte forbindelsen og den anden spiller anmodede om udsættelse" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "Af en spillers høflighed" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Fordi en spiller gik. Ingen vinder blev fundet, da det skete så tidligt i spillet" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Fordi den %(white)s motor døde" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Fordi vi tabte forbindelsen til serveren" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Årsagen er ukendt" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Asymmetrisk Random" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Blindskak" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Hjørne" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer Random" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Springerhandicap" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Anti" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Bondehandicap" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Bønderne passeret" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Bønderne fremskudt" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Droningehandicap" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Tilfældig" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Tårnhandicap" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "På hovedet" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Du har ikke startet nogen samtaler endnu" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Kun registrerede brugere må snakke her" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Du har ikke valgt nogen samtaler" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Henter spiller data" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Flere kanaler" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Flere spillere" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Samtaler" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Samtale information" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Tilbyd omkamp" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Spil omkamp" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Fortryd ét træk" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Fortryd to træk" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Spil åbnet" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Spil gemt" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Du har sendt et remistilbud" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Skakprogrammet, %s, er gået ned" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess har mistet forbindelsen til skakprogrammet, formenligt fordi det er gået ned.\n\nDu kan prøve at starte et nyt spil mod programmet, eller spille mod et andet program." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "mod" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Hop til startpositionen" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Gå et træk tilbage" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Gå et træk frem" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Hop til den sidste position" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess kunne ikke indlæse dine paner" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Dine panelinstillinger er blevet nulstillet. Hvis problemet fortsætter, bør du raportere det til udviklerne." #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gæst" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Fix trækket, eller begynd at spille fra det, der kunne læses" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Åbn spil" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Gem spil" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Alle filer" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Find type automatisk" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Alle skakfiler" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Ukendt filttype: '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "Kunne ikke gemme '%(uri)s' fordi PyChess ikke kender formatet '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Kunne ikke gemme filen '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Du har ikke de nødvendige rettigheder til at gemme filen.\nPrøv at sikre dig, at du har valgt den rigtige mappe, eller bed din administrator om at udvide dine rettigheder." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess kunne ikke gemme spillet" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Der er %d spil med ugemte træk." msgstr[1] "Der er %d spil med ugemte træk." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Gem trækkene før vi lukker?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Gem %d dokument" msgstr[1] "_Gem %d dokumenter" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Gem det nuværende spil før du lukker det?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Det er ikke muligt senere at fortsætte spillet, hvis du ikke gemmer det." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "PyChess Informationsvindue" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "af" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Menneske" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Hurtig" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutter:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Ekstra" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d sek/træk" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d sek/træk" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Handicap" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Indtast spil" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Åben lydfil" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Ingen lyd" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Vælg lydfil..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Ubeskrævet panel" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Du kan starte et nyt spil ved Spil > Nyt Spil. I Nyt Spil vinduet kan du vælge Spillere, Tidskontrol og Skakvariant." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Du kan vælge mellem 8 sværhedsgrader, når du spiller mod computeren." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "En skakvariant kunne f.eks. være, at kun brikkerne på bagrækken - officerene - vil blive placeret på brættet." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "For at gemme et spil Spil > Gem spillet som, giv filnavnet og vælg hvor du vil have det gemt. I bunden vælger du en filtype og trykker Gem." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "Ved du, at du kan kræve sejr ved tid, hvis din modstander er løbet tør? Bare vælg Værktøjer > Kræv sejr ved tid." #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "Tryk Ctrl+Z for at spørge om lov til at fortryde dit træk." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "For at spille med i fuldskærmstilstand trykker du bare F11. Du kan altid komme tilbage ved F11 igen." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "Hinttilstand analyserer dit spil. Du kan slå det til ved at trykke Ctrl+H." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Spiontilstand analyserer modstanderens spil, og giver dig indirekte hints om farer. Du kan slå det til ved at trykke Ctrl+Y." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "Du kan ændre lydene i PyChess under Instillinger > Præference > Lyde. Klik Brug lyde i PyChess og vælg lydene efter smag." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Vidste du, at du kan hjælpe med at oversætte PyChess til forskellige sprog? Vælg Hjælp > Oversæt PyChess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Vidste du, at det er muligt at vinde et spil i kun to træk?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Vidste du at antallet af mulige skakspil overskrider antallet af atomer i universet?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Råb" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Råb om skak" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Uofficiel kanal %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "trækket skal have en brik og en koordinat" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "den slåede koordinat (%s) er forkert" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "og" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "sætter remis" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "sætter skakmat" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "sætter skak" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "forbedrer kongens sikkerhed" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "forbedrer kongens sikkerhed en smule" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "rykker et tårn til en åben linje" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "rykker et tårn til en halvåben linje" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "rykker en løber i fianchetto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "forfremmer en bonde til en %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "rokerer" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "genvinder materiale" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "ofrer materiale" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "udbytter materiale" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "vinder materiale" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "redder en %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "truer med at slå på %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "forhøjrer presset på %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "forsvarer %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "låser en fjendtlig %(oppiece)s på %(piece)s på %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Hvid har en ny forpost: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Sort har en ny forpost: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s har en passeret bonde på %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "halvåben" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "i %(x)s%(y)s filen" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "i %(x)s%(y)s filerne" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s har en dobbelbonde på %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s har nye dobbeltbønder på %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s har en isoleret bonde i %(x)s filen" msgstr[1] "%(color)s har isolerende bønder i %(x)s filerne" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s rykker en bonde i murformation" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s kan ikke længere rokere" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s kan ikke længere rokere i droningeside" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s kan ikke længere rokere i kongeside" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s har en ny fanget løbet på %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "udvikler en bonde: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "rykker en bonde tættere på bagrækken: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "bringer en %(piece)s tættere på modstanderens konge: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "udvikler en %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "placerer en %(piece)s mere aktivt: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Hvid burde iværksætte en bondestorm i højre side" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Sort burde iværksætte en bondestorm i venstre side" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Hvid burde iværksætte en bondestorm i venstre side" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Sort burde iværksætte en bondestorm i højre side" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Sort har en ret lukket position" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Sort har en lidt lukket position" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Hvid har en ret lukket position" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Hvid har en lidt lukket position" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Officielt PyChess panel." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Åbningsbog" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Åbningsbogen forsøger i åbningsfasen at inspirere dig til at prøve nye træk, ved at vise dig hvad forskellige stormestre typiske ville rykke." #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Chat" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Chatpanelet lader dig kommunikere med din modstander i løbet af spillet. Hvis altså han eller hun er interesseret." #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Kommentarer" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Kommentarpanelet forsøger at analysere og forklare de træk, der rykkes." #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Udgansposition" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s rykker en %(piece)s til %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Notation" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "Notationspanelet gemmer hvad spillerne trækker, og lader dig navigere gennem spilhistorikken." #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Udvikling" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "Panelet viser udviklingen i de pointtal hver position tildeles." pychess-0.12beta3/lang/az/0000755000175000017470000000000012176727272014437 5ustar tamasuserspychess-0.12beta3/lang/az/LC_MESSAGES/0000755000175000017470000000000012176727272016224 5ustar tamasuserspychess-0.12beta3/lang/az/LC_MESSAGES/pychess.po0000644000175000017470000021244012161415524020231 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Elxan İsmayılov , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: az\n" "Plural-Forms: nplurals=1; plural=0;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuşahmat:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - İnternet Şahmatına Qoşul" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Başlıq" #: glade/fics_logon.glade:70 msgid "text" msgstr "mətn" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Pulsuz Onlayn Şahmat Şəbəkəsinə Qoşul" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "Ş_ifrə:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Ad:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "_Qonaq kimi qoşul" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rtlar:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Q_eydiyyatdan keç" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "İldırımsürətli:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standart:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Blits:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Vaxtsız" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Dəqiqə: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standart" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Narahat olma" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Ağ" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Qara" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - İnternet Şahmatı: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Axtarışları Təmizlə" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Qəbul Et" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2dəq, Fişer Təsadüfi, 1800↓, Qara" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 dəq + 6 san/hərəkət, 1400↑, Ağ" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Axtarış Göndər" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Axtarış Yarat" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Reytinq" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Vaxt" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Oyunçu Hazırdır" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Yarış" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "_Oyunçu Siyahısı" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Oyun Siyahısı" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "_Bərabərlik Təklif Et" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "B_ax" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Xəbərlər" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "_Çatı Göstər" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Çıx" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Alətlər" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Yeni Oyun" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "Oyuna _Başla" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Oyunçular" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Gedişlərin Siyahısını Daxil Edin" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Çevirmə" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Vəzir" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Top" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Fil" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "At" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Piyadanı nəyə çevirəcəksiniz?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Gnome Masa Üstü üçün şahmat proqramı" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess bir azad proqram təminatıdır; o Azad Proqram Təminatı Fondu \ntərəfindən dərc olunmuş GNU Ümumi İctimai Lisenziyanın ikinci və ya daha \nsonrakı (seçiminizə görə) buraxılışları altında yayıla və/və ya dəyişdirilə bilər.\n\nPyChess faydalı olması gümanı ilə yayılmışdır, ancaq HEÇ BİR TƏMİNATI YOXDUR; \nhətta SÖVDƏGƏRLİK ya da BİR MƏQSƏDƏ UYĞUN OLMASI kimi təminatı yoxdur. \nƏtraflı məlumat üçün GNU Ümumi İctimai Lisenziyasına baxın.\n\nGNU Ümumi İctimai Lisenziyanın bir kopyasını PyChess ilə birgə almış \nolmalı idiniz; əgər almamısınızsa Azad Proqram Təminatı Fondu, Inc., \n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ünvanına yazın" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Oyun haqda məlumat" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Hadisə:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "İnternet Səhifəsi:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Raund:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Oyun məlumatı" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Oyunun tarixi" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Seçimlər" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Ancaq səkmə olduqda səkmələri gizlət" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Ümumi Nümaiyş Seçimləri" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animasiya" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "_Analizatordan istifadə et" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analiz edilir" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "PyChessdə _səsdən istifadə et" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "O_ynuçulardan Biri Şah Deyəndə:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Oynuçulardan Biri _Gediş Edəndə:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Oynun _Heç-heçə Qurtaranda:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Oyunu _Uduzanda:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "_Oyunu Udanda:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Oyunçulardan Biri Fiqur _Vuranda" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Oyun _Başlayanda" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Müşahidə olunan oynadıqda" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Müşahidə olunan oyun _qurtaranda:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Səs çıxar..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Oyun" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Yeni Oyun" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "Oyun _Yüklə" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Oyunu Qeyd Et" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Oyunu _Fərqli Qeyd Et" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Oyunçu _Reytinqi" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Hərəkət" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Bayrağı Endir" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Görünüş" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "Taxtanı _Çevir" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Qeyd İzləyicisi" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Kömək modu" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "_Şpion modu" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Yardım" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Şahmat Haqqında" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Qeyt _etmədən bağla" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://en.wikipedia.org/wiki/Chess" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' registrasiya olunmuş ad deyil" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Reytinqsiz" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Reytinqli" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Bağlantı Xətası" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Giriş Xətası" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Bağlantı kəsildi" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Epoçt" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Bağlanılır" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Naməlum" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "İndi qeydiyyatdan keç" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Ad" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Növ" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Saat" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blits" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "İldırımsürətli" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Ağ Oyunçu" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Qara oyunçu" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Oyun Növü" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Rəqib" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "F" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Rəqibiniz vaxtı hələ qurtarmayıb." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Şahmat vəziyyəti" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Şahmat Oyunu" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "Əvəz e_t" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Fayl mövcuddur" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "'%s' adlı fayl mövcuddur. Siz onu əvəz etmək istəyirsinizmi?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Fayl qeyd edilə bilmədi" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Xəta : %s - idi." #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Yerli Hadisə" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Yerli Saytı" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "A" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "V" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "Ş" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Oyun bərabərə qurtardı." #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Oyun başqa vaxta saxlanıldı" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Oyun ləğv edildi" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Açılmış oyun" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Yadda saxlanılmış oyun" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Siz heç-heçə təklifi göndərdiniz" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "%s mühərriki öldü" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess mühərriklə əlaqəni itirdi, çox yəqin ki, o ölüb.\n\nSiz mühərriklə yeni başalamağı və ya başqasına qarşı oynamağı yoxlaya bilərsiniz." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Qonaq" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Oyunu Aç" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Oyunu Qeyd Et" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Bütün Fayllar" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Növü avtomatik təyin et" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Bütün Şahmat Faylları" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "'%s' : dosye növü dəstəklənmir" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "'%s' faylı qeyd oluna bilmədi" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Faylı qeyd etmək üçün sizin yetərli səlahiyyətləriniz yoxdur.\nDoğru cərgəni göstərdiyinizdən əmin olun və təkrar yoxlayın." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Hal-hazırkı oyun bağlanmadan öncə qeyd edilsin?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Əgər siz oyunu yadda saxlamasanız,\ndaha sonra oynu davam etdirmək olmayacaq." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "İnsan" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Dəqiqə:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Nəaliyyət:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Oyun Vəziyyəti Daxil Et" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Səs Faylını Aç" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Səssiz" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Biip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Səs Faylını Seç..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "Piyadanı çevirdi : %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Açılış" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Şərhlər" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Başlanğıc vəziyyət" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Gedişlərin Siyahısı" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Xal" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/ku/0000755000175000017470000000000012176727272014444 5ustar tamasuserspychess-0.12beta3/lang/ku/LC_MESSAGES/0000755000175000017470000000000012176727272016231 5ustar tamasuserspychess-0.12beta3/lang/ku/LC_MESSAGES/pychess.po0000644000175000017470000020316012161415524020235 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ku\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyKişik - Girêde Kişika Torê" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Şîfre:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nav:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Wekî _Mêvan têkevê" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyKişik - Kişika Torê: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Bipejirîne" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Dem" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nûçe" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Amûr" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Xulek:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Têk bir" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/is/0000755000175000017470000000000012176727272014440 5ustar tamasuserspychess-0.12beta3/lang/is/LC_MESSAGES/0000755000175000017470000000000012176727272016225 5ustar tamasuserspychess-0.12beta3/lang/is/LC_MESSAGES/pychess.po0000644000175000017470000020473512161415524020242 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Tengjast Internet Skák" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Skrá mig inn sem _Gestur" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Hvítur" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Svartur" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Fréttir" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Ræsa Leik" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Spilarar" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Drottning" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Hrókur" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Biskup" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Riddari" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Leikjagögn" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Dagsetning leiks" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Stillingar" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Almennar Skjástillingar" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Nota hljóð í PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Leikurinn er _tapaður:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Leikurinn er _unninn:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Spila hljóð Þegar..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Leikur" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nýr leikur" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Hlaða inn leik" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Vista Leik" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Vista Leik _Sem" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Aðgerðir" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Sýn" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "Snúa Borði" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Hjálp" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Um Skák" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "_Loka án þess að vista" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://is.wikipedia.org/wiki/Sk%C3%A1k" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Tengingarvilla" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Innskráningarvilla" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Tölvupóstur" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Tengist" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Óþekkt" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Klukka" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Hvítur Spilari" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Svartur Spilari" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Andstæðingur" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Andstæðingur rann út á tíma." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Get ekki tekið til baka %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s skilar villu" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Skipta út" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Skráin er þegar til" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Gat ekki vistað skrá" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Villan var: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Leikurinn hefur endað í jafntefli" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Venjulegt" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "á móti" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gestur" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Opna Leik" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Vista leik" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Allar skrár" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Get ekki vistað skrá '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess gat ekki vistað leikinn" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Mannvera" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Ekkert hljóð" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bíp" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Velja hljóðskrá..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "jafntefli" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "bætir öryggi kóngsins" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "ver %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Athugasemdir" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Stig" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/ko/0000755000175000017470000000000012176727272014436 5ustar tamasuserspychess-0.12beta3/lang/ko/LC_MESSAGES/0000755000175000017470000000000012176727272016223 5ustar tamasuserspychess-0.12beta3/lang/ko/LC_MESSAGES/pychess.po0000644000175000017470000020406012161415524020227 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "파이체스 - 인터넷 체스에 연결" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "암호(_P):" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "이름(_N):" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "손님으로 로그온(_G)" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "파이체스 - 인터넷 체스: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "허용(_A)" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "탐색 보냄" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "점수" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "시간" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "비김 제의(_D)" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "뉴스" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "도구" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "새 게임" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "게임 시작(_S)" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "플레이어" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "게임 기록 보기" #: glade/promotion.glade:8 msgid "Promotion" msgstr "승급" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "여왕" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "성" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "주교" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "기사" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "쫄을 무엇으로 승급시키겠습니까?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "게임(_G)" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "새 게임(_N)" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "게임 불러오기(_L)" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "게임 저장(_S)" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "다른 이름으로 게임 저장(_A)" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "선수 등급 매기기(_R)" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "동작(_A)" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "차례 넘기기(_C)" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "보기(_V)" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "체스판 회전(_R)" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "로그 보기(_L)" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "힌트 상태(_H)" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "스파이 상태(_y)" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "도움말(_H)" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "게임 열기" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "분:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "획득:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/af/0000755000175000017470000000000012176727272014413 5ustar tamasuserspychess-0.12beta3/lang/af/LC_MESSAGES/0000755000175000017470000000000012176727272016200 5ustar tamasuserspychess-0.12beta3/lang/af/LC_MESSAGES/pychess.po0000644000175000017470000020366512161415524020216 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: af\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Wagwoord:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Naam:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Teken in as _Gas" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Aanvaar" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tyd" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nuus" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Begin Spel" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Spelers:" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Verskaf Spel Notasie" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Bevordering" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dame" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Toring" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Loper" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Ridder" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Bevorder pion tot wat?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Skaak kliënt vir Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Spel inligting" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Gebeurtenis:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Tuiste:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Rondte:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Spel data" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Datum van spel" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Voorkeure" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animasie" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "gebruik _analiseerder" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Gebruik _omgekeerde analiseerder" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Gebruik klanke in PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Spel" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nuwe Spel" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Laai Spel" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Stoor Spel" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Stoor Spel _As" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Aksies" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Wentel bord" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Hulp" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Oor skaak" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minute:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Wins:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/pl/0000755000175000017470000000000012176727272014440 5ustar tamasuserspychess-0.12beta3/lang/pl/LC_MESSAGES/0000755000175000017470000000000012176727272016225 5ustar tamasuserspychess-0.12beta3/lang/pl/LC_MESSAGES/pychess.po0000644000175000017470000022651712161415524020244 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2012. # FIRST AUTHOR , 2007. # , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: Mercury \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess szuka silników. Proszę czekać." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Połącz z Serwerem Szachowym" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Tytuł" #: glade/fics_logon.glade:70 msgid "text" msgstr "tekst" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Połącz się z the Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Hasło:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nazwa:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Zaloguj jako _Gość" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rty" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Z_arejestruj się" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Wyzwij gracza: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Wyślij wyzwanie" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Wyzwij:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Oświetlenie:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standard:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Szachy błyskawiczne:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer Random, Czarne" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sek/ruch, Białe" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Edytuj żądanie" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Bez limitu" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minuty:" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "Dodawaj:" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Ustawienia czasu" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Ustawienia czasu" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Twoja siła:" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Szachy błyskawiczne)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Siła przeciwnika:" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Środek:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Białe" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Czarne" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Twój Kolor" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Zagraj w szachy o normalnych zasadach" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Graj" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Wariant szachów" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Gra punktowana" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Zaakceptuj przeciwnika manualnie" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opcje" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internetowe Szachy: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Wyczyść Pokoje" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Akceptuj" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Odmów" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Random, 1800↓, Czarne" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sek/ruch, 1400↑, Białe" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manualny" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Wyślij żądanie" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Utwórz żądanie" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Żądania/wyzwania" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Ranking" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Czas" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Wykres _Żądań" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Graczy Gotowych" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Wyzwanie" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Obserwuj" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Utwórz Prywatny Czat" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "_Lista graczy" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Lista gier" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Zaproponuj _Wznowienie" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Z_rezygnuj" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Zaproponuj _Remis" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Zaproponuj P_rzerwanie" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Pod_gląd" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Przerwano" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Wiadomości" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Pokaż _Chat" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Wyloguj Się" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Narzędzia" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 z 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Poprzedni" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Następny" #: glade/findbar.glade:161 msgid "Search:" msgstr "Szukaj:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nowa gra" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Rozpocznij grę" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Czarni:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Biali:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Gracze" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "_Bez ograniczeń" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:»5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Szybka gra:»15 min + 10 sek/ruch" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normalna gra:»40 min + 15 sek/ruch" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Zagraj w Zwykłe szachy" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Zagraj w szachy Fisher Random" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Zagraj w szachy Losers chess" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Wczytaj Grę" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Początkowe Położenie" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Wpisz Zapis Gry" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promocja" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Hetmana" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Wieżę" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Gońca" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Skoczka" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Promuj piona na:" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Klient szachów dla środowiska Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "Niniejszy program jest wolnym oprogramowaniem; możesz go\nrozprowadzać dalej i/lub modyfikować na warunkach Powszechnej\nLicencji Publicznej GNU, wydanej przez Fundację Wolnego\nOprogramowania - według wersji 2 tej Licencji lub (według twojego\nwyboru) którejś z późniejszych wersji.\n\nNiniejszy program rozpowszechniany jest z nadzieją, iż będzie on\nużyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej\ngwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH\nZASTOSOWAŃ. W celu uzyskania bliższych informacji sięgnij do\nPowszechnej Licencji Publicznej GNU.\n\nZ pewnością wraz z niniejszym programem otrzymałeś też egzemplarz\nPowszechnej Licencji Publicznej GNU (GNU General Public License);\njeśli nie - napisz do Free Software Foundation, Inc., 59 Temple\nPlace, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informacje o grze" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Zdarzenie:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Strona:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Runda:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Dane o grze" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Data gry" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferencje" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Wyświetlane imię pierwszego gracza, np. Jan." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Imię _pierwszego gracza:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Wyświetlane imię gościa, np. Maria." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Imię d_rugiego gracza:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Schowaj karty kiedy tylko jedna gra jest otwarta" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Automatycznie obracaj stół dla aktualnego gracza" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Po ustawieniu, szachownica będzie obracała się po każdym ruchu, aby widok dla aktualnego gracza był naturalny." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Tryb wyświetlania \"Twarzą w Twarz\"" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Po ustawieniu, szachy po przeciwnej stronie będą odwrócone do góry nogami, odpowiednio osób grających na przenośnym urządzeniu." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Pokaż pozycje" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Po ustawieniu, wokół szachownicy pojawią się oznaczenia dla poszczególnych pól. Przydatne do ręcznej notacji." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Figury w notacji" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Po ustawieniu, PyChess zamieni wielkie litery na symbole figur w notacji." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Ogólne Opcje Wyświetlania" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "Pełna animacja stołu." #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animuj m.in. bierki i obroty rotacji szachownicy. Użyj tej opcji na szybkich maszynach." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animuj tylko _ruchy" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Animuj tylko ruchy bierek" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Brak _animacji" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Nigdy nie animuj. Użyj tej opcji na powolnych maszynach." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animacja" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Główne" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Uzywaj _analizatora" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "Analizator będzie pracowal w tle i analizował grę. Ta opcja jest konieczna do trybu podpowiedzi" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Używaj _wstecznego analizatora" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "Wsteczny analizator będzie analizował grę Twego przeciwnika. Ta opcja jest konieczna do trybu szpiegowskiego" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analizowanie" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Odinstaluj" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Ak_tywuj" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Zainstalowane Panele Boczne" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Panele Boczne" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Motywy" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Używaj dźwięków w PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "_Szach" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Gracz _wykonał ruch" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Gra zakończona _remisem:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Gra została _przegrana:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Gra została w_ygrana:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "_Zbicie" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Gra jest _ustawiona:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Obserwowane ruchy:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Obserwowan_e zakończenia:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Odtwarzaj dźwięk, gdy..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Dźwięki" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Gra" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nowa gra" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Graj w _Internetowe Szachy" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Wczytaj grę" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "Wczytaj _Ostatnią Grę" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Zapisz grę" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Zapi_sz grę jako" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "_Eksportuj Położenie" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Ranking gracza" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Akcje" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Zaproponuj _Przerwanie" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Zaproponuj _Pauzę" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Zaproponuj _Cofnięcie" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Zgłoś koniec czasu" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Widok" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Obróć szachownicę" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Pełny ekran" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Pozostaw _Pełny Ekran" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Logi" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Tryb _podpowiedzi" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Tryb _szpiegowski" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Pomoc" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "O szachach" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Pomoc" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Przetłumacz PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Wskazówka Dnia" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Wyjdź z PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Zamknij _bez zapisywania" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Zapisz %d dokument(y)" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Jest %d gier z niezapisanymi położeniami. Zapisać przed wyjściem?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Wybierz gry, które chcesz zapisać:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Jeśli nie zapiszesz, nowe zmiany w twoich grach zostaną utracone bezpowrotnie" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Przeciwnik" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Twój Kolor" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Rozpocznij Grę" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Zaloguj się jako G_ość" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "Połącz się z FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Wskazówka dnia" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Pokazuj wskazówki po uruchomieniu" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://pl.wikipedia.org/wiki/Szachy" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://pl.wikipedia.org/wiki/Zasady_gry_w_szachy" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Witaj" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Połączenie przerwane - otrzymano wiadomość \"koniec pliku\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' nie jest zarejestrowaną nazwą" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Wpisane hasło jest nieprawidłowe\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Łączenie z serwerem" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Logowanie" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Przygotowywanie środowiska" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Online" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Offline" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Dostępny" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Gra" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Nieobecny" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Niedostępny" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Niepunktowana" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Punktowana" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Prywatna" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "+ %d sek" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Błąd połączenia" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Błąd logowania" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Połączenie zostało zamknięte" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Zostałeś wylogowany, ponieważ byłeś nieobecny ponad 60 minut" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Zwycięstwo" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Remis" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Przegrana" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-mail" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Wydaj" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "online w sumie" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Pinguj" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Łączenie" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Nieznany" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Obecnie jesteś zalogowany jako gość\nGoście nie mogą grać w gry rankingowe, więc mają mniej dostępnych pokoi" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Zarejestruj teraz" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nazwa" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Typ" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Zegar" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Aktywnych pokoi: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Szachy błyskawiczne" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Turbo" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Białe" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Czarne" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Typ gry" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Przeciwnik" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Nie możesz grać w gry punktowane, gdyż jesteś zalogowany jako gość." #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Twój przeciwnik zaproponował remis. Zgadzasz się?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Twój przeciwnik zaoferował remis. Jeżeli się zgodzisz, gra skończy się wynikami 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Twój przeciwnik chce przerwać grę. Zgadzasz się?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Twój przeciwnik chce przerwać grę. Jeżeli się zgodzisz, gra skończy się bez wyników." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Twój przeciwnik chce zawiesić grę. Zgadzasz się?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Twój przeciwnik chce zawiesić grę. Jeżeli się zgodzisz, gra zostanie wstrzymana. Będzie można ją kontynuować później (gdy przeciwnik będzie online)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Twój przeciwnik chce cofnąć %s ostatnich ruch(y/ów). Zgadzasz się?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Twój przeciwnik chce cofnąć %s ostatnich ruch(y/ów). Jeżeli się zgodzisz, gra zostanie kontynuowana z wcześniejszego stanu." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Twój przeciwnik chce wstrzymać grę. Zgadzasz się?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Twój przeciwnik chce wstrzymać grę. Jeżeli się zgodzisz, zegar zostanie wstrzymany dopóki gracze nie zgodzą się ponownie go wznowić." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Twój przeciwnik chce kontynuować grę. Zgadzasz się?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Twój przeciwnik chce kontynuować grę. Jeżeli się zgodzisz, zegar zostanie włączony ponownie." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Twój przeciwnik ma jeszcze czas do dyspozycji." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Twój przeciwnik prosi Cię o pośpiech!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Ogólnie rzecz ujmując, nie ma to żadnego wpływu na przebieg gry. Aby jednak nie sprawić zawodu swemu przeciwnikowi, mógłbyś wykonywać swoje posunięcia nieco szybciej." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s została odrzucona przez Twojego przeciwnika." #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Możesz spróbować wysłać ofertę ponownie później w trakcie gry." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s została wycofana przez Twojego przeciwnika" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Wygląda na to, że Twój przeciwnik uruchomił swój umysł na nowo." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "%s nie może zostać zaakceptowana" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess nie mógł zaakceptować %s. Prawdopodobnie dlatego, że została ona wycofana." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s zwraca błąd" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Pozycja Szachowa" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Prosta Pozycja Szachowa" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Zapis Gry" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Zastąp" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Plik istnieje" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Plik o nazwie: '%s' już istnieje. Zastąpić go?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Plik już istnieje w '%s'. Jeśli go zastąpisz jego aktualna zawartość zostanie nadpisana." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Nie można zapisać pliku" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Wystąpił błąd: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Zdarzenie" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Strona" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "S" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "W" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "H" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Gra zakończyła się remisem" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Gra została \"skillowana\"" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Gra została odroczona" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Gra została przerwana" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "min" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "sek" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Asymetryczny Losowy" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://pl.wikipedia.org/wiki/Szachy_losowe\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normalny" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Załadowano grę" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Zapisano grę" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Wysłałeś ofertę remisu" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Komputerowy silnik szachowy, %s, \"padł\"" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess stracił połączenie z komputerowym silnikiem szachowym.\nMożesz spróbować zacząć nową grę przeciwko temu komputerowi lub wybrać inny." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "vs" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gość" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Otwórz grę" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Zapisz grę." #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Wszystkie pliki" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Rozpoznaj typ automatycznie" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Wszystkie pliki szachowe" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Nieznany typ pliku '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Nie można zapisać pliku '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Nie masz potrzebnych uprawnień by zapisać plik.\nUpewnij się czy podałeś właściwą ścieżkę zapisu i spróbuj ponownie." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess nie mógł zapisać gry" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Zapisać aktualną grę przed zakończeniem?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Nie będzie można później wznowić tej gry, jeśli jej nie zapiszesz." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Człowiek" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minut:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Dodawaj:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Wejście do gry" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Otwórz plik dźwiękowy" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Bez dźwięku" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Wybierz plik dźwiękowy..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "remisy" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "matuje" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "szachuje" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "zwiększają bezpieczeństwo Króla" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "nieznacznie zwiększają bezpieczeństwo króla" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "przesuwają wieżę na otwarty korytarz" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "przesuwają wieżę na pół-otwarty korytarz" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "wykonują fianchetto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promują piona w %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "wykonują roszadę" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "odbijają materiał" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "poświęcają materiał" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "wymieniają materiał" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "zdobywają materiał" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "zwiększają nacisk na %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "bronią %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Białe mają nową bierkę na froncie: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Czarne mają nową bierkę na froncie: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s ustawiają piony w formację łańcucha" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "przesuwają piona bliżej krawędzi promocji %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Białe powinny wykonywać szturm pionkami po prawej" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Czarne powinny wykonywać szturm pionkami po lewej" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Białe powinny zrobić szturm pionami" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Białe powinny zrobić szturm pionami na prawym skrzydle." #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Czarne mają raczej skrępowaną pozycję" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Czarne mają lekko skrępowaną pozycję" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Białe mają raczej skrępowaną pozycję" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Czarne mają lekko skrępowaną pozycję" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Książka Debiutów" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Komentarze" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Pozycja początkowa" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Historia posunięć" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Wynik" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/hr/0000755000175000017470000000000012176727272014436 5ustar tamasuserspychess-0.12beta3/lang/hr/LC_MESSAGES/0000755000175000017470000000000012176727272016223 5ustar tamasuserspychess-0.12beta3/lang/hr/LC_MESSAGES/pychess.po0000644000175000017470000026211212161415524020231 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2013. # , 2013. # FIRST AUTHOR , 2008. # Mislav E. L. , 2013. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-26 14:04+0000\n" "Last-Translator: CroatianFan \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hr\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" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess otkriva tvoje programske pogonike. Molim pričekaj." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - spoji se na međumrežni šah" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Naslov" #: glade/fics_logon.glade:70 msgid "text" msgstr "napis" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Spoji se na poslužitelj Free Online Chess " #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Zaporka:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Ime:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Prijavi se kao _Gost" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "_Ulazi:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "_Prijavi se" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Izazovi: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Uputi izazov" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Izazovi:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Munjevito:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Uobičajeno:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Brzopotezno:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischerov nasumični - Random , Crni" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sek/potez, Bijeli" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Uredi zahtjev" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Vremenski neograničeno" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minute:" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "Dodatak:" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Nadzor vremena:" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Uobičajeno" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Nadzor vremena" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Zanemareno" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Tvoja jačina:" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Brzopotezno)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Protivnikova jačina:" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Kad je ovaj gumb u \"zaključanu\" stanju, odnos\nizmeđu \"protivnikove jačine\" i \"tvoje jačine\" bit će \nsačuvan kada \na) se tvoj rang za vrstu igre promijeni\nb) kad promijeniš šahovsku inačicu ili nadzor vremena" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Središte:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Odstupanje:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Sakrij" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Protivnička jačina" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Bijeli" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Crni" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Tvoja boja" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Igraj po uobičajenim šahovskim pravilima" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Igraj" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Šahovska inačica" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Rangirana partija" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Ručno prihvati protivnika" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Mogućnosti" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - međumrežni šah: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Počisti zahtjeve" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Prihvati" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Odbij" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischerov nasumični - Random , 1800↓, Crni" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sek/potez, 1400↑, Bijeli" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, ručno" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Pošalji zahtjev" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Stvori zahtjev" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Zahtjevi / Izazovi" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rang" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Vrijeme" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "_Grafikon zahtjeva" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 igrača pripravnih" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Izazovi" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Promatraj" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Započni zasebni razgovor" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Popis _igrača" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Popis _partija" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Ponudi _nastavak" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "P_redaj" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Ponudi _remi" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Ponudi pre_kid" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Pre_gled" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Odgođeno" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Novosti" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Pokaži _razgovor" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "Pokaži konzolu" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Odjavi se" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Pomagala" #: glade/findbar.glade:7 msgid "window1" msgstr "prozor1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 od 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Prijašnji" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Sljedeći" #: glade/findbar.glade:161 msgid "Search:" msgstr "Traži:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nova partija" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Započni partiju" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Crni igrač:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Bijeli igrač:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Igrači" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "_Vremenski neograničeno" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Brzopotezno: 5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Hitro: 15 min + 10 sek/potez" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Uobičajeno: 40 min + 15 sek/potez" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Igraj uobičajeni šah" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Igraj Fischerov nasumični - Random " #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Igraj šah gubitnika - Losers " #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Otvori partiju" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Početni položaj" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Unesi notaciju partije" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promocija" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Kraljica" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "top" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "lovac" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "skakač" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Pretvori pješaka u što?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Šahovski klijent za sučelje Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess je slobodni program; možete ga dalje dijeliti i/ili mijenjati pod uvjetima \ndozvole \"GNU General Public Licence\" kako ih je objavila zaklada \"Free Software Foundation\"; \nbilo to u skladu s 2. inačicom te dozvole ili (po osobnoj odluci) s nekom kasnijom inačicom. \n\nPyChess se dalje dijeli u nadi da će biti koristan, ali BEZ IKAKVA JAMSTVA; \nčak i bez pretpostavljena jamstva TRGOVINSKE UPORABE ili POGODNOSTI ZA ODREĐENU NAMJENU. \nZa više pojedinosti vidjeti dozvolu \"GNU General Public Licence\". \n\nZajedno s programom PyChess trebali ste primiti presliku dozvole \"GNU General Public Licence\"; \nukoliko to nije slučaj, pišite na adresu: \nFree Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Obavijest o partiji" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Događaj:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Mjesto:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Krug:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Podatci o partiji" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Nadnevak partije" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "Upravljanje programskim pogonicima" #: glade/PyChess.glade:602 msgid "Name:" msgstr "Naziv:" #: glade/PyChess.glade:614 msgid "Command:" msgstr "Naredba:" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "Protokol:" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "Mjerila:" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "Mjerila naredbenog retka potrebna su programskom pogoniku." #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "Jedinstveni naziv programskog pogonika korišten u igračevim iskačućim popisima." #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "Cijela putanja do binarnog koda programskog pogonika ili početne skripte ." #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "Programski pogonici koriste komunikacijski protokol uci ili xboard za općenje s grafičkim korisničkim sučeljem.\nUkoliko se ne mogu koristiti oba, možeš odabrati onaj koji želiš." #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "Djelatni direktorij:" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "Direktorij iz kojega će biti pokrenut programski pogonik." #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Prilagodbe" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Prikazano ime prvog ljudskog igrača, npr. Mislav." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Ime _prvog ljudskog igrača:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Prikazano ime gostujućeg igrača, npr. Marija." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Ime _drugog ljudskog igrača:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Sakrij kartice kad je samo jedna partija otvorena" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Ukoliko je tako postavljeno, ovo sakriva karticu na vrhu igrajućeg prozora, kada ona nije potrebna." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Samo_zaokreni ploču prema trenutnom ljudskom igraču" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Ukoliko je tako postavljeno, ploča će se zaokrenuti nakon svakog poteza, kako bi se prikazao naravni pogled igrača na potezu." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Zaslonski prikaz licem u lice" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Ukoliko je tako postavljeno, crne figure bit će spuštene, što je pogodno za igru protiv prijatelja na mobilnim uređajima." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Prikaži oznake" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Ukoliko je tako postavljeno, šahovska ploča će prikazivati slovnu i brojčanu oznaku za svako šahovsko polje. Ovo je iskoristivo u šahovskoj notaciji." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "Pokaži _uzete figure" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "Ako je postavljeno, uzete figure bit će prikazane kraj ploče." #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Budi skloniji figurama u _notaciji" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Ukoliko je tako postavljeno, PyChess će koristiti brojke kako bi prikazao povučene figure, radije nego velika slova." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Opće mogućnosti zaslona" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "P_otpuna animacija ploče" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animiraj figure, zaokretanje ploče i ostalo. Primjenjuj to na brzim računalima." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animiraj samo _poteze" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Animiraj samo poteze figura" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Bez _animacije" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Nikad ne koristi animaciju. Primjenjuj to na sporim računalima." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animacija" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Općenito" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "Koristi _knjigu otvaranja" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "Ukoliko je postavljeno, PyChess će predložiti najbolje otvarajuće poteze na listi prijedloga." #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "Datoteka knjige Polyglot:" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "Koristi _mjesnu šahovsku bazu pozicija" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "Ukoliko je postavljeno, PyChess će pokazati ishod partije za različite poteze u pozicijama koje sadrže 6 ili manje figura.\nMožeš preuzeti datoteke sa šahovskom bazom pozicija na:\nhttp://www.olympuschess.com/egtb/gaviota/" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "Putanja za Gaviota TB:" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "Koristi _mrežnu šahovsku bazu pozicija" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "Ukoliko je postavljeno, PyChess će pokazati ishod partije za različite poteze u pozicijama koje sadrže 6 ili manje figura.\nPozicije će tražiti na http://www.k4it.de/" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "Otvaranje, završnica" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Koristi _raščlanitelja" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "Raščlanitelj će raditi u pozadini i analizirati partiju. Ovo je potrebno kako bi savjetodavni način radio" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Koristi _obrnutog raščlanitelja" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "Obrnuti raščlanitelj će analizirati partiju kao da je tvoj protivnik bio na potezu. Ovo je potrebno kako bi špijunski način radio" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Raščlamba" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "_Prijedlozi" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Deinstaliraj" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "D_jelatno" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Ugrađene bočne liste" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Bočne _liste" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Teme" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Koristi zvukove u PyChessu" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Igrač _šahira:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Igrač _povlači:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Partija je _neriješena:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Partija je _izgubljena:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Partija je _dobivena:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Igrač u_zima:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Partija je _postavljena:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Promatrani potezi:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Promatrane _završnice:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Oglasi se zvukom kada..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Zvukovi" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Partija" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nova partija" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Igraj _međumrežni šah" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Učitaj partiju" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "Učitaj _nedavnu partiju" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "Otvori _bazu podataka" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Postavi položaj" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Unesi _notaciju partije" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Pohrani partiju" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Pohrani partiju _kao" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "_Izvezi položaj" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Rang igrača" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "_Uredi" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "_Programski pogonici" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Radnje" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Ponudi _prekid" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Ponudi _odgodu" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Ponudi _stanku" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Ponudi _vraćanje poteza" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Zovi zastavicu" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Zatraži _potez" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "Samostalno zovi zastavicu" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Prikaz" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Zaokreni ploču" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Cijeli zaslon" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Napusti _cijeli zaslon" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Prikaži bočne liste" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Preglednik dnevnika" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Savjetodavni način" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "_Špijunski način" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Pomoć" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "O šahu" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Kako igrati?" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Prevedi PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Savjet dana" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Napusti PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Zatvori _bez spremanja" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Pohrani %d zapise" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Ima %d partija s nepohranjenim potezima. Pohrani promjene prije zatvaranja?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Izaberi partije koje želiš pohraniti:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Ukoliko ih ne pohraniš, nove promjene u tvojim partijama bit će trajno izgubljene." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Protivnik:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "Tvoja boja" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Započni partiju" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Prijavi se kao _Gost" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Ko_risnik:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Spoji se na FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Savjet dana" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Pokaži savjete pri pokretanju" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://hr.wikipedia.org/wiki/Šah" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://hr.wikipedia.org/wiki/Šahovska_pravila" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Dobrodošli u" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "Id" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "W Elo" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "B Elo" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "Ishod" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "Događaj" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "Mjesto" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "Krug" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "Nadnevak" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "ECO" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "Podatkovna baza partija PyChessa" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "Igra #%s ne može biti pokrenuta, zbog pogrješke u računalnom čitanju FEN" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Veza je bila prekinuta - primljena je poruka \"end of file\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' nije zabilježeno ime" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Upisana zaporka je neprimjenjiva.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Spajanje na poslužitelj" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Prijavljivanje na poslužitelj" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Postavljanje okružja" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Na mreži" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Izvan mreže" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Dostupno" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "U igri" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "U mirovanju" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "U provjeri" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Nedostupno" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "U tijeku simultanka" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "U turniru" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Nerangiran" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Rangiran" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Zasebno" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d sek" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Pogrješka pri spajanju" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Pogrješka pri prijavi" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Veza je bila zatvorena" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Adresna pogrješka" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Samoodjava" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Odjavljen si jer si bio u mirovanju više od 60 minuta" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Pobjeda" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Remi" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Poraz" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "Na poslužitelju FICS, tvoj \"Divlji\" rang zauzima sve sljedeće inačice na svim vremenskim nadzorima:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Kazne" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-pošta" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Potrošeno" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "ukupno na mreži" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Pokaži mrežno kašnjenje" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Povezujem" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Nepoznato" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Trenutno si prijavljen kao gost.\nGostu nije omogućeno igrati rangirane partije, pa će stoga ponuda igara biti manja." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Zabilježi se sada" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Ime" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Vrsta" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Ura" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Djelatni zahtjevi: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s sek" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr " bi htio nastaviti tvoje odgođeno %(time)s " #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr " izaziva te na partiju %(time)s %(rated)s %(gametype)s" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Prihvati izazov" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Otkloni izazov" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Zanemari izazov" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s sek" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "Rang protivnika" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Ručno prihvati" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Brzopotezno" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Munjevito" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Na divlje" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Stanje" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Igrači: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Bijeli Igrač" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Crni Igrač" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Vrsta igre" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Partije u tijeku: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Tvoja boja" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Protivnik" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "je na mreži" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Nadzor vremena" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Nadnevak/Vrijeme" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s je %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr " s kojim posjeduješ odgođeno %(timecontrol)s %(gametype)s " #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "Zahtijevaj nastavak" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "Provjeri odgođenu partiju" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Ne poduzimaj ništa" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "Lančani gumb je onemogućen jer si prijavljen kao gost. Gosti ne mogu uspostaviti rang, pa stanje lančanog gumba nema učinka kada nema ranga za koji se može vezati \"protivnička jačina\"" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Izazovi:" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Ova mogućnost nije primjenjiva jer izazivaš igrača" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Uredi zahtjev:" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d sek/potez" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Ručno" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "Bilo koja jačina" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Ne možeš igrati rangiranu partiju jer si prijavljen kao gost" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Ne možeš igrati rangiranu partiju jer je označeno \"vremenski neograničeno\"," #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "a FICS ne omogućava rangiranje vremenski neograničenih partija" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Ova mogućnost nije dostupna jer izazivaš gosta," #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "a gosti ne mogu igrati rangirane partije" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Miješani šah - Shuffle " #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Drugo" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Ne možeš odabrati inačicu jer je označeno \"vremenski neograničeno\"," #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "a FICS nalaže da se vremenski neograničene partije igraju po uobičajenim šahovskim pravilima" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Promijeni odstupanje" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "Možeš uputiti samo 3 izvanredna zahtjeva u isto vrijeme. Ukoliko želiš dodati novi zahtjev, moraš ukloniti svoje trenutne zahtjeve. Želiš li ukloniti svoje zahtjeve?" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "otklonio je tvoju ponudu za ogled" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "Provjereno" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Upravitelj" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Račun za igru na slijepo" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Računalni račun" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Skupni račun" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Nezabilježeni korisnik" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Šahovski savjetnik" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Poslužiteljski predstavnik na FICS-u" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Ravnatelj turnira" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Mamer-rukovoditelj" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Velemajstor" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Međunarodni majstor" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "FIDE-majstor" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Velemajstorica" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Međunarodna majstorica" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "FIDE-majstorica" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "Lažni račun" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "T" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "U" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "CA" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "SR" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "TD" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "GM" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "IM" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "FM" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "WGM" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "WIM" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "WFM" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "Programski pogonik %s dojavljuje pogrješku:" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Tvoj je protivnik ponudio remi. Prihvaćaš li?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Tvoj je protivnik ponudio remi. Ukoliko prihvatiš ponudu, partija će završiti ishodom 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Tvoj protivnik želi prekinuti partiju. Prihvaćaš li?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Tvoj je protivnik predložio da partija bude prekinuta. Ukoliko prihvatiš ponudu, partija će završiti bez promjene ranga." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Tvoj protivnik želi odgoditi partiju. Prihvaćaš li?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Tvoj je protivnik zamolio odgodu partije. Ukoliko prihvatiš ponudu, partija će biti odgođena te je možeš nastaviti kasnije (kada tvoj protivnik bude na mreži i kada se oba igrača slože oko nastavka)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Tvoj protivnik želi povratiti %s move(s). Prihvaćaš li?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Tvoj je protivnik zamolio poništenje zadnjeg %s move(s) . Ukoliko prihvaćaš ponudu, partija će biti nastavljena s prethodnoga položaja." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Tvoj protivnik želi privremeno zaustaviti partiju. Prihvaćaš?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Tvoj je protivnik zamolio da partija bude privremeno zaustavljena. Ukoliko prihvatiš ovu ponudu, šahovska ura bit će zaustavljena sve dok se oba igrača ne suglase s nastavkom partije. " #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Tvoj protivnik želi nastaviti partiju. Prihvaćaš li?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Tvoj je protivnik zamolio da partija bude nastavljena. Ukoliko prihvatiš ovu ponudu, šahovska ura će nastaviti teći od trenutka kada je zaustavljena." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Predaja" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "Poziv zastavice" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "Ponuda remija" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "Ponuda prekida" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "Ponuda odgode" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "Ponuda stanke" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "Ponuda nastavka" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "Ponuda zamjene strana" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "Ponuda povrata poteza" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "predaj" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "zovi zastavicu svoga protivnika" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "ponudi remi" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "ponudi prekid" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "ponudi odgodu" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "ponudi stanku" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "ponudi nastavak" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "ponudi zamjenu strana" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "ponudi povrat poteza" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "zatraži od protivnika povlačenje poteza" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Tvoj protivnik nije ostao bez vremena." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "Ura još nije pokrenuta." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Ne možeš zamijeniti boje tijekom partije." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Pokušao si poništiti previše poteza." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Protivnik traži da požuriš!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Općenito gledano, ovo nema značenja jer je partija vremenski uvjetovana, ali ako želiš udovoljiti protivniku, možda bi trebao to poduzeti." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s je otklonjeno od tvog protivnika" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Možeš iznova poslati ponudu svome protivniku kasnije u igri." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s je povučen od strane tvog protivnika" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Tvoj se protivnik izgleda predomislio." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Nije prihvatljivo %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess nije mogao izvršiti prihvaćanje %s ponude. Vjerojatno stoga jer je povučena." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s vraća pogrješku" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Šahovski dijagram Alfa 2" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Ne može se podići dijagram '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "Podatkovna baza PyChessa" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Šahovski položaj" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Jednostavni šahovski položaj" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "Partija ne može biti pročitana do kraja zbog pogrješke u računalnom čitanju poteza %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Potez nije uspio jer %s" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "Pogrješka u obradi poteza %(moveno)s %(mstr)s" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Šahovska partija" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "Partija ne može biti pokrenuta, zbog pogrješke u računalnom čitanju FEN" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "Izvezi položaj" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "protiv" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Sve datoteke" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Slike" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Zamijeni" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Datoteka postoji" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Datoteka s imenom '%s' već postoji. Želiš li je zamijeniti?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Datoteka već postoji u '%s'. Ako je zamijeniš, njen sadržaj bit će prebrisan." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Nije moguće spremiti datoteku" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "PyChess nije mogao izvesti ovaj položaj." #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Pogrješka je bila: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Domaćin odredišta nedostupan" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Zamrlo" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Mjesni događaj" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Mjesni položaj" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "pješak" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "kralj" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "S" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Partija je završila remijem" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s je dobio partiju" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s je dobio partiju" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Partija je dokrajčena" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Partija je odgođena" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Partija je prekinuta" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "Jer nijedan igrač nema dovoljno materijala za matiranje" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Jer je isti položaj opetovan tri puta za redom." #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Jer posljednjih 50 poteza nije donijelo ništa novoga" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Jer je igračima iscurilo vrijeme" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "jer je %(mover)s u patu" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Jer su se igrači složili s time" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "zbog presude upravitelja" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Jer je partija prešla najveću moguću dužinu trajanja" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "Jer je %(white)s iscurilo vrijeme, a %(black)s nije imao dovoljno materijala za matiranje" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "Jer je %(black)s iscurilo vrijeme, a %(white)s nije imao dovoljno materijala za matiranje" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Zbog predaje %(loser)s" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Jer je %(loser)s iscurilo vrijeme" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "Jer je %(loser)s matiran" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Jer se %(loser)s isključio" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Jer je %(loser)s izgubio sve figure osim Kralja" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Jer je igrač izgubio mrežnu vezu" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "Jer su se oba igrača složila s odgodom partije" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "Jer je poslužitelj isključen" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Jer je jedan igrač izgubio mrežnu vezu, a drugi je zatražio odgodu" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "Jer je %(black)s izgubio vezu prema poslužitelju, a %(white)s zatražio odgodu" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "Jer je %(white)s izgubio vezu prema poslužitelju, a %(black)s zatražio odgodu" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "Jer je %(white)s izgubio vezu s poslužiteljem" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "Jer je %(black)s izgubio vezu s poslužiteljem" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "Jer su se oba igrača složila s time" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "Zbog uljudnosti igrača" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Jer je igrač odustao. Nema pobjednika zbog rane faze partije" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Jer je programski pogonik %(white)s zamro" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "Jer je programski pogonik %(black)s zamro" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Jer je izgubljena mrežna veza prema poslužitelju" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Razlog je nepoznat" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "min" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "sek" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Asimetrično nasumice" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "Atomski šah - Atomic" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "Uobičajena šahovska pravila sa skrivenim figuricama\n" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Na slijepo" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "Uobičajena šahovska pravila sa skrivenim pješacima\n" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "Skriveni pješaci" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "Uobičajena šahovska pravila sa skrivenim figurama\n" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "Skrivene figure" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "Uobičajena šahovska pravila sa svim bijelim figurama\n" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Svi bijeli" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "Ludnica - Bughouse" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "http://brainking.com/en/GameRules?tp=2\n" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Kut" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "Luda kuća - Crazyhouse" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischerov nasumični - Random " #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "Jedan igrač počinje s jednom figurom Skakača manje" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Skakač prednosti" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Gubitnički - Losers " #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "Klasična šahovska pravila\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Uobičajeno" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "Jedan igrač počinje s jednim pješakom manje" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Pješak prednosti" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Pješaci izmakli" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Pješaci pogurnuti" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "Jedan igrač počinje s figurom kraljice manje" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Kraljica prednosti" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Nasumično" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "Jedan igrač počinje s jednom figurom topa manje" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Top prednosti" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "Samoubilački šah - Suicide" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Preokrenuto" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Još nisi otvorio nijedan razgovor" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Samo zabilježeni korisnici mogu općiti s tim kanalom" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Nijedan razgovor nije izabran" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Podižu se igračevi podatci" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "Prima se popis igrača" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Više kanala" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Više igrača" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Razgovori" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Obavijest o razgovoru" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "Odaberi djelatni direktorij" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "Odaberi programski pogonik" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "Šahovski pogonici" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Ponudi uzvrat" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Igraj uzvrat" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Poništi jedan potez" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Poništi dva poteza" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "Partija je privremeno zaustavljena" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Učitana partija" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Pohranjena partija" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "Raščlanitelj je pokrenut" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "Poslao si ponudu za prekid" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "Poslao si ponudu za odgodu" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Poslao si ponudu za remi" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "Poslao si ponudu za stanku" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "Poslao si ponudu za nastavak" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "Poslao si ponudu za povrat poteza" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "Zatražio si od protivnika povlačenje poteza" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Programski pogonik, %s, je isključen" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess je izgubio vezu s programskim pogonikom jer je on isključen.\n\nMožeš pokušati pokrenuti novu partiju s tim programskim pogonikom ili pokušati igrati protiv drugoga." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Prekini" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "Ova partija se može automatski prekinuti bez gubitka ranga jer još nisu povučena dva poteza" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "Ponudi prekid" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "Tvoj se protivnik mora suglasiti s prekidom partije jer su dva ili više poteza već povučena" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "Ova se partija ne može odgoditi jer su jedan ili oba igrača gosti" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "Zatraži remi" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "protiv" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Skoči na početni položaj" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Povuci jedan potez unazad" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Povuci jedan potez naprijed" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Skoči na najpozniji položaj" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess nije mogao podići postavke tvoje ploče" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Postavke tvoje ploče su iznova podešene. Ukoliko se ova poteškoća bude ponavljala, trebao bi izvijestiti o tome razvijatelje" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Ti" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gost" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Ispravi potez, ili započni igrati s nečim čitljivim" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Otvori partiju" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Pohrani partiju" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Sve datoteke" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Prepoznaj vrstu automatski" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Sve šahovske datoteke" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Nepoznata vrsta datoteke '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "Nije bilo moguće pohraniti '%(uri)s' jer PyChess ne prepoznaje format '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Nije moguće pohraniti datoteku '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Nemaš potrebne ovlasti za spremanje datoteke.\nMolim provjeri jesi li unio točnu lokaciju i probaj ponovo." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess nije mogao pohraniti partiju" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Postoji %d partija s nepohranjenim potezima." msgstr[1] "Postoje %d partije s nepohranjenim potezima." msgstr[2] "Postoji %d partija s nepohranjenim potezima." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Pohrani poteze prije zatvaranja?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Pohrani %d zapis" msgstr[1] "_Pohrani %d zapisa" msgstr[2] "_Pohrani %d zapisa" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Pohraniti tekuću partiju prije njena zatvaranja?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Nije moguće kasnije nastaviti partiju,\nako je ne spremiš." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Obavijesni prozor PyChessa" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "od" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Ljudsko biće" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Hitro" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minute:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Dodatak:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d sek/potez" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d sek/potez" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Prednosti" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "šah" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Uđi u igru" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "Odaberi knjižnu datoteku" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "Knjige otvaranja" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "Odaberi putanju za Gaviota TB" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Otvori zvučnu datoteku" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "Zvukovne datoteke" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Bez zvuka" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Zvučni signal" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Izaberi zvučnu datoteku..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Neopisana lista" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Možeš započeti novu partiju s Partija > Nova partija, u prozoru nove partije možeš izabrati Igrači, Nadzor vremena i Šahovske inačice." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Možeš izabrati između 8 različitih razina složenosti za igru protiv računala. " #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "Inačice šaha su kao figure zadnjega reda kad su postavljene na ploču." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "Za pohranu partije Partija > Pohrani partiju kao, imenuj datoteku i odaberi kamo je želiš pohraniti. Pri dnu odaberi vrstu ekstenzije datoteke, a onda Pohrani." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "Znaš li da možeš zvati zastavicu kad je ura na tvojoj strani, Radnje > Zovi zastavicu." #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "Pritiskom Ctrl+Z nudi se protivniku moguće vraćanje poteza." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Za igranje u načinu Cijeli zaslon, samo pritisni F11. Za povratak nazad, pritisni F11 iznova." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "Savjetodavni način raščlanjuje tvoju igru, omogući ovu vrstu igre Ctrl+H." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Špijunski način raščlanjuje tvoju igru, omogući ovu vrstu igre Ctrl+Y." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "Možeš igrati šah slušajući zvukove u igri; za to, Postavke > Mogućnosti > Zvuk, omogući Koristi zvukove u PyChessu te izaberi svoje omiljene zvukove." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Znaš li da možeš pomoći u prevođenju PyChessa na tvoj jezik, Help > Prevedi Pychess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Znaš li kako je moguće završiti šahovsku partiju u samo 2 potezna kruga?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Znaš li da broj mogućih šahovskih partija nadilazi broj atoma u Svemiru?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Uzvik" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Šah uzvika - Shout " #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Neslužbeni kanal %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "potez treba figuru i poveznicu" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "promocijski potez bez pretvorene figure je nepravilan" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "uzimajuća oznaka (%s) je nepravilna" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "i" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "remizira" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "matira" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "šahira protivnika" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "poboljšava sigurnost kralja" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "blago poboljšava sigurnost kralja" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "pomiče topa u otvorenu kolonu" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "pomiče topa u poluotvorenu kolonu" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "pomiče lovca u 'fianchetto': %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "pretvara pješaka u %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "vrši rokadu" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "uzima nazad materijal" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "žrtvuje materijal" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "izmjenjuje materijal" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "uzima materijal" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "spašava %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "prijeti dobitkom materijala s %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "povećava pritisak na %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "brani %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "pritišće protivnika %(oppiece)s na %(piece)s na %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Bijeli ima novu figuru u predstraži %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Crni ima novu figuru u predstraži %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s ima novog izmaklog pješaka na %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "poluotvoreno" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "u %(x)s%(y)s koloni" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "u %(x)s%(y)s kolonama" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s ima dvostrukog pješaka %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s ima nove dvostruke pješake %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s ima usamljenog pješaka u %(x)s koloni" msgstr[1] "%(color)s ima usamljene pješake u %(x)s kolonama" msgstr[2] "%(color)s ima usamljene pješake u %(x)s kolonama" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s pomiče pješake u formaciji bedema" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s ne može više izvršiti rokadu" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s ne može više izvršiti rokadu na kraljičinoj strani" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s ne može više izvršiti rokadu na kraljevoj strani" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s ima novog zarobljenog lovca na %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "razvija pješaka: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "približava pješaka zadnjem redu: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "dovodi %(piece)s bliže protivničkom kralju: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "razvija %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "postavlja %(piece)s u aktivniji položaj: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Bijeli bi trebao napraviti pješački napad na desnoj strani" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Crni bi trebao napraviti pješački napad na lijevoj strani" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Bijeli bi trebao napraviti pješački napad na lijevoj strani" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Crni bi trebao napraviti pješački napad na desnoj strani" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Crni ima više sputan položaj" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Crni ima pomalo sputan položaj" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Bijeli ima više sputan položaj" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Bijeli ima pomalo sputan položaj" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "Notacija" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "Notirana partija" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "Dodaj početni komentar" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Dodaj komentar" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Uredi komentar" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "Prisiljeni potez" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "Dodaj znamen poteza" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "Nejasan položaj" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "Prisiljeni potez - Zugzwang" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "Napredak razvoja figura" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "Inicijativa" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "S napadom" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "Nadomjestak" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "Protuigra" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "Vremenski tjesnac" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "Dodaj znamen procjene" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "Ukloni znamene" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "Ukloni inačicu" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "krug %s" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "Prijedlozi" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "Lista za prijedloge omogućit će računalni savjet tijekom svakog dijela partije" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Službena ploča PyChessa" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Knjiga otvaranja" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Knjiga otvaranja će te pokušati nadahnuti tijekom faze otvaranja igre pokazujući ti uobičajene poteze šahovskih majstora" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "Raščlamba po %s" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "%s će pokušati predvidjeti koji je potez najbolji i koja strana ima prednost" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "Raščlamba prijetnje po %s" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "%s će prepoznati koje bi prijetnje postojale da je tvoj protivnik bio na potezu " #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "Izračunava se..." #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "Programski ishodi su u jedinicama pješaka, iz kuta gledanja Bijeloga." #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "Dodavanje prijedloga može ti pomoći u nalaženju zamisli, ali usporava računalnu analizu." #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "Ploča završnice" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "Ploča završnice će prikazati točnu raščlambu kad preostane samo nekoliko figura na šahovnici." #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "Mat u %d" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "U ovom položaju,\nnema pravilnog poteza." #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Razgovor" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Lista za razgovor dopušta ti općenje s tvojim protivnikom tijekom partije, pod pretpostavkom da je on ili ona zainteresirana za to" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Komentari" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Lista za komentare pokušat će raščlaniti i objasniti odigrane poteze" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Početni položaj" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s povlači %(piece)s na %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "Programski pogonici" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "Izlazna lista programskog pogonika pokazuje misaoni tok šahovskih pogonika (računalnih igrača) tijekom partije " #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "Nijedan programski pogonik (računalni igrač) ne sudjeluje u ovoj partiji." #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Povijest poteza" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "Lista poteza bilježi igračke poteze i omogućuje ti kretanje kroz povijest partije" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Omjer" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "Lista s omjerom pokušava procjenjivati položaje i pokazuje ti grafički napredak partije" pychess-0.12beta3/lang/ro/0000755000175000017470000000000012176727272014445 5ustar tamasuserspychess-0.12beta3/lang/ro/LC_MESSAGES/0000755000175000017470000000000012176727272016232 5ustar tamasuserspychess-0.12beta3/lang/ro/LC_MESSAGES/pychess.po0000644000175000017470000023726312161415524020251 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess caută motoarele dvs. de șah. Va rugăm așteptați." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "Conectare la Șah pe Internet" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Titlu" #: glade/fics_logon.glade:70 msgid "text" msgstr "text" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Conectare la Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Parolă:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nume:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Autentificare drept _Vizitator" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rturi;" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Înreg_istrare" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Provoacă: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Trimite Provocare" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Provocare:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Fulger:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standard:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Bliț" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer aleator, Negru" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sec/mutare, Alb" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Editează căutare" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Necronometrat" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minute: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Câștig: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Control timp: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Control timp" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Irelevant" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Evaluarea ta: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Bliț)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Evaluarea oponentului: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Când butonul este „blocat”, relația dintre „Evaluarea adversarului”\nși „Evaluarea ta” va fi păstrată când:\na) evaluarea ta pentru tipul de joc căutat a crescut\nb) schimbi varianta sau controlul timpului" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centru:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Toleranță:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Ascunde" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Evaluarea oponentului" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Alb" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Negru" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Culoarea ta" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Joacă șah cu regulile normale" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Joacă" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Variantă șah" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Joc evaluat" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Acceptă oponenții manual" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opțiuni" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Șah pe Internet: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "Șterge _căutările" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Acceptă" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Aleator, 1800↓, Negru" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sec/mutare, 1400↑, Alb" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manual" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Trimite căutare" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Creează căutare" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "Căutări / _Provocări" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Evaluare" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Timp" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Grafic căutări" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "Niciun jucător pregătit" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Provoacă" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Lista _jucătorilor" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Lista j_ocurilor" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Propune _reluare" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "C_edează" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Propune remiză" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Pre_vizualizează" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "Suspend_at" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Știri" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Afișează _conversații" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "Închide _sesiunea" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Unelte" #: glade/findbar.glade:7 msgid "window1" msgstr "window1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 din 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Precedent" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Următor" #: glade/findbar.glade:161 msgid "Search:" msgstr "Caută:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Joc nou" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Pornește jocul" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "Jucătorul _negru" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "Jucătorul _alb" #: glade/newInOut.glade:336 msgid "Players" msgstr "Jucători" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Bliț:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rapid:\t15 min + 10 sec/mutare" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40 min + 15 sec/mutare" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "Joacă șah normal" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Joacă șah Fisher Aleator" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Deschide joc" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Poziția inițială" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Introdu notația de joc" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promovare" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Regină" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Tură" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Nebun" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Cal" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "În ce se promovează pionul?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Client de șah pentru Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informații joc" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Eveniment:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Pagină web:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Rundă:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Date joc" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Dată joc" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferințe" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Numele afișat al primului jucător uman, de exemplu Ion." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Numele _primului jucător uman:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Numele afișat al jucătorului oaspete, de exemplu Maria." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Numele celui de-al _doilea jucător uman:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "Ascunde taburi când numai un joc este deschis" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Dacă este ales, ascunde fila în partea superioară a ferestrii de joc când aceasta nu este necesară." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "_Rotește tabla automat pentru jucătorul uman la mutare" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Daca este ales, tabla se va întoarce dupa fiecare mutare pentru a arătă vederea naturală a jucătorului la mutare." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Modul de afișa_re fața în față" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Dacă este ales, piesele negre vor fi orientate în jos, adecvat pentru a juca împotriva prietenilor pe dispozitive mobile." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Prefera figurine în _notații" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Dacă este ales, PyChess va folosi figurine pentru a arăta piesele mutate în locul majusculilor." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Opțiuni generale de afișare" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "Animație totală a ta_blei" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animează piesele, rotația tablei și altele. Recomandat doar pe calculatoarele performante." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animează doar _mutările" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Animează doar mutările pieselor." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Fără animații." #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Nu anima nimic. Recomandat pentru calculatoarele lente." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animație" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_General" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Utilizează _analizator" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Utilizează analizator _inversat" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Se analizează" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Dezinstalează" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Ac_tiv" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Panouri laterale instalate" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "_Panouri laterale" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Utilizează sunete în PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Un jucător dă șah:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Un jucător mută:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Jocul e remiză" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Jocu_l e pierdut:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Jocul este câștigat:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Un jucător c_apturează:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Jocul e _configurat:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Mutări _observate" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Finalizări obs_ervate" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Redă sunet când..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Sunete" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Joc" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "Joc _nou" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Joacă șah pe _internet" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "Încarcă joc" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Configurează poziția" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Introdu _notația jocului" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Salvează joc" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "S_alvează joc ca" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Evalua_re jucător" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Acțiuni" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Oferă oprire_a jocului" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Oferă suspendarea _jocului" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Propune _pauză" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Prop_une revenire" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Cere mutare" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Vizualizează" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Rotește tabla" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Ecran complet" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Părăsește _Ecran Complet" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "Afișează panourile laterale" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Vizualizator jurna_l" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Mod ajutător" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Mod spion" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "A_jutor" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Despre șah" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Cum se joacă" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Tradu PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Pontul zilei" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Ieși din PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Închide _fără a salva" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Salvează %d documente" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Există %d jocuri cu mutări nesalvate. Salvează modificări înainte de închidere?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Alege jocurile pe care vrei să le salvezi:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Dacă nu salvezi, noile modificări către jocurile tale vor fi pierdute definitiv." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "A_dversat:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "Culoarea _ta" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "Începe _joc" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Autentificare ca _oaspete" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "_Nume utilizator:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Conecteaza la FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Sfatul Zilei" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Arată sfaturi la pornire" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://ro.wikipedia.org/wiki/%C5%9Eah_%28joc%29" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://ro.wikipedia.org/wiki/%C5%9Eah_%28joc%29" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Bun venit" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "The connection was broken - got \"sfârșit de fișier\" message" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' nu e un nume înregistrat" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Parola întrodusă nu este validă.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Conectare la server" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Autentificare pe server" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Configureaza mediul" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Conectat" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Deconectat" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Neevaluat" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Evaluat" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privat" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Eroare la conectare" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Eroare autentificare" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Conexiunea a fost închisă" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Eroare adresă" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Deconectare automată" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Ați fost deconectați pentru că ați fost inactive pentru mai mult de 60 minute." #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Victorie" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Remiză" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Pierdere" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "Pe FICS, evaluarea ta \"Wild\" cuprinde toate variantele următoare pe toate timpurile:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Poștă electronică" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Utilizat" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "total online" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Se conectează" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Necunoscut" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Momentan ești autentificat ca oaspete.\nUn oaspete nu poate să joace jocuri evaluate și în consecința lista jocurile oferite va fi mai mică." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Înscrie-te acum" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nume" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tip" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Ceas" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Căutări active: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s sec" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s sec" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Bliț" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Fulger" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Wild" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Jucător alb" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Jucător negru" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipul jocului" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Jocuri în desfășurare: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Adversar" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Dată/Oră" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Provocare: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Această opțiune nu este disponibilă când provoci un jucător" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Modifică căutarea: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d sec/mutare" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manual" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Nu poți juca jocuri evaluate pentru că ești autentificat ca oaspete" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Nu poți juca jocuri evaloate pentru că \"Necronometrat\" este ales. " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "și pe FICS, jocurile necronometrate nu pot fi evaluate" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Această opțiune nu este dispobilă pentru că provoci un oaspete, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "iar oaspeții nu pot juca jocuri evaluate" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Amestecă" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Alte" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Nu poți alege o variantă pentru ca \"Necronometrat\" este ales, " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "și pe FICS, jocurile necronometrate se joaca cu regulile normale" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Modifică toleranța" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrator" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Cont legat la ochi" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Cont calculator" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Cont echipa" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Utilizator neînregistrat" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Consilier șah" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Reprezentant serviciu" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Director turneu" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Director mamer" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Mare maestru internațional" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Maestru internațional" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "Maestru FIDE" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Adversarul v-a oferit o remiză. Acceptați?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Adversarul v-a oferit o remiză. Dacă acceptați, jocul se va termina cu scorul 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Adversarul vrea să renunțați la joc. Acceptați?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Adversarul a cerut ca jocul sa fie terminat. Dacă acceptați, jocul se va termina fără modificarea evaluarilor." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Adversarul dumneavoastra vrea să suspende jocul. Acceptați?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Adversarul vrea să refacă %s mutăre(i). Acceptați?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Adversarul a cerut refacerea ultimei(lor %s) mutări." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Adversarul dumneavoastră vrea să întrerupă jocul. Acceptați?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Adversul a cerut suspendarea jocului. Dacă acceptați ceasul jocului se va opri până când amandoi jucători sunt deacord să reia jocul." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Adversarul dumneavoastră vrea să reia jocul. Acceptați?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Adversarul a cerul reluarea jocului. Dacă acceptati ceasul jocului va continue de când a fost întrerupt." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Abdicarea" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "Oferta de remiză" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "Oferta de întrerupere" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "Oferta de suspendare" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "Oferta de întrerupere" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "Oferta de reluare" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "Oferta de schimbare a părții" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "Oferta de revenire" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "să renunțați" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "să oferiți remiză" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "oferă oprirea jocului" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "oferă suspendarea jocului" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "să oferiți pauză" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "să oferiți reluare" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "să oferiți schimbați partea" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "oferă refacerea ultimei mutări" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "să cereți adversarului să mute" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Adversarul nu a depășit timpul." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "Cronomentrul nu a fost pornit." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Nu puteți schimba partea în timpul jocului." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Ați încercat să refaceți prea multe mutări." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Adversarul îți cere să te grăbești!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "În general, aceasta nu înseamnă nimic, jocul fiind bazat pe timp, dar dacă vrei să-i fii pe plac adversarului, poate ar trebui să acționezi." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s a fost respinsă de adversar." #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Poți încerca să trimiți din nou solicitarea către adversarul tău mai târziu." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s a fost restrasă de către adversar" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Adversarul tău s-a răzgândit." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Nu se poate accepta %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess nu a fost capabil sa accepte oferta %s. Probabil deoarece aceasta a fost revocată." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s întoarce o eroare" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Diagrama Chess Alpha 2" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Nu s-a putut încărca diagrama '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Poziție de șah" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Poziție simplă de șah" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Mutarea a eșuat pentru că %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Joc de șah" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "împotriva." #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "Înlocuiește" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Fișierul există" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Un fișier numit '%s' există deja. Se dorește înlocuirea?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Fișierul există deja în '%s'. Dacă îl înlocuiți, conținutul său va fi suprascris." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Nu s-a putut salva fișierul" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Eroarea a fost: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Serverul destinație nu e disponibil" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "A murit" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Eveniment local" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Site local" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Pion" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Rege" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Q" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Partida s-a încheiat cu remiză" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s a câștigat jocul" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s a câștigat jocul" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Programul a fost terminat" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Jocul a fost suspendat" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Jocul a fost abandonat" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Pentru că aceeași poziție a fost repetată de trei ori la rând" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Deoarece ultimele 50 de mutari nu au schimbat situația jocului" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Pentru că amândoi jucători au rămas fără timp" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "Because %(mover)s a fost pus în pat." #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Pentru că jucătorii au fost deacord să" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Din cauza deciziei unui administrator" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Pentru că jocul a depășit lungimea maximă" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Pentru că %(loser)s a renunțat" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Pentru că %(loser)s a rămas fără timp" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Pentru că %(loser)s s-a deconectat" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Pentru că %(loser)s a pierdut toate piesele mai puțin regele" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Pentru că un jucător s-a deconectat" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Pentru că un jucător a pierdut conexiunea, iar celalt jocător a cerut o amânare" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Pentru că motorul de șah %(white)s a murit" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Pentru că conexiunea către server a fost pierdută" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Motivul este necunoscut" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Aleator asimetric" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Legat la ochi" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Colț" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer aleator" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Cotele calului" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Pierzatori" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Cotele pionului" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Cotele reginei" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Aleator" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Cotele turei" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Răsturnat" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Nu ați deschis nicio conversați încă" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Doar utilizatorii înregistrați poti vorbi pe acest canal" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Nicio conversație nu a fost selectată" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Se încarcă datele jucătorului" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Mai multe canale" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Mai mulți jucători" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Conversații" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Informații desre coversație" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Oferiți revanșă" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Jucați revanșă" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Refă o mutare" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Refă două mutări" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Joc încărcat" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Joc salvat" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Ai trimis o ofertă de remiză" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Motorul, %s, a murit" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess a pierdut legătura cu motorul; probabil acesta s-a oprit.\n\nPuteți incerca să porniți un joc nou cu motorul sau să jucați împotriva altuia." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "împotriva" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Revino poziția inițială" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Revino o mutare înapoi" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Revino o mutare înainte" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Revino la ultima mutare" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess nu a putut încărca setările dumneavoastră de panou" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Setările dumneavoastră de panou au fost resetate. Dacă problema persistă, ar trebui să o raportați dezvoltatorilor." #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Oaspete" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Corectați mutarea, sau începeți jocul cu ce s-a putut citi" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Deschide joc" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Salvează joc" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Toate fișierele" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Detectează tip automat" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Toate fișierele de șah" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Tip de fișier necunoscut '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "Nu s-a putut salva '%(uri)s' deoarece PyChess nu știe formatul '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Nu se poate salva fișierul '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Nu aveți drepturile necesare pentru a salva fișierul.\nVerificați dacă ați introdus calea corectă și reîncercați." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess nu a fost capabil să salveze jocul" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Există %d joc cu mutări nesalvate." msgstr[1] "Există %d jocuri cu mutări nesalvate." msgstr[2] "Există %d jocuri cu mutări nesalvate." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Salvează mutări înainte de închidere" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Salvează %d document" msgstr[1] "_Salvează %d documente" msgstr[2] "_Salvează %d de documente" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Salvați jocul curent înainte de a-l închide?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Nu este posibil să continuați jocul mai târziu,\ndacă nu-l salvați." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Fereastra de informare PyChess" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "din" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Ființă umană" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Rapid" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minute:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Progres:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d sec/mutare" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d sec/mutare" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Probabilitate" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Intră în joc" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Deschide fișier sunet" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Fără sunet" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Alege fișier sunet..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Panou nedescris" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Poți începe un joc nou cu Joc > Joc nou. În fereastra Joc nou poți să alegi Jucători, Control timp și Varianta de șah." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Puteți să alegeți 8 moduri de dificulatate pentru a juca împotriva calculatorul." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "Pentru a salva un joc Joc > Salvează Joc, dați un nume de fișier și alegeți un să fie salvat. În partea de jos alegeți extensia fișierului și apoi Salveaza." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Pentru a juca cu Ecran complet apăsați F11. Pentru a reveni, apăsați F11 din nou." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "Modul sfat analizează jocul dumneavoastra. Pentru activare apăsați Ctrl+H" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Modul spion analizează jocul adversarului. Pentru activare apăsați Ctrl+Y" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Știați că puteți traduce PyChess în limba dumneavoastră? Help > Traduceți PyChess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Știați că este posibil ca un joc de șah să se termine în 2 mutări?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Știați că numărul posibil de jocuri de șah este mai mare decât numarul de atomi din Univers?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Strigă" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Strigă șah" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Canal neoficial %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "mutarea necesită o piesă și o căsuță" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "căsuța capturată (%s) este incorectă" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "și" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "remize" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "maturi" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "pune adversarul în șah" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "imbunătățește apărarea regelui" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "îmbunătățește ușor apărarea regelui" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "mută o tură pe o coloană deschisă" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "mută o tură pe o coloană parțial deschisă" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "muta nebun in fianchetto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "schimbă un pion în %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "face rocada" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "ia înapoi material" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "sacrifică material" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "schimbă material" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "capturează material" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "recupereaza un(o) %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "amenință să câștige material prin %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "mărește presiunea pe %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "apără %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Albul are o nouă piesă în avanpost: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Negrul are o nouă piesă în avanpost: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "semi-deschis" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "în fișierul %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "în fișierele %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s are un pion dublu %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s are un nou pion dublu %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s are un pion izolat pe coloana %(x)s" msgstr[1] "%(color)s are pioni izolati pe coloana %(x)s" msgstr[2] "%(color)s are pioni izolati pe coloana %(x)s" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s nu mai poate face rocada" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s nu mai poate face rocada pe partea reginei" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s nu mai poate face rocada pe partea regelui" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "dezvolta un pion: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "aduce un pion mai aproapte de ultima linie: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "dezvoltă un(o) %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Negrul are o poziție înghesuită" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Albul are o poziție înghesuită" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Panoul PyChess oficial." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Cartea de deschideri" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Cartea de deschideri va încerca să vă inspire în timpul deschiderii jocului arătându-vă mutări frecvente ale maeștrilor din șah" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Conversații" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Panoul de conversații vă dă posibilitate să comunicați cu adversarul dumneavoastră în timpul jocului, presupunând ca el sau ea este înteresat(ă)." #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Comentarii" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Panoul de comentarii va încerca să analizeze și să explice mutările jucate" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Pozițiă inițială" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Istoric mutări" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "Fila cu mutări înregistrează mutările jucătorilor si vă dă posibilitatea să navigați prin istoria jocului" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Scor" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "Panoul de scor încearcă să evalueze pozițiile și să va arate un grafic al progresului jocului," pychess-0.12beta3/lang/fi/0000755000175000017470000000000012176727272014423 5ustar tamasuserspychess-0.12beta3/lang/fi/LC_MESSAGES/0000755000175000017470000000000012176727272016210 5ustar tamasuserspychess-0.12beta3/lang/fi/LC_MESSAGES/pychess.po0000644000175000017470000020376212161415524020224 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess tutkii käytettävissä olevia ohjelmistoja. Odota hetki." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Yhdistä Internet-peliin." #: glade/fics_logon.glade:55 msgid "Title" msgstr "Nimi" #: glade/fics_logon.glade:70 msgid "text" msgstr "teksti" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Yhdistä Free Online Chess Serveriin" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "Salasana:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "Nimi:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Kirjaudu _vierailijana" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rts:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "S_ign up" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Salamointi" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Vakio:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Hyökkäys:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "PyChess - Internet Chess: FICS" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "Hyväksy" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sec/siirto, 1400↑, Valkoinen" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manual" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rating" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Aika" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Seek _Graph" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Pelaajaa valmiina" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Haaste" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Uutiset" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Työkalut" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Uusi peli" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Pelaajat" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torni" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Lähetti" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Ratsu" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minuuttia:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/zu/0000755000175000017470000000000012176727272014463 5ustar tamasuserspychess-0.12beta3/lang/zu/LC_MESSAGES/0000755000175000017470000000000012176727272016250 5ustar tamasuserspychess-0.12beta3/lang/zu/LC_MESSAGES/pychess.po0000644000175000017470000020302012161415524020247 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2009. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Izwi elihluthulelo:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Igama:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Vuma" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Ukulinganiselwa" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Isikhathi" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/sv/0000755000175000017470000000000012176727272014455 5ustar tamasuserspychess-0.12beta3/lang/sv/LC_MESSAGES/0000755000175000017470000000000012176727272016242 5ustar tamasuserspychess-0.12beta3/lang/sv/LC_MESSAGES/pychess.po0000644000175000017470000020712512161415524020253 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - anslut till internet" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Lösenord:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Namn:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Anslut som _Gäst" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Vit" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Svart" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet Chess: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Acceptera" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Sök" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rankning" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tid" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Erbjud _Remi" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nyheter" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Verktyg" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nytt Spel" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Starta Spelet" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Spelare" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Ange en not för spelet" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promovering" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dam" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torn" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Löpare" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Riddare" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Vad vill du befodra bonden till?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Schack klient för Gnome desktop" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Spel information" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Händelse:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Plats:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Omgång:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Spel data" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Spel datum" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Inställningar" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Allmänna visnings alternativ" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animering" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analyserar" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Använd ljud i PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "En spelare _förflyttar" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Spelet är _förlorat" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Spelet är _vunnet" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Gjorda förflyttningar" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Spela ljud när..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Spel" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nytt spel" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Ladda Spel" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Spara Spel" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "_Spara Spel _Som" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Spelar _Betyg" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Åtgärder" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Visa" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Rotera Brädet" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Logg Visare" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Hjälp" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Om Schack" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Avsluta _utan att spara" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://sv.wikipedia.org/wiki/Schack" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://sv.wikipedia.org/wiki/Schack" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' är inte ett registrerat namn" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Ej Rankat" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Rankat" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Anslutningsfel" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Logga in - Fel" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Anslutningen var stängd" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-post" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Spenderat" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "Total tid online" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Ansluter" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Okänd" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registrera nu" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Namn" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Typ" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Klocka" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Vit Spelare" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Svart Spelare" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Speltyp" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Motståndare" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Din motståndare har inte slut på tid." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Din motståndare ber dig att skynda!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s accepterades inte av din motståndare" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Du kan försöka skicka erbjudandet till din motståndare senare i spelet igen." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Kunde inte acceptera %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Shack spel" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Ersätt" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Filen existerar" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "En fil med namnet '%s' existerar redan. Vill du ersätta den?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Filen existerar redan i '%s'. Om du ersätter den så kommer innehållet att bli överskrivet." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Kunde inte spara filen" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Felet var: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Lokal händelse" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Lokal sida" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Q" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Spelet slutar oavgjort" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Partiet har skjutits upp" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Spelet har avbrutits" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Ladda spel" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Spara spel" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "du skickade ett lika erbjudande" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Motor, %s, har dött" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "mot" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gäst" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Öppna spel" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Spara spel" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Alla filer" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Identifiera typ automatiskt" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Alla shack filer" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Okänd filtyp '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Kunde inte spara filen '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess kunde inte spara spelet" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Spara nuvarande spel innan du avslutar det?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Människa" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minuter:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Förstärkning" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Gå in i spel" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Öppna ljudfil" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Inget ljud" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Pip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Välj ljudfil..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "drag" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "befordra en Bonde till en %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "slott" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "försvarar %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Öppnar bok" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Kommentarer" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Drag-historia" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Poäng" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/nb/0000755000175000017470000000000012176727272014424 5ustar tamasuserspychess-0.12beta3/lang/nb/LC_MESSAGES/0000755000175000017470000000000012176727272016211 5ustar tamasuserspychess-0.12beta3/lang/nb/LC_MESSAGES/pychess.po0000644000175000017470000024142312161415524020221 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess oppdager motorene dine. Vennligst vent." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Koble til Internett Sjakk" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Tittel" #: glade/fics_logon.glade:70 msgid "text" msgstr "tekst" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Koble til Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Passord:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Navn:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Logg på som _Gjest" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rter:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Reg_istrer deg" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Utfordring: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Send utfordring" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Utfordring:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Lyn:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standard:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Blitz:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer Random, Svart" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sek/trekk, Hvit" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Rediger søk" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Uten tid" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minutter: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Inkrement: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Tidskontroll: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Tidskontroll" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Bryr meg ikke" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Din styrke: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Blitz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Motstanders styrke: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Når denne knappen er «trykket inn» vil forholdet\nmellom «Motstanders styrke» og «Din styrke»\nbevares når \na) din rating for den søkte partitypen endres\nb) du endrer typen eller tidskontrollen" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Senter:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Toleranse:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Skjul" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Motstanders styrke" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Hvit" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Svart" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Din farge" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Spill med vanlige sjakkregler" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Spill" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Sjakkvariant" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Rated parti" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Manuellt godta motstander" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Alternativer" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internett Sjakk: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Slett søk" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Godta" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Random, 1800↓, Sort" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sek/trekk, 1400↑, Hvit" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manuell" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Send søk" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Opprett søk" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Søk / Utfordringer" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rating" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tid" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Søke_graf" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 spillere klare" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Utfordring" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "S_pillerliste" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Spilliste" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Tilby _fortsettelse" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "_Trekk deg" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Tilby _remis" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Forhånds_visning" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "P_auset" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nyheter" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Vis _chat" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Logg av" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Verktøy" #: glade/findbar.glade:7 msgid "window1" msgstr "vindu1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 av 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Forrige" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Neste" #: glade/findbar.glade:161 msgid "Search:" msgstr "Søk:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nytt parti" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Start parti" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Svart spiller:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Hvit spiller:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Spillere" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Hurtig:\t15 min + 10 sek/trekk" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40 min + 15 sek/trekk" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "S_pill normal sjakk" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Spill Fischer Random sjakk" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Åpent parti" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Startposisjon" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Legg inn trekknotasjon" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Forvandling" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dronning" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Tårn" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Løper" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Springer" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Forvandle bonden til hva?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Sjakklient for skrivebordsmiljøet Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess er fri programvare; du kan redistribuere den og/eller modifisere \nden under betingelsene gitt i «GNU General Public License» som er utgitt av \nFree Software Foundation; enten versjon 2 av lisensen eller \n(du kan velge) en senere versjon. \n\nPyChess blir distribuert med håp om at den blir funnet anvendelig, \nmen UTEN NOEN FORM FOR GARANTI; uten til og med indirekte garantier for \nSALGBARHET eller EGNETHET FOR EN BESTEMT BRUK. Se \n«GNU General Public Licence» for nærmere detaljer.\n\nDu skal ha mottatt en kopi av «GNU General Puclic Licence» \nsammen med PyChess; hvis ikke kan du skrive til Free Software Foundation, Inc., \n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Partiinformasjon" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Turnering:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Nettsted:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Runde:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Partidata" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Dato for parti" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Innstillinger" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Det viste navnet er den første menneskelige spilleren, f.eks., Ola." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Navn på _første menneskelige spiller:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Det viste navnet på gjestespilleren, f.eks., Kari." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Navn på andr_e menneskelige spiller:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Skjul faner når kun ett parti er åpent" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Hvis satt så skjules fanene i toppen av spillevinduet når disse ikke trengs." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Auto_roter brettet til gjeldende menneskelige spiller" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Hvis satt vil brettet snu seg etter hvert trekk for å vise den naturlige siden for gjeldende spiller." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Ansikt _til ansikt-visningsmodus" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Hvis satt vil svarte brikker være opp ned, bra for å spille mot venner på mobile enheter." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "_Vis koordinater" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Hvis satt vil spillebrettet vise rader og kolonner for hvert sjakkfelt. Dette er bra for sjakknotasjon." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Foretrekk figuriner i _notasjon" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Hvis satt vil PyChess bruke figuriner for å uttrykke flyttede brikker heller enn store bokstaver." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Generelle visningsvalg" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "F_ull brettanimasjon" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animer brikker, brettrotasjon og mer. Bruk dette på raske maskiner." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Bare ani_mer trekk" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Bare animer brikketrekk." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Ingen _animasjon" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Aldri bruk animasjoner. Bruk dette på trege maskiner." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animasjon" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Generelt" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Bruk _analyseprogram" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Bruk _invers analyse" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analyserer" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Avinstaller" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Ak_tiv" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Installerte sidepanel" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Side_panel" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Bruke lyder i PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "En spiller _sjakker:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "En spiller _trekker:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Partiet er _remis:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Partiet er _tapt:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Partiet er _vunnet:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "En spiller sl_år en brikke:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Parti er _satt opp:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Observerte trekk:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Observerte _avslutninger:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Spill lyd når..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Lyder" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Parti" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nytt parti" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Spill _internett sjakk" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Last parti" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Sett opp posisjon" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Skriv inn parti_notasjon" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Lagre parti" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "L_agre parti som" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Spiller_rating" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "H_andlinger" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Tilby _avbrudd" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Tilby _pause" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Tilby kort _pause" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Tilby _omtrekk" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Krev vinst på tid" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Be om et _trekk" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Vis" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "Snu b_rettet" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Fullskjerm" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "_Forlat fullskjerm" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "Vis _sidepanel" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Vis _Logg" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Hintmodus" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Sp_ionmodus" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Hjelp" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Om sjakk" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Hvordan spille" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Oversett PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Dagens tips" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Avslutt PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Lukk _uten å lagre" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Lagre %d dokumenter" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Det er %d partier med ulagrede trekk. Lagre endringer før du avslutter?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Velg partier du vil lagre:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Hvis du ikke lagrer vil nye endringer til partiene dine gå tapt." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "M_otstander:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Din farge:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Start parti" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Logg på som _gjest" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Bruker_navn:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Koble til FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Dagens tips" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Vis tips ved oppstart" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://no.wikipedia.org/wiki/Sjakk" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://www.sjakk.no/nsf/lover_og_reglementer/fideregler_index.html" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Velkommen" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Tilkoblingen ble brutt - fikk melding om «end-of-file»" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' er ikke et registrert brukernavn" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Passordet som ble skrevet inn var ugyldig.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Kobler til tjener" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Logger på tjener" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Setter opp miljø" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Pålogget" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Avlogget" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Uratet" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Ratet" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privat" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Tilkoblingsfeil" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Påloggingsfeil" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Oppkopling ble stengt ned" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Adressefeil" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Auto-logg-ut" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Du har blitt logget ut fordi du var inaktiv i mer enn 60 minutter" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Vinn" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Remis" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Tap" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "På FICS omfatter «Wild»-ratingen din alle de følgende tidskontrollene:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-post" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Brukt" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "tid totalt pålogget" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Kobler til" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Ukjent" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Du er logget på som en gjest.\nEn gjest kan ikke spille ratede partier og antall tilgjengelige partier er derfor mindre." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registrer deg nå" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Navn" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Type" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Klokke" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Aktive søk: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s sek" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s sek" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Lyn" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Wild" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Hvit spiller" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Svart spiller" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Spilltype" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Kjørende partier: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Motstander" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Dato/tid" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "Lenkeknappen er deaktivert fordi er du logget på som en gjest. Gjester kan ikke etablere ratinger og lenkeknappen har ingen effekt når det ikke er noen rating å knytte «Motstanders styrke» til" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Utfordring: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Dette alternativet er ikke tilgjengelig fordi du utfordrer en spiller" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Rediger søk: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d sek/trekk" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manuell" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Du kan ikke spille ratede partier fordi du er logget inn som en gjest" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Du kan ikke spille ratede partier fordi «Uten tidskontroll» er haket av, " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "og på FICS blir ikke partier uten tidskontroll ratet" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Dette alternativet er ikke tilgjengelig fordi du utfordrer en gjest, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "og gjester kan ikke spille ratede partier" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Shuffle" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Andre" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Du kan ikke velge en variant fordi «Uten tidskontroll» er haket av, " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "og på FICS må partier uten tidskontroll spilles med vanlige sjakkregler" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Endre toleranse" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrator" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Blindsjakkonto" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Maskinkonto" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Lagkonto" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Uregistrert bruker" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Sjakkrådgiver" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Tjenesterepresentant" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Turneringsdirektør" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Mamer Manager" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Stormester" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Internasjonal Mester" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "FIDE Mester" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "L" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Din motstander tilbyr remis. Godta?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Din motstander har tilbudt remis. Hvis du aksepterer tilbudet vil partiet ende med resultatet ½ - ½." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Din motstander vil avbryte partiet. Godta?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Din motstander har bedt om at partiet blir avbrutt. Hvis du godtar tilbudet blir partiet avsluttet uten noen endring i rating." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Din motstander vil pause partiet. Godta?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Din motstander har bedt om at partiet blir pauset. Hvis du godtar tilbudet vil partiet bli pauset og dere kan gjenoppta det senere (når motstanderen din er pålogget og begge spillere godtar å fortsette)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Din motstander ønsker å gjøre om %s trekk. Godta?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Din motstander har bedt om at de siste %s trekk(ene) gjøres om. Hvis du godtar tilbudet vil partiet fortsette fra den tidligere posisjonen." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Din motstander ønsker å pause (kort) partiet. Godta?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Din motstander har bedt om at partiet blir pauset (kort). Hvis du godtar tilbudet vil klokkene bli stoppet til begge spillerne er klare til å fortsette partiet." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Motstanderen din vil fortsette partiet. Godta?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Din motstander har bedt om at partiet fortsettes. Hvis du godtar tilbudet vil klokkene fortsette fra der de ble stoppet." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Oppgivelsen" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "Tidskravet" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "Remistilbudet" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "Avbruddstilbudet" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "Pausetilbudet" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "Pausetilbudet (kort)" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "Fortsettelsestilbudet" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "Tilbudet om å bytte sider" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "Tilbudet om å gjøre om trekk" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "trekk deg" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "krev vinst på tid" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "tilby remis" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "tilby avbrudd" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "tilby en pause" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "tilby en kort pause" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "tilby fortsettelse" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "tilby å bytte sider" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "tilby å gjøre om trekk" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "be motstanderen din om å gjøre et trekk" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Motstanderen din har ikke brukt opp tiden sin." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "Klokkene har ikke blitt startet ennå." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Du kan ikke bytte farger under partiet." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Du kan ikke gjøre om for mange trekk." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Motstanderen din ber deg om å skynde deg" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Generelt betyr ikke dette noenting ettersom partiet er tidsbasert, men dersom du ønsker å glede motstanderen din bør du kanskje gjøre et trekk snart." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s ble avslått av motstanderen din" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Du kan prøve å sende tilbudet til din motstander senere i partiet igjen" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s ble trukket tilbake av motstanderen din" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Motstanderen din ser ut til å ha ombestemt seg." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Kan ikke akseptere %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess kunne ikke få %s tilbud akseptert. Muligens fordi det var trukket tilbake." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s returnerer en feil" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Chess Alpha 2 Diagram" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Kunne ikke laste diagrammet '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Sjakkstilling" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Enkel sjakkstilliing" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "Partiet kan ikke leses til enden fordi en feil i tolkningen av trekk %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Trekket feilet fordi %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Sjakkparti" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "vs." #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "E_rstatt" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Filen eksisterer" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Filen '%s' eksistererer allerede. Ønsker du å erstatte denne?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Filen eksisterer allerede i '%s'. Dersom du ønsker å erstatte den, vil dens innhold bli overskrevet." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Klarte ikke lagre filen" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Feilen var: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Målvert utilgjengelig" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Døde" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Lokal turnering" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Lokalt nettsted" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Bonde" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Konge" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "B" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "S" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Partiet endte remis" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s vant partiet" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s vant partiet" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Partiet har blitt annullert" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Partiet har blitt pauset" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Partiet har blitt avbrutt" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Fordi den samme stillingen ble gjentatt tre ganger på rad" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Fordi de siste 50 trekkene ikke har ført til noe nytt" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Fordi begge spillerne gikk tom for tid" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "Fordi %(mover)s ble satt patt" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Fordi spillerne ble enige om det" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Fordi det ble avgjort av en admin" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Fordi partiet overgikk makslengden" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Fordi %(loser)s ga opp" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Fordi %(loser)s gikk tom for tid" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Fordi %(loser)s ble frakoblet" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Fordi %(loser)s mistet alle brikkene untatt kongen" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Fordi en spiller ble frakoblet" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Fordi en spiller ble frakoblet og den andre spilleren ba om utsettelse" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "På grunn av høflighet fra en spiller" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Fordi en spiller ga seg. Ingen vinner ble funnet på grunn av det tidlige stadiet i partiet" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Fordi %(white)s motor døde" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Fordi tilkoblingen til tjeneren ble mistet" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Årsaken er ukjent" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Asymmetrisk Random" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Blindsjakk" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Hjørne" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer Random" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Springerodds" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Losers" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Bondeodds" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Passerte bønder" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Dyttede bønder" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Dronningodds" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Tilfeldig" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Tårnodds" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Opp-ned" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Du har ikke åpnet noen samtaler ennå" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Bare registrerte brukere kan snakke i denne kanalen" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Ingen samtale valgt" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Laster spillerdata" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Flere kanaler" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Flere spillere" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Samtaler" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Samtaleinformasjon" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Tilby omkamp" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Spill omkamp" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Gjør om ett trekk" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Gjør om to trekk" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Lastet parti" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Lagret parti" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Du har sendt et remistilbud" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Motoren, %s, har dødd" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess har mistet kontakten med sjakkmotoren, mest sannsynlig fordi den døde.\n\nDu kan prøve å starte et nytt parti mot motoren eller du kan prøve å spille mot en annen." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "mot" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Gå tilbake til startstillingen" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Gå tilbake et trekk" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Gå frem et trekk" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Gå til siste stilling" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess kunne ikke laste panelinnstillingene dine" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Dine panelinnstillinger har blitt tilbakestilt. Hvis dette problemet gjentar seg bør du rapportere det til utviklerne" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gjest" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Korriger trekket eller begynn å spille med det som kunne leses" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Åpent spill" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Lagre parti" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Alle Filer" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Oppdag type automatisk" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Alle sjakkfiler" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Ukjent filtype %s" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "Kunne ikke lagre '%(uri)s' siden PyChess ikke kjenner formatet '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Klarer ikke å lagre fil '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Du har ikke nødvendige rettigheter til å lagre filen\nVennligst forsikre deg om at korrekt filsti er angitt og forsøk igjen." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess klarte ikke lagre partiet" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Det er %d parti med ulagrede trekk." msgstr[1] "Det er %d partier med ulagrede trekk." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Lagre trekk før du lukker?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Lagre %d dokument" msgstr[1] "_Lagre %d dokumenter" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Lagre partiet før du stenger det?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Det vil ikke være mulig å fortsette partiet senere\ndersom du ikke lagrer det." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "PyChess informasjonsvindu" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "av" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Menneske" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Hurtig" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutter:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Tillegg:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d sek/trekk" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d sek/trekk" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Odds" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Legg inn parti" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Åpne lydfil" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Ingen lyd" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Velg lydfil..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Ubeskrevet panel" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Du kan starte et nytt parti med PartiNytt parti, i vinduet «Nytt parti» kan du velge Spillere, Tidskontroll og Sjakkvarianter." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Du kan velge fra 8 forskjellige vanskelighetsgrader å spille mot maskinen." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "Sjakkvarianter er som hvordan brikkene på den siste linjen blir plassert på brettet." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "For å lagre et parti PartiLagre parti som, angi filnavnet og velg hvor du vil det skal lagres. På bunnen velger du filtypen og Lagre" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "Visste du at du kan kreve en seier på tid når det er din tur med HandlingerKrev vinst på tid." #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "Trykk Ctrl+Z for å tilby motstanderen å rulle tilbake noen trekk." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "For å spille i Fullskjerm, bare trykk F11. Trykk F11 igjen for å forlate fullskjerm igjen." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "Hintmodus analyserer partiet ditt, aktiver dette ved å trykke Ctrl+H." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Spionmodus analyserer din motstanders parti, aktiver ved å trykke Ctrl+Y." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "Du kan spille sjakk ved å lytte til lydene fra spillet. For dette gå til InnstillingerPreferanserLydfane, aktiver Bruk lyder i PyChess og velg dine foretrukne lyder." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Vet du at du kan hjelpe med å oversette PyChess til ditt språk? HjelpOversett PyChess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Vet du at det er mulig å avslutte et parti sjakk på kun 2 turer?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Vet du at antallet mulige sjakkpartier overgår antallet atomer i universet?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Rop" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Sjakkrop" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Uoffisiell kanal %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "trekket trenger en brikke og et koordinat" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "fangstkoordinatet (%s) er ukorrekt" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "og" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "spiller remis" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "setter sjakk matt" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "setter motstander i sjakk" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "styrker kongestillingen" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "gir en liten forbedring av kongestillingen" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "flytter et tårn til en åpen linje" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "flytter et tårn til en halvåpen linje" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "flankerer løperen: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "forvandler en bonde til en %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "rokerer" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "vinner tilbake materiell" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "ofrer materiell" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "bytter av materiell" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "slår materiell" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "redder en %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "truer å vinne material ved %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "øker trykket mot %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "dekker %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "binder en fiendes %(oppiece)s til %(piece)s på %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Hvit har en ny brikke på utpost: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Svart har en ny brikke på utpost: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s har en ny passert bonde på %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "halvåpen" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "i linjen %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "i linjene %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s har en dobbeltbonde %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s har nye dobbeltbønder %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s har en isolert bonde i linjen %(x)s" msgstr[1] "%(color)s har isolerte bønder i linjene %(x)s" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s flytter bøndene inn i en stonewall-oppstilling" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s kan ikke rokere lenger" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s kan ikke rokere på dronningsiden" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s kan ikke rokere på kongesiden" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s har en ny fanget løper på %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "utvikler en bonde: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "bringer en bonde nærmere sisteraden: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "bringer en %(piece)s nærmere fiendens konge: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "utvikler en %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "setter en %(piece)s mer aktivt: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Hvit burde foreta en bondestorm til høyre" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Svart burde foreta en bondestorm til venstre" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Hvit burde foreta en bondestorm til venstre" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Svart burde foreta en bondestorm til høyre" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Svart har en temmelig trang stilling" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Svart har en noe trang stilling" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Hvit har en temmelig trang stilling" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Hvit har en noe trang stilling" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Offisielt PyChess-panel." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Åpningsbok" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Åpningsboken vil prøve å inspirere deg under åpningsfasen av partiet ved å vise deg vanlige trekk gjort av sjakkmestere" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Chat" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Chat-panelet lar deg kommunisere med motstanderne dine under et parti, gitt at han eller hun er interessert" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Kommentarer" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Kommentarpanelet vil prøve å analysere og forklare trekkene som blir spilt" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Åpningsstilling" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s flytter en %(piece)s til %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Trekkhistorikk" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "Trekklisten holder orden på spillernes trekk og lar deg navigere gjennom partihistorikken" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Poeng" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "Evalueringspanelet prøver å evaluere stillingen og viser deg en graf of partiets fremdrift" pychess-0.12beta3/lang/cs/0000755000175000017470000000000012176727272014432 5ustar tamasuserspychess-0.12beta3/lang/cs/LC_MESSAGES/0000755000175000017470000000000012176727272016217 5ustar tamasuserspychess-0.12beta3/lang/cs/LC_MESSAGES/pychess.po0000644000175000017470000021426312161415524020231 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2012-2013. # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: jui \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Přípojit k internetovým šachům" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Heslo:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "Jméno" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Přihlásit se jako host" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Kontrola času:" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Kontrola času" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerance:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Skrýt" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Síla soupeře" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Bílý" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Černý" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Vaše barva" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Hrát normální šachová pravidla" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Hrát" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Přijmout soupeře ručně" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internetové šachy: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Příjmout" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Odeslat hledání" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Hodnocení" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Čas" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Vyzvat" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Pozorovat" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Začít soukromý chat" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Nabídnout _remízu" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Novinky" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "Zobrazit konzolu" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Nástroje" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "Hledat:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nová partie" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "Start hry" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Černý hráč:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Bílý hráč:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Hráči" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "_Bez omezení" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Bleskově:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rychle:\t15 min + 10 sec/tah" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normálně:\t40 min + 15 sec/tah" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Hrát běžné šachy" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Vstoupit do záznamu hry" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Proměnění" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dáma" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Věž" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Střelec" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Králem" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Proměnit pěšce na kterou figuru?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Šahový klient pro prostředí Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informace o hře" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Událost:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Server:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Kolo:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Hry v datech" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Datum hry" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Předvolby" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Schovat panely, pokud je otevřena pouze jedna hra" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Obecné nadstavení zobrazení" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Bez _animace" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animace" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Obecné" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Použít _analyzátor" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Použít _invertovaný analyzátor" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analyzování" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Odinstalovat" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Témata" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "Po_užívat zvuky v PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Šachy _hráče:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Ta_hy hráče:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Hra je vyro_vnána:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Hra je _prohrána:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Hra je vyh_rána:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Hráčovy z_ajatí:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Hra je na_stavena:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Přehrát zvuk když..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Hra" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nová hra" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Nahrát hru" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Uložit hru" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Uložit hru jako..." #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Výkonnost hráče" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Akce" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Volat vlajku" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Zobrazit" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Otočit šachovnici" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Celá obrazovka" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Opustit _celou obrazovku" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Zobrazit log" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Mód razení" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Mód špiona" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Nápověda" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Co je hra v šach?" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Jak hrát" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Překlad PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Tip dne" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Ukončit PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Zavřít _bez uložení" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Protivník:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Vaše barva:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Spustit hru" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Přihlásit se jako H_ost" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Připojit k FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Tip dne" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Zobrazit tipy při spuštění" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://cs.wikipedia.org/wiki/%C5%A0achy" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://cs.wikipedia.org/wiki/Pravidla_%C5%A1ach%C5%AF" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Vítejte" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "Výsledek" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "Událost" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "Stránka" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "Kolo" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "Datum" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "ECO" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "PyChess Game Databáze" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' není registrované jméno" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Připojení k serveru" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Přihlášení k serveru" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Nastavení prostředí" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Online" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Offline" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Dostupný" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Hraje" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Nečinný" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "Přihlíží" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Nedostupný" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Nehodnocený" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Hodnoceno" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Chyba spojení" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Chyba přihlašování" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Spojení bylo uzavřeno" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Výhra" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Remíza" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Prohra" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Postihy" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Email" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Stráveno" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "celkem online " #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Připojování" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Neznámé" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registrovat nyní" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Jméno" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Typ" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Hodiny" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s sec" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Přijmout výzvu" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Stav" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Hráči: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Bílý hráč" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Černý hráč" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Typ hry" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Běžící hry: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Vaše barva" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Soupeř" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Datum/čas" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Nedělat nic" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Šachový poradce" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Ředitel turnaje" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Velmistr" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Mezinárodní mistr" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "FIDE mistr" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Velmistrině" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Mezinárodní mistrině" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "Dámské mistrovství FIDE" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Rezignace" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "rezignovat" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "nabídnout remízu" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "nabídnout přerušení" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "nabídnout odložení" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "nabídnout pozastavení" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "nabídnout pokračování" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "nabídnout změnu stran" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "nabídnout vzít zpět" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "vyzvat svého protivníka k pohybu" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Váš soupeř požaduje zrychlení." #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Nelze přijmout %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s vrátil chybu" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "PyChess databáze" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Pozice šachů" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Šachová hra" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Všechny soubory" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "Nah_radit" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Soubor existuje" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Soubor pojmenovaný '%s' již existuje. Chcete ho nahradit?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Nelze uložit soubor" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Chyba byla: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Místní událost" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Pěšec" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Král" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Q" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Hra skočila remízou" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Hra byla zabita" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Hra byla ukončena," #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Hra byla přerušena" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Vzhledem k tomu, že hráč ztratil spojení" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "Vzhledem k tomu, že se oba hráči dohodli na odročení hry" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Vzhledem k tomu že hráč ztratil spojení a druhý hráč požaduje odložení" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "Vzhledem k tomu, že %(black)s ztratil spojení se serverem a %(white)s požaduje odložení" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Důvod je neznámý" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "min" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "sec" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Poražení" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normální" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Více kanálů" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Více hráčů" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "Hra je pozastavena" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Načtená hra" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Uložená hra" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Odeslali jste nabídku remízy" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Přerušit" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "Nabídka Přerušit" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "proti" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Host" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Otevřít hru" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Uložit hru" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Všechny soubory" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Detekovat typ automaticky" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Všechny šachové soubory" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Neznámý typ souboru '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Nelze uložit soubor '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Člověk" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Rychle" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minuty:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Přírustek:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Vsoupit do hry" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Otevřít zvukový soubor" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Bez zvuku" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Pípnutí" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Vyberte zvukový soubor..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Pro hru na Celé obrazovce, stačí stisknout F11. Pro přechod zpět, opět stisknout F11." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Víte, že můžete pomoci s překladem PyChess ve vašem jazyce, Nápověda Překlad PyChess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Neoficiální kanál %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "zlepšuje královu bezpečnost" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "mírně zlepšuje královu bezpečnost" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Bílý má poněkud stísněnou pozici" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Bílý má mírně stísněnou pozici" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "Časová tíseň" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "kolo %s" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "Tipy" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "Panel tipů bude poskytovat rady počítače během každé fáze hry" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Oficiální PyChess panel." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "Výpočet ..." #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Chat" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Komentáře" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Výchozí pozice" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s táhnul %(piece)s na %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Historie tahů" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Skóre" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/pt_BR/0000755000175000017470000000000012176727272015033 5ustar tamasuserspychess-0.12beta3/lang/pt_BR/LC_MESSAGES/0000755000175000017470000000000012176727272016620 5ustar tamasuserspychess-0.12beta3/lang/pt_BR/LC_MESSAGES/pychess.po0000644000175000017470000026166412161415524020641 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Alexandro Casanova , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-31 21:46+0000\n" "Last-Translator: salmora8 \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess está verificando seus mecanismos de xadrez. Por favor espere." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Conecte ao Internet Chess" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Título" #: glade/fics_logon.glade:70 msgid "text" msgstr "texto" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Conectar-se ao Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "Sen_ha:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nome:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Conectar-s_e como Convidado" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rtas:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Ca_dastre-se" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Desafio: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Enviar desafio" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Desafiar:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Relâmpago:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Padrão:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Blitz:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Xadrez Aleatório de Fischer, Negras" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10min + 6s/lance, Brancas" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Editar busca" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Sem relógio" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minutos: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Incremento: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Controle de tempo: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Padrão" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Controle de tempo" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Qualquer um" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Sua força: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Blitz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Força do adversário: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Quando este botão estiver no estado \"bloqueado\", a relação\nentre \"a força do adversário\" e \"a sua força\" será\npreservada quando \na) sua classificação para o tipo de jogo procurado for alterada\nb) você alterar a variante ou o controle de tempo" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centro:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerância:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Ocultar" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Força do adversário" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Brancas" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Negras" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Sua cor" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Jogar com as regras normais do xadrez" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Jogar" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Variantes do xadrez" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Jogo valendo Rating" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Aceitar adversário manualmente" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opções" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Xadrez pela Internet: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "Limpar Bus_cas" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Aceitar" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "Rejeitar" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Xadrez Aleatório de Fischer, 1800↓, Negras" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10min + 6s/lance, 1400↑, Brancas" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manual" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Enviar busca" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Criar busca" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Buscas / Desafios" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rating" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Tempo" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Buscar _gráfico" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 jogadores prontos" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Desafiar" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Observar" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Começar conversa privada" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Lista de _Jogadores" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Lista de _Jogos" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Oferecer _Reinício" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Aban_donar" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Oferecer _empate" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Oferecer _Abortar partida" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Pre_visão" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Adiada" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Notícias" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Mostrar _Conversa" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "Mostrar Console" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "Des_conectar" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Ferramentas" #: glade/findbar.glade:7 msgid "window1" msgstr "janela1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 de 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Anterior" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Próximo" #: glade/findbar.glade:161 msgid "Search:" msgstr "Pesquisar:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Novo Jogo" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Iniciar Jogo" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "Jogador das _Negras:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "Jogador das _Brancas:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Jogadores" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "Sem _relógio" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rápido:\t15min + 10s/lance" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40min + 15s/lance" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Jogar pelas regras normais" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Jogar Xadrez Aleatório Fischer" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Jogar xadrez dos perdedores" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Abrir Jogo" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Posição Inicial" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Entrar com Notação de Jogo" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promoção" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dama" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torre" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Bispo" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Cavalo" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Promover Peão a que?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Jogo de xadrez para o ambiente GNOME" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess é um software livre. Você pode redistribuí-lo e/ou modificá-lo\nsob os termos da Licença Pública Geral GNU (GPL) como publicada pela\nFundação do Software Livre, seja a versão 2 da Licença ou (conforme\na sua preferência) qualquer versão mais recente.\n\nO PyChess é distribuído no intuito de que seja útil, \nmas SEM NENHUMA GARANTIA, até mesmo sem a garantia implícita\nde COMERCIALIZAÇÃO ou de CABIMENTO A UM PROPÓSITO PARTICULAR.\nVeja a Licença Pública Geral GNU (GPL) para mais detalhes.\n\nVocê deve ter recebido uma cópia da Licença Pública Geral GNU (GPL)\njunto com o PyChess, Se não, escreva para a Free Software Foundation, Inc.,\n51 Franklin St, Fifth Floor. Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informações do jogo" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Evento:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Site:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Rodada:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Dados do Jogo" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Data do Jogo" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "Gerenciar engines" #: glade/PyChess.glade:602 msgid "Name:" msgstr "Nome:" #: glade/PyChess.glade:614 msgid "Command:" msgstr "Comando:" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "Protocolo:" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "Parâmetros:" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "Parâmetros de linha de comando necessária para a engine." #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "Nome exclusivo da engine utilizada em listas de jogadores pop-up." #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "Caminho completo para o binário da engine de partida ou script." #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "Engines utilizam o protocolo de comunicação uci ou xboard para falar com a GUI.\nSe ele pode usar ambos, pode definir aqui o que você gosta." #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "Diretório de trabalho:" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "O diretório a partir de onde a engine será iniciada." #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferências" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "O nome exibido do primeiro jogador humano, por exemplo, João." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Nome do p_rimeiro jogador humano:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "O nome exibido do jogador convidado, por exemplo, Maria." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Nome do s_egundo jogador humano:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "Es_conder abas quando houver somente um jogo aberto" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Se marcado, oculta a aba no topo da janela do jogo quando não é necessária." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "A_uto-rotacionar o tabuleiro para o jogador humano atual" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Se marcado, o tabuleiro será rotacionado depois de cada lance, para mostrar a visualização natural do jogador atual." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "_Modo de visualização Face a Face" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Se marcado, as peças negras ficarão de cabeça para baixo, adequado para jogar contra amigos em aparelhos móveis." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Mostrar c_oordenadas" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Se marcado, o tabuleiro mostrará as coordenadas de cada casa do tabuleiro. É útil para a notação do xadrez." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "Mostrar peças _capturadas" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "Se definido, as peças capturadas serão mostradas ao lado do tabuleiro." #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Usar figuras na _notação" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Se marcado, o PyChess utilizará figuras para mostrar as peças movidas, em vez de letras maiúsculas." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Opções Gerais de Exibição" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "Animação completa do _tabuleiro" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animar peças, rotação do tabuleiro e mais. Use esta opção em computadores rápidos." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animar somente mo_vimentos" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Animar somente o movimento das peças." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Sem an_imação" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Nunca utilizar animação. Use isto para computadores lentos." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animação" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Geral" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "Usar _livro de aberturas" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "Se definido, PyChess vai sugerir o melhor movimento de abertura no painel de dicas." #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "Arquivo de livre Polyglot:" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "Usar tablebases _local" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "Se definido, PyChess irá mostrar os resultados de jogos de movimentos diferentes em posições contendo 6 ou menos peças.\nVocê pode baixar arquivos de tablebase:\nhttp://www.olympuschess.com/egtb/gaviota/" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "Diretório Gaviota TB" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "Usar _online tablebases" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "Se definido, PyChess irá mostrar os resultados de jogos de movimentos diferentes em posições contendo 6 ou menos peças.\nEle irá procurar posições de http://www.k4it.de/" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "Abertura, final de partida" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Usar a_nalisador" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "A engine sera executada em segundo plano e vai analisar o jogo. Necessário para o modo de sugestão funcionar" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Usar analisador _inverso" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "O analisador inverso sera executado, mostra como seu adversário vai mover. Necessário para o modo espião funcionar" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analisador" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "_Dicas" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Desinstalar" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "A_tivo" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Paineis laterais instalados" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "_Painel lateral" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Temas" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Usar sons no PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Um jogador dá _xeque:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Um jogador _move:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "O jogo _empata:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "O jogo é per_dido:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "O jogo é _vencido:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Um jogador _captura:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "O jogo é _iniciado:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Jogo obse_rvado move:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Jogo observado _termina:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Tocar som quando..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Sons" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Jogo" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Novo Jogo" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Jogar Xadrez na _Internet" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "Carr_egar jogo" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "Carregar _Jogo Recente" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "Abrir _Base de Dados" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Ajustar Posição" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "_Digite a Notação do Jogo" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Salvar Jogo" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Salvar Jogo _Como" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "_Exportar Posição" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Rating do Jogador" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "_Editar" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "_Engines" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Ações" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Oferecer para _Abortar a Partida" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Oferecer Ad_iamento" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Oferecer _Pausa" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Pedir para Vo_ltar" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Acusar Seta" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Pedir que _Mova" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "Auto-chamar _seta" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Exibir" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Girar o Tabuleiro" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Tela Cheia" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Sair da _Tela Cheia" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Mostrar Painel Lateral" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Visualizador de Registros" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Modo _sugestão" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Modo es_pião" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "Aj_uda" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Sobre o xadrez" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Como Jogar" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Traduza o PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Dica do dia" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Sair do PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "_Fechar sem Salvar" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Salvar %d documentos" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Há %d jogos com lances não salvos. Salvar antes de fechar?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Selecione os jogos que quer salvar:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Se não salvar, as novas alterações dos jogos serão perdidas permanentemente." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "A_dversário:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Sua Cor:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Iniciar Jogo" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Conectar-se como _Convidado" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Co_nta:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "Conectar ao _FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Dica do dia" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Mostrar dicas ao iniciar" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://pt.wikipedia.org/wiki/Xadrez" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://pt.wikipedia.org/wiki/Regras_do_xadrez" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Bem-vindo" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "Id" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "B Elo" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "N Elo" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "Resultado" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "Evento" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "Site" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "Rodada" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "Data" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "ECO" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "Jogos do Banco de Dados do Pychess" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "O jogo #%s não pode ser carregado, por causa de um erro de análise FEN" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "A conexão foi interrompida" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' não é um nome registrado" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "A senha digitada não é válida.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Conectando ao servidor" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Conectando ao servidor" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Configurando o ambiente" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Conectado" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Desconectado" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Disponível" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Jogando" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Inativo" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "Examinando" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Indisponível" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "Executando jogo simultâneo" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "Em torneio" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Não pontuado" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Pontuado" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privado" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d sec" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Erro de conexão" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Erro ao conectar" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Conexão foi fechada" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Erro no endereço" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Auto-desconectar" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Você foi desconectado porque ficou inativo mais de 60 minutos" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Vitória" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Empate" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Derrota" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "No FICS, sua classificação \"Wild\" engloba todas as seguintes variantes em todos os controles de tempo:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Sanções" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-mail" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Tempo gasto" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "conectado no total" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Conectando" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Desconhecido" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Você está atualmente conectado como convidado.\nUm convidado não pode jogar jogos pontuados e por isto, a oferta de jogos será menor." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registre-se agora" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nome" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tipo" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Relógio" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Buscas ativas: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s sec" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr " gostaria de retomar o jogo adiado %(time)s " #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr " desafia você para um jogo %(time)s %(rated)s %(gametype)s." #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Aceitar Desafio" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Rejeitar Desafio" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Ignorar Desafio" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s sec" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "Rating do Adversário" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Aceitar manualmente" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Relâmpago" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Wild" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Status" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Jogadores: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Jogador das Brancas" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Jogador das Negras" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipo de jogo" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Jogos em execução: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Sua cor" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Adversário" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "Está conectado" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Controle de tempo" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Data/Hora" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s está %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr " com quem você tem um %(timecontrol)s %(gametype)s adiado " #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "Solicitar Continuação" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "Examinar Jogo Adiado" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Não Fazer Nada" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "O botão de vinculação está desativado porque você está conectado como convidado. Convidados não podem estabelecer classificação e o estado do botão de vinculação não tem nenhum efeito quando não há nenhuma classificação para a qual vincular a \"Força do Adversário\"" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Desafiar: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Esta opção não é aplicável porque você está desafiando um jogador" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Editar busca: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d sec/lance" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manual" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "Qualquer força" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Você não pode jogar jogos pontuados porque você está conectado como convidado" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Você não pode jogar jogos pontuados porque o botão \"Sem relógio\" foi marcado, " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "e no FICS, jogos sem relógio não podem ser pontuados" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Esta opção não está disponível porque você está desafiando um convidado, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "e os convidados não podem jogar jogos pontuados" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Aleatório" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Outro" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Você não pode selecionar uma variação porque o botão \"Sem relógio\" foi marcado, " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "e no FICS, jogos sem relógio têm que ser nas regras normais do xadrez" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Alterar tolerância" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "Você só pode ter 3 buscas pendentes ao mesmo tempo. Se você quiser adicionar uma nova busca você deve limpar as buscas ativas no momento. Limpar suas buscas?" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr " rejeitou seu desafio." #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "Examinado" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrador" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Conta de xadrez às cegas" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Conta de computador" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Conta da equipe" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Usuário não-registrado" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Mentor de xadrez" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Representante de atendimento" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Diretor do torneio" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Gerenciador Mamer" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Grande Mestre" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Mestre Internacional" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "Mestre FIDE" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Grande Mestre Mulher" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Mestre Internacional Mulher" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "Mestre FIDE Mulher" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "Conta iniciante" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "T" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "U" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "CA" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "SR" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "TD" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "GM" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "MI" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "FM" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "WGM" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "WIM" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "MFM (WFM)" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "A engine %s relata um erro:" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Seu adversário lhe ofereceu um empate. Aceitar?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Seu adversário lhe ofereceu um empate. Se você aceitar, a partida terminará com o resultado 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Seu adversário quer anular o jogo. Aceitar?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Seu adversário solicitou que o jogo seja anulado. Se você aceitar, o jogo terminará sem nenhuma mudança na classificação." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Seu adversário quer adiar o jogo para outra data. Aceita?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Seu adversário quer que o jogo seja adiado. Se você aceitar, o jogo será adiado e você poderá jogá-lo em outra data (se o seu adversário também estiver conectado e ambos os jogadores concordarem em retomar o jogo)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Seu adversário quer voltar %s lance(s). Aceitar?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Seu adversário quer voltar %s lance(s). Se você aceitar, o jogo seguirá a partir da posição indicada." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Seu adversário fazer uma pausa no jogo. Aceitar?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Seu adversário pediu para fazer uma pausa no jogo. Se você aceitar, o relógio do jogo será parado até que ambos aceitem retomar o jogo." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Seu adversário quer retomar o jogo. Aceitar?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Seu adversário quer retomar o jogo. Se você aceitar, o relógio do jogo continuará a contar de onde foi pausado." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "O abandono" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "A acusação de queda de seta" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "A oferta de empate" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "A oferta de anulação" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "A oferta de adiamento" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "A oferta de pausa" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "A oferta de retomada" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "A oferta de mudança de lado" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "A oferta de voltar jogadas" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "abandono" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "acusar queda de seta do adversário" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "oferecer empate" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "oferecer anulação" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "oferecer adiamento" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "oferecer uma pausa" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "oferecer para reiniciar jogo" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "oferecer troca de lado" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "oferecer voltar jogadas" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "pedir ao seu adversário que mova" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Seu adversário não está fora do tempo." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "O relógio ainda não foi iniciado." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Você não pode mudar a cor durante o jogo." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Você tentou voltar lances demais." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Seu adversário pede que você se apresse!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Geralmente isto não significa nada, porque o jogo é baseado no tempo, mas se você quiser agradar a seu adversário, talvez você deva continuar." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s foi recusado por seu adversário" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Você pode tentar enviar a oferta a seu adversário mais tarde." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s foi retirada por seu adversário" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Seu adversário parece ter mudado de idéia." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Não foi possível aceitar %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "O PyChess não conseguiu obter a aceitação da oferta %s, provavelmente porque ela foi retirada." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s retornou um erro" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Diagrama Chess Alpha 2" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Não foi possível carregar o diagrama '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "Base de dados Pychess" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Posição do tabuleiro" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Posicionamento comum do xadrez" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "O jogo não pode ser lido até o final, devido a um erro ao analisar o lance %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Não foi possível mover porque %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "Erro ao analisar movimento %(moveno)s %(mstr)s" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Jogo de Xadrez" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "O jogo não pode ser carregado, por causa de um erro de análise FEN" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "Exportar posição" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "vs." #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Todos os arquivos" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Imagens" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Substituir" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "O arquivo já existe" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Um arquivo com o nome '%s' já existe. Você deseja substituí-lo?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "O arquivo já existe em '%s'. Se você substituí-lo, seu conteúdo será sobrescrito." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Não foi possível salvar o arquivo" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "PyChess não foi capaz de exportar a posição" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "O erro foi: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Endereço de destino inacessível" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Encerrado" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Evento local" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Ponto local" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Peão" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Rei" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "C" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "R" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "O jogo terminou empatado" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s venceu o jogo" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s venceu o jogo" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "O jogo foi encerrado" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "O jogo foi adiado" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "O jogo foi anulado" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "Porque nenhum jogador tem material suficiente para dar mate" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Porque a mesma posição se repetiu três vezes consecutivas" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Porque os últimos 50 lances não trouxeram nada de novo" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Porque o tempo acabou para ambos os jogadores" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "Porque %(mover)s provocou empate por afogamento" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Porque os jogadores entraram em acordo" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Devido a uma decisão proferida por um administrador" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Porque o jogo excedeu o tamanho máximo" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "Porque %(white)s saiu fora do tempo e %(black)s não tem material suficiente par dar mate" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "Porque %(black)s saiu fora do tempo e %(white)s não tem material suficiente par dar mate" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Porque %(loser)s abandonou" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Porque o tempo de %(loser)s terminou" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "Porque %(loser)s levou Check Mate" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Porque %(loser)s se desconectou" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Porque %(loser)s perdeu todas as peças, fora o Rei" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Porque o jogador perdeu a conexão" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "Pois os dois jogadores aceitaram adiar o jogo" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "Porque o servidor foi desligado" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Porque um jogador perdeu a conexão e outro jogador solicitou adiamento" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "Porque %(black)s perdeu a conexão com o servidor e %(white)s solicitou um adiamento" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "Porque %(white)s perdeu a conexão com o servidor e %(black)s solicitou um adiamento" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "Porque %(white)s perdeu a conexão com o servidor" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "Porque %(black)s perdeu a conexão com o servidor" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "Porque ambos os jogadores combinaram para" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "Por causa da cortesia de um jogador" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Porque o jogador saiu. Nenhum vencedor para este jogo devido à sua fase inicial" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Porque o mecanismo de xadrez %(white)s foi encerrado" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "Porque a engine %(black)s morreu" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Porque a conexão com o servidor foi perdida" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "A razão é desconhecida" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "min" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "s" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Aleatório Assimétrico" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "FICS atômico: http://www.freechess.org/Help/HelpFiles/atomic.html" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "Atômico" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "Regras clássica do xadrez com figuras ocultas\n" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Xadrez às Cegas" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "Regras clássica do xadrez com Peões ocultos\n" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "Ocultar Peões" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "Regras clássicas do xadrez com peças ocultas\n" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "Ocultar peças" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "Regras clássicas do xadrez com todas as peças brancas\n" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Todas brancas" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "FICS Bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "Bughouse" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "http://brainking.com/pt/GameRules?tp=2\n\n" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Canto" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "Crazyhouse" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://pt.wikipedia.org/wiki/Chess960\n\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Aleatório de Fischer" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "Um jogador começa sem um Cavalo" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Vantagem do Cavalo" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "De perdedores" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "Regras clássicas do xadrez\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Tempo padrão" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "Um jogador começa com um Peão a menos" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Vantagem do Peão" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Peões passados" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Peões avançados" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "Um jogador começa sem a rainha" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Vantagem da Dama" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Aleatório" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "Um jogador começa sem uma Torre" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Vantagem da Torre" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "FICS suicídio: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "Suicídio" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Cabeça para baixo" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Você não abriu conversas ainda" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Somente jogadores registrados podem falar neste canal" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Nenhuma conversa foi selecionada" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Carregando dados do jogador" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "Recebendo lista de jogadores" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Mais canais" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Mais jogadores" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Conversas" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Informações sobre conversas" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "Selecione o diretório de trabalho" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "Selecionar engine" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "Engines de Xadrez" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Oferecer revanche" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Jogar revanche" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Voltar um lance" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Voltar dois lances" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "O jogo está pausado" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Jogo carregado" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Jogo gravado" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "Engine iniciada" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "Você enviou uma oferta de anulação" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "Você enviou uma oferta de adiamento" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Você enviou uma oferta de empate" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "Você enviou uma oferta de pausa" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "Você enviou uma oferta de continuação" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "Você enviou uma pedido para voltar jogada" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "Você pediu para seu oponente mover" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Mecanismo de xadrez, %s, foi encerrado" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess perdeu a conexão com o mecanismo de xadrez, provavelmente porque ele foi encerrado.\nVocê pode tentar iniciar um novo jogo com o mecanismo de xadrez, ou tentar jogar contra outro." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Anular" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "Este jogo pode ser anulado automaticamente sem perda de posições na classificação, pois ainda não foram feitos dois lances" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "Oferecer anulação" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "Seu oponente precisa concordar em anular o jogo pois há dois ou mais lances já efetuados" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "Este jogo não pode ser adiado pois um ou mais jogadores são convidados" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "Reclamar empate" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "vs" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Ir para a posição inicial" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Retroceder um lance" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Adiantar um lance" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Ir para a última posição" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess não conseguiu carregar as configurações do seu painel" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "As suas configurações de painel foram redefinidas. Se este problema se repetir, você deve relatar aos desenvolvedores" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Você" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Convidado" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Corrigir o lance ou começar a jogar com o que pôde ser lido" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Abrir jogo" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Salvar jogo" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Todos os arquivos" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Detectar formato automaticamente" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Todos os arquivos de xadrez" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Formato de arquivo desconhecido '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "Não foi possível salvar '%(uri)s' porque o PyChess não reconhece o formato '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Não foi possível salvar o arquivo '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Você não tem a permissão necessária para salvar o arquivo.\nPor favor, assegure-se de ter indicado corretamente o caminho e tente novamente." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess não conseguiu salvar o jogo" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Há %d jogo com lances não-salvos." msgstr[1] "Há %d jogos com movimentos não-salvos." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Salvar lances antes de fechar?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Salvar %d documento" msgstr[1] "_Salvar %d documentos" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Salvar o jogo atual antes de fechar?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Não será possível continuar posteriormente a partida \nse você não salvá-la." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Janela de informações do PyChess" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "de" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Ser humano" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Rápido" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutos:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Incremento:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)dmin + %(gain)ds/lance" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)dmin %(gain)ds/lance" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Vantagem" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr " _" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Entrar no Jogo" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "Selecionar arquivo de livro" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "Livro de aberturas" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "Selecionar diretório Gaviota TB" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Abrir Arquivo de Som" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "Arquivos de som" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Sem som" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Aviso sonoro" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Selecione um arquivo de som..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Painel sem descrição" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Você pode iniciar um novo jogo em Jogo > Novo Jogo, na nova janela do jogo você pode escolher Jogadores, Controle de tempo e Variante do xadrez." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Você pode escolher entre 8 diferentes dificuldades para jogar contra o computador." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "As variantes do xadrez são a maneira como as peças da última linha são posicionadas no tabuleiro." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "Para salvar um jogo: Jogo > Salvar jogo como, insira o nome do arquivo e escolha onde quer que seja salvo. Escolha o tipo da extensão do arquivo, e Salvar." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "Você sabia que pode acusar a queda de seta quando é sua vez de jogar? Ações > Acusar queda de seta." #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "Pressione Ctrl+Z para pedir ao adversário para voltar lances." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Para jogar em modo Tela cheia, é só apertar F11. Para voltar à tela normal, F11 novamente." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "O Modo sugestão analisará seu jogo. Ative-o com Ctrl+H." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Modo espião analisará o jogo do oponente. Ative-o com Ctrl+Y." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "Você pode jogar xadrez ouvindo os sons do jogo. Para isso, Configurações > Preferências > Aba Sons, ative Usar sons no PyChess e escolha seus sons preferidos." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Você sabia que pode ajudar a traduzir o PyChess para sua língua, Ajuda > Traduza o PyChess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Você sabia que é possível fazer um xeque-mate com dois movimentos?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Você sabia que o número de possíveis jogos no xadrez é maior que o número de átomos do Universo?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Shout" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Chess Shout" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Canal não-oficial %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "o lance precisa de uma peça e uma coordenada" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "movimento de promoção sem a peça promovida é incorreto" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "a coordenada capturada (%s) está incorreta" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "e" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "empatam" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "fazem xeque-mate" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "põem o adversário em xeque" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "melhora a segurança do Rei" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "melhora ligeiramente a segurança do Rei" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "movem uma Torre para uma coluna aberta" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "movem uma Torre para uma coluna semi-aberta" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "movem o Bispo para o fianqueto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promovem um Peão a %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "rocam" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "recuperam material" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "sacrificam peça" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "trocam peças" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "capturam peça" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "resgata %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "ameaça ganhar a peça por %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "aumenta a pressão em %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "defendem %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "cravam %(oppiece)s do inimigo no(a) %(piece)s em %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Brancas tem uma peça em posto avançado: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Negras tem uma peça em posto avançado: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s têm um novo Peão passado em %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "semi-aberta" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "na coluna %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "nas colunas %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s têm um Peão dobrado %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s têm novos Peões dobrados %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s têm um Peão isolado na coluna %(x)s" msgstr[1] "%(color)s têm Peões isolados nas colunas %(x)s" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s movem os Peões para uma formação de muralha" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s não podem mais rocar" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s não podem mais fazer grande-roque" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s não podem mais fazer pequeno-roque" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s têm um novo Bispo preso em %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "avançam um Peão: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "levam um Peão para mais perto da última fileira: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "levam %(piece)s para mais perto do Rei inimigo: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "avançam %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "aumentam ação de %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Brancas devem fazer uma chuva de Peões na ala direita" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Negras devem fazer uma chuva de Peões na ala esquerda" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Brancas devem fazer uma chuva de Peões na ala esquerda" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Negras devem fazer uma chuva de Peões na ala direita" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Negras estão com muito pouco espaço" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Negras estão com pouco espaço" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Brancas estão com muito pouco espaço" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Brancas estão com pouco espaço" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "Anotação" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "Jogo anotado" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "Adicionar comentário inicial" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Adicionar comentário" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Editar comentário" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "Forçar movimento" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "Adicionar símbolo de movimentação" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "Posição incerta" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "Zugzwang" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "Desenvolvimento adv." #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "Iniciativa" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "Com ataque" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "Compensação" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "Contra-ataque" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "Pressão do tempo" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "Adicionar símbolo de avaliação" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "Remover símbolos" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "Remover variação" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "rodada %s" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "Sugestão" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "O painel de sugestão, aconselhara o computador durante cada fase do jogo" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Painel oficial do PyChess." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Livro de aberturas" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "O livro de aberturas irá tentar inspirá-lo durante a fase de abertura do jogo mostrando-lhe lances comuns feitos pelos mestres de xadrez" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "Analises por %s" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "%s vai tentar prever qual movimento é melhor e qual lado está com vantagem" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "Analises de ameaças por %s" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "%s vai identificar quais são as ameaças existentes, se fosse seu adversário na sua vez de jogar" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "Calculando..." #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "Pontuação da engine estão em unidades de peões, do ponto de vista branco." #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "Adicionando sugestões para ajuda-lo e obter ideias, mas retarda as analises do computador." #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "Final de Partida" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "No final de partida, mostrara analises exata quando tiver poucas peças no tabuleiro." #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "Mate em %d" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "nessa posição,\nnão há uma jogada regular." #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Conversa" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "O painel Conversa lhe permite comunicar com seu adversário durante o jogo, desde que ele esteja interessado" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Comentários" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "O painel Comentários tenta analisar e explicar os lances jogados" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Posição inicial" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s movem %(piece)s para %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "Engines" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "As saídas de engine no painel mostra as saídas de analises da engine do xadrez (jogador computador) durante um jogo" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "Nenhuma engine de xadrez (jogador computador) estão participando desse jogo." #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Histórico de Movimentos" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "A aba Lances registra os lances dos jogadores e permite que você navegue pelo histórico do jogo" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Pontuação" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "O painel de Pontuação tenta avaliar as posições e mostrar um gráfico da evolução do jogo" pychess-0.12beta3/lang/fr/0000755000175000017470000000000012176727272014434 5ustar tamasuserspychess-0.12beta3/lang/fr/LC_MESSAGES/0000755000175000017470000000000012176727272016221 5ustar tamasuserspychess-0.12beta3/lang/fr/LC_MESSAGES/pychess.po0000644000175000017470000025571612161415524020243 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Pierre Boulenguez, 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess recherche les moteurs de jeu disponibles. Veuillez patienter." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py :" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess :" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess :" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "Connexion serveur d'échecs en ligne FICS" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Titre" #: glade/fics_logon.glade:70 msgid "text" msgstr "texte" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Connexion au serveur gratuit d'échecs en ligne FICS" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "Mot de _passe :" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nom :" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Se connecter en tant qu' _invité" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rts :" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "_Inscription" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Défier : " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Envoyer un défi" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Défier :" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Lightning :" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standard :" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Blitz :" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, échecs aléatoires Fischer, Noir" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 s/coup, Blanc" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Editer une requête" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Sans décompte de temps" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minutes : " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Gain : " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Cadence : " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Paramètres de la pendule" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Pas de préférence" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Votre niveau : " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Blitz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Niveau de l'adversaire : " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Quand ce bouton est verrouillé, le rapport\nentre \"Niveau de l'adversaire\" et \"Votre niveau\" sera\npréservé si \na) votre niveau pour le type de parties recherché a été modifié\nb) vous avez changé de variante ou modifié la cadence" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centre :" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolérance :" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Masquer" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Force de l'adversaire" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Blanc" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Noir" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Votre couleur" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Jouer avec les règles normales des échecs" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Jouer" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Variante" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Partie avec classement" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Accepter l'adversaire manuellement" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Options" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Jeu d'échecs : FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Initialiser les offres de parties" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Accepter" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Refuser" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, échecs aléatoires Fischer, 1800↓, Noir" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 s/coup, 1400↑, Blanc" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manuel" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Envoyer une requête" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Créer une requête" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "Requêtes / Défis" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Classement" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Cadence" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "_Graphe des requêtes" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Joueur prêt" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Défi" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Observer" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Démarrer conversation privée" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Liste des joueurs" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Liste des parties" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Proposer de _reprendre" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Abandonner" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Proposer _ex-aequo" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Proposer l'a_bandon" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Aperçu" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Ajourné" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nouvelles" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Montrer les conversations" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "Déconnecter" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Outils" #: glade/findbar.glade:7 msgid "window1" msgstr "Fenêtre 1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 de 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Précédent" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Suivant" #: glade/findbar.glade:161 msgid "Search:" msgstr "Rechercher :" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nouvelle partie" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Commencer la partie" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "Joueur _noir :" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "Joueur _blanc :" #: glade/newInOut.glade:336 msgid "Players" msgstr "Joueurs" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "_Sans cadence" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz :\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rapide :\t15 min + 10 s/coup" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal :\t40 min + 15 s/coup" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Jouer les règles normales" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Jouer aux échecs aléatoires Fischer" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Jouer au Qui Perd Gagne" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Charger une partie" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Position initiale" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Entrer l'évaluation de la partie" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promotion" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dame" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Tour" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Fou" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Cavalier" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Promouvoir le pion en ?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Client de jeu d'échecs pour Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess is free software; you can redistribute it and/or modify \nit under the terms of the GNU General Public License as published by \nthe Free Software Foundation; either version 2 of the License, or \n(at your option) any later version.\n\nPyChess is distributed in the hope that it will be useful, \nbut WITHOUT ANY WARRANTY; without even the implied warranty of \nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License \nalong with PyChess; if not, write to the Free Software Foundation, Inc., \n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informations sur la partie" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Évènement :" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Lieu :" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Tour :" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Informations sur la partie" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Date" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Préférences" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Le nom affiché du premier joueur humain, par exemple Pierre." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Nom du _premier joueur humain :" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Le nom affiché du joueur invité, par exemple Marie." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Nom du _second joueur humain :" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Cacher les onglets quand une seule partie est en cours" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Lorsque cette option est sélectionnée, cache l'onglet en haut de la fenêtre de jeu lorsque ce n'est pas nécessaire." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "_Retourner automatiquement l'échiquier vers le joueur humain" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Lorsque cette option est sélectionnée, l'échiquier pivote après chaque coup pour afficher le point de vue du joueur dont c'est le tour." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Affichage en mode face à face" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Lorsque cette option est sélectionnée, les pièces noires sont affichées la tête pointant vers le bas. Adapté au jeu entre amis sur des appareils mobiles." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Échiquier avec coordonnées" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Lorsque cette option est sélectionnée, les colonnes et les lignes de l'échiquier sont identifiées respectivement par des lettres et des chiffres. Cette désignation est conforme à la notation algébrique." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Préférer la notation avec figurines" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Lorsque cette option est sélectionnée, PyChess utilise des figurines pour désigner les pièces déplacées, plutôt que des lettres majuscules." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Options générales d'affichage" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "Echiquier totalement animé" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Anime les pièces, fait pivoter l'échiquier et plus encore. À utiliser sur une machine puissante." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animer seulement les coups" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Anime uniquement les mouvements des pièces." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Aucune animation" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Aucune animation durant la partie. À utiliser sur les machines les moins puissantes." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animation" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Général" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Utiliser _analyseur" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Utiliser _analyseur inverse" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analyse" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Désinstaller" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Actif" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Panneaux latéraux installés" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Panneaux latéraux" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Activer les sons dans PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Vérification _Joueur" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Un joueur déplace :" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Ex-aequo" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "La partie est _perdue :" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "La partie est _gagnée :" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Un joueur c_apture :" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "L'échiqiuer est disposé :" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Déplacements observés :" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "_Fins observées :" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Jouer un son quand..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Sons" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Partie" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nouvelle partie" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Jouer aux échecs en _ligne" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Charger une partie" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Disposer les pièces" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Entrer l'évaluation de la partie" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Enregistrer la partie" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Enregistrer la partie _sous" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Niveau du joueur" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Actions" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Proposer un _abandon" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Proposer un a_journement" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Proposer une _pause" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Proposer d'annuler le coup" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Victoire au temps" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "_Demander de jouer" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "A_ffichage" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Rotation de l'échiquier" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Plein écran" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Quitter le mode _plein écran" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Afficher les panneaux latéraux" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Informations du journal" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Mode assistant" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Mode _espion" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "A_ide" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "À propos des échecs" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Comment jouer" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Traduire PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Astuce du jour" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Quitter PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Fermer _sans enregistrer" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Sauvegarder %d documents" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Il y a %d parties avec des coups non sauvegardés. Enregistrer les changements avant de fermer ?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Selectionner les parties à sauvegarder :" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Si vous ne sauvegardez pas, les changements des parties seront définitivement perdues." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Adversaire :" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Votre couleur:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Démarrer la partie" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "S'identifier comme i_nvité" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Pseudo (handle)" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Se connecter à FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Astuce du jour" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Afficher des astuces au démarrage" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://fr.wikipedia.org/wiki/Jeu_d'%C3%A9checs" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://fr.wikipedia.org/wiki/R%C3%A8gles_du_jeu_d%27%C3%A9checs" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Bienvenue" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "La connexion a été coupée - message \"fin de fichier\" reçu" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' n'est pas un nom enregistré" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Le mot de passe est invalide.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Connexion au serveur" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Début de transaction" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Paramètrage de l'environnement" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Connecté" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Déconnecté" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Disponible" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Lecture" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Inactif" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "Analyse en cours" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Indisponible" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "Partie simultanée" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "En tournoi" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Non noté" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Noté" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privé" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d s" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Erreur de connexion" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Erreur à l'authentification" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "La connexion a été fermée" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Erreur d'adressage" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Déconnexion automatique" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Vous avez été déconnecté parce que vous étiez inactif pendant plus de 60 minutes" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Gagné" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Nulle" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Perdu" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "Sur FICS, votre classement \"variantes\" prend en compte les variantes suivantes :\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Sanctions" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Adresse électronique" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Dépensé" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "Connectés au total" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Connexion en cours" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Inconnu" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Vous êtes actuellement connecté comme invité.\nUn invité ne peut pas jouer de parties évaluées, les propositions de partie seront donc moins nombreuses." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "S'enregistrer maintenant" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nom" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Type" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Pendule" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Requêtes active : %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s s" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr " désire reprendre la partie ajournée %(time)s " #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr " vous défie pour une partie %(time)s %(rated)s %(gametype)s." #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Relever le défi" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Refuser le défi" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Ignorer le défi" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s s" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "Niveau de l'adversaire" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Accepter manuellement" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Lightning" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Variantes \"Wild\"" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "État" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Joueurs : %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Joueur blanc" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Joueur noir" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Type de jeu" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Parties en cours : %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Votre couleur" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Adversaire" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "Est en ligne" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Cadence" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Date/Heure" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s est %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr " avec qui vous avez une partie ajournée (%(timecontrol)s %(gametype)s ) " #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "Demander à poursuivre" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "Examiner la partie ajournée" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Ne rien faire" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "Le bouton Chaînage est désactivé parce que vous êtes connecté en tant qu'invité. Les invités ne peuvent pas être classés, et l'état du bouton Chaînage n'a aucun effet quand il n'y a aucun classement à mettre en regard du niveau de l'adversaire." #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Défier : " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Cette option n'est pas disponible parce que vous défier un joueur" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Editer une requête " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d s/coup" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manuel" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "N'importe quel niveau" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Connecté en tant qu'invité, vous ne pouvez pas jouer de partie évaluée." #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "L'option \"sans cadence\" étant sélectionnée, vous ne pouvez pas jouer de partie. " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "et sur FICS, les parties jouées sans contrôle de temps ne peuvent pas être évaluées." #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Cette option n'est pas disponible, parce que vous défiez un invité, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "et les invités ne peuvent pas jouer de parties évaluées." #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Aléatoire" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Autre" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "L'option \"sans cadence\" étant sélectionnée, vous ne ne pouvez pas choisir de variante, " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "et sur FICS, les parties sans contrôle de temps suivent les règles normales des échecs" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Modifier la tolérance" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "Vous ne pouvez avoir que 3 requêtes simultanément. Si vous voulez ajouter une requête, vous devez effacer vos requêtes actives. Effacer les requêtes ?" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr " a refusé votre proposition de partie." #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "Analysé" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrateur" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Compte \"à l'aveugle\" (blindfold)" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Compte \"ordinateur (computer)" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Compte \"équipe\" (team)" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Utilisateur non enregistré" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Conseiller en échecs" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Agent de service" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Directeur de tournoi" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Mamer Manager" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Grand Maître" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Maître International" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "Maître FIDE" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Grand Maître féminin" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Maître Internationale Féminine" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "Compte fictif" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "F" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "T" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "U" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "CA" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "AS" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "DT" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "GM" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "MI" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "MF" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "GMf" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "MIF" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Votre adversaire vous propose un nul. Accepter ?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Votre adversaire vous propose un nul. Si vous acceptez cette proposition, la partie se terminera avec un score de 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Votre adversaire souhaite abandonner la partie. Accepter ?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Votre adversaire propose d'abandonner la partie. Si vous acceptez cette proposition, la partie terminera sans modification du niveau." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Votre adversaire souhaite ajourner la partie. Accepter ?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Votre adversaire à demander d'ajourner la partie. Si vous acceptez cette proposition, la partie sera ajournée et vous pourrez la reprendre plus tard (quand votre adversaire est connecté et que les deux joueurs acceptent de reprendre la partie)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Votre adversaire souhaite annuler %s coup(s). Accepter ?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Votre adversaire propose d'annuler le(s) %s coups précédents. Si vous acceptez cette proposition, la partie continuera à partir de l'ancienne position." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Votre adversaire souhaite faire une pause. Accepter ?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Votre adversaire souhaite faire une pause. Si vous acceptez cette proposition, la pendule sera arrêtée jusqu'à ce que les deux joueurs acceptent de reprendre la partie." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Votre adversaire souhaite reprendre la partie. Accepter ?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Votre adversaire souhaite reprendre la partie. Si vous acceptez cette proposition, la pendule reprendra là où elle a été arrêtée" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "L'abandon" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "La chute du drapeau" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "La proposition de nul" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "La proposition d'abandon" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "La proposition d'ajournement" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "La proposition de pause" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "La proposition de reprendre" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "La proposition de changer de côté" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "La proposition d'annuler le dernier coup" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "abandonner" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "demander la victoire au temps" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "proposer un nul" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "proposer un abandon" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "proposer d'ajourner" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "proposer une pause" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "proposer de reprendre" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "proposer de changer de côté" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "Proposer d'annuler le dernier coup" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "demander à l'adversaire de jouer" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Votre adversaire n'a pas dépassé le temps imparti." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "La pendule n'a pas encore commencé." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Vous ne pouvez pas changer de couleur pendant la partie." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Vous avez essayé d'annuler trop de mouvements." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Votre adversaire vous demande de vous dépêcher." #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "En général, cela ne signifie rien dans une partie chronométrée, mais si vous voulez faire plaisir à votre adversaire, vous pouvez le faire." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s a été décliné par votre adversaire" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Vous pouvez essayer d'envoyer une proposition à votre adversaire plus tard dans la partie." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s a été retiré pas votre adversaire" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Votre adversaire semble avoir changé d'avis." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Impossible d'accepter %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess n'a pas pu finir l'acceptation de la proposition de %s. Probablement parce qu'elle a été retirée." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s retourne une erreur" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Diagramme Chess Alpha 2" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Impossible de charger le diagramme '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Position d'Échec" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Position simple des pièces" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "La partie n'a pas pu être lue jusqu'à la fin à cause d'une erreur d'interprétation au coup %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Le coup n'a pas réussi à cause de %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Partie d'Échecs" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "contre" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Remplacer" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Le fichier existe" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Un fichier nommé '%s' existe déjà. Voulez-vous le remplacer?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Le fichier existe déjà dans '%s'. Si vous le remplacez, son contenu sera écrasé." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Impossible de sauvegarder le fichier" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "L'erreur est: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Hôte Inaccessible" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Arrêté" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Évenement Local" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Site local" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Pion" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Roi" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "C" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "R" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "La partie s'est terminée par un match nul" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s gagne la partie" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s gagne la partie" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "La partie a été détruite" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "La partie est suspendue" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "La partie a été abandonée" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Parce que la même position a été répétée trois fois d'affilée." #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Parce que les 50 derniers coups n'ont rien apporté de nouveau." #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Parce que les deux joueurs ont dépassé leur limite de temps." #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "Parce que %(mover)s a fait un pat." #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Parce que les joueurs sont en accord" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Par arbitrage d'un administrateur" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Parce que la partie a dépassé la longueur maximale" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Parce que %(loser)s a abandonné" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Parce que %(loser)s a dépassé son temps réglementaire" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Parce que %(loser)s s'est déconnecté" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Parce que %(loser)s a perdu toutes ses pièces sauf son roi" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Parce qu'un joueur a perdu sa connexion" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "Parce que les deux joueurs ont décidé d'ajourner la partie" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Parce qu'un joueur a perdu sa connexion et que l'autre joueur a demandé un report de la partie" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "Parce que le joueur %(black)s a perdu la connexion au serveur et que le joueur %(white)s a demandé d'ajourner la partie" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "Parce que le joueur %(white)s a perdu la connexion au serveur et que le joueur %(black)s a demandé d'ajourner la partie" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "Parce que le joueur %(white)s a perdu la connexion au serveur" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "Parce que le joueur %(black)s a perdu la connexion au serveur" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "Par courtoisie d'un joueur" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Parce qu'un joueur a quitté la partie. Aucun gagnant n'a été trouvé car la partie n'était pas assez avancée" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Parceque le calculateur de %(white)s a rendu l'âme" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Parce que la connexion au serveur a été perdue." #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "La raison est inconnue" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "min" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "sec" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Echecs aléatoires asymétriques" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "Partie d'échecs à l'aveugle\n" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Partie à l'aveugle" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "Partie d'échecs classique sans voir les pions\n" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "Pions cachés" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "Partie d'échecs classique sans voir les pièces\n" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "Pièces cachées" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "Partie d'échecs classique avec toutes les pièces blanches\n" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Tout blanc" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "http://brainking.com/en/GameRules?tp=2\n" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Coin" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://fr.wikipedia.org/wiki/Échecs_aléatoires_Fischer\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer aléatoire" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "Un joueur commence avec un cavalier en moins" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Handicap d'un cavalier" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "Qui perd gagne : http://fr.wikipedia.org/wiki/Qui_perd_gagne_(échecs)" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Qui perd gagne" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "Règles d'échecs classique\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "Un joueur commence avec un pion en moins" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Handicap d'un pion" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Pions libres" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Pions poussés" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "Un joueur commence avec une reine en moins" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Handicap de la reine" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Aléatoire" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "Un joueur commence avec une tour de moins" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Handicap d'une tour" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Upside down" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Vous n'avez pas encore ouvert de conversation" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Seuls les utilisateurs enregistrés peuvent discuter sur ce canal" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Aucune consersation selectionée" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Chargement des informations du joueur" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "Réception de la liste des joueurs" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Plus de canaux" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Plus de joueurs" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Discussions" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Informations de la discussion" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Proposer une revanche" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Jouer la revanche" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Refaire un coup" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Refaire deux coups" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "La partie est en pause" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Partie chargée" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Partie sauvegardée" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "Vous avez envoyé une proposition d'abandon" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "Vous avez proposé un ajournement de la partie" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Vous avez proposé un match nul" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "Vous avez envoyé une proposition de pause" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "Vous avez proposé de reprendre la partie" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "Vous avez envoyé une proposition d'annuler le dernier coup" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "Vous avez demandé à votre adversaire de jouer" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Le calculateur, %s, a rendu l'âme" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess a perdu la connexion avec le calculateur, probablement parce que celui-ci a rendu l'âme.\n\nVous pouvez essayer de relancer une nouvelle partie avec ce calculateur ou bien essayer de jouer contre un autre." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Abandonner" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "Cette partie peut être abandonnée automatiquement sans perte de classement car deux coups n'ont pas encore été joués" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "Proposer un abandon" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "Votre adversaire doit accepter d'abandonner la partie car au moins deux coups ont été joués" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "Cette partie ne peut pas être ajournée car au moins un des joueurs est un invité" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "Demander Nulle" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "contre" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Revenir à la position initiale" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Reculer d'un coup" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Avancer d'un coup" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Aller à la dernière position" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess n'a pas pu charger les paramètres de votre panneau" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Les paramètres de votre panneau ont été réinitialisés. Si ce problème persiste, vous devriez le reporter aux développeurs." #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Vous" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Invité" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Corriger le coup ou commencer à jouer avec ce qui a pu être lu" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Ouvrir une partie" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Sauvegarder La Partie" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Tous types" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Détecter le type automatiquement" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Tous les fichiers d'échecs" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Type de fichier inconnu '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "PyChess n'a pas pu sauvegarder '%(uri)s' car il ne reconnait pas le format '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Impossible de sauver le fichier '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Vous n'avez pas les permissions nécessaires pour sauver le fichier.\nAssurez-vous que vous avez donné le bon chemin et recommencez." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess n'est pas capable de sauvegarder la partie" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Il y a %d partie avec des coups non sauvegardés." msgstr[1] "Il y a %d parties avec des coups non sauvegardés." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Sauvegarder les coups avant de fermer ?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Sauvegarder %d document" msgstr[1] "_Sauvegarder %d documents" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Sauver la partie courante avant de fermer ?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Il ne sera pas possible de continuer cette partie plus tard\nsi vous ne la sauvegarder pas." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Fenêtre d'Information PyChess" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "sur" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Humain" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Rapide" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutes :" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Incrément" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d sec/coup" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d sec/coup" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Handicap" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr " échec" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Entrer dans la partie" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Ouvrir le fichier de son" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Aucun son" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Beep" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Sélectionnez un fichier son..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Panneau non décrit" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Vous pouvez commencer une nouvelle partie dans Partie > Nouvelle Partie, dans la fenêtre Nouvelle Partie vous pouvez choisir les Joueurs, la Gestion du temps et les Variantes d'échecs." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Vous pouvez choisir parmi 8 niveaux de difficulté pour les parties contre l'ordinateur." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "Les variantes d'échecs modifient le placement des pièces sur l'échiquier." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "Pour sauvegarder une partie Partie > Enregistrer la partie sous, choisissez un nom et où le fichier doit être sauvé. En bas, choisissez l'extension du fichier et Enregistrer." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "Savez-vous que vous pouvez demander la victoire au temps quand la pendule est en votre faveur, Actions > Victoire au temps." #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "En appuyant sur Ctrl+Z, vous offrez à l'adversaire la possibilité de rejouer les derniers coups." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Pour jouer en mode plein écran, appuyez sur F11. Puis F11 pour revenir." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "Le mode assistant analyse votre partie, activez le avec Ctrl+H." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Le mode espion analyse la partie de votre adversaire, activez le avec Ctrl+Y." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "Vous pouvez écouter les sons de la partie dans Paramètres > Préférences > onglet Sons puis cochez Activer les sons dans PyChess et choisissez vos sons préférés." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Savez-vous que vous pouvez aider à traduire PyChess dans votre langue, Aide > Traduire PyChess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Savez-vous qu'il est possible de terminer une partie d'échecs en seulement 2 tours ?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Savez-vous que le nombre de parties possible est plus grand que le nombre d'atomes dans l'univers ?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Cannal non officiel %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "le coup nécessite une pièce et une position" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "la position capturée (%s) est incorrecte" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "et" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "obtient le nul" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "mate" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "met l'adversaire en échec" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "amélioré la sécurité du roi" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "améliore légérement la sécurité du roi" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "met une tour sur une colonne ouverte" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "met la tour sur une colonne semi-ouverte" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "met le fou en fianchetto : %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promeut le pion en %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "roque" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "reprend une pièce" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "sacrifie une pièce" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "échange une pièce" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "capture une pièce" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "protège un %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "menace de prendre une pièce par %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "fait pression sur %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "défend %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "cloue un %(oppiece)s ennemi au %(piece)s en %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Les blancs posent une nouvelle pièce en%s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Les noirs postent une nouvelle pièce en : %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s a un nouveau pion passé en %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "semi-ouverte" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "dans la colonne %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "dans les colonnes %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s a des pions doublés %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s a des nouveaux pions doublés %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s a un pion isolé en colonne %(x)s" msgstr[1] "%(color)s a des pions isolés dans les colonnes %(x)s" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s adopte une formation stonewall" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s ne peut plus faire de roque" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s ne peut plus faire de grand roque" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s ne peut plus faire de petit roque" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "Les %(opcolor)s ont un nouveau fou piégé en %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "avance un pion : %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "avance un pion vers la rangée : %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "déplace un %(piece)s plus près du roi adverse : %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "Développe un %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "Rend un %(piece)s plus actif : %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Les blancs devraient mener une attaque de pions sur l'aile droite" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Les noirs devraient mener une attaque de pions sur l'aile gauche" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Les blancs devraient mener une attaque de pions sur l'aile gauche" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Les noirs devraient mener une attaque de pions sur l'aile droite" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Les noirs ont une position plutôt resserrée" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Les noirs ont une position légèrement resserrée" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Les blancs ont une position plutôt resserrée" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Les blancs ont une position légèrement resserrée" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "Commentaire" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "Partie commentée" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "Ajouter un premier commentaire" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Ajouter un commentaire" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Éditer un commentaire" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "Ajouter une annotation de la position" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "Ajouter une annotation" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "Supprimer les annotations" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "tour %s" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Panneau officiel de PyChess." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Bibliothèque d'Ouvertures" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Le livre des ouvertures va essayer de vous inspirer pendant la phase d'ouverture en vous montrant les coups les plus joués par des maîtres." #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Chat" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Le panneau de chat vous permet de communiquer avec votre adversaire pendant le jeu, en supposant qu'il ou elle soit intéressé(e)." #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Commentaires" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Ce panneau de commentaires va essayer d'analyser et d'expliquer les coups joués." #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Position initiale" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s déplace un %(piece)s en %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Historique des Coups" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "La feuille de jeu assure le suivi des coups des joueurs et vous permet de naviguer dans l'historique du jeu." #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Score" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "Le panneau de score essaie d'évaluer les positions et vous montre un graphe de la progression du jeu." pychess-0.12beta3/lang/de/0000755000175000017470000000000012176727272014415 5ustar tamasuserspychess-0.12beta3/lang/de/LC_MESSAGES/0000755000175000017470000000000012176727272016202 5ustar tamasuserspychess-0.12beta3/lang/de/LC_MESSAGES/pychess.po0000644000175000017470000024201012161415524020203 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # , 2013. # , 2012. # Norbert Fabritius , 2006. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: kopiersperre \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "Pychess sucht nach Ihren Schachprogrammen. Bitte warten." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Zum Internet-Schach verbinden" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Titel" #: glade/fics_logon.glade:70 msgid "text" msgstr "Text" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Zu freechess.org verbinden" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Passwort:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Name:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Als _Gast anmelden" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rts:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Registrieren" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Herausfordern: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Herausforderung senden" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Herausforderung:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Blitz" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standard:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Blitz:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer Random, Schwarz" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 s/Zug, Weiß" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Bearbeite Suchanfrage" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Ohne Zeitlimit" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minuten: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Steigerung: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Zeitkontrolle " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Zeitkontrolle" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Egal" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Eigene Spielstärke: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Blitz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Gegnerstärke " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Ist dieser Knopf »gesperrt«, wird das Verhältnis zwischen\n»Gegnerstärke« und »Eigener Spielstärke« gespeichert,\nwenn \n\na) sich Ihre Wertung für gesuchte Spiele ändert.\nb) Sie die Art der Zeitsteuerung ändern." #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Mitte:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Toleranz:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Ausblenden" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Gegnerstärke" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Weiß" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Schwarz" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Ihre Farbe" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Nach normale Schach-Regeln spielen" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Spielen" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Schach-Variante" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Bewertete Partie" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Gegner manuell bestätigen" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Einstellungen" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet-Schach: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "Su_chergebnisse löschen" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Annehmen" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Ablehnen" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 Min, Fischer Random, 1800↓, Schwarz" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 Min + 6 Sek/Zug, 1400↑, Weiß" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 Min, 1200-1800, manuell" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Suchanfrage senden" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Suchanfrage erstellen" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Suchanfrage / Herausforderung" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Wertung" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Zeit" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Suchgraph" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Spieler bereit" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Herausforderung" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Beobachten" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Private Unterhaltung starten" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "_Spielerliste" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Spieleliste" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Fortsetzung anbieten" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Aufgeben" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Remis _anbieten" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Abbruch Anbieten" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "_Vorschau" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "Aufgeschoben" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Neuigkeiten" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Zeige _Gespräch" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr ":Abmeldung" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Werkzeuge" #: glade/findbar.glade:7 msgid "window1" msgstr "Fenster1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 von 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Vorheriger" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Nächster" #: glade/findbar.glade:161 msgid "Search:" msgstr "Suchen:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Neue Partie" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "Partie _Starten" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "Spieler _Schwarz:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "Spieler _Weiß:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Spieler" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "_Unbegrenzt" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Schnell:\t15 min + 10 s/Zug" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40 min + 15 s/Zug" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "Normales Schach s_pielen" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Spiele Fischer Random Schach" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Räuberschach spielen" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Partie öffnen" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Initiale Stellung" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Spielbezeichnung eingeben" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Umwandlung" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dame" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Turm" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Läufer" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Springer" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Den Bauern in welche andere Spielfigur umwandeln?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Schachprogramm für den Gnome Desktop" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess ist freie Software. Sie können es unter den Bedingungen der GNU General \nPublic License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder \nmodifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren \nVersion.\n\nDie Veröffentlichung von PyChess erfolgt in der Hoffnung, daß es Ihnen von Nutzen \nsein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE \noder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General \nPublic License.\n\nSie sollten ein Exemplar der GNU General Public License zusammen mit PyChess \nerhalten haben. Falls nicht, schreiben Sie an die Free Software Foundation, \nInc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA.\"" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Partiedaten" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Ereignis" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Ort:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Runde:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Patiedaten" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Datum der Partie" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Einstellungen" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Der anzuzeigende Name des ersten menschlichen Spielers, z.B. John." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Name des er_sten menschlichen Spielers:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Der anzuzeigende Name des Gastspielers, z.B. Mary." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Name des zw_eiten menschlichen Spielers:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "Tabs _verstecken, wenn nur eine Partie offen ist" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Wenn aktiviert, wird die Tableiste nur angezeigt, wenn sie benötigt wird." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Spielbrett automatisch zum aktiven menschlichen Spieler d_rehen" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Wenn aktiviert, wird das Brett nach jedem Zug gedreht, sodass beide Spielder das Brett aus ihrer Sicht sehen können." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Kopf _an Kopf Anzeigemodus" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Wenn aktiviert, werden die schwarzen Figuren auf den Kopf gestellt. Sinnvoll für mobile Geräte, wenn der Gegenspieler auf der anderen Seite des Bildschirms sitzt." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Zeige Koordinaten" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Aktiviert Beschriftungen auf dem Schachbrett. Dies kann sinnvoll für die Schachnotation sein." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Bevorzuge Figuren in der Notation." #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Wenn aktiviert, werden Figuren statt Großbuchstaben genutzt um die Züge zu dokumentieren." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Allgemeine Anzeigeoptionen" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "V_ollständige Animation des Spielbretts" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animiere Spielfiguren, -brettrotation und anderes. Für schnelle Rechner." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Nur Züge ani_mieren" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Nur Spielfiguren animieren." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Keine _Animationen" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Es werden niemals Animationen dargestellt. Auf langsamen Rechnern nützlich." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animation" #: glade/PyChess.glade:1264 msgid "_General" msgstr "All_gemein" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Verwende _Analysierer" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "Die Analyse wird im Hintergrund laufen und das Spiel bewerten. Dies ist nötig für den Tipp-Modus." #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Verwende _umgekehrten Analysierer" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "Das umgedrehte Analysetool wird das Spiel bewerten, wenn Ihr Gegner am Zug ist. Dies ist nötig für den Spion-Modus" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analysieren" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Deinstallieren" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Ak_tiv" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Installierte Seitenleisten" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Seiten_leisten" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Themen" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Verwende Klänge in PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Ein Spieler setzt _Schach" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Ein Spieler _zieht" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Partie ist _unentschieden:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Partie wurde _verloren:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Partie wurde ge_wonnen:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Ein Spieler schl_ägt" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Spiel ist aufge_setzt:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Überwachte Züge:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Überwachung _endet:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Spiele Klang wenn..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Klänge" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Partie" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Neue Partie" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "_Internetschach spielen" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "Partie _Laden" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "Letztes Spiel laden" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Spielstand einstellen" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Partie-_Notation eingeben" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "Partie _speichern" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Partie speichern _unter" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "_Exportiere Spielstand" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Spieler _Bewertung" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Aktionen" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "_Aufgeben anbieten" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "_Pause anbieten" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "_Rückgängig ermöglichen" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "Auf _Zeit reklamieren" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Zum ziehen auffordern" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Ansicht" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "Brett _Drehen" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Vollbild" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "_Vollbild verlassen" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Seitenleiste anzeigen" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Protokoll" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Tipp-Modus" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "S_Pionage-Modus" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Hilfe" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Was ist Schach?" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Wie gespielt wird" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "PyChess übersetzen" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Tipp des Tages" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Beende PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Schließen _ohne Speichern" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Sichere %d Dokumente" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Es gibt %d Spiele mit ungesicherten Zügen. Sollen diese vor dem Schließen gesichert werden?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Spiel zum Sichern auswählen:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Wenn Sie nicht speichern, wird der aktuelle Spielstand unwiderbringlich verworfen." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Gegner:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Ihre Farbe:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "Spiel _starten" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Als G_ast anmelden" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "Verbinde mit FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Tipp des Tages" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Tipps beim Start anzeigen" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://de.wikipedia.org/wiki/Schach" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://de.wikipedia.org/wiki/Schach#Spielregeln" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Willkommen" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "W Elo" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "S Elo" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "Ergebnis" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "Ereignis" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "Seite" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "Runde" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "Datum" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "ECO" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "PyChess Datenbank" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "Das Spiel #%s kann nicht geladen werden, weil beim Einlesen der FEN-Datei ein Fehler aufgetreten ist" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Die Verbindung wurde unterbrochen - \"Ende der Datei\"-Meldung erhalten" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' ist kein registrierter Name" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Das eingegebene Passwort ist ungültig.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Verbindung zum Server herstellen" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Beim Server anmelden" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Umgebung wird eingerichtet" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Verbunden" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Nicht verbunden" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Verfügbar" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Es wird gespielt" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Untätig" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "Prüfe" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Nicht verfügbar" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "Simultanes Match läuft" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "Im Turnier" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Unbewertet" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Bewertet" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privat" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d Min." #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " +%d s" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Verbindungsfehler" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Fehler bei der Anmeldung" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Verbindung wurde getrennt" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Adressfehler" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Automatisch abmelden" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Sie wurden wegen Untätigkeit von länger als einer Stunde ausgeloggt." #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Gewonnen" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Remis" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Verloren" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Sanktionen" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-Mail" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "verstrichene Zeit" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "Insgesamt online" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Verbinde" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Unbekannt" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Sie sind gegenwärtig als Gast angemeldet.\nDeshalb werden keine bewerteten Spiele angeboten." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Jetzt registrieren" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Name" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Typ" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Uhr" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Aktive Suchanfragen: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s Min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s Sek" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Herausforderung annehmen" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Herausforderung ablehnen" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Herausforderung ignorieren" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " Min." #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s s" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "Rang des Gegners" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Manuelles Annehmen" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Bullet" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Wild" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Status" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Spieler: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Weißer Spieler" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Schwarzer Spieler" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Partieart" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Laufende Partien: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Ihre Farbe" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Gegner" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "Ist online" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Zeitsteuerung" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Datum/Zeit" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s ist %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "Fortsetzung erbitten" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "Pausiertes Spiel untersuchen" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Nichts unternehmen" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "Der Ketten-Button ist deaktiviert, weil Sie als Gast eingeloggt sind. Gäste können keine Bewertungen abgeben, und der Ketten-Button hat keine Wirkung ohne Bewertung der gegnerischen Stärke." #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Herausforderung: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Diese Option wird nicht angewendet, weil Sie der herausfordernde Spieler sind" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d Min + %(gain)d Sek/Zug" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Anleitung" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "Beliebige Stärke" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Sie können keine bewerteten Spiele spielen, da Sie als Gast eingeloggt sind" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Sie können keine bewerteten Spiele spielen, da die Schachuhr deaktiviert ist" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "Im FICS können keine Spiele ohne Schachuhr bewertet werden" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Diese Option steht nicht zur Verfügung, weil Sie einen Gast herausfordern, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "Gäste können nicht an bewerteten Spielen teilnehmen" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Mischen" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Sonstiges" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Sie können keine Varianten einstellen, da die Schachuhr deaktiviert ist" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "Im FICS können Spiele ohne Schachuhr nur nach den Standard Schachregeln gespielt werden." #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Toleranz ändern" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr " hat das Angabot für eine Partie abgeschlagen." #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "Untersucht" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrator" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Rechner-Konto" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Team-Konto" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Unregistrierter Benutzer" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Schachbeistand" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Turnierleiter" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Großmeister" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Internationaler Meister" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "FIDE-Meister" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Großmeisterin" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Internationale Meisterin" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "Frauen-FIDE-Meister" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "Dummy-Konto" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "T" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "U" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "CA" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "SR" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "TD" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "GM" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "IM" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "FM" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "WGM" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "WIM" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "WFM" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "The Engine %s hat einen Fehler ausgegeben:" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Ihr Gegner hat Remis angeboten. Annehmen?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Ihr Gegner hat Remis angeboten. Wenn Sie es annehmen, wird die Partie 1/2 zu 1/2 bewertet." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Ihr gegner möchte die Partie abbrechen. Annehmen?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Ihr Gegner bittet darum, die Partie abzubrechen. Sie wird dann nicht bewertet." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Ihr Gegner bittet darum die Partie zu vertagen. Annahmen?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Ihr Gegner bittet darum die Partie zu vertagen. Wenn Sie annehmen kann sie später wiederaufgenommen werden (wenn beide Gegner online sind und der Wiederaufnahme zustimmen)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Ihr gegner bittet um Zurücknahme der letzten %s Züge. Annehmen?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Ihr Gegner bittet darum, die letzten %s Züge zurückzunehmen. Wenn Sie annehmen, wird die Partie von der früheren Position weitergeführt." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Ihr Gegner bittet um eine Pause. Annehmen?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Ihr Gegner bitte um eine Pause. Wenn Sie annehmen, wird die Uhr so lange angehalten, bis beide Spieler der Wiederaufnahme zustimmen." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Ihr Gegner möchte mit der Partie fortfahren. Annehmen?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Ihr Gegner möchte mit der Partie fortfahren. Wenn Sie annehmen, wird die Uhr wieder gestartet." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Die Aufgabe" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "Das Remis Angabot" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "Das Abbruch-Angebot" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "Das Pause Angebot" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "Das Fortsetzen-Angebot" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "Das Seitentausch-Angebot" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "Eine Pause anbieten" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "Anbieten, weiter zu spielen" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "Anbieten, die Seiten zu wechseln" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "Eine Zurücknahme des letzten Zugs anbieten" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "Um zügiges Weiterspielen bitten" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Ihr Gegner verfügt noch über Restspielzeit." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "Die Uhr läuft noch nicht." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Sie können die Farbe nicht während des Spiels wechseln." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Sie haben versucht, zu viele Züge rückgängig zu machen." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Ihr Gegner bittet Sie, sich zu beeilen!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Generell bedeutet dies nichts, da das Spiel zeitbasiert ist, aber wenn Sie Ihren Gegner zufriedenstellen wollen, sollten Sie vielleicht weitermachen." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s wurde durch Ihren Gegner erklärt." #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Sie können zu einem späteren Spielzeitpunkt das Angebot Ihrem Gegner erneut anbieten." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s wurde von Ihrem Gegner zurückgenommen" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Scheinbar hat Ihr Gegner seine oder ihre Meinung geändert." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Unfähig %s zu akzeptieren" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess war es nicht möglich, das %s Angebot zu akzeptieren. Möglicherweise wurde es zurückgenommen." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s gibt einen Fehler zurück" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Schach-Alpha-2-Diagramm" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Das Diagramm »%s« konnte nicht geladen werden" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "PyChess Datenbank" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Schachstellung" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Einfache Schach-Position" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Der Zug schlug fehl, weil %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Schachpartie" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "Das Spiel kann wegen eines Fehlers in der FEN-Datei nicht geladen werden." #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "gegen" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Alle Dateien" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Bilder" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Ersetzen" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Datei existiert" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Eine Datei namens '%s' existiert bereits. Wollen Sie sie ersetzen?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Die Datei existiert bereits in '%s'. Wenn Sie die Datei ersetzen, wird der Inhalt überschrieben." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Konnte die Datei nicht speichern" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Der Fehler war: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Zielrechner nicht erreichbar" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Gestorben" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Örtliches Ereignis" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Lokale Seite" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Bauer" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "König" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Die Partie endete remis" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s hat das Spiel gewonnen" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s hat das Spiel gewonnen" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Die Partie wurde beendet" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Die Partie wurde unterbrochen" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Das Spiel wurde abgebrochen" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Weil beide Spieler an Zeitnot gestorben sind" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "Weil %(mover)s zugunfähig ist" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Weil %(loser)s aufgegeben hat" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Weil %(loser)s an Zeitnot gestorben ist" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Weil ein Spieler die Verbindung verloren hat" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "Weil %(white)s die Verbindung verloren hat" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "Weil %(black)s die Verbindung verloren hat" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Weil ein Spieler ausgestiegen ist. Das Spiel war noch nicht weit genug fortgeschritten um einen Gewinner festzustellen." #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Weil die Verbindung zum Server verloren wurde" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Der Grund ist nicht bekannt." #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "Min." #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "s" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Unsymmetrischer Zufall" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "Verdeckte Spielsteine" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Alle weiß" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Ecke" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer Random" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "Ein Spieler startet mit einem Bauern weniger" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Verlierer" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "Ein Spieler startet ohne Dame" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Zufall" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Verkehrt herum" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Sie haben noch keine Konversation begonnen" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Nur registrierte Benutzer können hier chatten" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Keine Konversation ausgewählt" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Lade Spielerdaten" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "Empfange Spielerliste" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Mehr Kanäle" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Mehr Spieler" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Konversationen" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Konversationsinformationen" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Revanche anbieten" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Revanche spielen" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Einen Zug zurücknehmen" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Zwei Züge zurücknehmen" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "Das Spiel wurde angehalten" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Spiel geladen" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Spiel gespeichert" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Du bietest Remis" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "KI, %s, ist abgestürzt" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess hat die Verbindung zur KI verloren, möglicherweise ist sie abgestürzt.\n\nSie können versuchen eine neue Partie mit der KI zu starten, oder versuchen gegen eine andere spielen." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Abbruch" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "Zug reklamieren" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "gegen" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Zur Anfangsposition zurückgehen" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Ein Zug zurück" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Ein Zug vor" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Zur letzten Stellung zurückspringen" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Sie" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Gast" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Partie öffnen" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Partie speichern" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Alle Dateien" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Ermittele Dateityp automatisch" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Alle Schach Dateien" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Unbekannter Dateityp '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Datei konnte nicht gespeichert werden '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Sie haben nicht die nötigen Rechte um die Datei zu speichern.\nÜberprüfen Sie bitte den angegebenen Pfad und versuchen Sie es erneut." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess war es nicht möglich, die Partie zu speichern" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Die Partie vor der Schliessen abspeichern?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Es ist nicht möglich die Partie später fortzusetzen, wenn Sie sie jetzt nicht abspeichern." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "von" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Mensch" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minuten:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Zuschlag (pro Zug):" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Spiel betreten" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Öffne Klang-Datei" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Kein Ton" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Signalton" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Audiodatei wählen …" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Unbeschriftete Fläche" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Sie können aus 8 Schwierigkeitsgraden auswählen um gegen den Computer zu spielen." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "Durch drücken von Strg+Z können Sie dem Gegener anbieten einen Zug zurück zunehmen." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Um im Vollbildmodus zu spielen drücken Sie F11. Um den Vollbildmodus zu verlassen, drücken Sie nochmal F11." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Der Spion-Modus analysiert das gegnerische Spiel, dürcke Steuerung+Y zum aktivieren." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Wussten Sie, dass es möglich ist ein Schachspiel in nur 2 Zügen zu beenden?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Wussten Sie, dass die Anzahl der möglichen Schachspiele größer ist, als es Atome im Universum gibt?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Rufen" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Schach" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Inoffizieller Kanal %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "Das ausgewählte Feld (%s) ist ungültig" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "und" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "zieht" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "setzt matt" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "setzt den Gegner Schach" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "erhöht die Königssicherheit" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "erhöht leicht die Königssicherheit" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "bewegt den Turm auf eine offene Linie" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "bewegt den Turm auf eine halboffene Linie" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "bewegt den Läufer ins Fianchetto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "wandelt den Bauern in eine(n) %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "rochiert" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "nimmt Material zurück" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "opfert Material" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "tauscht Material ab" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "schlägt Material" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "erhöht den Druck auf %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "verteidigt %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Weiß hat eine neue Figur als Vorposten: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Schwarz hat eine neue Figur als Vorposten: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "halboffen" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s bewegt einen Bauern in eine Stonewall-Formation" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s hat einen neuen gefangenen Läufer auf %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "entwickelt einen Bauern: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "bringt einen Bauern näher an die hinterste Reihe: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "bringt einen %(piece)s näher zum feindlichen König: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "entwickelt einen %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "platziert einen %(piece)s aktiver: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Weiß sollte einen Bauernsturm rechts unternehmen" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Schwarz sollte einen Bauernansturm links unternehmen" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Weiß sollte einen Bauernansturm links unternehmen" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Schwarz sollt einen Bauernansturm rechts unternehmen" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Schwarz hat eine äußerst verkrampfte Position" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Schwraz hat eine leicht verkrampfte Position" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Weiß hat eine äußerst verkrampfte Position" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Weiß hat eine leicht verkrampfte Position" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "Kommentar" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "Kommentierte Partie" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "Startkommentar hinzufügen" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Kommentar hinzufügen" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Kommentar bearbeiten" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "Bewegungssymbol hinzufügen" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "Auswertungssymbol hinzufügen" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "Symbole entfernen" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "Variation entfernen" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "Runde %s" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "Tipps" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "Die Tipps-Leiste wird während des gesamten Spiel Unterstützung anbieten." #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Offizielle PyChess-Leiste." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Eröffnugsbuch" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Das Eröffnungsbuch wird versuchen Sie während der Eröffnung zu inspirieren indem es gebräuchliche Züge von Schachmeistern zeigt" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "Analyse durch %s" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "%s wird Ihnen vorhersagen welches der beste Zug ist und welche Seite in Führung liegt." #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "Berechne..." #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "Vorschläge können Ihnen helfen Ideen zu finden, können aber die Spielstärke des Computers beeinträchtigen." #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "Abschlusstabelle" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Kommentare" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Ursprungsposition" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "Engines" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "Die Engine-Ausgabeleiste zeigt die Überlegungen des Computerschach-Engine während des Spiels an" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "An diesem Spiel nehmen keine Computerspieler teil." #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Notation" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Ergebnis" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/bn/0000755000175000017470000000000012176727272014424 5ustar tamasuserspychess-0.12beta3/lang/bn/LC_MESSAGES/0000755000175000017470000000000012176727272016211 5ustar tamasuserspychess-0.12beta3/lang/bn/LC_MESSAGES/pychess.po0000644000175000017470000021451412161415524020222 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2009. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bn\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "পাইচেস - ইন্টারনেটে সংযুক্ত করো" #: glade/fics_logon.glade:55 msgid "Title" msgstr "শিরোনাম" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "পাসওয়ার্ড:(_P)" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "নাম:(_N)" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "অতিথি হিসাবে লগ-অন করো" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "পাইচেস - ইন্টারনেট-দাবা: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "গ্রহণ করো (_A)" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "সন্ধান প্রেরন করো" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "রেটিং" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "সময়" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "ড্র অফার করো (_D)" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "খবর" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "টুলস" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "নতুন খেলা" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "খেলা আরম্ভ করো (_S)" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "খেলোয়ারগন" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "খেলার সংকেতপদ্ধতি নির্দেশ করো" #: glade/promotion.glade:8 msgid "Promotion" msgstr "পদোন্নতি" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "মন্ত্রী" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "নৌকা" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "গজ" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "ঘোড়া" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "বড়ের কিসে পদন্নতি হবে?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "গাহনোম ডেস্কটপ-এর জন্য দাবা ক্লায়েন্ট" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "খেলার তথ্যাবলী" #: glade/PyChess.glade:179 msgid "Event:" msgstr "ইভেন্ট:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "সাইট:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "রাউন্ড:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "খেলার ডাটা" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "খেলার তারিখ" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "পছন্দসমূহ" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "একটি মাত্র খেলা খোলা থাকলে ট্যাবগুলি লুকোনো থাকুক (_H)" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "সাধারণ ডিস্প্লে অপশান্সমূহ" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "অ্যানিমেশন" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "অ্যানালাইজার ব্যাবহার করা হোক (_a)" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "ইনভার্টেড অ্যানালাইজার ব্যাবহার করা হোক (_a)" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "অ্যানালাইজ করা হচ্ছে" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "পাইচেস-এ শব্দ ব্যাবহার করা হোক (_U)" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "একজন খেলোয়ার চেক করছে: (_c)" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "একজন খেলোয়ার দান দিচ্ছে: (_m)" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "খেলাটি ড্র হয়েছে: (_d)" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "খেলাটি হারা হয়েছে: (_l)" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "খেলাটি জেতা হয়েছে: (_w)" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "একজন খেলোয়ার ঘুঁটি খেয়েছে: (_a)" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "খেলাটি সেট-আপ করা হয়েছে: (_S)" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "পর্যবেক্ষিত দানসমূহ: (_O)" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "পর্যবেক্ষিত অন্তসমূহ: (_O)" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "শব্দ কর যখন..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "খেলা (_G)" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "নতুন খেলা (_N)" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "খেলা লোড করো(_L)" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "খেলা সেভ করো (_S)" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "অন্য নামে খেলা সেভ করো (_A)" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "খেলোয়ারের রেটিং" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "ক্রিয়াসমূহ (_K)" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "কল ফ্ল্যাগ (_C)" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "প্রদর্শন (_V)" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "বোর্ড ঘোরাও (_R)" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "লগ প্রদর্শক (_L)" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "হিন্ট মোড(_H)" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "স্পাই মোড (_Y)" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "সহায়িকা (_H)" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "দাবা সম্বন্ধে" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://bn.wikipedia.org/wiki/দাবা" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "যোগাযোগ বিচ্ছিন্ন হল — \"end of file\" মেসেজ পাওয়া গেছে" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' কোন রেজিস্টার করা নাম নয়" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "রেট না করা" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "রেট করা" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "সংযোগে ত্রুটি" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "লগ-অন-এ ত্রুটি" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "সংযোগ বন্ধ করা হয়েছে" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "ইমেইল" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "ব্যায় করা হয়েছে" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "অনলাইন মোট" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "পিং করুন" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "সংযুক্ত করা হচ্ছে" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "অজ্ঞাত" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "রেজিস্টার কর" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "নাম" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "ধরণ" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "ঘড়ি" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "ব্লিটজ্‌" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "লাইটনিং" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "সাদা-খেলোয়ার" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "কালো-খেলোয়ার" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "খেলার ধরন" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "প্রতিদ্বন্দি" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "আপনার প্রতিদ্বন্দি আপনাকে তারা দিচ্ছেন!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "দাবার অবস্থান" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "সাধারণ দাবার অবস্থান" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "খেলাটি ড্র-এ অন্ত হয়েছে" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "খেলাটি মারা হয়েছে" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "খেলাটি স্থগিত হয়েছে" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "খেলাটি বন্ধ করা হয়েছে" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "নরমাল" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "লোড করা খেলা" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "সেভ করা খেলা" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "তুমি একটি ড্র-এর অফার পাঠালে" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "ইঞ্জিন, %s, মারা গেছে" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "পাইচেস-এর ইঞ্জিন-এর সঙ্গে যোগাযোগ বিচ্ছিন্ন হয়েছে, হয়ত ইঞ্জিন-টি মারা গেছে।\n\nতুমি ইঞ্জিন-টির সঙ্গে একটি নতুন খেলা আরম্ভ করতে পারো, অথবা একে অপরের সঙ্গে খেলতে পারো." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "বনাম" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "খেলা খোলো" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "দাবার সব ফাইল" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "'%s' ফাইল সংরক্ষণ করা সম্ভব হচ্ছেনা" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "মানুষ" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "মিনিট:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "লাভ:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "খেলা শুরু করুণ" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/eu/0000755000175000017470000000000012176727272014436 5ustar tamasuserspychess-0.12beta3/lang/eu/LC_MESSAGES/0000755000175000017470000000000012176727272016223 5ustar tamasuserspychess-0.12beta3/lang/eu/LC_MESSAGES/pychess.po0000644000175000017470000020275212161415524020235 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Pasahitza:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Izena:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/el/0000755000175000017470000000000012176727272014425 5ustar tamasuserspychess-0.12beta3/lang/el/LC_MESSAGES/0000755000175000017470000000000012176727272016212 5ustar tamasuserspychess-0.12beta3/lang/el/LC_MESSAGES/pychess.po0000644000175000017470000022437312161415524020227 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. # Γιάννης Ανθυμίδης , 2012. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: Γιάννης Ανθυμίδης \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "Το PyChess ανακαλύπτει τις μηχανές σας. Παρακαλώ περιμένετε." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Διαδικτυακή Σύνδεση" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Τίτλος" #: glade/fics_logon.glade:70 msgid "text" msgstr "κείμενο" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Σύνδεση με τον Δωρεάν Διαδικτυακό Σκακιστικό Εξυπηρετητή" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Συνθηματικό:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Όνομα:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Συνδεθείτε ως _Επισκέπτης" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "θύ_ρες" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Ε_γγραφείτε" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Πρόκληση: <Παίχτης>" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Αποστολή Πρόκλησης" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Πρόκληση:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Αστραπιαία:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Τυπική:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Μπλιτς:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 λεπτά, Τυχαίο Φίσερ, Μαύρα" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 λεπτά + 6 δευτ/κίνηση, Λευκά" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 λεπτά" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Επεξεργασία Αναζήτησης" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Χωρίς χρόνο" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Λεπτά: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Κέρδος: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Έλεγχος χρόνου: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Πρότυπο" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Έλεγχος χρόνου" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Δεν με νοιάζει" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Η δυναμικότητά σας: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Μπλιτς)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Δυναμικότητα αντιπάλου: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Όταν αυτό το κουμπί είναι στη κατάσταση «κλειδωμένου», τότε\nη σχέση ανάμεσα στην «Δύναμικότητα αντιπάλου» και την\n«Δικιά σας δυναμικότητά» θα κρατηθεί όταν \nα) η εκτίμισή σας για τον τύπο παιχνιδιού που ψάχνετε αλλάζει\nβ) αλλάζεται την παραλλαγή ή τον έλεγχο χρόνου" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Κέντρο:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Ανοχή:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Απόκρυψη" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Δυναμικότητα Αντιπάλου" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Λευκά" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Μαύρα" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Το Χρώμα σας" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Παίξτε με κανονικούς κανόνες σκακιού" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Παίξτε" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Σκακιστική Παραλλαγή" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Βαθμολογημένο παιχνίδι" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Χειροκίνητη αποδοχή αντιπάλου" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Επιλογές" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Διαδικτυακό Σκάκι: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Καθαρισμός Αναζητήσεων" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Αποδοχή" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Άρνηση" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 λεπτά, Τυχαίο Φίσερ, 1800↓, Μαύρα" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 λεπτά + 6 δευτ/κίνηση, 1400↑, Λευκά" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 λεπτά, 1200-1800, Χειροκίνητα" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Αποστολή Αναζήτησης" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Δημιουργία Αναζήτησης" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Αναζητήσεις / Προκλήσεις" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Βαθμολογία" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Χρόνος" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Γράφημα αναζήτησης" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 έτοιμοι παίχτες" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Πρόκληση" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Παρατήρηση" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Έναρξη Ιδιωτικής Συνομιλίας" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "_Κατάλογος Παίκτη" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Κατάλογος Παιχνιδιού" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Πρόταση _Συνέχειας" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Ε_γκατάληψη" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Πρόταση _Ισοπαλίας" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Πρόταση Μ_αταίωσης" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Π_ροεπισκόπηση" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Διακόπηκε" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Νέα" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Εμφάνιση _Συνομιλίας" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Αποσύνδεση" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Εργαλεία" #: glade/findbar.glade:7 msgid "window1" msgstr "παράθυρο1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 από 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Προηγούμενο" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Επόμενο" #: glade/findbar.glade:161 msgid "Search:" msgstr "Αναζήτηση:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Νέο Παιχνίδι" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "Έ_ναρξη Παιχνιδιού" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Μαύρος παίκτης:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Λεύκος παίκτης:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Παίκτες" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "_Χωρίς χρόνο" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Μπλιτς:\t5 λεπτά" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Ράπιντ:\t15 λεπτά + 10 δευτ/κίνηση" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Κανονικό: 40 λεπτά + 15 δευτ/κίνηση" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Παίξτε Κανονικό σκάκι" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Παίξτε σκάκι τύπου Τυχαίο του Φίσερ" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Παίξτε σκάκι τύπου Losers" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Ανοιχτό Παιχνίδι" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Αρχική Θέση" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Προαγωγή" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Βασίλισσα" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Πύργος" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Αξιωματικός" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Ίππος" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Προαγωγή του πιονιού σε τι;" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Πελάτης σκακιού για το Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "Το PyChess είναι ελεύθερο λογισμικό. Η επεξεργασία και αναδιανομή του\nείναι δυνατή υπό τους όρους της δεύτερης έκδοσης της GNU General Public\nLicense όπως δημοσιεύθηκε από το Free Software Foundation, ή (κατ' επιλογήν)\nοποιαδήποτε μεταγενέστερη έκδοση της άδειας αυτής.\nΤο PyChess διανέμεται με την ελπίδα ότι θα φανεί χρήσιμο, αλλά ΧΩΡΙΣ\nΚΑΜΙΑ ΕΓΓΥΗΣΗ ΠΟΙΟΤΗΤΑΣ Η ΚΑΛΗΣ ΛΕΙΤΟΥΡΓΙΑΣ. Για περισσότερες πληροφορίες\nδείτε την GNU General Public License.\n\nΜαζί με το PyChess παραλαμβάνετε και ένα αντίτυπο της GNU General\nPublic License. Εάν όχι, απευθυνθείτε γραπτώς στην εξής διεύθυνση\n\nFree Software Foundation, Inc.,\n51 Franklin St, Fifth Floor\nBoston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Πληροφορίες παιχνιδιού" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Συμβάν:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Ιστοσελίδα:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Γύρος:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Δεδομένα Παιχνιδιού" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Ημερομηνία Παιχνιδιού" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Προτιμήσεις" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Το εμφανιζόμενο όνομα του πρώτου ανθρώπινου παίκτη, π.χ. Ιωάννης" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Όνομα του _πρώτου ανθρώπινου παίκτη:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Όνομα του δ_εύτερου ανθρώπινου παίκτη:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "Α_πόκρυψη καρτελών όταν είναι ανοιχτό μόνο ένα παιχνίδι" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Γενικές Επιλογές Προβολής" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Χωρίς _κίνηση" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Κίνηση" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Γενικά" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Χρήση _αναλυτή" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Απεγκατάσταση" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Θέματα" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Χρήση Ήχων στο PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Το παιχνίδι λήγει _ισόπαλο:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Το παιχνίδι λήγει _χαμένο:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Το παιχνίδι λίγει σε _νίκη:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Αναπαραγωγή Ήχου Όταν..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Παιχνίδι" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Νέο Παιxνίδι" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Παίξτε _Διαδικτυακό Σκάκι" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Φόρτωση Παιχνιδιού" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Καθορισμός Θέσης" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "Α_ποθήκευση Παιχνιδιού" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Αποθήκευση Παιχνιδιού Ω_ς" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Βαθμολογία Παίκτη" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "Ε_νέργειες" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Πρόσφερετε _Παύση" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Πρόσφερετε _Αναίρεση" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "Προ_βολή" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "Π_εριστροφή Σκακιέρας" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Πλήρης οθόνη" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Έξοδος από _Πλήρη οθόνη" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Προβολέας _Καταγραφών" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Λειτουργία Σ_υμβουλής" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Λειτουργία _Κατασκοπίας" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Βοήθεια" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Σχετικά με το Σκάκι" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Πως να Παίξετε" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Μετάφραση του PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Συμβουλή της ηΗ" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Έξοδος PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Αποθήκευση %d αρχείων" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Αντίπαλος:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Το Χρώμα Σου" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Έναρξη Παρτίδας" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://en.wikipedia.org/wiki/Chess" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Ηλεκτρονικό Ταχυδρομείο" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Εγγραφή τώρα" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Όνομα" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Τύπος" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Ρολόι" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s λεπτά" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s δευτ" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Αποδοχή Πρόκλησης" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Άρνηση Πρόκλησης" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Αγνόηση Πρόκλησης" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " λεπτ" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Λευκός Παίκτης" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Μαύρος Παίκτης" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Τύπος Παιχνιδιού" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Ημερομηνία/Ώρα" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Λογαριασμός Υπολογιστή" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Λογαριασμός Ομάδας" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Παρτίδα Σκακιού" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "εναντίων" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Εικόνες" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Αντικατάσταση" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Το αρχείο υπάρχει ήδη" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Τοπικό Γεγονός" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Πιόνι" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Παπάς" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "Πι" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "Ι" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "Πυ" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Β" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "Πα" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Το παιχνίδι έληξε σε ισοπαλία" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Ο λόγος είναι άγνωστος" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "λεπτ" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "δευτ" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Τυχαίο Ασυμμετρικό" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "Κλασσικοί κανονισμοί σκακιού με κρυφά αγαλματίδια\n" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Ολόλευκο" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Γωνία" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Τυχαίο Φίσερ" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Κανονικό" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Τυχαίο" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Πάνω Κάτω" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Πρόταση Επανάληψης" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Παίξτε Επανάληψη" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Αναίρεση μιας κίνησης" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Αναίρεση δύο κινήσεων" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Ακύρωση" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "εναντίων" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "'Ανοιγμα Παιχνιδιού" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Αποθήκευση παιχνιδιού" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Αρχεία" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Αυτόματος εντοπισμός τύπου" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Αρχεία Σκακιού" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Αδύνατη η αποθήκευση του αρχείου '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Δεν έχετε τα απαραίτητα δικαιώματα για την αποθήκευση του αρχείου.\nΒεβαιωθείτε οτι ακολουθείσατε την σωστή διαδρομή (path) και ξαναπροσπαθήστε." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Αποθήκευση %d αρχείου" msgstr[1] "_Αποθήκευση %d αρχείων" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Αποθήκευση υπάρχοντος παιχνιδιού πρίν το κλείσιμο;" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "από" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Άνθρωπος" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Λεπτά:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Κέρδος" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr " σκάκι" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Εισαγωγή στο Παιχνίδι" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Άνοιγμα Αρχείου Ήχου" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Χωρίς ήχο" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Ηχητικό σήμα" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Επιλογή αρχείου ήχου..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "και" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Προσθήκη σχολίου" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Επεξεργασία σχολίου" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "Ανάλυση από %s" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "Ανάλυση απειλών από %s" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "Ματ σε %d" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Συζήτηση" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Σχόλια" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Ιστορικό Κινήσεων" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Βαθμολογία" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/kn/0000755000175000017470000000000012176727272014435 5ustar tamasuserspychess-0.12beta3/lang/kn/LC_MESSAGES/0000755000175000017470000000000012176727272016222 5ustar tamasuserspychess-0.12beta3/lang/kn/LC_MESSAGES/pychess.po0000644000175000017470000020531112176707324020236 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # yogi , 2013 msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-06-04 05:44+0000\n" "Last-Translator: yogi \n" "Language-Team: Kannada (http://www.transifex.com/projects/p/pychess/language/kn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kn\n" "Plural-Forms: nplurals=1; plural=0;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 ನಿಮಿಷ" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "ನಿಮಿಶಗಳು:" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "ಬಿಳಿ" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "ಕಪ್ಪು" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "ನಿಮ್ಮ ಬಣ್ಣ" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "ಆಡು" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "ಸಮಯ" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "ಹೊಸ ಆಟ" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_ಕಪ್ಪು ಆಟಗಾರ" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "ರಾಣಿ" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "ಒಂಟೆ" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "ಹೆಸರು:" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_ಸಾಮಾನ್ಯ" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_ಆಟ" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_ಹೊಸ ಆಟ" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "ಅಂತರಜಾಲದಲ್ಲಿ ಚದುರಂಗವನ್ನು ಆಡು " #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "ಚದುರಂಗದ ಬಗ್ಗೆ" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "ಪೈಚೆಸ್ ಅನುವಾದಿಸು" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_ನಿಮ್ಮ ಬಣ್ಣ" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://kn.wikipedia.org/wiki/ಚದುರಂಗ_(ಆಟ)" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://kn.wikipedia.org/wiki/ಚದುರಂಗದ_ನಿಯಮಗಳು" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "ಸುಸ್ವಾಗತ" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "ಫಲಿತಾಂಶ" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "ದಿನಾಂಕ" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "ಗೆಲುವು" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "ಸೋಲು" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "ಇ-ಸಂದೇಶ" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "ಹೆಸರು" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "ಗಂಟೆ" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "ನಿಮಿಷ" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "ಬಿಳಿ ಆಟಗಾರ" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "ಕಪ್ಪು ಆಟಗಾರ" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "ಪೈಚೆಸ್ ದತ್ತಸಂಚಯ" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "ಚದುರಂಗ ಆಟ" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "ಚಿತ್ರಗಳು" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "ಕಡತವನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "ಪದಾತಿ" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "ರಾಜ" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "ನಿಮಿಷ" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "http://brainking.com/en/GameRules?tp=2\n" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "ಮೂಲೆ" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "ಆಟವನ್ನು ಉಳಿಸಿ" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "ಎಲ್ಲಾ ಕಡತಗಳು" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "ಎಲ್ಲಾ ಚದುರಂಗದ ಕಡತಗಳು" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "ನಿಮಿಷಗಳು:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "ಚದುರಂಗ" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/he/0000755000175000017470000000000012176727272014421 5ustar tamasuserspychess-0.12beta3/lang/he/LC_MESSAGES/0000755000175000017470000000000012176727272016206 5ustar tamasuserspychess-0.12beta3/lang/he/LC_MESSAGES/pychess.po0000644000175000017470000020412412161415524020213 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess הגלה את המנועים שלך. אנא המתן." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - התחבר לשח-מט באינטרנט" #: glade/fics_logon.glade:55 msgid "Title" msgstr "כותרת" #: glade/fics_logon.glade:70 msgid "text" msgstr "טקסט" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "התבחר ל-Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_סיסמה:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_שם:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "התחבר בתור _Guest" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "_הירשם" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "בזק:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "רגיל:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "בליץ:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_קבל" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 דקות, פישר - ראנדום, 1800↓, שחור" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 דקות + 6 שניות/מסע, 1400↑, לבן" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 דקות, 1200-1800, ידני" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "דירוג" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "זמן" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 שחקנים מוכנים" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "חדשות" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "כלים" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "משחק חדש" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_התחל משחק" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "אתר:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_עריכה" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "אירוע מקומי" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "שמירת משחק" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/ml/0000755000175000017470000000000012176727272014435 5ustar tamasuserspychess-0.12beta3/lang/ml/LC_MESSAGES/0000755000175000017470000000000012176727272016222 5ustar tamasuserspychess-0.12beta3/lang/ml/LC_MESSAGES/pychess.po0000644000175000017470000020313212161415524020225 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2009. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ml\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "പാസ്‍വേര്‍ഡ്" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_ നാമം" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "_അദിതിയായി കേറുക" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "അംഗീകരിക്കുക" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/fa/0000755000175000017470000000000012176727272014413 5ustar tamasuserspychess-0.12beta3/lang/fa/LC_MESSAGES/0000755000175000017470000000000012176727272016200 5ustar tamasuserspychess-0.12beta3/lang/fa/LC_MESSAGES/pychess.po0000644000175000017470000020306712161415524020212 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" "Plural-Forms: nplurals=1; plural=0;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "نام:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_پذیرش" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "باقی‌مانده" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "زمان" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "بازی جدید" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_شروع بازی" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "پایگاه:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "تنظیمات‌" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_بازی" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_نما" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_راهنما" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/ar/0000755000175000017470000000000012176727272014427 5ustar tamasuserspychess-0.12beta3/lang/ar/LC_MESSAGES/0000755000175000017470000000000012176727272016214 5ustar tamasuserspychess-0.12beta3/lang/ar/LC_MESSAGES/pychess.po0000644000175000017470000021015512161415524020222 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\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" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - اتصل بالشطرنج على الانترنت" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "كلمة المرور_" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_الاسم:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "الدخول بحساب زائر" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "Pychess - شطرنج الإنترنت: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "موافقة_" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "أرسل طلب" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "التقييم" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "الوقت" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "عرض _تعادل" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "الأخبار" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "أدوات" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "لعبة جديدة" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "بدأ اللعبة_" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "اللاعبون" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "أدخل تأشيرة اللعبة" #: glade/promotion.glade:8 msgid "Promotion" msgstr "ترقية" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "وزير" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "قلعة" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "فيل" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "الحصان" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "رهينة لتعزيز ما؟" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "عميل الشطرنج لسطح مكتب Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess برنامج مجاني: تستطيع إعادة توزيعه و/أو تعديله.\nالبرنامج تحت حقوق و رخصة GNU General Public License كما تم نشره.\nمؤسسة البرنامج المجاني: إما إلاصدار الثاني (2) من الرخصة أو \nأي إختيار حسب رغبتك لأي إصدار سابق.\nتم توزيع PyChess و نشره على أمل أن يكون مفيد.\nولكن بدون أي ضمان: أو حتى الضمان الضمني من المتاجرة أو الملائمة لغرض معين. إنظر إلى\nGNU General Public License لمزيد من المعلومات.\nمن المفترض أن تتسلم نسخة من GNU General Public License.\nمع لعبة PyChess: إن لم يتم تسليمها لك, قم بالكتابة و الطلب الى Free Software Foundation, Inc.,\n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "معلومات اللعبة" #: glade/PyChess.glade:179 msgid "Event:" msgstr "مناسبة" #: glade/PyChess.glade:193 msgid "Site:" msgstr "موقع" #: glade/PyChess.glade:221 msgid "Round:" msgstr "جولة" #: glade/PyChess.glade:265 msgid "Game data" msgstr "بيانات اللعبة" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "بيانات اللعبة" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "التفضيلات" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_إخفاء علامات التبويب فقط عندما تكون اللعبة مفتوحة" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "تفضيلات العرض الرئيسة" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "صور متحركة" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "إستخدام _المحلل" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "إستخدام _المحلل العكسي" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "تحليل" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_إستخدام الصوت" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "اللاعب الأول _تشك ملك" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "اللاعب الاول _تحرك" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "اللعبه إنتهت _بالتعادل" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "_خسرت اللعبة" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "_ربحت اللعبة" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "تشغيل الصوت عند.." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "لعبة_" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "لعبة جديدة_" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "تحميل لعبة_" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "حفظ اللعبة_" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "حفظ اللعبة باسم_" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "ترتيب_ اللاعب" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "إجراءات_" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "طلب علم_" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_عرض" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_تغيير إتجاه لوحة اللعب" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_عارض التقارير" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_إختيار طريقة" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "طريقة Sp_y" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_مساعدة" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "بخصوص الشطرنج" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "اللعبة انتهت بالتعادل" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "تم إنهاء اللعبة" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "لعبة محفوظة" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "فتح لعبة" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "دقائق:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "كسب" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/zh_CN/0000755000175000017470000000000012176727272015026 5ustar tamasuserspychess-0.12beta3/lang/zh_CN/LC_MESSAGES/0000755000175000017470000000000012176727272016613 5ustar tamasuserspychess-0.12beta3/lang/zh_CN/LC_MESSAGES/pychess.po0000644000175000017470000021572012161415524020624 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. # Tiansworld , 2013. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-04-03 07:37+0000\n" "Last-Translator: Tiansworld \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess 正在寻找你的引擎,请稍候。" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - 连接到互联网象棋" #: glade/fics_logon.glade:55 msgid "Title" msgstr "标题" #: glade/fics_logon.glade:70 msgid "text" msgstr "文本" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "连接到Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "密码(_P):" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "用户名(_N):" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "登录为来宾用户(_G)" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "端口(_R):" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "注册" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "挑战: <玩家>" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "发出挑战" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "挑战:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "标准:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 分钟" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "编辑查找条件" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "不限时间" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "分钟: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "时间控制: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "标准" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "时间控制" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "不必在意" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "隐藏" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "白" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "黑" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "您的颜色" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "开始游戏" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "积分游戏" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "手动接受对手" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "选项" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - 网络象棋:免费网络象棋服务器 (FICS)" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "清空查询" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "接受(_A)" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "拒绝(_D)" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 分钟,1200-1800,手动" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "开始寻找" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "开始查找" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "查找/挑战(_S)" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "评分" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "时间" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 个玩家已就绪" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "挑战" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "旁观" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "进行私聊" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "玩家名单" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "游戏列表" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "认输(_E)" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "提议和棋(_D)" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "预览(_V)" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "新闻" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "显示 对话(_C)" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "登出(_L)" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "工具" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 中的 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "上一个(_P)" #: glade/findbar.glade:132 msgid "_Next" msgstr "下一个(_N)" #: glade/findbar.glade:161 msgid "Search:" msgstr "查找:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "新游戏" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "开始游戏(_S)" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "黑方选手" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "白方选手" #: glade/newInOut.glade:336 msgid "Players" msgstr "玩家" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "不限时(_U)" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "玩普通棋(_P)" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "打开游戏" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "最初的位置" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "进入游戏记谱" #: glade/promotion.glade:8 msgid "Promotion" msgstr "升变" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "后" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "车" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "象" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "马" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "兵升变为什么?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "GNOME的国际象棋客户端" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess是自由软件;您可以按照自由软件基金会所发表的 GNU GPL 协议\n自由发放和/或修改它;GPL 协议应该采用第二版或以后的任何版本。\n\nPyChess发表的目的是希望它能够对您有用,但我们没有任何保证;\n对于以任何用途使用它所造成的任何直接或间接后果都不承担任何责任。\n请参看GNU GPL 协议中的细节。\n\n您应该在收到 Nautilus 的同时收到了 GNU GPL 协议的副本;\n如果您没有收到的话,请给自由软件基金会写信,\n地址是 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "游戏信息" #: glade/PyChess.glade:179 msgid "Event:" msgstr "事件:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "站点:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "轮次:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "游戏数据" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "游戏日期" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "首选项" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "P1的显示名称,例如 约翰" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "只有一个游戏的时候隐藏标签(_H)" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "面对面显示模式(_T)" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "常规显示选项" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "只显示棋子移动时的动画" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "无动画(_A)" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "永远不显示动画.在配置差的机器上用这项." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "动画" #: glade/PyChess.glade:1264 msgid "_General" msgstr "常规(G)" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "使用分析工具(_a)" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "使用逆向分析工具(_i)" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "分析中" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "卸载" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "已安装侧栏面板" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "侧栏面板(_P)" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "在PyChess中使用声音" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "将军(_c):" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "走棋(_m):" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "和棋:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "输棋:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "赢棋:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "吃子(_a):" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "比赛开始(_s):" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "定式(_O):" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "残局(_e):" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "当...播放声音" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "声音(_S)" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "游戏(_G)" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "新游戏(_N)" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "开始线上对战" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "读取游戏(_L)" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "载入最近的游戏(_R)" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "设置位置" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "保存游戏(_Save)" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "游戏另存为(_A)" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "玩家积分(_P)" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "操作(_A)" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "请求中断" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "请求暂停" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "请求悔棋" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "请求裁判(_C)" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "查看(_V)" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "旋转棋盘(_R)" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "全屏(_F)" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "离开全屏(_F)" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "显示边栏(_S)" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "日志查看(_L)" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "提示模式(_H)" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "间谍模式(_y)" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "帮助(_H)" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "关于" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "如何游戏" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "翻译 PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "今日提示" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "退出Pychess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "关闭而不保存(_W)" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "保存 %d 文档(_S)" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "有 %d 个游戏还未保存. 关闭前先保存吗?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "请选择你想要保存的游戏:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "如果不保存,您游戏的新更改将永久丢失。" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "您的颜色(_Y):" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "开始游戏(_S)" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "以访客身份登录(_U)" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "日积月累" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "启动时显示日积月累" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://zh.wikipedia.org/wiki/%E5%9B%BD%E9%99%85%E8%B1%A1%E6%A3%8B" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://zh.wikipedia.org/wiki/%E5%9B%BD%E9%99%85%E8%B1%A1%E6%A3%8B#.E8.A6.8F.E5.89.87" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "欢迎" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "连接已经断开 - 存在\"end of file\"信息" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s'不是一个注册姓名" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "输入的密码无效。\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "正在连接到服务器" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "正在登录到服务器" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "正在设置环境" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "在线" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "离线" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "可用" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "游戏中" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "空闲" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "不可用" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "不计分" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "已记分" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d 分钟" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d 秒" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "连接错误" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "登录错误" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "连接已经关闭" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "地址错误" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "自动注销" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "您已经注销因为您空闲时间超过了 60 分钟" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "获胜" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "平局" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "失败" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "电子邮件" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "花费" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "在线总数" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "牵制" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "连接中" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "未知的" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "现在注册" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "姓名" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "类別" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "时钟" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s 分钟" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s 秒" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "接受挑战" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "拒绝挑战" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "忽略挑战" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " 分钟" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "手动接受" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "快速" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "闪电" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "状态" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "玩家:%d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "白方" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "黑方" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "游戏类型" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "您的颜色" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "对手" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "在线" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "时间控制" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "日期/时间" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s 目前 %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "请求继续" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "无动作" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "手动" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "任何能量" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "随机" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "其它" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "管理员" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "电脑账户" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "团队账户" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "未注册用户" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "超级大师" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "国际大师" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "国际棋联大师" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "T" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "U" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "CA" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "SR" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "TD" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "GM" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "IM" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "FM" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "WGM" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "WIM" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "要求您的对手走棋" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "您的对手未超时。" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "时钟还没有开始。" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "游戏期间您不能切换颜色。" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "您已经尝试撤销太多走棋。" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "您的对手请您快点!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "您的对手拒绝了%s。" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "您的对手撤销了%s。" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "无法接受%s。" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s返回错误。" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "走棋失败因为 %s。" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "国际象棋" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "文件存在" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "无法保存文件" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "错误为:%s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "本地事件" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "本地站点" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "兵" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "王" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Q" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "一方投降游戏结束" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s 赢得游戏" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s 赢得游戏" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "比赛被终止" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "比赛被封盘" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "比赛被取消" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "因为玩家同意" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "因为 %(loser)s 超时" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "因为 %(loser)s 断开连接" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "因为一个玩家失去连接" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "未知原因" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "分钟" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "秒" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "http://brainking.com/en/GameRules?tp=2\n" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "角落" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "失败者" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "经典象棋规则\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "普通" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "随机" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "倒置" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "更多玩家" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "悔一步棋" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "悔两步棋" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "读取的比赛" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "保存的比赛" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "你发送了一个投降请求" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "引擎(%s)已经僵死" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess已经失去与国际象棋引擎的连接,可能是引擎已经僵死。\n\n你可以尝试仍然使用此引擎开始一个新游戏,或者使用另外一个引擎比赛。" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "对" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "来宾" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "公开赛" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "保存游戏" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "所有文件" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "自动探测类型" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "所有象棋文件" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "未知文件类型‘%s’" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "无法保存文件‘%s’" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess无法保存此游戏" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "PyChess 信息窗口" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "人类" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "快速" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "分:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "获得:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "进入游戏" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "打开声音文件" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "无声" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "选择声音文件…" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "和" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "和局" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "将军" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "车" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "防御 %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "半封闭" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "对话" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "注释" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "初始位置" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "移动历史" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "得分" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/bg/0000755000175000017470000000000012176727272014415 5ustar tamasuserspychess-0.12beta3/lang/bg/LC_MESSAGES/0000755000175000017470000000000012176727272016202 5ustar tamasuserspychess-0.12beta3/lang/bg/LC_MESSAGES/pychess.po0000644000175000017470000020562512161415524020216 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Парола:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Име:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Влез като _Гост" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Бял" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Черен" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Интернет Шах: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Приемане" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Оценка" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Време" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Новини" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Инструменти" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Нова Игра" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Стартирай Играта" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Играчи" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Царица" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Топ" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Офицер" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Рицар" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Повиши пешката в?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Шах клиент за Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Информация за играта" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Събитие:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Сайт:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Рунд:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Предпочитания" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Анимация" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Анализиране" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Игра" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Нова Игра" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Зареди Игра" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Запази Играта" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Запази Играта _Като" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Действия" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Изглед" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Завърти масата" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Помощ" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "За Шаха" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Затваряне _без запазване" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Грешка при свързване" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Връзката е затворена" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Електронна поща" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Свързване" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Име" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Часовник" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Съперник" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Файлът вече съществува" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Грешка : %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Играта беше убита" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Играта беше закрита" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Играта беше прекратена" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Заредена игра" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Запазена игра" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "срещу" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Гост" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Запис на игра" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Всички Файлове" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess не може да запази играта" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Минути:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Печалба:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Без звук" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Избор на звуков файл…" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Коментари" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Начална позиция" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "История на движенията" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Резултат" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/et/0000755000175000017470000000000012176727272014435 5ustar tamasuserspychess-0.12beta3/lang/et/LC_MESSAGES/0000755000175000017470000000000012176727272016222 5ustar tamasuserspychess-0.12beta3/lang/et/LC_MESSAGES/pychess.po0000644000175000017470000021354212161415524020233 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Mängi malet Internetis" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Parool:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nimi:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Logi sisse _Külalisena" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Valge" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Must" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Male Internetis: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Nõustu" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Saada mänguotsing" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Reiting" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Aeg" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Paku _viiki" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Uudised" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Tööriistad" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Uus mäng" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Alusta mängu" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Mängijad" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Sisesta mängu üleskirjutus" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Lipustumine" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Lipp" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Vanker" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Oda" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Ratsu" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Milliseks malendiks muuta lipustuv ettur?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Maleklient Gnome töölauale" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess on vaba tarkvara; sa võid levitada ja/või muuta seda\nGNU General Public License tingimustel nagu need on avaldatud\nFree Software Foundationi poolt; kas siis Litsensi versioonis 2 või\n(sinu valikul) suvalises hilisemas versioonis.\n\nPyChessi levitatakse lootuses, et see on kasulik,\nkuid ILMA IGASUGUSE GARANTIITA; ilma isegi loomulikult eeldatava\nMÜÜGIKÕLBLIKKUSE või KINDLAKS EESMÄRGIKS SOBIVUSE garantiita. Vaata\ndetaile GNU General Public License'ist.\n\nSa pidid saama GNU General Public License'i koopia\nkoos PyChessiga; kui ei siis kirjuta Free Software Foundation, Inc.,\n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Mänguinfo" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Sündmus:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Lehekülg:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Raund:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Mängu andmed" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Mängu kuupäev" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Eelistused" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Peida vahelehed, kui ainult üks mäng on lahti" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Üldised kuvamisvalikud" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animatsioon" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Kasuta _analüüsijat" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Kasuta _pööratud analüüsijat" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analüüsin" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Kasuta helisid PyChessis" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Mängija annab _tule" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Mängija _käib" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Mäng on _viigis" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Mäng on _kaotatud" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Mäng on _võidetud" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Mängija lööb:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Mäng on üles _seatud" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Vaadeldud käigud" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Vaadeldav _lõppeb" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Mängi helilõik kui ..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Mäng" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Uus mäng" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Lae mäng" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Salvesta mäng" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Salvesta mäng _kui" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Mängija _reiting" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Tegevused" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Kutse Lipp" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Vaade" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Pööra lauda" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Logi vaataja" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Nõustamismood" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "_Nuhi mood" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Abi" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Male kohta" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Sulge _ilma salvestamiseta" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://et.wikipedia.org/wiki/Male" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://et.wikipedia.org/wiki/Male" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Ühendus katkes - sain \"faililõpu\" sõnumi" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' ei ole registreeritud nimi" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Reitinguta" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Reitinguga" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Ühenduse viga" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Viga sisselogimisel" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Ühendus suleti" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-post" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Kulutanud" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "kokku ühendatud" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Ühendumine" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Tundmatu" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registreerun kohe" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nimi" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tüüp" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Kell" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Kiirmale" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Välkmale" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Valgetega mängija" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Mustadega mängija" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Mängu tüüp" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Vastane" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "O" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Sinu vastane pole ületanud ajalimiiti" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Sinu vastane palub sul kiirustada!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Üldiselt ei tähenda see midagi kuna mäng on ajal põhinev aga, kui sa tahad vastasele meele järgi olla, võibolla sa võiksid jätkata" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "Sinu vastane keeldus %s" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Sa võid proovida oma pakkumise kordamist hiljem mängu jooksul uuesti" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s võeti su vastase poolt tagasi" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "%s ei saa vastu võtta" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess ei suutnud vastu võtta %s pakkumist. Tõenäoliselt seepärast, et see on tagasi võetud." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s annab vea" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Male positsioon" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Lihtne male positsioon" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Malemäng" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Asenda" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Fail on juba olemas" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Faili nimega '%s' on juba olemas. Kas sa soovid seda asendada?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Fail eksisteerib juba kataloogis '%s' Kui sa ta asendad siis kirjutatakse tema sisu üle." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Faili ei saa salvestada" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Viga oli: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Kohalik sündmus" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Kohalik lehekülg" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "E" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "V" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "L" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Mäng lõppes viigiga" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Mäng on tapetud" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Mäng on edasi lükatud" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Mäng on katkestatud" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Tavaline" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Laetud mäng" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Salvestatud mäng" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Sa saatsid viigipakkumise" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Mootor, %s, suri" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess on kaotanud sideme mootoriga. Tõenäoliselt seetõttu, et see on surnud.\nSa võid proovida alustada uut mängu selle mootoriga või siis proovida mängida mõne teise vastu." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "vs" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Külaline" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Ava mäng" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Salvesta mäng" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Kõik failid" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Määra tüüp automaatselt" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Kõik malefailid" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Tundmatu failitüüp '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Faili '%s' ei õnnestu salvestada" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Sul pole faili salvestamiseks vajalikke õigusi.\nPalun veendu, et sa andsid õige teekonna ja proovi uuesti." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess ei suutnud mängu salvestada" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Salvesta jooksev mäng enne sulgemist?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Inimene" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutid:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Teenitud:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Sisene mängu" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Ava helifail" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Heli puudub" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Piiks" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Vali helifail..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "viigistab" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "matistab" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "annab vastasele tule" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "parandab kuninga julgeolekut" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "parandab pisut kuninga julgeolekut" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "viib vankri avatud liinile" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "viib vankri poolavatud liinile" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "käib odaga fianchetto positsiooni: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "ettur lipustub viguriks %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "vangerdab" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "võidab materjali tagasi" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "ohverdab materjali" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "vahetab materjali" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "võtab materjali" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "suurendab survet %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "kaitseb %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Valgel on uus vigur eelpostil: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Mustall on uus vigur eelpostil: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "Toob etturi tagareale lähemale: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Valge peaks alustama etturite rünnakut paremal" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Must peaks alustama etturite rünnakut vasakul" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Valge peaks alustama etturite rünnakut vasakul" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Must peaks alustama etturite rünnakut paremal" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Must on üsna surutud seisus" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Must on kergelt surutud seisus" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Valgel on üsna surutud positsioon" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Valgel on pisut surutud positsioon" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Avanguraamat" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Kommentaarid" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Algseis" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Käikude ajalugu" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Tulemus" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/jv/0000755000175000017470000000000012176727272014444 5ustar tamasuserspychess-0.12beta3/lang/jv/LC_MESSAGES/0000755000175000017470000000000012176727272016231 5ustar tamasuserspychess-0.12beta3/lang/jv/LC_MESSAGES/pychess.po0000644000175000017470000020401612161415524020236 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2009. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: jv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Nggabung ning Internet Chess" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Pasword" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nomo" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet Chess: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "T_Ampa" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rating" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Wektu" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Tawani _Draw" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Warta" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Gim Anyar" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Pemain" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promosi" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Ratu" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Beteng" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Menteri" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Jaran" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Promosi pion dadi apa?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informasi Gim" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Even:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Situs:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Data gim" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Tanggal main" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Pilihan" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animasi" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Mainke suara yen..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Gim" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "Gim A_Nyar" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Simpen Gim" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Simpen Gim D_Adi" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Rating Pemain" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Aksi" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://en.wikipedia.org/wiki/Chess" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Email" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Ora dikenali" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Jeneng" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tipe" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Jam" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Pemain Putih" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Pemain Ireng" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipe Gim" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Gim dibatalke" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "vs" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Buka Gim" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Menit:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/oc/0000755000175000017470000000000012176727272014426 5ustar tamasuserspychess-0.12beta3/lang/oc/LC_MESSAGES/0000755000175000017470000000000012176727272016213 5ustar tamasuserspychess-0.12beta3/lang/oc/LC_MESSAGES/pychess.po0000644000175000017470000021365212161415524020226 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: oc\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess recèrca los motors de jòc disponibles. Pacientatz.Title" msgstr "Títol" #: glade/fics_logon.glade:70 msgid "text" msgstr "tèxte" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Connexion al servidor liure en linha Chess" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "Sen_hal :" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nom :" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Se connectar coma convidat" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Pòrts :" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "inscripcion" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Desfiar : " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Desfiar :" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Estandard :" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Blitz :" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6seg/movement , Blancs" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Editar una requèsta" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Sens temporizacion" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minutas : " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Ganh : " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Paramètres del cronomètre : " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Estandard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Paramètres del cronomètre" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Vòstre nivèl : " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Blitz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Nivèl de l'adversari : " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centrar :" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerança  :" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Amagar" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Fòrça de l'adversari" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Blanc" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Negre" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Vòstra color" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Jogar amb las règlas normalas dels escacs" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Aviar" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Varianta" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Partida amb classament" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opcions" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Jòcs d'escacs sus internet : FICS (servidor internet gratuit per jòcs d'escacs)" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Inicializar las ofèrtas de partidas" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Acceptar" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Refusar" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Random, 1800↓, Negre" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 s/còp, 1400↑, Blanc" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manual" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Mandar una requèsta" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Crear una requèsta" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "Requèstas / Desfís" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Nòta" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Ora" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Graf de las requèstas" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Jogaires prèstes" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Observacion" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Lista dels jogaires" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Lista de partidas" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Abandonar" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Prepausar _ex-aequo" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Pre_visualizacion" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "Ajornat" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nòvas" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "Desconnectar" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Espleches" #: glade/findbar.glade:7 msgid "window1" msgstr "Fenèstra 1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 de 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Precedent" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Seguent" #: glade/findbar.glade:161 msgid "Search:" msgstr "Recercar :" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Partida novèla" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "Començar La Partida" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Jogaire negre :" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Jogaire blanc :" #: glade/newInOut.glade:336 msgid "Players" msgstr "Jogaires" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rapid :\t15 min + 10 seg/movement" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40 min + 15 seg/movement" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Posicion Iniciala" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Entrar la nòta del jòc" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promocion" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Reina" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torre" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Fòl" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Cavalièr" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Promòure pion en ?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Client de jòc d'escacs per Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informacions Sus La Partida" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Eveniment :" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Site :" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Torn :" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Informacions" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Data" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferéncias" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Nom del _primièr jogaire" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Nom del _segond jogaire" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Opcions Generalas d'afichatge" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animacion" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_General" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Utilizar l'_analisador" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Utilizar _analisador inversat" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analisi" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Desinstallar" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Activar los sons dins Pychess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Verificacion _Jogaire" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Un jogaire se _desplaça :" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "La partida es _ex-aequo" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "La partida es _perduda :" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "La partida es _ganhada" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Un jogaire c_aptura :" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "La partida es _configurada :" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Desplaçaments observats :" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "_Fin observada :" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Jogar un son quand..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Sons" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Partida" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "Partida _novèla" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Cargar Partida" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Salvar la Partida" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Salvar la Partica Jo_s" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Jogaire _Nòta" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Accions" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Prepausar un _abandon" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "_Pausa" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Victòria Al Temps" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Afichatge" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Rotacion de l'Escaquièr" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "Ecran _complet" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Quitar lo mòde _ecran complet" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Informacions del Jornal" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Mòde Conselh" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Mòde _Espion" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Ajuda" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "A Prepaus dels Escacs" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Cossí jogar" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Traduire PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Conselh del jorn" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Quitar PyChess." #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Tampar _sens enregistrar" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Afichar de conselhs a l'aviada" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://oc.wikipedia.org/wiki/Jòc_d'escacs" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://oc.wikipedia.org/wiki/R%C3%A8glas_del_jòc_d%27%escacs" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Benvenguda" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "La connexion es estada copada - Messatge \"fin de fichièr\" recebut" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' es pas un nom enregistrat" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Connexion al servidor" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "En marcha" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Desconnectat" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Disponible" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "En cors de lectura" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Inactiu" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "Analisi" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Pas disponible" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Pas notat" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Notat" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privat" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d minutas" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d seg" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Error de connexion" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Error a l'autentificacion" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "La connexion es estada tampada" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Corrièr electronic" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Despensat" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "Connectat al total" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Connexion en cors" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Desconegut" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "S'enregistrar ara" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nom" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tipe" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Relòtge" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Rapid" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Lhauces" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Estat" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Jogaire blanc" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Jogaire negre" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipe de jòc" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Adversari" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Data / ora" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Far pas res" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Demanda d'accès : " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manual" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Mòde aleatòri" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Autre" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Administrador" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "F" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "°C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "TD" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "IM" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "FM" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "WGM" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "WIM" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Autoriza a acceptar %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s torna una error" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Posicion d'Escac" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Posicion simpla de las pèças" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Partida d'escacs" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Remplaçar" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Lo fichièr existís" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Impossible de salvar lo fichièr" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "L'error es : %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Mòrtas" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Eveniment local" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Site local" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Pion" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Rei" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "R" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "La partida s'es acabada per un nul" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "La partida es estada destrucha" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "La partida es suspenduda" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "La partida es estada abandonada" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "Per arbitratge d'un administrator" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Perque %(loser)s a abandonat" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "min" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "seg" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer aleatòri" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Possibilitats del cavalièr" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normal" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Possibilitats del pion" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Pions liures" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Aleatòri" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Possibilitats de la torre" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Inversat" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Discussions" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Informacions de la discussion" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Partida cargada" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Partidas salvadas" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Avètz prepausat l'ex-aequo" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Lo motor, %s, s'es arrestat" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "contra" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Convidat" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Dobrir una partida" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Salvar La Partida" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Totes los fichièrs" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Detectar lo tipe automaticament" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Totes los fichièrs d'escacs" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Tipe de fichièr desconegut '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Impossible de salvar lo fichièr '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess es pas capable de salvar la partida" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Uman" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minutas :" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Ganh :" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Entrar dins la partida" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Dobrir lo fichièr de son" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Pas cap de son" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Seleccionar un fichièr son..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "Egalitat" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "met l'adversari en fracàs" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "melhora la seguretat del rei" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "sacrifica una pèça" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "captura una pèça" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "fa pression sus %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "defend %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Bibliotèca de boberturas" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Comentaris" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Posicion iniciala" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Istoric dels movements" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Marca" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/hi/0000755000175000017470000000000012176727272014425 5ustar tamasuserspychess-0.12beta3/lang/hi/LC_MESSAGES/0000755000175000017470000000000012176727272016212 5ustar tamasuserspychess-0.12beta3/lang/hi/LC_MESSAGES/pychess.po0000644000175000017470000020527212161415524020224 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "<बड़ा><बी>प्य्चेस्स आपके इंजनों की खोज कर रही है.कृपया प्रतीक्षा करें.<बी><बड़ा>" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "प्य्चेस्स.प्य" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ष्रेद्देरलिनक्सचेस्स:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "ग्नुचेस्स" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "प्य्चेस्स - इंटरनेट शतरंज से जुड़ें" #: glade/fics_logon.glade:55 msgid "Title" msgstr "<बी>शीर्षक<बी>" #: glade/fics_logon.glade:70 msgid "text" msgstr "पाठ" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "<बड़ा><बी>मुफ्त ऑनलाइन शतरंज सर्वर से कनेक्ट कर<बड़ा><बी>" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_पासवर्ड:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_नाम:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "ळोग ओन अस _गुएस्त" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "पो_र्त्स:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "स_इग्न उप" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "बिजली:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "मानक:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "हमले की तैयारी:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "मानक" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "छिपाएँ" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "पय्चेस्स -ईन्तेर्नेत चेस्स:एफइएसीस" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_कलेअर सीक्स" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_स्वीकारें" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 मिनट,फिस्चेर रन्दोम,1800↓,काला" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "समय" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "चुनौती" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "पूर्वावलोकन (_v)" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "नया खेल" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "खेल आरंभ करें (_S)" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "नया खेल (_N)" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "मदद(_H)" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "खेल सहेजें" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/ga/0000755000175000017470000000000012176727272014414 5ustar tamasuserspychess-0.12beta3/lang/ga/LC_MESSAGES/0000755000175000017470000000000012176727272016201 5ustar tamasuserspychess-0.12beta3/lang/ga/LC_MESSAGES/pychess.po0000644000175000017470000020671612161415524020217 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ga\n" "Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Ficheall Nasctha leis an t-Idirlíon" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Focal Faire:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Ainm:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Sínigh isteach mar _Aoí" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Bán" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Dubh" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Ficheall Idirlín: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Glac" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Meastachán" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Am" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Nuacht" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Uirlisí" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Cluiche Nua" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Tosaigh an Cluiche" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Imreoirí" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Banríon" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Rúcach" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Easpag" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Ridire" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Cluiche ficheall le haghaidh lom clár Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Faisnéis an chluiche" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Teagmhas:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Suíomh:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Dreas:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Sonraí an chluiche" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Dáta an chluiche" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Sainroghanna" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Folaigh na cluaisíní nuair atá nach bhfuil ach cluiche amháin ar oscailt" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Ardroghanna Taispeána" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Beochan" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Bain feidhm as an" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Ag miondealú" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Bain feidhm as fuaimeanna i bPyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Seinn Fuaim Nuair A..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Cluiche" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "Cluiche _Nua" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Luchtaigh Cluiche" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Gníomhartha" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Amharc" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Rothlaigh an Clár" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Cabhair" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Maidir le Ficheall" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Dún gan cuir i dtaisce" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://en.wikipedia.org/wiki/Chess" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Botún Naisc" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Botún ag Síniú Isteach" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Dúnadh an nasc" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Ríomhphost" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Caite" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Ag Ceangailt" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Anaithnid" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Cláraigh anois" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Ainm" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Cineál" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Clog" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Gasta" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Fíor-Thapa" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Imreoir Bán" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Imreoir Dubh" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Cineál Cluiche" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Céile Iomaíochta" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "E" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Cluiche Ficheall" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Ionadaigh" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Tá an comhad ann cheana" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Tá comhad leis an t-ainm '%s' ann cheana. Ar mhaith leat é a chuir ina ionad?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Níorbh fhéidir an comhad a chuir i dtaisce" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "An botún ná: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Teagmhas Logánta" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Suíomh Logánta" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "B" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "R" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Chríochnaigh an cluiche ar comhscór" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Cuireadh deireadh leis an cluiche" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Cuireadh an cluiche ar fionraí" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Tobscoireadh an cluiche" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Gnáth" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Cluiche luchtaithe" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "D'éag an t-Inneall %s" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "i gcoinne" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Aoí" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Oscail Cluiche" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Cuir an Cluiche i dtaisce" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Gach Comhad" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Gach Comhad Ficheall" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Cineál comhad anaithnid '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Duine" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Nóiméid:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Buachan:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Téigh Isteach i gCluiche" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Oscail an Comhad Fuaime" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Gan fuaim" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bíp" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Roghnaigh comhad fuaime..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "cluichí cothrom" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "marbhsháinnithe" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "cuireann sé an céile iomaíocht i marbhsháinn" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "feabhsaíonn sé slándála an rí" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "caisleáin" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "cosnaíonn sé %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Tráchtaí" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Suíomh tosaigh" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Bog an t-Oireas" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Scór" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/si/0000755000175000017470000000000012176727272014440 5ustar tamasuserspychess-0.12beta3/lang/si/LC_MESSAGES/0000755000175000017470000000000012176727272016225 5ustar tamasuserspychess-0.12beta3/lang/si/LC_MESSAGES/pychess.po0000644000175000017470000020277512161415524020244 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: si\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "රහස්පදය(_P)" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "නම (_N):" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/wa/0000755000175000017470000000000012176727272014434 5ustar tamasuserspychess-0.12beta3/lang/wa/LC_MESSAGES/0000755000175000017470000000000012176727272016221 5ustar tamasuserspychess-0.12beta3/lang/wa/LC_MESSAGES/pychess.po0000644000175000017470000020301112161415524020220 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: wa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Mot de passe:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nom:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Se connecter en tant qu'invité" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/tr/0000755000175000017470000000000012176727272014452 5ustar tamasuserspychess-0.12beta3/lang/tr/LC_MESSAGES/0000755000175000017470000000000012176727272016237 5ustar tamasuserspychess-0.12beta3/lang/tr/LC_MESSAGES/pychess.po0000644000175000017470000022043612161415524020250 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Ali Polatel , 2013 # DevilSquarD , 2013 # Caner Başaran , 2012 # Kardanadam , 2013 # emfi , 2013 # gbtami , 2013 msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-05-13 09:52+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess motorlarınızı arıyor. Lütfen bekleyin." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - internet satrancına bağlan" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Başlık" #: glade/fics_logon.glade:70 msgid "text" msgstr "metin" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Ücretsiz online satranç sunucusuna bağlan" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Parola:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Adı:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "_Ziyaretçi olarak bağlan" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Portlar:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "_Oturum Aç" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Meydan oku: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Meydan Okuma İsteği Gönder" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Meydan Okuma:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Işıklandırma:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standart:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Hızlı Oyun:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 dak + 6 san/hareket, Beyaz" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 dak" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Araştırma Düzenle" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Süresiz" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Dakika: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "Kazan:" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Zaman Kontrol: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standart" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Zaman Kontrol" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Görmezden gel" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Gücünüz: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Rakibin Gücü: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Merkez:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerans:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Gizle" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Rakibin Gücü" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Beyaz" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Siyah" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Renginiz" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Normal satranç kuralları ile oyna" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Oyna" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Satranç Çeşidi" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Dereceli oyun" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Seçenekler" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet Satranç : FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Kabul Et" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Reddet" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Oyun daveti gönder" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Araştırma oluştur" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Araştır / Meydan Oku" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Puan" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Süre" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Oyuncu Hazır" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Meydan Okuma" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "İzle" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Kişiyle sohbet et" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "_Oyuncu Listesi" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Oyun Listesi" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Maça devam öner" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Pes_et" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "_Beraberlik Öner" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Maçın iptalini öner" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Ön_izleme" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "Ertelendi" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Haberler" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Konuşma _Göster" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Oturum Kapat" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Araçlar" #: glade/findbar.glade:7 msgid "window1" msgstr "pencere1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Önceki" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Sonraki" #: glade/findbar.glade:161 msgid "Search:" msgstr "Ara:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Yeni Oyun" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Oyuna Başla" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Siyah oyuncu:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Beyaz oyuncu:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Oyuncular" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "_Süresiz" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:»5 dk" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rapid:»15 dk + 10 sn/hamle" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:»40 dk + 15 sn/hamle" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Normal satranç oyna" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Açık Oyun" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Başlangıç ​​Konumu" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Oyun notasyonunu giriniz" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Terfi" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Vezir" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Kale" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Fil" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "At" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Piyon hangi taşa terfi etsin?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Gnome masaüstü için satranç uygulaması" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess özgür bir yazılımdır; Free Software Foundation tarafından \n yayımlanan GNU Genel Kamu Lisansı'nın ikinci veya (tercihinize bağlı olarak) \ndaha sonraki bir sürümü hükümleri çerçevesinde yeniden dağıtabilir ve/veya değiştirilebilir.\n\nPyChess faydalı olması ümidiyle dağıtılmaktadır, \nfakat, ticari ya da belirli bir amaca uygunlukdan kaynaklanan örtülü garantiler de dahil olmak üzere HİÇBİR GARANTİ İÇERMEZ. \nAyrıntılı bilgi için lütfen GNU Genel Kamu Lisansı'nı okuyunuz.\nPyChess ile birlikte GNU Genel Kamu Lisansı'nın bir nüshasını edinmiş olmanız gerekir; \neğer edinmediyseniz, lütfen Free Sotware Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA adresine bildiriniz." #: glade/PyChess.glade:57 msgid "Game information" msgstr "Oyun bilgisi" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Müsabaka:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Yer:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Raunt:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Oyun verisi" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Oyunun tarihi" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Tercihler" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "Sadece bir oyun açıkken sekmeleri _gizle" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Görüntü ayarları" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Animasyonları kapat" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Hiçbir zaman animasyonları kullanma.Bunu yavaş bilgisayarlarda kullanın" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Canlandırma" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Genel" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Çözümleyici kull_an" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Ters analiz kullan" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Çözümlüyor" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Kaldır" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Aktif" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Yan_paneller" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Temalar" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "S_esleri kullan" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Bir oyuncu _şah çekti:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Bir ouyuncu _hamle yaptı:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Oyun Berabere" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Oyunu kaybettiniz" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Oyunu Kazandınız" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Oyuncu taş kazandı:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Oyun hazır" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Gözlenmiş hamleler" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Şu durumlarda ses çal" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Sesler" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Oyun" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "Yeni _Oyun" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "Oyun _Yükle" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Pozisyon Kur" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "Oyunu _Kaydet" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Oyunu _Farklı Kaydet" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Oyuncu _Reytingi" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Eylemler" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Bayrak Düştü" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Görünüm" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Tahtayı Çevir" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Tam Ekran" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "_Tam Ekrandan Çık" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Yan Paneli Göster " #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Günlük (_Log) Görüntüleyici" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_İpucu kipi" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "_Casus kipi" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Yardım" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Satranç Hakkında" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Nasıl Oynanır" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "PyChess'i Çevir" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Günün İpucu" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "PyChess' ten Çık" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Kaydetmeden _Kapat" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Kaydetmek istediğiniz oyunu seçin:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Eğer kaydetmezseniz, değişiklikler sonsuza kadar kaybolacak." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Renginiz:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Oyunu Başlat" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Misafir olarak gir" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Günün İpucu" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "İpuçlarını başlangıçta göster" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://tr.wikipedia.org/wiki/Satran%C3%A7" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://tr.wikipedia.org/wiki/Satran%C3%A7#Oynan.C4.B1.C5.9F.C4.B1" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Hoşgeldiniz" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Bağlantı koptu -\"dosya sonu\" iletisi aldı" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "%s kayıtlı bir oyun değil" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Girilen parola yanlış.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Sunucuya bağlanılıyor" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Sunucuda oturum açılıyor" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Çevrimiçi" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Çevrimdışı" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Uygun" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Oynuyor" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Boşta" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Puansız" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Puanlı" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Bağlantı Hatası" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Oturum açmada hata" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Bağlantı kapatıldı" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Adres Hatası" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Otomatik-Çıkış" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Kazandın" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Kaydettin" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-posta" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Harcanan" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "toplam çevirimiçi süre" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "CTCP PING yanıtı" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Bağlanıyor" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Bilinmeyen" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Şimdi kayıt olun" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Ad" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tür" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Saat" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "dk" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Manuel Onaylama" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz - Hızlı oyun" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Yıldırım" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Vahşi" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Durum" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Oyuncular: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Beyaz Oyuncu" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Siyah Oyuncu" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Oyun Türü" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Renginiz" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Rakip" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Zaman kontrolü" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Tarih/Zaman" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Hiçbir şey yapma" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Meydan Okuma:" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Elle" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Misafir olarak girdiğiniz için puanlandırılmış oyunlarda oynayamzsınız " #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Süresiz özelliği etkin olduğu için puanlandırlımış oyunları oynayamazsınız," #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Diğer" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Yönetici" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Bilgisayar Hesabı" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Takım Hesabı" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Misafir Kullanıcı" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "F" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "Geri çekil" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Rakibinizin süresi bitmedi." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Rakibiniz çabuk olmanızı istiyor!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s rakibiniz tarafından reddedildi" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Teklifi rakibinize yollamayı oyun içerisinde daha sonra tekrar deneyebilirsiniz." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s hamlesi rakibiniz tarafından geri alındı" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "%s kabul edilemiyor" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s bir hata döndürdü" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Satranç Pozisyonu" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Basit Satranç Pozisyonu" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Satranç Oyunu" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "karşı" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Tüm dosyalar" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Resimler" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Değiştir" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Dosya mevcut" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "'%s' adında bir dosya zaten var. Değiştirmek ister misiniz?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Dosya zaten '%s' de bulunuyır. Eğer değiştirirseniz, içeriğin üzerine yazılacak." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Dosya kaydedilemedi" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Hata şuydu %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Öldü" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Müsabaka" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Yerel Site" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Pençe" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Kral" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "A" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "K" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "V" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "Ş" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Oyun beraberlikle sonuçlandı" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s oyunu kazandı" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s oyunu kazandı" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Bu oyun sonlandırıldı" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Bu oyun sonraya bırakıldı" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Bu oyun iptal edildi" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "dakika" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "saniye" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Hepsi beyaz" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Köşe" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Kaybedenler" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "Klasik satranç kuralları\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Olağan" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Rastgele" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Bir önceki hamleye dön" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "İki önceki hamleye dön" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "Oyu durduruldu" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Yüklü oyun" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Kayıtlı oyun" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "Analiz başladı" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "beraberlik teklifinde bulundunuz" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Program motoru, %s, öldü" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess program motoruyla bağlantısını yitirdi, muhtemelen motor öldüğü için.\n\nYeni bir oyun başlatmayı ya da başka bir motora karşı oynamayı deneyebilirsiniz." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Durduruldu" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "vb" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Siz" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Konuk" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Oyun Aç" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Oyunu Kaydet" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Tüm Dosyalar" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Dosya türünü otomatik belirle" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Bütün Satranç Dosyaları" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Bilinmeyen dosya türü '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "'%s' dosyası kaydedilemedi" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Dosyayı kaydetmek için gerekli haklara sahip değilsiniz.\nLütfen doğru dizin yolunu girdiğinizden emin olun ve tekrar deneyin." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess oyunu kaydedemedi" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Kapatmadan önce oyunu kaydetmek ister misiniz?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Kaydetmezseniz, daha sonra oyuna devam etmeniz mümkün olmayacak." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "İnsan" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Dakika:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Kazanç:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "satranç" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Oyuna gir" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Ses Dosyası Aç" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Ses yok" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Ses dosyası seçin..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "beraberlikler" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "matlar" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "rakibe şah çeker" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "Şahın güvenliğini arttırır" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "Şahın güvenliğini hafifçe arttırır" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "kaleyi açık bir hatta koyar" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "kaleyi yarıaçık bir hatta koyar" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "fil fiancchetto pozisyonuna geliyor: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "piyonu %s'e terfi ettirir" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "kaleler" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "kaybedilen materyalı geri alır" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "taşı feda eder" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "taşları değişir" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "taşı alır" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "%s üzerindeki baskıyı arttırır" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "%s'i korur" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s piyonlarını stonewall biçmine getiriyor" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Beyaz sağ kanattan piyonla saldırmalı" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Siyah sol kanattan piyonla saldırmalı" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Beyaz sol kanattan piyonla saldırmalı" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Siyah sağ kanattan piyonla saldırmalı" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Açılış Kitabı" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Yorumlar" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Başlangıç Pozisyonu" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Hamle Geçmişi" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Skor" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/it/0000755000175000017470000000000012176727272014441 5ustar tamasuserspychess-0.12beta3/lang/it/LC_MESSAGES/0000755000175000017470000000000012176727272016226 5ustar tamasuserspychess-0.12beta3/lang/it/LC_MESSAGES/pychess.po0000644000175000017470000025655712161415524020254 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Emilio Bologna <>, 2012. # FIRST AUTHOR , 2007. # , 2013. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess sta cercando i motori installati. Attendere prego." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Connettiti al server scacchistico" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Titolo" #: glade/fics_logon.glade:70 msgid "text" msgstr "testo" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Connessione ad un server scacchistico Online gratuito" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Password:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nome:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Connettiti come _ospite" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rte:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "_Registrati" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Sfida: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Invia Sfida" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Sfida:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Lampo:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standard:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Blitz:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 min, Fischer Casuale, Nero" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sec/mossa, Bianco" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 min" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Modifica Sfida" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Senza cronometro" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minuti: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Guadagno: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Cronometro: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Cronometro" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Indifferente" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Tuo livello: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Blitz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Livello dell'avversario " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Quando questo pulsante è \"premuto\", la relazione\ntra il \"Livello dell'avversario\" e il \"Tuo livello\" rimarrà\nbloccata anche nel caso che: \na) il tuo punteggio per il tipo di gioco scelto è cambiato\nb) si modificassero la variante o il tempo" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centro:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolleranza:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Nascondi" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Livello dell'avversario" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Bianco" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Nero" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Colore" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Gioca con le regole classiche" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Gioca" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Varianti" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Partita a punteggio" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Accetta avversario manualmente" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opzioni" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet Chess Server: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Azzera Ricerche" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Accetta" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Rifiuta" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 min, Fischer Casuale, 1800↓, Nero" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sec/mossa, 1400↑, Bianco" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manuale" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Invia Sfida" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Crea Sfida" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Elenco Sfide" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Valutazione" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Durata" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "_Grafico Sfide" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Giocatori Pronti" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Sfida" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Osserva" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Inizia una chat privata" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Elenco _Giocatori" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Elenco _Partite" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Chiedi la ripresa" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Rinuncia" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Chiedi la patta" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Chiedi di smettere" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "_Anteprima" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Sospeso" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Novità" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Visualizza _Chat" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Disconnettiti" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Strumenti" #: glade/findbar.glade:7 msgid "window1" msgstr "finestra1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 di 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Precedente" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Successivo" #: glade/findbar.glade:161 msgid "Search:" msgstr "Cerca:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nuova partita" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Inizia partita" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "Giocatore _Nero" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "Giocatore _Bianco" #: glade/newInOut.glade:336 msgid "Players" msgstr "Giocatori" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "Senza tempo" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rapida:\t15 min + 10 sec/mossa" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normale:\t40 min + 15 sec/mossa" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Gioca partita Normale" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Gioca partita Fischer Casuale" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Gioca a Vinciperdi" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Apri Partita" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Posizione Iniziale" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Inserire note di gioco" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Promozione" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Donna" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torre" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Alfiere" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Cavallo" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "In cosa vuoi promuovere il pedone?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Client di scacchi per GNOME" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess è software libero; puoi ridistribuirlo e/o modificarlo secondo\ni termini della GNU General Public License, così come è stata pubblicata\ndalla Free Software Foundation; sia nella versione 2 della licenza, o\n(a tua scelta) in qualsiasi altra versione futura.\n\nPyChess è distribuito con la speranza che sarà utile, ma\nSENZA ALCUNA GARANZIA; senza neppure la garanzia implicita di\nCOMMERCIABILITÀ o IDONEITÀ PER UNO SCOPO PARTICOLARE.\nConsulta la GNU General Public License per dettagli ulteriori.\n\nDovresti aver ricevuto una copia della GNU General Public License\ninsieme a PyChess; se così non fosse, richiedila alla Free Software Foundation, Inc.,\n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informazioni di gioco" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Evento:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Sito web:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Turno:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Dati di gioco" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Data della partita" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferenze" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Il nome visualizzato del primo giocatore umano, ad es., Giovanni." #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Nome del _primo giocatore:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Il nome visualizzato del giocatore ospite, ad es., Maria." #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Nome del _secondo giocatore:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Nascondi le schede quando c'è una sola partita" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "se selezionato, nasconde le Tab in alto quando non servono." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "_Ruota automaticamente la scacchiera verso il giocatore corrente" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Se selezionato, la scacchiera ruoterà ad ogni turno, in modo che il giocatore corrente possa vederla dal proprio lato." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "_Visualizzazione Faccia a Faccia" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Se selezionato, i pezzi neri saranno visualizzati a testa in giù, utile per giocare contro un amico su di un dispositivo mobile." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Visualizza _Etichette" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Se selezionato, la scacchiera mostrerà le etichette di riga e colonna. Usati nella notazione delle partite." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Utilizza le immagini nella _notazione" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Se selezionato, PyChess utilizzerà le immagini per identificare le mosse, al posto delle lettere maiuscole." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Opzioni generiche di visualizzazione" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "Animazione _Completa della Scacchiera" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Animazione dei pezzi, della scacchiera e altro. Da usare su computer veloci." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Animazione delle sole _mosse" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Animazione dell movimento dei soli pezzi" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Nessuna _Animazione" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Non usare animazioni. Utile per computer lenti." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animazione" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Generale" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Usa l'_analizzatore" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "L'analizzatore sarà attivato in background e analizzerà la partita. E' una funzione necessaria per permettere il funzionamento dei suggerimenti" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Usa analizzatore _inverso" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "L'analizzatore inverso analizzerà la partita come se toccasse al tuo avversario. E' una funzione è necessaria per permettere il funzionamento della modalità spia" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analisi" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Rimuovi" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "A_ttivo" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Pannelli Laterali Installati" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "_Pannelli Laterali" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Temi" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Usare suoni in PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Un giocatore ha dato _scacco:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Un giocatore ha _mosso:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "La partita è _patta:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "La partita è pe_rsa:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "La partita è _vinta:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Un giocatore ha _catturato" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "La partita è stata _impostata:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Mosse _osservate" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "_Finali osservati:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Riprodurre un suono quando..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Suoni" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Partita" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nuova partita" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Gioca partita su _Internet" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Carica partita" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "Carica _Gioco Recente" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Imposta Posizione" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Inserire _Note di Gioco" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Salva partita" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Salva la partita con _nome" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "_Esporta Posizioni" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Punteggio giocatore" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Azioni" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "Offri _Abbandono" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Offri S_ospensione" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Offri _Pausa" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Offri _Annullamento mossa" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Verifica la bandierina" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Chiedo per _Muovere" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Vista" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Ruota scacchiera" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "Sc_hermo intero" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "_Esci da schermo intero" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Mostra pannello Laterale" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Visua_lizza registro" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Modalità _aiuto" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Modalità _spia" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Aiuto" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Info sul gioco" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Come Giocare" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Traduci PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Suggerimento del giorno" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Esci da PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Chiudi _senza salvare" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Salva %d partite" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Ci sono %d partite con mosse non salvate. Vuoi salvare prima della chiusura?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Seleziona le partite che vuoi salvare:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Se non salvi, le ultime modifiche alla tua partita saranno perse." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "A_vversari:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Tuo Colore:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Inizia Partita" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Collegati come _Ospite" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Ha_ndle:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Connettiti ad un server FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Suggerimento del giorno" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Mostra suggerimenti all'avvio" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://it.wikipedia.org/wiki/Scacchi" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://it.wikipedia.org/wiki/Scacchi" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Benvenuto" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "La connessione è stata interrotta - ricevuto messaggio di \"end of file\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' non è un nome registrato" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "La password inserita non è valida.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Connessione al server in corso..." #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Autenticazione sul server in corso..." #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Impostazione dell'ambiente" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Online" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Offline" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Disponibile" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Giocando" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "In attesa" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "Esamino" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Non disponibile" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "Simul Match in esecuzione" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "Torneo in corso" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Senza punteggio" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Valutata" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privato" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d min" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d sec" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Errore di connessione" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Errore di accesso" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "La connessione è terminata" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Errore indirizzo" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Disconnessione automatica" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Sei stato disconnesso perché non attivo per più di 60 minuti" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Vinto" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Patta" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Perso" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "Su FICS, il tuo punteggio \"Wild\" comprende tutte le seguenti varianti su tutti i tempi:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Sanzioni" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Email" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Trascorsi" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "in rete su un totale di" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Connessione in corso" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Sconosciuto" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Se attualmente connesso come ospite.\nCome \"Ospite\" non puoi giocare partite con punteggio e, l'offerta dei giochi è ridotta." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registrati ora" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nome" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tipo" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Orologio" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Ricerche attive: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s min" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s sec" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr " vorrei riprendere i tuoi %(time)s aggiornati " #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr " ti sfida a una partita %(time)s %(rated)s %(gametype)s." #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Accetta la Sfida" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Rifiuta la Sfida" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Ignora la Sfida" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " minuti" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s min + %(sec)s sec" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "Punteggio dell'avversatio" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Accetta manualmente" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Lampo" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Wild" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Stato" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Numero di Giocatori: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Giocatore Bianco" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Giocatore Nero" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipo di partita" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Partite in corso: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Il tuo Colore" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Avversario" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "E' Online" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Controllo Tempo" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Data/Ora" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s è %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr " con cui hai una %(timecontrol)s %(gametype)s aggiornata " #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "Richiedi di continuare" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "Esamina partita aggiornata" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Nessuna azione" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "Il pulsante \"Chain\" è disabilitato perché se collegato come \"ospite\". Gli \"ospiti\" non gestiscono il punteggio e il pulsante \"Chain\" non avrebbe effetto in quanto non ci sarebbe punteggio da legare al livello dell'avversario." #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Sfida: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Questa opzione non è applicabile perché stai sfidando un giocatore" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Modifica ricerca: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d min + %(gain)d sec/mossa" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Comando manuale" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "Qualsiasi titolo" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Non puoi scegliere partite a punteggio perché sei connesso come \"ospite\"" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Non puoi giocare una partita a punteggio perché è selezionata l'opzione \"Senza tempo\", " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "e su FICS, le partite \"Senza tempo\" non possono essere a punteggio." #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Questa opzione non è disponibile perché stai sfidando un \"Ospite\", " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "e gli \"Ospiti\" non possono giocare partite a punteggio" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Mischia" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Altre" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Non puoi scegliere una variante perché hai selezionato \"Senza cronometro\", " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "e su FICS, le partite \"Senza cronometro\" devono seguire le normali regole scacchistiche" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Modifica tolleranza" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "Si possono avere 3 ricerce eccezionali allo stesso tempo. Se vuoi aggiungere una nuova ricerca devi eliminare le ricerche correnti. Eliminare le ricerche correnti?" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr " ha rifiutato la tua offerta per una partita." #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "Esaminato" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Amministratore" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Account alla cieca" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Computer Account" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Team Account" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Utente non registrato" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Consulente" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Rappresentante del servizio" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Direttore di torneo" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Mamer Manager" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Gran Maestro" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Maestro internazionale" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "Maestro FIDE" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Grande Maestro Donna" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Maestro Internazionale Donna" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "Account fittizio" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "A" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "T" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "U" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "CA" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "SR" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "TD" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "GM" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "IM" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "FM" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "WGM" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "WIM" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Il tuo avversario offre la patta. Accetti?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Il tuo avversario ti ha offerto la patta. Se accetti l'offerta, la partita finirà con punteggio di 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Il tuo avversario vuole annullare la partita. Accetti?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Il tuo avversario ha chiesto l'annullamento. Se accetti l'offerta, la partita finirà senza modifica di punteggio." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Il tuo avversario chiede la sospensione della partita. Accetti?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Il tuo avversario ha chiesto che la partita venga sospesa. Se accetti questa offerta, la partita verrà sospesa e potrà essere ripresa più tardi (quando il tuo avversario sarà nuovamente online ed entrambi sarete d'accordo a riprendere)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Il tuo avversario chiede di annullare %s mossa(e). Accetti?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Il tuo avversario chiede di annullare %s mossa(e). Se accetti, il gioco riprenderà dall'ultima mossa non annullata." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Il tuo avversario chiede una pausa. Accetti?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Il tuo avversario chiede una pausa. Se accetti, l'orologio della partita verrà fermata fino a quando entrambi i giocatori non si accorderanno per riprendere la partita." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Il tuo avversario chiede di riprendere la partita. Accetti?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Il tuo avversario chiede di riprendere la partita. Se accetti, l'orologio della partita riprenderà dal momento in cui era stato messo in pausa." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "La resa" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "Controllo bandierina" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "L'offerta di Patta" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "L'offerta di Abbandono" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "L'offerta di sospensione" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "L'offerta di pausa" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "L'offerta di Ripresa" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "L'offerta di cambio lato" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "L'offerta di Ritiro" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "abbandona" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "controlla la bandierina del tuo avversario" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "offri una patta" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "offri l'abbandono" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "Offri di sospendere" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "offri una pausa" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "offri di riprendere" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "offri di cambiare lati" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "Offri Ritiro" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "richiedi all'avversario di muovere" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Il tuo avversario non ha finito il tempo a disposizione." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "L'orologio non è stato ancora avviato." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Non è possibile cambiare i colori durante il gioco." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Si è tentato di annullare troppe mosse." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Il tuo avversario ti chiede di fare in fretta!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Generalmente questo non ha importanza, dato che il gioco è basato sul tempo, ma se vuoi soddisfare il tuo avversario, forse dovresti sbrigarti." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s è stato rifiutata dal tuo avversario" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Puoi provare a inviare nuovamente la richiesta più tardi durante la partita." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s è stato annullato dal tuo avversario" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Sembra che il tuo avversario abbia cambiato idea." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Impossibile accettare %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess non è stato in grado di accettare la richiesta di %s. Probabilmente è stata annullata." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s ha riportato un errore" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Diagramma Scacchi Alpha 2" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Non puoi caricarel il diagramma '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Posizione scacchiera" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Posizione semplice della scacchiera" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "La partita non può essere letta fino alla fine a causa di un errore di analisi mossa %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "La mossa è fallita perché %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Partita di Scacchi" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "Esporta posizioni" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "contro" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Tutti i file" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Immagini" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Sostituisci" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "File esistente" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Un file chiamato '%s' gia' esiste. Vuoi sostituirlo?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Il file gia' esiste in '%s'. Se lo sostituisci, il suo contenuto verrà sovrascritto." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Impossibile salvare il file" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "PyChess non ha potuto esportare la posizione" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "L'errore è stato: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "L'host di destinazione non è raggiungibile" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Deceduto" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Evento locale" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Sito locale" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Pedone" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Re" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "C" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "T" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "R" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "La partita è finita patta." #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s vince la partita" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s vince la partita" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "La partita è stata interrotta." #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "La partita è stata sospesa" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "La partita è stata annullata" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "Poiché nessun giocatore ha abbastanza pezzi di dare scacco matto." #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Perché la stessa posizione si è ripetuta per tre volte di seguito" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Perché le ultime 50 mosse non hanno portato niente di nuovo" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Perché entrambi i giocatori sono andati oltre il tempo massimo" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "Perché %(mover)s è in stallo" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "Perché i giocatori si sono accordati per" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "A causa di una sentenza pronunciata da un amministratore" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "Perché la partita ha superato la lunghezza massima" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Perché %(loser)s ha abbandonato" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Perché %(loser)s è andato fuori tempo massimo" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "Poiché è stato dato scacco matto a %(loser)s" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Perch %(loser)s si è disconnesso" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Perché %(loser)s ha perso tutti i pezzi tranne il re" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Perché un giocatore ha perso la connessione" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "Perchè entrambi i giocatori concordano ad aggiornare la partita" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "Poiché il server è stato spento." #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Perché un giocatore si è disconnesso e l'altro ha richiesto la sospensione" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "Perchè %(black)s ha perso la connessione al server e %(white)s ha richiesto di aggiornare" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "Perchè %(white)s ha perso la connessione al server e %(black)s ha richiesto di aggiornare" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "Perchè %(white)s ha perso la connessione al server" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "Perchè %(black)s ha perso la connessione al server" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "Poiché entrambi i giocatori hanno acconsentito a" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "A causa di cortesia da parte di un giocatore" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Perché un giocatore ha deciso di smettere. Non sono stati individuati vinticori perhcé il gioco è in fase iniziale" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "Perché il motore di %(white)s è morto" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Perché la connessione al server è stata persa" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Ragione sconosciuta" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "min" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "sec" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html⏎\n" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Casuale asimmetrico" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "Regole degli scacchi classiche con figure nascoste⏎\n" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Alla cieca" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "Regole degli scacchi classiche con pedoni nascosti⏎\n" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "Pedoni nascosti" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "Regole degli scacchi classiche con pedine pezzi nascosti⏎\n" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "Pezzi nascosti" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "Regole degli scacchi classiche con tutti i pezzi bianchi\n" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Tutto bianco" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "http://brainking.com/en/GameRules?tp=2\n" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Angolo" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960⏎\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer Casuale" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "Uno dei giocatori inizia con un Cavallo in meno" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Svantaggio di Cavallo" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Vinciperdi 2" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "Regole degli scachhi classiche\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normale" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "Uno dei giocatori inizia con un Pedone in meno" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Svantaggio di Pedone" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html⏎\n" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Pedone passato" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Spinta di pedone" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "Uno dei giocatori inizia con lal Regina in meno" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Svantaggio di Regina" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Casuale" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "Uno dei giocatori inizia con una Torre in meno" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Svantaggio di Torre" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Capovolta" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Non hai ancora aperto nessuna discussione" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Solo gli utenti registrati possono discutere su questo canale" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Nessuna discussione selezionata" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Caricamento dati del giocatore" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "Ricezione della lista dei Giocatori" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Altri canali" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Altri giocatori" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Discussioni" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Informazioni sulla discussione" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Offri di rigiocare" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Rigioca la partita" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Annulla una mossa" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Annulla due mosse" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "La partita è in pausa" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Partita caricata" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Partita salvata" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "Analizzatore in funzione" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "Hai mandato un'offerta per terminare" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "Hai mandato una richiesta di aggiornamento" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Hai inviato una richiesta di patta" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "Hai mandato una offerta di Pausa" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "Hai inviato una richiesta di riprendere" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "Hai mandati una richiesta di annullamento" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "Hai chiesto al tuo avversario di muovere" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Il motore %s ha terminato l'esecuzione" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess ha perso la connessione con il motore, probabilmente perché questo ha cessato di funzionare.\nPuoi provare a iniziare una nuova partita con lo stesso motore, o giocare contro un altro." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Annulla" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "Questa partita può essere interrotto automaticamente senza perdita di punteggio perchè non sono ancora state eseguite due mosse" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "Offri di annullare" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "Il tuo avversario deve concordare nell'annullamento della partita perchè sono state eseguite due o più mosse" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "La partita non può essere aggioranta perchè uno o entrambi i giocatori sono ospiti" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "Chiedi la patta" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "contro" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Visualizza la posizione iniziale" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Visualizza la mossa precedente" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Visualizza la mossa successiva" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Visualizza l'ultima posizione" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "PyChess non riesce a caricare il tuo pannello delle impostazioni" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Il tuo pannello delle impostazioni è stato resettato. Se il problema si dovesse ripetere, segnalalo agli sviluppatori" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Tu" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Ospite" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Correggere la mossa oppure iniziare a giocare con quanto può essere letto" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Apri partita" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Salva la partita" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Tutti i File" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Rileva automaticamente il tipo" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Tutti i file scacchistici" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Tipo di file sconosciuto '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "Impossibile salvare '%(uri)s', PyChess non conosce il formato '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Impossibile salvare il file '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Non hai i diritti necessari per salvare il file. Per favore assicurati di aver dato il giusto percorso e prova di nuovo." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess non è stato in grado di salvare la partita" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "C'è %d partita con mosse non salvate." msgstr[1] "Ci sono %d partite con mosse non salvate." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Salvo le mosse prima della chiusura?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Salvo %d documento" msgstr[1] "_Salvo %d documenti" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Salvare la partita corrente prima di chiuderla?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Non sarà possibile continuare la partita, se non la salvi ora." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "PyChess Finestra informazioni" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "di" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Essere Umano" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Rapido" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minuti:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Incremento:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d min + %(gain)d sec/mossa" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d min %(gain)d sec/mossa" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d min" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Svantaggio" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr " scacchi" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Entra nella partita" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Apri file sonoro" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Nessun suono" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Avviso acustico" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Seleziona un file sonoro..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Pannello senza descrizione" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Puoi iniziare una nuova partita Partita > Nuova partita, nella finestra puoi scegliere Giocatori, \r\nDurata partita e Varianti scacchistiche." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Puoi scegliere tra 8 differenti livelli di difficolta nelle partite contro il computer." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "Le varianti scacchistiche indicano come sono disposti i pezzi sull'ultima linea della scacchiera." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "Per salvare una partita Parita > Salva partita come, indica un nome e scgli la posizione dove vuoi che venga effettuato il salvataggio. In basso scagli l'estensione del tipo di salvataggio, e Salva." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "Lo sapevi che puoi verificare la \"Bandierina\" durante la tua sessione di tempo, Azioni > Verifica Bandierina." #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "Premendo Ctrl+Z puoi offrire all'avversario la possibilità di annullare le ultime mosse." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Per giocare a Schermo intero, basta premere F11. Ancora F11 per ripristinare la visualizzazione in finestra." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "Modalità suggerimento permette di analizzare la tua partita, puoi abilitarlo con: Ctrl+H." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "Modalità spia permette di analizzare la partita del tuo avversario, puoi abilitarlo con: Ctrl+Y." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "E' possibile abilitare gli effetti sonori durante il gioco, per farlo, Impostazioni > Preferenze > Tab - Suoni, seleziona Usa suoni in PyChess e scegli gli effetti sonori che preferisci." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Lo sapevi che puoi aiutareci nella traduzione di PyChess nella tua lingua, Aiuto > Traduci PyChess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Lo sapevi che è possibile finire una partita a scacchi in appena 2 turni?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Lo sapevi che il numero di partite diverse giocabili è maggiore del numero di atomi dell'intero universo?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Chiudi" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Chiudi scacchi" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Canale non ufficiale %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "la stringa che indica la mossa deve contenere il pezzo e le coordinate" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "la riga catturata (%s) non è corretta" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "e" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "patta" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "dà matto" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "mette l'avversario sotto scacco" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "incrementa la sicurezza del Re" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "incrementa leggermente la sicurezza del Re" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "mette la Torre su una colonna aperta" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "mette la Torre su una colonna semi-aperta" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "muove l'alfiere in fianchetto: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promuove un pedone a %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "arrocca" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "si riprende il materiale" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "sacrifica materiale" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "scambia materiale" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "cattura materiale" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "salvataggio di %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "minaccia di cattura materiale da parte di %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "aumenta la pressione su %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "difende %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "attacco del %(oppiece)s nemico sul %(piece)s su %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Il Bianco ha un nuovo avamposto: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Il Nero ha un nuovo avamposto: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s ha un nuovo pedone passato in %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "semiaperto" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "nel file %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "nei file %(x)s%(y)s" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s ha un pedone doppiato in %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s ha un nuovo pedone doppiato in %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s ha un pedone isolato in %(x)s fila" msgstr[1] "%(color)s ha pedoni isolati in %(x)s fila" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "Il %s mette i pedoni in una formazione stonewall" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s non è possibile arroccare" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s non è possibile arroccare sul lato di donna" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s non è possibile arroccare sul lato di re" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s ha un alfiere in trappola on %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "sviluppo di pedone: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "porta un pedone più vicino all'ultima traversa: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "porta il %(piece)s più vicino al re avversario: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "sviluppo di %(piece)s: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "metti il %(piece)s in posizione migliore: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Il Bianco dovrebbe iniziare un attacco di pedoni sulla destra" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Il Nero dovrebbe iniziare un attacco di pedoni sulla sinistra" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Il Bianco dovrebbe iniziare un attacco di pedoni sulla sinistra" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Il Nero dovrebbe iniziare un attacco di pedoni sulla destra" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Il Nero ha una posizione piuttosto ristretta" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Il Nero ha una posizione leggermente ristretta" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Il Bianco ha una posizione piuttosto ristretta" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Il Bianco ha una posizione leggermente ristretta" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "Annotazione" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "Partita annotata" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "Aggiungi un commento iniziale" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Aggiungi un commento" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Modifica Commento" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "Aggiungi il simbolo alla mossa" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "Aggiungi il simbolo di valutazione" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "Rimuovi i simboli" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "Rimuovi variazione" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "turno %s" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "Suggerimenti" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "Il pannello dei suggerimenti segnalerà la mossa migliore in ogni fase della partita" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Pannello ufficiale PyChess." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Libro delle aperture" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Il dizionario delle aperture potrò consigliarti durante la fase iniziale della partita mostrandoti le più comuni mosse fatte dai grandi maestri." #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "Analisi al %s" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "%s proverà a prevedere la mossa migliore e quale giocatore è in vantaggio." #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "Analisi della binaccia al %s" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "%s identificherà quali potrebbero essere le possibili minacce se se fosse il turno dell'avversario." #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "Calcolo in corso..." #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "Il punteggio del motore prende come unità le pedine, dal punto di vista dei Bianchi." #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "Aggiungere i suggerimenti può aiutarti a pensare, ma rallenta l'analisi del computer." #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "Tablebase" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "La Tablebase mostrerà un'analisi esatta quando ci sono pochi pezzi sulla scacchiera." #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "Scacco matto in %d" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "In questa posizione, ⏎\nnon è possibile nessuna mossa legale." #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Chat" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Il pannello \"Chat\" ti permette di comunicare con il tuo avversario durante la partita... sempre che sia interessato" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Commenti" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Il pannello dei commenti analizza e cerca di spiegare le mosse effettuate" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Posizione iniziale" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s muove il %(piece)s in %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Elenco delle mosse" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "Il foglio delle mosse tiene traccia delle mosse dei giocatori e ti permette di navigare l'evoluzione della partita" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Punteggio" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "Il pannello del punteggio prova a valutare le posizioni e mostra attraverso un grafico i progressi della partita" pychess-0.12beta3/lang/sk/0000755000175000017470000000000012176727272014442 5ustar tamasuserspychess-0.12beta3/lang/sk/LC_MESSAGES/0000755000175000017470000000000012176727272016227 5ustar tamasuserspychess-0.12beta3/lang/sk/LC_MESSAGES/pychess.po0000644000175000017470000021614712161415524020244 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. # , 2013. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: Stevko \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - prihlásenie k Internetovej hre" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Názov" #: glade/fics_logon.glade:70 msgid "text" msgstr "text" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Pripojiť sa k Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Heslo:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Meno:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Prihlásiť sa ako hosť" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Porty" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Registrácia" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Výzva: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Výzva:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Bleskový:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Štandardný:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Rýchly:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Upraviť hľadanie" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Bez časového obmedzenia" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Minúty: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "Zisk:" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Časová kontrola" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Štandard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Časová kontrola" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Nezáleží" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Vaša sila:" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Rýchly)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Sila oponenta:" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Keď je toto tlačidlo v stave „uzamknuté”, vzťah ⏎ medzi „Silou oponenta” a „Vašou silou” bude⏎ zachovaný keď ⏎ a) sa zmení váš rating pre typ hry, ktorý hľadáte ⏎ b) zmeníte variant alebo časovú kontrolu" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Stred:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerancia:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Skryť" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Sila oponenta" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Biely" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Čierny" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Vaša farba" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Hrať so štandardnými pravidlami" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Hrať" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Variant šachu" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Hodnotená hra" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Ručne akceptovať oponenta" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Možnosti" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - internetový šach: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "Zrušiť vyhľadávanie" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Akceptovať" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "Odmietnuť" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sec/ťah, 1400↑, Biely" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Odoslať hľadanie" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Začať hľadať" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "Hľadania / Výzvy" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Hodnotenie" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Čas" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Graf hľadaní" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 pripravených hráčov" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Výzva" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Sledovať" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Začať súkromný rozhovor" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Zoznam hráčov" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Zoznam hier" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Ponúknuť obnovenie" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "Vzdať sa" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Ponúknuť _Remízu" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "Ponúknuť _zrušenie" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Náhľad" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "Odložená" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Novinky" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Zobraziť chat" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "Odhlásiť sa" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Nástroje" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nová hra" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Spustiť hru" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Hráči" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Zadajte poznámky ku hre:" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Premena" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dáma" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Veža" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Strelec" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Jazdec" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Na akú figúru premeniť pešiaka?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Šachový klient pre prostredie Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informácie o hre" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Udalosť:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Lokácia:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Kolo:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Údaje o hre" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Dátum hry" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Predvoľby" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Schovať záložky ak je otvorená iba jedna hra" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Zaškrtnutie tejto voľby schová záložky kariet na vrchu okna s hrami ak nie sú potrebné." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Automaticky otočiť šachovnicu pre aktuálneho ľudského hráča" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Zaškrtnutie tejto voľby spôsobí otočenie šachovnice po každom ťahu, aby hráč na ťahu videl šachovnicu zo svojej strany " #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Zobrazenie „tvárou v tvár”" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Ak je voľba zaškrtnutá, čierne figúrky budú zobrazené dolu hlavou. Vhodné pre hranie na mobilných zariadeniach, keď oponent sedí proti vám." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Zobrazovať súradnice" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Zaškrtnutie tejto voľby zobrazí označenia stĺpcov a radov vedľa šachovnice." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "Uprednostňovať obrázky v zápise" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Zaškrtnutie spôsobí, že PyChess bude v zápise hry zobrazovať obrázky ťahaných figúr miesto označenia veľkým písmenom." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Všeobecné možnosti zobrazovania" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animácia" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Použiť _analyzátor" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Použiť _inverzný analyzátor" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Analyzovanie" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "Zapnúť zvuky v PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Hráč dáva šach:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Hráč ťahá:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Hra skončila remízou:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Hra skončila prehrou:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Hra skončila výhrou:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Hráč berie:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Hra je pripravená" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "_Pozorované ťahy" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Pozorovanie _končí:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Zahrať zvuk keď…" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Hra" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Nová hra" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Načítať hru" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Uložiť hru" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Uložiť hru _ako" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Hodnotenie hráča" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Akcie" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Zobraziť" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Otočiť šachovnicu" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Prehliadač záznamov" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Mód poradcu" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "_Špehovací mód" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Pomoc" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "O šachu" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Zavrieť _bez uloženia" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "https://sk.wikipedia.org/wiki/%C5%A0ach_(hra)" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Spojenie bolo prerušené - obdržaná správa \"koniec súboru\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' nie je registrované meno" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Nehodnotené" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Hodnotené" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Chyba v pripojení" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Chyba pri prihlasovaní" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Spojenie bolo ukončené" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-mail" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Strávené" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "celkový čas online" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Odozva" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Pripájanie" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Neznámy" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Zaregistrovať sa teraz" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Meno" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Typ" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Hodiny" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Rýchla hra" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Blesková hra" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Biely hráč" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Čierny hráč" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Typ hry" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Protihráč" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "S" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Časový limit oponenta ešte nevypršal." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Váš oponent vás žiada aby ste sa ponáhľali!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Všeobecne toto neznamená nič, lebo hra je časovaná, ale ak chcete potešiť vášho oponenta, asi by ste mali pokračovať." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s bolo odmietnuté súperom" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Môžete sa pokúsiť opäť poslať váš návrh oponentovi neskôr počas hry." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s bolo odvolané oponentom" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Nie je možné prijať %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess nemohol získať potvrdenie o prijatí návrhu %s. Pravdepodobne z dôvodu, že bol odvolaný." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s vracia chybovú správu" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Šachová pozícia" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Jednoduchá šachová pozícia" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Šachová hra" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Nahradiť" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Súbor existuje" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Súbor s názvom '%s' už existuje. Chcete ho nahradiť?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Súbor už existuje v '%s'. Ak ho nahradíte, jeho obsah bude prepísaný." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Nebolo možné uložiť súbor" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Vyskytla sa chyba: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Lokálna udalosť" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Lokálne miesto" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "J" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "V" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "D" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Hra sa skončila remízou" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Hra bola násilne ukončená" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Hra bola odložená" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Hra bola ukončená" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Normálna hra" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Načítaná hra" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Uložená hra" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Odoslali ste ponuku na remízu" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Počítač, %s, nečakane skončil" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess stratil spojenie so šachovým počítačom, pravdepodobne kvôli pádu.\n\nMôžete sa pokúsiť začať novú hru, alebo sa pokúste hrať znovú inú." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "proti" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Hosť" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Otvoriť hru" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Uložiť hru" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Všetky súbory" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Zistiť typ automaticky" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Všetky šachové súbory" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Neznámy typ súboru '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Nebolo možné uložiť súbor '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Nemáte dostatočné oprávnenia na uloženie súboru.\nProsím, uistite sa, že ste zadali správnu cestu a vyskúšajte znova." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess nemohol uložiť hru" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Chcete uložiť aktuálnu hru pred ukončením?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Ak neuložíte hru,\nnebudete môcť neskôr pokračovať." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Človek" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Minúty:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Zisk:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Vstúpiť do hry" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Otvoriť zvukový súbor" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Bez zvuku" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Pípnuť" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Vybrať zvukový súbor..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "remízuje" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "dáva mat" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "dáva oponentovi šach" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "zvyšuje bezpečnosť kráľa" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "jemne vylepšuje bezpečnosť kráľa" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "pohybuje vežou do otvoreného stĺpca" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "pohybuje vežou do polootvoreného stĺpca" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "pohybuje strelcom do fianchetta: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "premieňa pešiaka na %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "robí rošádu" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "vezme späť materiál" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "obetuje materiál" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "vymení materiál" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "zajme materiál" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "zvyšuje tlak na %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "obraňuje %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Biely hráč má novú figúrku na vysunutej pozícii: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Čierny hráč má novú figúrku na vysunutej pozícii: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s posúva pešiakov do formácie stonewall" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Kniha otvorení" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Poznámky" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Východzie postavenie" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "História ťahov" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Skóre" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/id/0000755000175000017470000000000012176727272014421 5ustar tamasuserspychess-0.12beta3/lang/id/LC_MESSAGES/0000755000175000017470000000000012176727272016206 5ustar tamasuserspychess-0.12beta3/lang/id/LC_MESSAGES/pychess.po0000644000175000017470000021010512161415524020207 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Sambung ke Catur Internet" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "Kata _Laluan:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nama:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Log masuk sebagai _Tamu" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Putih" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Hitam" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Catur Internet: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "Terim_a" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Rating" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Waktu" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Tawarkan _Imbang" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Berita" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Perkakas" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Permainan Baru" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Mulai Permainan" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Pemain" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Masukkan Catatan Permainan" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Kenaikan" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Ratu" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Benteng" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Mentari" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Kuda" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Naikkan pion menjadi?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Klien catur untuk desktop Gnome" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informasi permainan" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Pertandingan:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Situs:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Putaran:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Data permainan,/b>" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Tanggal permainan" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferensi" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Sembunyikan tab ketika hanya satu permainan terbuka" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Pilihan Tampilan Umum" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animasi" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Gunakan _analyzer" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Menganalisa" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "G_unakan suara di PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "Permainan _seri:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Permainan _kalah:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Permainan _menang:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Perpindahan _diamati:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "Pengamatan _berakhir:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Mainkan Suara Ketika..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Permainan" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "Permai_nan Baru" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Muat Permainan" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Simpan Permainan" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Simpan Permainan Seb_agai" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Penilaian Pemain" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "Tind_akan" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Panggil Bendera" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Tampilan" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Putar Papan" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Penampil _Log" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Mode _Petunjuk" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Mode _mata-mata" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Bantuan" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Tentang Catur" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Tutup _tanpa Menyimpan" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://en.wikipedia.org/wiki/Chess" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Sambungan terputus - didapatkan pesan \"end of file\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' bukan nama yang terdaftar" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Belum dinilai" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Nilai" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Galat Sambungan" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Galat Log masuk" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Sambungan ditutup" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Email" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Menghabiskan" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "total tersambung" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Menyambungkan" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Tidak Dikenal" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Daftar sekarang" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nama" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Jenis" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Jam" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Serangan kilat" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Halilintar" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Pemain Putih" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Pemain Hitam" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Jenis Permainan" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Musuh" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Musuh Anda belum kehabisan waktu." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Musuh Anda meminta anda lebih cepat!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s ditolak oleh musuh Anda" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Tidak dapat disetujui %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Posisi Catur" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Posisi Catur Sederhana" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Permainan Catur" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Ganti" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "File sudah ada" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Nama berkas '%s' sudah ada. apakah anda ingin menimpanya?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Nama berkas '%s' sudah ada. Bila Anda menimpanya, isinya akan diganti dengan yang baru." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Tidak dapat menyimpan berkas" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Kesalahan di: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Even Lokal" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Situs Lokal" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Q" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Permainan berakhir seri" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Permainan telah diakhiri" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Permainan telah ditunda" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Permainan telah dibatalkan" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Biasa" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Permainan dimuat" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Permainan disimpan" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Anda mengirim tawaran seri" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Mesin, %s, mati" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess telah kehilangan sambungan ke mesin mungkin karena mesinnya mati.\n\nAnda bisa mencoba memulai permainan baru dengan mesin, atau coba bermain melawan yang lain." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "melawan" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Tamu" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Buka Permainan" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Simpan Permainan" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Semua Berkas" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Deteksi tipe otomatis" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Semua Berkas Catur" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Tipe berkas tidak diketahui '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Tidak dapat menyimpan berkas '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess tidak dapat menyimpan permainan" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Simpan permainan saat ini sebelum anda menutupnya" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Tidak akan mungkin akan melanjutkan permainan,\njika Anda tidak menyimapnnya." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Kemanusiaan" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Menit:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Perolehan:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Masuk Permainan" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Buka Berkas Suara" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Tanpa Suara" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bip" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Pilih berkas suara..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "remis" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "mat" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "skak" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "promosikan Pion menjadi %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "Kastil" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "bertahan %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Membuka Buku" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Komentar" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Riwayat Pergerakan" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Nilai" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/hu/0000755000175000017470000000000012176727272014441 5ustar tamasuserspychess-0.12beta3/lang/hu/LC_MESSAGES/0000755000175000017470000000000012176727272016226 5ustar tamasuserspychess-0.12beta3/lang/hu/LC_MESSAGES/pychess.po0000644000175000017470000025677212161415524020253 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # Bajusz Tamás , 2006, 2007, 2010. # , 2013. # , 2012. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 16:11+0000\n" "Last-Translator: gbtami \n" "Language-Team: Hungarian (http://www.transifex.com/projects/p/pychess/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "Kis türelmet, a PyChess telepített sakkmotorokat keres." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Kapcsolódás a FICS-hez" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Cím" #: glade/fics_logon.glade:70 msgid "text" msgstr "szöveg" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Csatlakozás a FICS szerverhez" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Jelszó:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Név:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Bejelentkezés _vendégként" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "_Portok:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "_Regisztrálj" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Kihívás: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Kihívás elküldése" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Kihívás:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Villám" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Standard" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Schnell" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 perc, Fischer Random, Sötét" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 perc + 6 mp/lépés, Világos" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 perc" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Keresés" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Időkontroll nélküli" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Perc: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "Jóváírás: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Időkontroll: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Standard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Időkontroll" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Mindegy" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Erősséged:" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Schnell)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Ellenfél erőssége:" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "Amikor ez a gomb le van zárva, a kapcsolat\naz \"Ellenfél erőssége\" és az \"Erősséged\" között\nmegőrződik, amikor\na) az értékszámod az adott típusú keresésben megváltozik\nb) megváltoztatod a sakk variánst vagy az időkontrollt." #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Közép:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Eltérés:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Elrejt" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Ellenfél erőssége" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Világos" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Sötét" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Szín:" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Standard" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr " " #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Sakkvariánsok" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Értékelt játszma" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Ellenfél elfogadása kézileg" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Beállítások" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet sakk: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "Keresések _törlése" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Elfogadás" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Elutasítás" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "2 perc, Fischer Random, 1800↓, Sötét" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 perc + 6 mp/lépés, 1400↑, Világos" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 perc, 1200-1800, Kézi" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Keresés elküldése" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Keresés" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "Keresések/Kihívások" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Értékszám" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Idő" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "Keresések grafikusan" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 játékos" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Kihívás" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "_Megtekint" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Magán csevegés" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "Játékosok" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "Játszmák" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "_Folytatás ajánlása" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "F_eladás" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "_Döntetlen ajánlása" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "_Megszakítás ajánlása" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "_Megnéz" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "Halasztott" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Hírek" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "_Csevegés" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "Konzol" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Kijelentkezés" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Eszközök" #: glade/findbar.glade:7 msgid "window1" msgstr "window1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0/0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Előző" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Következő" #: glade/findbar.glade:161 msgid "Search:" msgstr "Keres:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Új játszma" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Játszma indítása" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "Sötét:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "Világos:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Játékosok" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "Időkontroll nélküli" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Schnell\t:5 perc" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Rapid:\t15 perc + 10mp/lépés" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Standard:\t40 perc + 15mp/lépés" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "Standard" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Fischer random" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Lúzer sakk" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "Játszma megnyitása" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Kezdőállás" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Játszma beírása" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Átváltozás" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "vezér" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "bástya" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "futó" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "huszár" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Mire változzon a gyalog?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Sakkprogram" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess is free software; you can redistribute it and/or modify \nit under the terms of the GNU General Public License as published by \nthe Free Software Foundation; either version 2 of the License, or \n(at your option) any later version.\n\nPyChess is distributed in the hope that it will be useful, \nbut WITHOUT ANY WARRANTY; without even the implied warranty of \nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License \nalong with PyChess; if not, write to the Free Software Foundation, Inc., \n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Játszma információk" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Esemény:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Hely:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Forduló:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Játszma adatai" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Játszma időpontja" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "Sakkmotorok" #: glade/PyChess.glade:602 msgid "Name:" msgstr "Név:" #: glade/PyChess.glade:614 msgid "Command:" msgstr "Parancs:" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "Protokoll:" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "Paraméterek:" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "Parancssori paraméterek a sakkmotor számára." #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "A sakkmotor egyedi neve a játékosválasztó listákban." #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "A sakkmotor program vagy szkript fájl útvonala" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "A sakkmotorok UCI vagy Xboard protokoll használatával kommunikálnak a felhasználói felülettel.\nAmennyiben mindkettő támogatott, itt választható ki, hogy melyiket használja az adott sakkmotor." #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "Munkakönyvtár:" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "A könyvtár ahonnan a sakkmotor indulni fog." #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Beállítások" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Az első játékos neve" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Első játékos:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "A második játékos neve" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Második játékos:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Fülek elrejtése 1 játszma esetén" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Ha be van jelölve, akkor egyetlen játszma esetén nem lesz fölül játszma fül." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "_Automatikus táblaforgatás a lépésre következő játékos felé" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Ha be van jelölve, akkor minden lépés után a táblát elforgatja a lépésre következő játékos felé." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Figurák szemtől szemben" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Ha be van jelölve, akkor a sötét figurák fejjel lefele látszanak. Mobil eszközökhöz ajánlott beállítás." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "_Koordináták mutatása" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "Ha be van jelölve, akkor a tábla körül megjeleníti a sorok és az oszlopok jeleit." #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "_Leütött figurák mutatása" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "Ha be van jelölve, akkor a leütött figurák is megjelennek a tábla két oldalán." #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "_Figurák jeleinek használata a játszmalapon" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Ha be van jelölve, akkor a játszmalapon betűk helyett a figurák jeleit használja." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Általános képernyő beállítások" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "_Tábla és a lépések" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Táblaforgatás és lépések esetén is animál. Gyors gépeken ajánlott. " #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "_Csak a lépések" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Csak a lépéseket animálja." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "_Nincs" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Nincs animálás. Lassú gépek esetén ajánlott." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animálás" #: glade/PyChess.glade:1264 msgid "_General" msgstr "Általános" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "_Megnyitástár használata" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "Ha be van jelölve, akkor a PyChess megmutatja a legjobb megnyitási lépéseket a javaslat panelen." #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "Megnyitástár fájl:" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "_Helyi végjáték adatbázis használata" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "Ha be van állítva, akkor a PyChess a 6, vagy kevesebb figurát tartalmazó állások esetén megmutatja a különböző lépések kimenetelét.\nA végjáték adatbázis fájljai letölthetők innen:\nhttp://www.olympuschess.com/egtb/gaviota/" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "Végjáték adatbázis útvonal:" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "_Internetes végjáték adatbázis használata" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "Ha be van állítva, akkor a PyChess a 6, vagy kevesebb figurát tartalmazó állások esetén megmutatja a különböző lépések kimenetelét.\nA végjáték állásokat innen keresi ki: http://www.k4it.de/" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "Megnyitás, végjáték" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "_Elemző használata" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "Az elemzőprogram a háttérben futva fogja elemezni a játszmát. A javaslat mód használatához szükséges." #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "_Fordított elemző használata" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "A fordított elemzőprogram úgy fogja elemezni a játszmát mintha az ellenfél következne lépésre. A súgás mód használatához szükséges." #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Elemzés" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "_Javaslatok" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Eltávolítás" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Aktív" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Telepített oldalpanelek" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Oldalpanelek" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Témák" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Hangok használata a PyChess-ben" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "_Sakkadás:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "_Lépés:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "_Döntetlen:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "_Vesztés:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "_Győzelem:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "_Ütés:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "_Tábla felállítása:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Lépés (_nézőknek):" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "_Játszma vége (nézőknek):" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Hang lejátszása ekkor..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "Hangok" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Játszma" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Új" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "_Internetes sakk" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "Játszma be_töltése" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "_Korábbi játszmák" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "Adatbázis megnyitása" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Pozíció felállítása" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Játszma beírása" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "Menté_s" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Mentés m_ásként" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "Állás _exportálása" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Játékos é_rtékszáma" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "S_zerkesztés" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "_Sakkmotorok" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Műveletek" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "_Megszakítás ajánlása" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "_Elhalasztás ajánlása" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "_Szünet kérése" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "_Lépés visszavétel kérése" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Időtúllépés bejelentése" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "_Azonnali lépés kérése" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "Időtúllépés automatikus _bejelentése" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Nézet" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Tábla forgatása" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "Teljes képernyő" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Teljes képernyő" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Oldalpanelek" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Napló" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Javaslat" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "_Súgás" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Súgó" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "A sakkról" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Hogyan játsszunk" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "A PyChess fordítása..." #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "A nap tippje" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Kilépés" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Bezárás mentés nélkül" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "%d játszma _mentése" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "%d játszma még nincs mentve. Mentsem őket?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Válaszd ki a mentendő játszmákat:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Ha nem mentesz, a változások elvesznek." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "Ellenfél" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "Szín:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "Játszma indítása" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Bejelentkezés _vendégként" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "Név:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "Kapcsolódás a FICS-hez" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "A nap tippje" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Tippek mutatása induláskor" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://hu.wikipedia.org/wiki/Sakk" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://hu.wikipedia.org/wiki/Sakk#A_sakk_le.C3.ADr.C3.A1sa" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Üdvözlet" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "Id" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "V Élő" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "S Élő" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "Eredmény" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "Esemény" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "Hely" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "Forduló" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "Dátum" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "ECO" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "PyChess játszma adatbázis" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "A %s. játszmát nem lehet megnyitni hibás FEN miatt" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "A kapcsolat megszakadt - fájl vége üzenet érkezett." #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "A(z) '%s' nem regisztrált név." #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Érvénytelen jelszó.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Kapcsolódási hiba" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Bejelentkezés a szerverre" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Környezet létrehozása" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Elérhető" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Nem elérhető" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Elérhető" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Játszik " #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Tétlen" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "Végrehajtás" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Nem elérhető" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "Simultánt játszik" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "Versenyben" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Nem értékelt" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Értékelt" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Magán" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d perc" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d mp" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Kapcsolódási hiba" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Bejelentkezési hiba" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "A kapcsolatot lezárták" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Cím hiba" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Automatikus kijelentkezés" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Kiléptetve 60 perc tétlenség miatt" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Győzelem" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Döntetlen" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Vereség" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "A FICS-en a \"Vad\" értékszám magában foglalja a következő sakkvariánsokat minden időkontroll mellett:\n" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Büntetések" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "E-mail" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Eltelt" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "összesen a kapcsolatban" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Kapcsolódás" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Ismeretlen" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Jelenleg vendégként vagy bejelentkezve.\nA vendégek nem játszhatnak értékelt\njátszmákat, ezért a választható játszmák\nszáma kisebb lesz." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Regisztrálj most!" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Név" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Típus" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Idő" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Aktív keresés: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s perc" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s mp" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr " szeretné folytatni az elhalasztott %(time)s " #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr " kihív téged egy %(time)s %(rated)s %(gametype)s játszmára." #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Kihívás elfogadása" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Kihívás elutasítása" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Kihívás figyelmen kívül hagyása" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " perc" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s perc + %(sec)s mp" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "Ellenfél értékszáma" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Kézi elfogadás" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Schnell" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Villám" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Vad" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Státusz" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Aktív játékos: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Világos" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Sötét" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Játszma típusa" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Folyamatban lévő játszma: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Szín:" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Ellenfél" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "Elérhető" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Időkontroll" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Dátum/Idő" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s most %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr " akivel van egy elhalasztott %(timecontrol)s %(gametype)s " #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "Folytatás kérése" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "Elhalasztott játszma lejátszása" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Ne csinljon semmit" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "Ez a gomb le van tiltva vendégként bejelentkezettek esetén, mert azok nem játszhatnak értékelt játszmákat." #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Kihívás: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "Kihívás esetén ennek nincs értelme." #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Keresés: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d perc + %(gain)d mp/lépés" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Kézi" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "Bármilyen erősség" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Nem játszhatsz értékelt játszmákat vendégként." #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Nem játszhatsz értékelt játszmát, mert az \"Időkontroll nélkül\" van bejelölve, " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "és a FICS-en az időkontroll nélküli játszmák nem lehetnek értékeltek." #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Ez az opció tiltva van, mivel egy vendéget hívtál ki, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "és a vendégek nem játszhatnak értékelt játszmákat." #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Kevert alapállás" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Egyéb" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Nem játszhatsz sakk variánsokat, mert az \"Időkontroll nélkül\" van bejelölve, " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "és a FICS-en az időkontroll nélküli játszmák csak standard játszmák lehetnek." #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Eltérés" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "Csak 3 keresés megengedett. Ha újat szeretnél, akkor előbb törölni kell az aktuális aktív kereséseidet. Törlöd a kereséseket?" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr " elutasította az ajánlatodat." #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "Lejátszott" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Adminisztrátor" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "Vak" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Sakkmotor" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "Csapat" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Nem regisztrált" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "Tanácsadó" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "Szolgáltató képviselője" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "Verseny igazgató" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "Mamer menedzser" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Nagymester" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Nemzetközi mester" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "FIDE mester" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Női nagymester" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Női nemzetközi mester" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "Női FIDE mester" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "Üres felhasználó" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "F" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "T" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "U" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "CA" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "SR" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "TD" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "GM" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "IM" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "FM" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "WGM" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "WIM" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "WFM" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "%s sakkmotor hiba:" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Az ellenfeled szünetet ajánlott. Elfogadod?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Az ellenfeled döntetlent ajánlott." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Az ellenfeled szeretné megszakítani a játszmát. Elfogadod?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Az ellenfeled a játszma megszakítását ajánlja, ha elfogadod, az értékszámod nem változik." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Az ellenfeled a játszma elhalasztását szeretné. Elfogadod?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Az ellenfeled a játszma elhalasztását ajánlotta." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Az ellenfeled szeretne visszavenni az utolsó %s lépését. Elfogadod?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Az ellenfeled szeretné visszavenni az utolsó %s lépését." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Az ellenfeled szüneteltetni szeretné a játékot. Elfogadod?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Az ellenfeled szünetet ajánlott." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Az ellenfeled folytatni szeretné. Elfogadod?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Az ellenfeled folytatni szeretné." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "a feladás" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "az időtúllépés bejelentése" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "a döntetlen ajánlat" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "a megszakítás ajánlat" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "az elhalasztás ajánlat" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "a szünet ajánlat" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "a folytatás ajánlat" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "a színcsere ajánlat" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "a lépés visszavétel ajánlat" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "Feladás" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "időtúllépés bejelentése" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "döntetlen ajánlása" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "megszakítás ajánlása" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "elhalasztás ajánlása" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "szünet kérése" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "folytatás ajánlása" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "a színcsere ajánlat" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "lépés visszavétel kérése" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "azonnali lépés kérése" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Az ellenfeled nem lépte még túl a gondolkodási időt." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "Az óra még nem indult el." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Játszma közben nem lehet színt váltani." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Túl sok lépést próbáltál visszavonni." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Az ellenfeled szeretné, hogy egy kicsit gyorsabban lépj!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "Általában ez nem jelent semmi különöset, mivel a játszma időkontroll alatt folyik, de ha kedves akarsz lenni hozzá, léphetsz gyorsabban is." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s elutasítva az ellenfél által" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Később újra megteheted az ajánlhatodat." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s visszavonva az ellenfél által" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Úgy tűnik az ellenfeled meggondolta magát." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Nem elfogadható a(z) %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "A PyChess nem tudja elfogadni a %s ajánlatot. Valószínűleg azt már visszavonták." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s hibát adott vissza" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "Alfa 2 diagram" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "A '%s' diagramot nem lehet betölteni" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "PyChess adatbázis" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Állás" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Egyszerű állás" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "A játszma nem olvasható be végig, mert hiba van a következő lépésnél: %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "Sikertelen lépés: %s." #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "Hibás lépés: %(moveno)s %(mstr)s" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Sakkjátszma" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "A játszmát nem lehet megnyitni hibás FEN miatt" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "Állás exportálása" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "-" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Minden fájl" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Képek" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Felülír" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "A fájl már létezik" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "A '%s' fájl már létezik. Fölül akarja írni?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "A(z) '%s' fájl már létezik. Ha lecseréli, a tartalma felülíródik." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Nem lehet menteni a fájlt." #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "A PyChess nem tudta exportálni az állást" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "A hiba: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "A cél gép nem érhető el" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "Vége" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Helyi esemény" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Helyben" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "gyalog" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "király" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "G" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "H" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "B" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "V" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Döntetlen." #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s győzött" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s győzött" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "A játszmát leállították." #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "A játszmát elhalasztották." #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "A játszmát megszakították." #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "(egyik félnek sincs elég mattadó anyaga)" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "(háromszori állásismétlés)" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "(50 lépéses szabály)" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "(mindkét fél túllépte az időt)" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "(%(mover)s pattba lépett)" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "(a játékosok megegyeztek)" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "(egy adminisztrátor döntése)" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "(túl hosszú játszma)" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "%(white)s túllépte az időt, de %(black)s oldalán sincs elég mattadó anyag" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "%(black)s túllépte az időt, de %(white)s oldalán sincs elég mattadó anyag" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "(%(loser)s feladta)" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "(%(loser)s túllépte az időt)" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "(%(loser)s mattot kapott)" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "(%(loser)s kapcsolata megszakadt)" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "(%(loser)s minden figuráját leütötték)" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "(a játékos kapcsolata megszakadt)" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "(mindkét játékos beleegyezett az elhalasztásba)" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "(a szerver leállt)" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "(a kapcsolat megszakadt és az ellenfél elnapolést kért)" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "(%(black)s kapcsolata megszakadt és %(white)s a játszma elhalasztását kérte)" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "(%(white)s kapcsolata megszakadt és %(black)s a játszma elhalasztását kérte)" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "(%(white)s kapcsolata megszakadt a szerverrel)" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "(%(black)s kapcsolata megszakadt a szerverrel)" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "(a játékosok megegyeztek)" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "(a játékos beleegyezett)" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "(a játékos kilépett)" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "(a %(white)s sakkmotor lehalt)" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "mert a(z) %(black)s sakkmotor leállt" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "(a kapcsolat megszakadt a szerverrel)" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "(ismeretlen ok)" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr " perc" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "mp" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "Aszimmetrikus kevert" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "Atom" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "Standard sakk szabályok láthatatlan figurákkal\n" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "Vak" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "Standard sakk szabályok láthatatlan gyalogokkal\n" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "Láthatatlan gyalogok" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "Standard sakk szabályok láthatatlan tisztekkel\n" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "Láthatatlan tisztek" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "Standard sakk szabályok egyszínű figurákkal\n" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Egyszínű figurák" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "Tandem" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "http://brainking.com/en/GameRules?tp=2\n" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Sarok" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "Visszarakós" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Fischer random" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "Az egyik játékos egy huszár hátrannyal indul" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Huszár előny" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "Lúzer" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "Standard\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Standard" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "Az egyik játékos egy gyalog hátrannyal indul" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Gyalog előny" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "Gyalogok a félpályán túl" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "Összetolt gyalogok" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "Az egyik játékos egy vezér hátrannyal indul" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "Vezér előny" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Véletlen" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "Az egyik játékos egy bástya hátrannyal indul" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Bástya előny" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "Öngyilkos" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "Fejjel lefele" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "Még nem kezdtél beszélgetést" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "Csak regisztrált felhasználók beszélhetnek ezen a csatornán" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "Nics beszélgetés kiválasztva" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Játékos adatainak betöltése" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "Játékosok listájának letöltése" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "További csatornák" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "További játékosok" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Beszélgetések" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "Beszélgetés információ" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "Munkakönyvtár kiválasztása" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "Sakkmotor kiválasztása" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "Sakkmotorok" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "_Visszavágó ajánlása" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Visszavágó" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Lépés visszavonása" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Lépéspár visszavonása" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "A játszma szünetel" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Betöltött játszma" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Mentett játszma" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "Elemző elindítva." #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "Megszakítás ajánlat elküldve." #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "Elhalasztás ajánlat elküldve." #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Döntetlen ajánlat elküldve." #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "Szünet ajánlat elküldve." #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "Folytatás ajánlat elküldve." #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "Lépés visszavonás ajánlat elküldve." #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "Azonnali lépés kérése" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "A(z) %s sakkmotor leállt." #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "A pychess elveszítette a kapcsolatot a sakkmotorral.\n\nMagpróbálhatsz indítani egy új játszmát ezzel a sakkmotorral, vagy kipróbálhatsz egy másikat." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "_Megszakít" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "Ez a játszma értékszám vesztés nélkül megszakítható, mivel még nem történt két lépés." #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "_Megszakítás ajánlása" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "Az ellenfelednek bele kell egyeznie a megszakításba, mivel már kettő vagy több lépés történt a játszmában." #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "Ezt a játszmát nem lehet elhalasztani, mert a játékosok közül legalább az egyik vendég." #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "Döntetlen igénylése" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "-" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Kezdőállás" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "1 lépés vissza" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "1 lépés előre" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Utolsó pozíció" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "A PyChess nem tudta menteni a játszmát." #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "Az elmentett panel beállításokat nem sikerült betölteni." #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Te" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Vendég" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Javítsd ki a lépést, vagy betöltheted a játszmát a jó részig." #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Játszma megnyitása" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Játszma mentése" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Minden fájl" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Automatikus típusdetektálás" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Minden sakkfájl" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Ismeretlen fájltípus '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "Nem lehet menteni '%(uri)s' -be, mert a PyChess nem ismeri a '%(ending)s' formátumot." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Nem lehet menteni a '%s' fájlt" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "Nincs elég jogosultságod a fájl mentéséhez.\nGyőződj meg róla, hogy jó útvonalat adtál meg, és próbáld újra." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "A PyChess nem tudta menteni a játszmát." #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "%d játszma még nincs mentve." msgstr[1] "%d játszma még nincs mentve." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Akarod menteni mielőtt bezárod?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "%d játszma _mentése" msgstr[1] "%d játszma _mentése" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Akarod menteni a játszmát bezárás előtt?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "A játszmát nem tudod később folytatni, ha most nem mented el." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Információs ablak mutatása" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "/" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Ember" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Rapid" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Perc:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Jóváírás:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d perc + %(gain)d mp/lépés" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d perc %(gain)d mp/lépés" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d perc" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "Előnyadás" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr " sakk" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Játszma rögzítése" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "Megnyitástár fájl kiválasztása" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "Megnyitástár fájlok" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "Gaviota végjáték adatbázis könyvtár kiválasztása" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Hangfájl megnyitása" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "Hang fájlok" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Nincs hang" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Csipogás" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Hangfájl kiválasztása..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Nincs leírás" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "Új játszmát kezdhetsz a Játszma > Új menüben, az új játszma ablakban kiválaszthatod a játékosokat, az időkontrollt és a sakkvariánst." #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "8 erősségi fokozaton játszhatsz a számítógép ellen." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "A különféle sakkvariánsok esetén a figurák esetleg más sorrendben helyezkednek el az utolsó soron." #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "Egy játszma mentéséhez válaszd a Játszma > Mentés másként menüt, adj meg egy fájlnevet és egy helyet, ahova menteni akarod. Alul pedig válaszd ki a fájl típusához tartozó kiterjesztést, végül a Mentést." #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "Tudtad, hogy jelezheted az ellenfél időtúllépését a Műveletek > Időtúllépés bejelentése menüvel?" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "A lépésed visszavonását kérheted a Ctrl+Z lenyomásával.." #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Teljes képernyős módhoz csak nyomd meg az F11 billentyűt. Visszaváltáshoz szintén használdhatod az F11-et." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "A javaslat mód elemzi a lépéseidet, a bekapcsolásához használd a Ctrl+H billentyűkombinációt." #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "A súgó mód elemzi az ellenfeled lépéseit, a bekapcsolásához használd a Ctrl+Y billentyűkombinációt." #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "Kiválaszthatod a kedvenc hangjaidat a játékhoz a Beállítások menüben a Hangok fülön." #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Tudtad, hogyan segítheted a PyChess fordítását? Súgó > A PyChess fordítása." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Tudtad, hogy egy játszmát akár kétlépéses mattal is meg lehet nyerni?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Tudtad, hogy a lehetséges sakkjátszmák száma meghaladja az univerzum atomjainak számát?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "Bekiabálás" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "Sakk bekiabálás" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Nem hivatalos csatorna %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "egy lépéshez kell legalább egy figura és egy koordináta" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "A gyalog átváltozás új figura megadása nélkül szabálytalan" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "a (%s) hibás mező" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "és" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "döntetlent ér el" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "mattot ad" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "sakkot ad" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "növeli a királya biztonságát" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "erősen növeli a királya biztonságát" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "bástyája elfoglalja a nyílt vonalat" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "bástya elfoglalja a félig nyílt vonalat" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "a futóját fianchetto fejleszti: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "átváltoztatja a gyalogot: %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "besáncol" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "visszaveszi az anyagot" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "anyagot veszít" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "megváltoztatja az anyagot" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "anyagot nyer" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "kiszabadítja ezt: %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "némi anyag lenyerésével fenyeget: %s" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "fokozza a nyomást itt: %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "megvédi ezt: %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "%(piece)s leköti ezt: %(oppiece)s %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Világosnak új előörse van: %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Sötétnek új előörse van: %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "%(color)s új szabad gyalogot hozott létre: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "félig nyílt" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "a %(x)s%(y)s vonalon" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "a %(x)s%(y)s vonalakon" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "%(color)s dupla gyalogot hozott létre a %(place)s" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "%(color)s új dupla gyalogot hozott létre a(z) %(place)s" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "%(color)s izolált gyalogot hozott létre a(z) %(x)s vonalon" msgstr[1] "%(color)s izolált gyalogokat hozott létre a(z) %(x)s vonalakon" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s kőfal formába mozgatja a gyalogjait" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "%s ezután már nem sáncolhat" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "%s ezután már nem sáncolhat a hosszú oldalra" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "%s ezután már nem sáncolhat a rövid oldalra" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "%(opcolor)s futója csapdába esett: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "fejleszti a gyalogot: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "a gyalogját közelíti az átváltozáshoz: %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "közelebb viszi a %(piece)s-t az ellenfél királyához: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "fejleszti a %(piece)s-t: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "aktívabb helyre viszi a %(piece)s-t: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Világos gyalogrohamot indíthatna a jobb oldalon" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Sötét gyalogrohamot indíthatna a bal oldalon" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Világos gyalogrohamot indíthatna a bal oldalon" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Sötét gyalogrohamot indíthatna a jobb oldalon" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Sötét állása meglehetősen kényelmetlen" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Sötét állása nagyon kényelmetlen" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Világos állása meglehetősen kényelmetlen" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Sötét állása nagyon kényelmetlen" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "Elemzés" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "Elemzett játszma" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "Kezdő megjegyzés" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Megjegyzés hozzáadása" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Megjegyzés szerkesztése" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "Kikényszerített lépés" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "Lépés minősítése" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "Tisztázatlan állás" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "Lépéskényszer" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "Fejlődési előny" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "Kezdeményezés" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "Támadással" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "Kompenzáció" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "Ellentámadás" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "Időzavar" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "Állás minősítése" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "Szimbólumok eltávolítása" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "Változat eltávolítva." #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "%s forduló" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "Javaslat" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "Számítógépes segítség a játszma minden fázisában." #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Hivatalos PyChess panel." #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Megnyitástár" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "A leggyakrabban alkalmazott lépések az adott megnyitásban" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "%s elemzése" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "%s megpróbálja megállapítani a legjobb lépést és hogy melyik oldal áll jobban." #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "%s fenyegetés elemzése" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "%s megpróbálja megállapítani, hogy mi fenyegetne, ha az ellenfél következne lépésre." #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "Számolás..." #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "Az elemzés által mutatott számok egysége 1 gyalog, világos szemszögéből nézve." #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "További javaslatok hozzáadása segíthet ötleteket meríteni, de lassítja a számítógépes elemzést." #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "Végjáték adatbázis" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "A végjáték adatbázis használata pontos elemzést ad ha már csak néhány figura van a táblán." #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "Matt %d lépésben." #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "Ebben az állásban nincs szabályos lépés." #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Csevegés" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Csevegés a partnerrel játszma közben" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Megjegyzések" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Magyarázó megjegyzések a lépésekhez" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Kezdőállás" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s %(piece)s lép: %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "Sakkmotorok kimenetei" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "A számítógépes sakkprogramok gondolkodását mutatja a játszmák közben" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "Ebben a játszmában egyik játékos sem számítógépes sakkprogram" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Játszmalap" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "Navigálható lépéslista" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Érték" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "Grafikus állásértékelés" pychess-0.12beta3/lang/ru/0000755000175000017470000000000012176727272014453 5ustar tamasuserspychess-0.12beta3/lang/ru/LC_MESSAGES/0000755000175000017470000000000012176727272016240 5ustar tamasuserspychess-0.12beta3/lang/ru/LC_MESSAGES/pychess.po0000644000175000017470000027120612161415524020252 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # <2furius@gmail.com>, 2012. # FIRST AUTHOR , 2007. # Sergey Maranchuk , 2012. # , 2012. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: AK \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\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" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "PyChess проверяет наличие шахматных движков. Пожалуйста, подождите." #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Подключение к Интернет Шахматам" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Название" #: glade/fics_logon.glade:70 msgid "text" msgstr "текст" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Подключение к Free Online Chess Server" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Пароль:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Имя:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Войти как _Гость" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "По_рты:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "Р_егистрация" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "Вызов: " #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "Отправить Вызов" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "Вызов:" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "Молния:" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Стандарт:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "Блиц:" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "2 мин, Шахматы Фишера, Черные" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 мин + 6 с/ход, Белые" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 мин" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "Редактировать Запрос" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Без времени" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "Минуты: " #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr " Увеличение: " #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "Контроль времени: " #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Стандарт" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Контроль времени" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "Не важно" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "Ваша сила: " #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Блиц)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "Сила соперника: " #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Центр:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Толерантность:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Скрыть" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "Сила соперника" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Белые" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Чёрные" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "Ваш цвет" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "Игра по классическим правилам" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Играть" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "Вариант Шахмат" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "Рейтинговая игра" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "Вручную принимать соперника" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Настройки" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess — Интернет-шахматы: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "_Очистить Запросы" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Принять" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "_Отклонить" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "Соперник" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 мин + 6 с/ход, 1400↑, Белые" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 мин, 1200-1800, Вручную" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "Искать соперника" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "Создать Запрос" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "_Запросы / Вызовы" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Рейтинг" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Время" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "_График Запросов" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "0 Готовых Игроков" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Вызов" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "Наблюдать" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "Начать Приватный Чат" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "И_гроки" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "_Игры" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "Предложить _продолжить" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "_Сдаться" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Предложить _ничью" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "_Отменить предложение" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Т_ест" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "_Незавершённые" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Новости" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Показать _чат" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "Показать консоль" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "_Отключиться" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Инструменты" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 из 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Предыдущий" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Следующий" #: glade/findbar.glade:161 msgid "Search:" msgstr "Искать:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Новая игра" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Начать игру" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Игрок за черных:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Игрок за белых:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Игроки" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "_Без времени" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Рапид:\t15 мин + 10 с/ход" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Классика:\t40 мин + 15 с/ход" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "_Играть в Классические шахматы" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "Играть в Шахматы Фишера" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "Играть в Шахматные Поддавки" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "Начальная позиция" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "Тип нотации" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Превращение пешки" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "ферзя" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "ладью" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "слона" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "коня" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Пешка должна быть заменена на" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "Шахматный клиент для рабочего стола GNOME" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess является свободным программным обеспечением; вы можете \nраспространять и/или изменять его в соответствии с лицензией GNU \nGeneral Public License, издаваемой организацией Free Software Foundation, \nверсии 2, либо более поздней (на ваше усмотрение).\n\nPyChess распространяется с надеждой на то, что будет полезной, \nно БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий \nГОДНОСТИ К ПРОДАЖЕ или СООТВЕТСТВИЯ КАКИМ-ЛИБО ЦЕЛЯМ. \nДля дополнительной информации обратитесь к GNU General Public \nLicense.\n\nВы получите копию GNU General Public License вместе с PyChess; \nесли она отсутствует, пишите в Free Software Foundation, Inc., \n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Информация об игре" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Турнир:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Место:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Тур:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Данные о партии" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Дата проведения партии" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Параметры" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "Отображаемое имя первого игрока" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "Имя _первого игрока:" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "Отображаемое имя гостя" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "Имя _второго игрока:" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "_Скрывать вкладки, если открыта только одна игра" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "Если включено, скрывает вкладку наверху игрового окна, когда она не нужна." #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "Автоматически _переворачивать доску для текущего игрока" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "Если включено, доска будет автоматически поворачиваться после каждого хода в положение для текущего игрока." #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "Режим отображения _Лицом к Лицу" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "Если включено, чёрные фигуры располагаются вверх ногами. Это удобно для игры вдвоём на мобильных устройствах." #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "Показывать _координаты" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "_Использовать изображения фигур в нотации" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "Если включено, PyChess будет отображать в нотации ходов фигуры, а не заглавные буквы." #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Общие параметры отображения" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "_Полная анимация доски" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "Анимировать фигуры, повороты доски и др. (для быстрых компьютеров)." #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "Анимировать только _ходы" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "Анимировать только движения фигур." #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "Без _анимации" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "Никогда не использовать анимацию (для слабых машин)." #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Анимация" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_Общие" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Использовать _анализатор" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "Анализатор будет в фоновом режиме анализировать партию. Это необходимо для работы режима подсказок" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Использовать _обратный анализатор" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "Обратный анализатор будет анализировать партию со стороны противника. Это необходимо для работы в шпионском режиме" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Анализ" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Удалить" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "Активировать" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "Установленные боковые панели" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "Боковые _панели" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "Темы" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Использовать звуки в PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Поставлен шах" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "_Игрок сделал ход:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "В партии _ничья:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "Партия _проиграна:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "Партия _выиграна:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Игрок взял _фигуру:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Партия на_чалась:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Сделан _ход при наблюдении:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "_Конец партии при наблюдении:" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Проигрывать звук, если..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Звуки" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Игра" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Новая игра" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "Играть в _Интернет Шахматы" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Загрузить игру" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "Загрузить _недавнюю игру" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "Открыть _базу данных" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "Настроить позицию" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "Ввес_ти нотацию игры" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Сохранить игру" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Сохранить игру _как" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "_Экспорт Позиции" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "_Рейтинг игрока" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Действия" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "_Отменить предложение" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "Предложить _Перерыв" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "Предложить сделать _перерыв" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "Предложить _отменить ход" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "Проверить _флажок" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "Попросить сделать _Ход" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Вид" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Повернуть доску" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Полноэкранный режим" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "_Покинуть полноэкранный режим" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "_Показывать боковые панели" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Просмотр журнала" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Режим _подсказок" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "_Шпионский режим" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Справка" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "О шахматах" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Как играть" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Перевести PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Совет дня" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Выход из PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "_Закрыть без сохранения" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "_Сохранено %d документ(ов)" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "Ходы в %d играх не сохранены. Сохранить изменения перед закрытием?" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Выберите партии, которые вы хотите сохранить:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "Если вы не сохранитесь, все изменения будут безвозвратно утеряны." #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Соперник:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_Ваш цвет:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Начать игру" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "Войти как _Гость" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "_Идент-ор:" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "_Подключиться к FICS" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Совет дня" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Показывать советы при запуске" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D1%85%D0%BC%D0%B0%D1%82%D1%8B" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D1%85%D0%BC%D0%B0%D1%82%D1%8B#.D0.9F.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Добро пожаловать" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "База данных игры PyChess" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "Не удалось загрузить игру #%s из-за ошибки синтаксического разбора FEN" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Связь была нарушена - получено сообщение \"end of file\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "Имя '%s' не зарегистрировано" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "Введен неверный пароль.\n" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "Соединение с сервером" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "Авторизация на сервере" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "Настройка окружения" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "Подключен" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Отключён" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "Доступен" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "Играет" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "Бездействие" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "Недоступен" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Нерейтинговая" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Рейтинговая" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Приват" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "%d мин" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr " + %d c" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Ошибка подключения" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Ошибка авторизации" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Подключение было закрыто" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "Автовыход" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "Вы отключены из-за бездействия более 60 минут" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Победа" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Ничья" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Поражение" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "Санкции" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Почта" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "Прошло" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "на связи" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Отклик" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Подключение" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Неизвестный" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "Вы подключились как Гость.\nГости не могут играть партии на рейтинг, поэтому предложений игры будет меньше." #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Зарегистрируйтесь сейчас" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Имя" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Тип" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Часы" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "Активных запросов: %d" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "%(min)s мин" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr " + %(sec)s с" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "Принять Вызов" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "Отклонить Вызов" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "Игнорировать Вызов" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " мин." #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "%(min)s мин + %(sec)s с" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "Ретинг Соперника" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "Вручную" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Блиц" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Молния" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "Дикие" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "Статус" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "Игроков: %d" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Игрок белыми" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Игрок чёрными" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Тип игры" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "Текущие игры: %d" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "Ваш Цвет" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Противник" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "Онлайн" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "Контроль Времени" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Дата/Время" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "%(player)s %(status)s" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "Запросить продолжение" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "Ничего не делать" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Вызов: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "Редактировать запрос: " #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "%(minutes)d мин + %(gain)d с/ход" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Вручную" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "Любая сила" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "Вы не можете играть рейтинговые игры, потому что вы зашли как Гость" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "Вы не можете играть рейтинговую игру, потому что выбрано \"Без времени\", " #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "и на FICS, игры \"Без времени\" не могут быть рейтинговыми" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "Эта опция недоступна, так как вы вызываете Гостя, " #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "и Гости не могут играть рейтинговые игры" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Другие" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "Вы не можете выбрать вариант, потому что выбрано \"Без времени\", " #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "и на FICS, игры \"Без времени\" должны быть Классическими шахматами" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "Изменить Толерантность" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr " отклонил предложение на матч." #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "Администратор" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "Компьютер" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "Незарегистрированный пользователь" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "Гроссмейстер" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "Международный Мастер" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "Мастер ФИДЕ" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "Женский Гроссмейстер" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "Женский Международный Мастер" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "Женский мастер FIDE" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "*" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "В" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "C" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "T" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "U" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "CA" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "SR" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "TD" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "TM" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "GM" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "IM" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "FM" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "WGM" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "WIM" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "D" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "Движок %s сообщил об ошибке:" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "Ваш соперник предложил вам ничью. Вы согласны?" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "Ваш соперник предложил ничью. Если вы примите предложение, то игра закончится со счётом 1/2 - 1/2." #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "Ваш соперник хочет отменить игру. Вы согласны?" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "Ваш соперник предложил прервать игру. Если вы примете предложение, игра закончится без изменения рейтинга." #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "Ваш соперник хочет отложить игру. Согласиться?" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "Ваш соперник предложил отложить игру. Если вы примете предложение, игру можно будет продолжить позже (когда соперник будет в сети и оба игрока согласятся продолжить игру)." #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "Ваш соперник предлагает отменить %s ход(ов). Вы согласны?" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "Ваш соперник предложил отменить последние %s ходов. Если вы примете предложение, игра продолжится с предыдущей позиции." #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "Вам соперник желает приостановить игру. Вы согласны?" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "Ваш соперник предложил приостановить игру. Если вы примете предложение, игровые часы будут приостановлены, пока оба игрока не будут согласны продолжить игру." #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "Ваш соперник хочет продолжить игру. Продолжить игру?" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "Ваш соперник предложил продолжить игру. Если вы примете предложение, часы продолжат отсчёт с момента их приостановки." #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "Сдача партии" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "Предложение ничьей" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "Предложение прервать" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "Предложение отложить" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "Предложение приостановить" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "Предложение продолжить" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "Предложение поменяться местами" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "Предложение отменить ход" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "предложить ничью" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "предложить прервать" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "предложить отложить партию" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "предложить приостановку" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "предложить продолжить" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "предложить поменяться местами" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "предложить отменить ход" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "У противника не истекло время." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "Часы ещё не запущены." #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "Вы не можете сменить цвета во время игры." #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "Вы пытаетесь отменить слишком много ходов." #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Противник просит вас поторопиться!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "В целом это ничего не значит, поскольку партия с контролем времени, но если вы хотите порадовать своего противника, возможно, вам следует сделать ход." #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "%s было отклонено противником" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Вы можете попробовать отправить предложение противнику в партии ещё раз позже." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "%s был снят вашим оппонентом" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "Похоже, ваш соперник передумал." #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "Не возможно принять %s" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "PyChess не смог принять предложение %s. Возможно, потому что он покинул партию." #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "%s возвращает ошибку" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "Не удалось загрузить диаграмму '%s'" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "База данных PyChess" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Шахматная позиция" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Forsyth-Edwards Notation" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "Не удаётся прочитать игру до конца из-за ошибки синтаксического разбора хода %(moveno)s '%(notation)s'." #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Portable Game Notation" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "Не удалось загрузить игру из-за ошибки синтаксического разбора FEN" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "против" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "Все файлы" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "Изображения" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Заменить" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Файл существует" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Файл '%s' уже существует. Вы хотите заменить?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Файл уже существует в '%s'. Если вы замените его, содержимое будет перезаписано." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Не удалось сохранить файл" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "PyChess не может экспортировать позицию" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Ошибка: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "Целевой хост недоступен" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Локальный турнир" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "Локальное место" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "Пешка" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "Король" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Q" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Партия закончилась вничью" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "%(white)s победили" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "%(black)s победили" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "Партия принудительно завершена" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Партия была отложена" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Партия была прервана" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "Поскольку та же позиция повторилась три раза подряд" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "Так как последние 50 ходов не принесли ничего нового" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "Так как у обоих соперников кончилось время" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "По взаимному согласию игроков" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "По решению администратора" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "Так как %(loser)s сдался" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "Так как у %(loser)s кончилось время" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "Так как игроку %(loser)s поставлен мат" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "Так как %(loser)s отключен" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "Так как %(loser)s потерял все фигуры, кроме короля" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "Так как соединение с игроком прервалось" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "Потому что оба игрока согласились отложить игру" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "Так как сервер отключен" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "Так как связь с игроком потеряна, а второй игрок попросил отложить партию" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "Так как %(black)s потерял связь с сервером и %(white)s предложил отложить партию" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "Так как %(white)s потерял связ с сервером и %(black)s предложил отложить партию" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "Так как %(white)s потерял связь с сервером" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "Так как %(black)s потерял связь с сервером" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "По обоюдному соглашению игроков" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "Благодаря любезности игрока" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "Так как игрок вышел. Победитель не определён из-за начальной стадии игры" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "Т.к. подключение к серверу было разорвано" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "Причина неизвестна" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "мин" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "с" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS дикие/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "Классические шахматные правила, все фигуры белые\n" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "Все белые" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "http://brainking.com/en/GameRules?tp=2\n" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "Уголки" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "http://en.wikipedia.org/wiki/Chess960\n" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "Шахматы Фишера" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "У одного из игроков на одного коня меньше" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "Неравенство коней" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "Правила классических шахмат\n" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Классика" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "У одного из игроков на одну пешку меньше" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "Неравенство пешек" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS дикие/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS дикие/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS дикие/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "Случайный" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "У одного из игроков на одну ладью меньше" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "Неравенство ладей" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "FICS дикие/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "В этом канале могут общаться только зарегистрированные пользователи" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "Загрузка данных игрока" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "Получение списка игроков" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "Больше каналов" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "Больше игроков" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "Беседы" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "Предложить реванш" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "Играть реванш" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "Отменить один ход" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "Отменить два хода" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "Игра приостановлена" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Партия загружена" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Партия сохранена" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "Вы отменили предложение" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "Вы предложили отложить игру" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Вы предложили ничью" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "Вы предложили приостановить игру" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "Вы предложили продолжить" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "Вы отменили предложение" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "Вы попросили соперника сделать ход" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Компьютерная программа, %s, остановлена" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess потерял связь с компьютерной программой, возможно из-за её остановки.\n\nВы можете попытаться начать новую игру с той же компьютерной программой или против какой-либо другой." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "Прервать" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "Эту игру можно автоматически прервать без потери рейтинга, так как ещё не сделано двух ходов" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "Предложить Прервать" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "Чтобы прервать игру, требуется согласие соперника, так как уже сделано два хода или более" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "Игра не может быть отложена, потому что оба игрока гости" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "против" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "Перейти к начальной позиции" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "Назад на один ход" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "Вперёд на один ход" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "Перейти к последней позиции" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "Вы" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Гость" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "Изменить ход или начать игру с того, который может быть прочитан" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Открыть игру" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Сохранить игру" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Все файлы" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Автоматически определять тип" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Все шахматные файлы" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Неизвестный тип файла '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "Не удалось сохранить '%(uri)s', так как PyChess не знает формата '%(ending)s'." #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "Невозможно сохранить файл '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "У вас нет необходимых прав для сохранения файла.\nПожалуйста, проверьте, указали ли вы правильный путь и попробуйте снова." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess не смог сохранить партию" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "Имеется %d игра с несохранёнными ходами." msgstr[1] "Имеется %d игры с несохранёнными ходами." msgstr[2] "Имеется %d игр с несохранёнными ходами." #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "Сохранить ходы перед закрытием?" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "_Сохранить %d документ" msgstr[1] "_Сохранить %d документа" msgstr[2] "_Сохранить %d документов" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Сохранить игру перед закрытием?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Будет невозможно продолжить игру позже, если вы ее не сохраните." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "Информационное окно PyChess" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "из" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Человек" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "Рапид" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Минуты:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Добавлять за ход:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "%(name)s %(minutes)d мин + %(gain)d с/ход" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "%(name)s %(minutes)d мин %(gain)d с/ход" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "%(name)s %(minutes)d мин" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr " шахматы" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Начать партию" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Открыть звуковой файл" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Без звука" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Сигнал" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Звуковой файл..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "Неописанная панель" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "Вы можете выбирать из 8 различных уровней сложности для игры против компьютера." #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "Чтобы играть в Полноэкранном режиме просто нажмите F11b. Чтобы вернуться в оконный, нажмите F11 снова." #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "Знаете ли вы, что можете помочь перевести Pychess на ваш язык, Справка > Перевести Pychess." #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "Знаете ли вы, что можно завершить шахматную партию всего за два хода?" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "Знаете ли вы, что количество возможных вариантов игр в шахматах превышает число атомов во Вселенной?" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "Неофициальный канал %d" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "и" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "сделали ничью" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "поставили мат" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "дают шах противнику" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "улучшают защиту короля" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "несколько улучшают защиту короля" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "перемещают ладью на открытую вертикаль" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "перемещают ладью на полуоткрытую вертикаль" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "фианкетируют слона на %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "способствуют продвижению пешки на %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "рокируются" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "возвращают материал" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "жертвуют материал" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "разменивают материал" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "выигрывают материал" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "спасают %s" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "увеличивают давление на %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "защищают %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "Белые имеют новую фигуру в защите %s" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "Чёрные имеют новую фигуру в защите %s" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "%s перемещают пешки в устойчивую позицию" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "развитие пешки: %s" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "продвигают пешку ближе к последней диагонали ходом %s" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "продвигают %(piece)s ближе к королю противника: %(cord)s" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Белые должны брать пешкой направо" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Чёрные должны брать пешкой налево" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Белые должны брать пешкой налево" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Чёрные должны брать пешкой направо" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Чёрные имеют довольно стеснённую позицию" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Чёрные имеют несколько стеснённую позицию" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Белые имеют довольно стеснённую позицию" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Белые имеют несколько стеснённую позицию" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "Нотация" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "Добавить комментарий" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "Редактировать комментарий" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "Цугцванг" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "Удалить символы" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "раунд %s" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "Подсказки" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "Панель подсказок предоставляет советы компьютера на каждом этапе игры" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "Официальная PyChess панель" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Книга дебютов" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "Книга дебютов поможет вам на ранней стадии игры, показывая ходы, сделанные великими шахматными игроками" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "%s попытается предсказать, какой ход лучший, и какая сторона имеет преимущество" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "%s попытается установить возможную угрозу, если ход будет делать ваш соперник" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "Вычисление..." #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "Эндшпильная таблица" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "Мат в %d" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "В этой позиции\nнет допустимого хода." #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "Чат" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "Панель чата позволяет общаться с соперников во время игры, если он согласен" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Комментарии" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "Панель комментариев пытается анализировать и пояснять сделанные ходы" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Начальная позиция" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "%(color)s переместили %(piece)s на %(cord)s" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "В этой игре не участвуют шахматные движки (игроки-компьютеры)." #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "История ходов" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "Список ходов содержит ходы, сделанные игроками, и позволяет перемещаться по истории игры" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Счёт" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/ca/0000755000175000017470000000000012176727272014410 5ustar tamasuserspychess-0.12beta3/lang/ca/LC_MESSAGES/0000755000175000017470000000000012176727272016175 5ustar tamasuserspychess-0.12beta3/lang/ca/LC_MESSAGES/pychess.po0000644000175000017470000021141212161415524020200 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2007. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Connectar-se als Escacs per Internet" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Títol" #: glade/fics_logon.glade:70 msgid "text" msgstr "text" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "Connectar-se a un servidor Online gratuït d'Escacs" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Contrasenya:" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Nom:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Entrar com _Visitant" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Po_rts:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Estàndard:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "10 min + 6 sec/moviment, Blanques" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "5 mins." #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "Sense temps" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "Estàndard" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "Control de temps" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "(Blitz)" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "Centre:" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "1200" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "Tolerància:" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "Amaga" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Blanques" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Negres" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "Juga" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "Opcions" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet Chess: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Accepta" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "10 min + 6 sec/moviment, 1400↑, Blanques" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "5 min, 1200-1800, Manual" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Puntuació" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Temps" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "Repte" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Ofereix _Taules" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "Pre_visualització" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Notícies" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "Mostra _Xat" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Eines" #: glade/findbar.glade:7 msgid "window1" msgstr "finestra1" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "0 de 0" #: glade/findbar.glade:73 msgid "_Previous" msgstr "_Anterior" #: glade/findbar.glade:132 msgid "_Next" msgstr "_Següent" #: glade/findbar.glade:161 msgid "Search:" msgstr "Cerca:" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Nova partida" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Comença el joc" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "_Jugador negre:" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "_Jugador blanc:" #: glade/newInOut.glade:336 msgid "Players" msgstr "Jugadors" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "Blitz:\t5 min" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "Ràpid:\t15 min + 10 sec/moviment" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "Normal:\t40 min + 15 sec/moviment" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Coronar" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Dama" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Torre" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Alfil" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Cavall" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "A què vol promocionar el peó?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "PyChess és software lliure; podeu redistribuir-la i/o modificar \nsota els termes de la Llicència Pública General de GNU com ha estat publicat \nper la Fundació de Software Lliure; o sota la segona versió de la Llicència, o \n(per pròpia decisió) qualsevol versió posterior.\n\nPyChess es distribueix amb l'esperança de que sigui útil, \nperò SENSE CAP GARANTIA; també sense la garantia implícita \nde MERCANTIBILITAT o IDONEITAT PER A CAP PROPÒSIT PARTICULAR. \nVegis la Llicencia Pública General per a més detalls.\n\nHauría d'haver rebut una còpia de la Llicència Pública General de GNU \nadjunta amb PyChess; si no la ha rebut. escrigui a la Fundació Software Lliure, Inc., \n51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Informació de la Partida" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Esdeveniment:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Lloc:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Ronda:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Informació de la Partida" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Data de la Partida" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Preferències" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Animació" #: glade/PyChess.glade:1264 msgid "_General" msgstr "_General" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "Desinstal·la" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "_Sons" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Partida" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Partida nova" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Carregar Partida" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Desar Partida" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Guardar Partida _Com" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "_Accions" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "_Reclamar bandera" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Visualitza" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Girar el Taulell" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "_Pantalla completa" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "Surt de la _pantalla completa" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "_Visor d'Events" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "_Modalitat amb Ajuda" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Modalitat _espia" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Ajuda" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Quant els escacs" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "Com jugar" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "Tradueix PyChess" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "Consell del dia" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "Surt PyChess" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Tanca _sense desar" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "Selecciona les partides que vols desar:" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "_Adversari:" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "_El teu Color:" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "_Comença la Partida" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "Consell del dia" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "Mostra els consells a l'arrencada" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://ca.wikipedia.org/wiki/Escacs" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://ca.wikipedia.org/wiki/Reglament_dels_escacs" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "Us donem la benvinguda" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "S'està connectant al servidor" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "En línia" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "Fora de línia" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "Privat" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Error de connexió" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "La connexió fou tancada" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "Error d'adreça" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "Guanya" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "Empat" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "Perd" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Correu electrònic" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Desconegut" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Registrar ara" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Nom" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Tipus" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Rellotge" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr " min" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "Blitz" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "Jugador de blanques" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Jugador de negres" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Tipus de joc" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Adversari" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "Data/Hora" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "Desafiament: " #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "Manual" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "Aleatori" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "Altre" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "abandona" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "ofereix taules" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Posició" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Partida d'Escacs" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Reemplaçar" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "El fitxer ja existeix" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Esdeveniment local" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "La partida ha acabat en taules" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "El motor d'escacs '%s' ha mort" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess ha perdut la conexió amb el motor, probablement perquè ha mort.\n\nPot intentar començar una altra partida amb el motor d'escacs, o probar a jugar contra un altre." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Obrir Partida" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Guardar la partida" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Tots els arxius" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Detectar format automàticament" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Tots els Arxius d'Escacs" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "No s'ha pogut guardar l'arxiu '%s'" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "No tens els permisos necessaris per a guardar l'arxiu.\nSiusplau asegureu-vos que heu indicat correctament la ruta i torneu-ho a intentar." #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Guardar la partida actual abans de tancar-la?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Jugador Humà" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Increment:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Llibre d'Apertures" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Notes" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Històric de moviments" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Puntuació" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/br/0000755000175000017470000000000012176727272014430 5ustar tamasuserspychess-0.12beta3/lang/br/LC_MESSAGES/0000755000175000017470000000000012176727272016215 5ustar tamasuserspychess-0.12beta3/lang/br/LC_MESSAGES/pychess.po0000644000175000017470000020315212161415524020222 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2008. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: br\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "" #: glade/fics_logon.glade:55 msgid "Title" msgstr "" #: glade/fics_logon.glade:70 msgid "text" msgstr "" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Anv :" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Gwenn" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Du" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "C'hoari nevez" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "C'Hoarierien" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Rouanez" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Furlukin" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Roue" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "" #: glade/PyChess.glade:179 msgid "Event:" msgstr "" #: glade/PyChess.glade:193 msgid "Site:" msgstr "" #: glade/PyChess.glade:221 msgid "Round:" msgstr "" #: glade/PyChess.glade:265 msgid "Game data" msgstr "" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "" #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_C'Hoari" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "C'Hoari _Nevez" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Skoazell" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "Postel" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Dianav" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Anv" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "C'Hoarier Gwenn" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "C'Hoarier Du" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "B" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "" #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "" #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "" #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "P" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "N" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "R" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "Q" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "K" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "" #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" msgstr[1] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "" #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "" #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" msgstr[1] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/lang/vi/0000755000175000017470000000000012176727272014443 5ustar tamasuserspychess-0.12beta3/lang/vi/LC_MESSAGES/0000755000175000017470000000000012176727272016230 5ustar tamasuserspychess-0.12beta3/lang/vi/LC_MESSAGES/pychess.po0000644000175000017470000021266212161415524020243 0ustar tamasusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Translators: # FIRST AUTHOR , 2010. msgid "" msgstr "" "Project-Id-Version: pychess\n" "Report-Msgid-Bugs-To: http://code.google.com/p/pychess/issues/list\n" "POT-Creation-Date: 2013-03-20 20:50+0100\n" "PO-Revision-Date: 2013-03-21 08:18+0000\n" "Last-Translator: gbtami \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" # "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: glade/discovererDialog.glade:19 msgid "PyChess is discovering your engines. Please wait." msgstr "" #: glade/discovererDialog.glade:78 msgid "PyChess.py:" msgstr "PyChess.py:" #: glade/discovererDialog.glade:90 msgid "ShredderLinuxChess:" msgstr "ShredderLinuxChess:" #: glade/discovererDialog.glade:102 msgid "gnuchess:" msgstr "gnuchess:" #: glade/fics_logon.glade:8 msgid "PyChess - Connect to Internet Chess" msgstr "PyChess - Kết nối với Internet Chess" #: glade/fics_logon.glade:55 msgid "Title" msgstr "Tiêu đề" #: glade/fics_logon.glade:70 msgid "text" msgstr "văn bản" #: glade/fics_logon.glade:102 msgid "Connect to the Free Online Chess Server" msgstr "" #: glade/fics_logon.glade:188 glade/taskers.glade:402 msgid "_Password:" msgstr "_Mật khẩu :" #: glade/fics_logon.glade:202 msgid "_Name:" msgstr "_Tên:" #: glade/fics_logon.glade:250 msgid "Log on as _Guest" msgstr "Đăng nhập với tên _Guest" #: glade/fics_logon.glade:291 msgid "Po_rts:" msgstr "Các C_ổng:" #: glade/fics_logon.glade:388 msgid "S_ign up" msgstr "" #: glade/fics_lounge.glade:36 msgid "Challenge: " msgstr "" #: glade/fics_lounge.glade:100 msgid "Send Challenge" msgstr "" #: glade/fics_lounge.glade:136 msgid "Challenge:" msgstr "" #: glade/fics_lounge.glade:333 glade/fics_lounge.glade:2096 msgid "Lightning:" msgstr "" #: glade/fics_lounge.glade:357 glade/fics_lounge.glade:2120 msgid "Standard:" msgstr "Chuẩn:" #: glade/fics_lounge.glade:382 glade/fics_lounge.glade:2145 msgid "Blitz:" msgstr "" #: glade/fics_lounge.glade:408 msgid "2 min, Fischer Random, Black" msgstr "" #: glade/fics_lounge.glade:430 msgid "10 min + 6 sec/move, White" msgstr "" #: glade/fics_lounge.glade:452 msgid "5 min" msgstr "" #: glade/fics_lounge.glade:488 msgid "Edit Seek" msgstr "" #: glade/fics_lounge.glade:594 lib/pychess/ic/ICLounge.py:1689 #: lib/pychess/ic/__init__.py:61 lib/pychess/Utils/GameModel.py:173 msgid "Untimed" msgstr "" #: glade/fics_lounge.glade:647 msgid "Minutes: " msgstr "" #: glade/fics_lounge.glade:677 msgid " Gain: " msgstr "" #: glade/fics_lounge.glade:717 msgid "Time control: " msgstr "" #: glade/fics_lounge.glade:730 lib/pychess/ic/ICLounge.py:809 #: lib/pychess/ic/ICLounge.py:1689 lib/pychess/ic/__init__.py:59 msgid "Standard" msgstr "" #: glade/fics_lounge.glade:771 glade/newInOut.glade:584 msgid "Time Control" msgstr "" #: glade/fics_lounge.glade:828 glade/fics_lounge.glade:1361 msgid "Don't care" msgstr "" #: glade/fics_lounge.glade:893 msgid "Your strength: " msgstr "" #: glade/fics_lounge.glade:935 msgid "(Blitz)" msgstr "" #: glade/fics_lounge.glade:965 msgid "Opponent's strength: " msgstr "" #: glade/fics_lounge.glade:1069 msgid "" "When this button is in the \"locked\" state, the relationship\n" "between \"Opponent's strength\" and \"Your strength\" will be\n" "preserved when \n" "a) your rating for the type of game sought has changed\n" "b) you change the variant or the time control" msgstr "" #: glade/fics_lounge.glade:1109 msgid "Center:" msgstr "" #: glade/fics_lounge.glade:1148 msgid "1200" msgstr "" #: glade/fics_lounge.glade:1202 msgid "Tolerance:" msgstr "" #: glade/fics_lounge.glade:1257 lib/pychess/ic/ICLounge.py:1930 msgid "Hide" msgstr "" #: glade/fics_lounge.glade:1304 msgid "Opponent Strength" msgstr "" #: glade/fics_lounge.glade:1401 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1589 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:146 msgid "White" msgstr "Trắng" #: glade/fics_lounge.glade:1429 lib/pychess/Database/gamelist.py:40 #: lib/pychess/ic/ICLounge.py:1591 lib/pychess/Utils/repr.py:8 #: lib/pychess/widgets/ChessClock.py:16 #: lib/pychess/widgets/TaskerManager.py:147 msgid "Black" msgstr "Đen" #: glade/fics_lounge.glade:1468 msgid "Your Color" msgstr "" #: glade/fics_lounge.glade:1527 msgid "Play normal chess rules" msgstr "" #: glade/fics_lounge.glade:1567 msgid "Play" msgstr "" #: glade/fics_lounge.glade:1633 glade/newInOut.glade:784 msgid "Chess Variant" msgstr "" #: glade/fics_lounge.glade:1691 msgid "Rated game" msgstr "" #: glade/fics_lounge.glade:1707 msgid "Manually accept opponent" msgstr "" #: glade/fics_lounge.glade:1737 msgid "Options" msgstr "" #: glade/fics_lounge.glade:1765 msgid "PyChess - Internet Chess: FICS" msgstr "PyChess - Internet Chess: FICS" #: glade/fics_lounge.glade:1838 msgid "_Clear Seeks" msgstr "" #: glade/fics_lounge.glade:1863 msgid "_Accept" msgstr "_Chấp nhận" #: glade/fics_lounge.glade:1888 msgid "_Decline" msgstr "" #: glade/fics_lounge.glade:2171 msgid "2 min, Fischer Random, 1800↓, Black" msgstr "" #: glade/fics_lounge.glade:2192 msgid "10 min + 6 sec/move, 1400↑, White" msgstr "" #: glade/fics_lounge.glade:2213 msgid "5 min, 1200-1800, Manual" msgstr "" #: glade/fics_lounge.glade:2269 msgid "Send seek" msgstr "" #: glade/fics_lounge.glade:2304 msgid "Create Seek" msgstr "" #: glade/fics_lounge.glade:2320 msgid "_Seeks / Challenges" msgstr "" #: glade/fics_lounge.glade:2341 lib/pychess/ic/ICLounge.py:256 #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:981 #: lib/pychess/ic/ICLounge.py:982 msgid "Rating" msgstr "Tính điểm" #: glade/fics_lounge.glade:2366 msgid "Time" msgstr "Thời gian" #: glade/fics_lounge.glade:2386 msgid "Seek _Graph" msgstr "" #: glade/fics_lounge.glade:2410 msgid "0 Players Ready" msgstr "" #: glade/fics_lounge.glade:2452 msgid "Challenge" msgstr "" #: glade/fics_lounge.glade:2506 glade/fics_lounge.glade:2681 msgid "Observe" msgstr "" #: glade/fics_lounge.glade:2560 msgid "Start Private Chat" msgstr "" #: glade/fics_lounge.glade:2615 msgid "_Player List" msgstr "" #: glade/fics_lounge.glade:2736 msgid "_Game List" msgstr "" #: glade/fics_lounge.glade:2792 glade/PyChess.glade:2998 msgid "Offer _Resume" msgstr "" #: glade/fics_lounge.glade:2851 glade/PyChess.glade:3037 msgid "R_esign" msgstr "" #: glade/fics_lounge.glade:2896 glade/PyChess.glade:2978 msgid "Offer _Draw" msgstr "Đề nghị _Hòa" #: glade/fics_lounge.glade:2941 msgid "Offer A_bort" msgstr "" #: glade/fics_lounge.glade:2999 msgid "Pre_view" msgstr "" #: glade/fics_lounge.glade:3055 msgid "_Adjourned" msgstr "" #: glade/fics_lounge.glade:3160 msgid "News" msgstr "Tin tức" #: glade/fics_lounge.glade:3192 msgid "Show _Chat" msgstr "" #: glade/fics_lounge.glade:3208 msgid "Show Console" msgstr "" #: glade/fics_lounge.glade:3223 msgid "_Log Off" msgstr "" #: glade/fics_lounge.glade:3244 msgid "Tools" msgstr "Công cụ" #: glade/findbar.glade:7 msgid "window1" msgstr "" #: glade/findbar.glade:23 msgid "0 of 0" msgstr "" #: glade/findbar.glade:73 msgid "_Previous" msgstr "" #: glade/findbar.glade:132 msgid "_Next" msgstr "" #: glade/findbar.glade:161 msgid "Search:" msgstr "" #: glade/newInOut.glade:34 lib/pychess/widgets/newGameDialog.py:385 msgid "New Game" msgstr "Ván mới" #: glade/newInOut.glade:99 msgid "_Start Game" msgstr "_Bắt đầu ván cờ" #: glade/newInOut.glade:208 msgid "_Black player:" msgstr "" #: glade/newInOut.glade:225 msgid "_White player:" msgstr "" #: glade/newInOut.glade:336 msgid "Players" msgstr "Người chơi" #: glade/newInOut.glade:387 msgid "_Untimed" msgstr "" #: glade/newInOut.glade:426 msgid "Blitz:\t5 min" msgstr "" #: glade/newInOut.glade:477 msgid "Rapid:\t15 min + 10 sec/move" msgstr "" #: glade/newInOut.glade:526 msgid "Normal:\t40 min + 15 sec/move" msgstr "" #: glade/newInOut.glade:635 msgid "_Play Normal chess" msgstr "" #: glade/newInOut.glade:675 msgid "Play Fischer Random chess" msgstr "" #: glade/newInOut.glade:725 msgid "Play Losers chess" msgstr "" #: glade/newInOut.glade:869 msgid "Open Game" msgstr "" #: glade/newInOut.glade:1116 msgid "Initial Position" msgstr "" #: glade/newInOut.glade:1175 msgid "Enter Game Notation" msgstr "" #: glade/promotion.glade:8 msgid "Promotion" msgstr "Phong cấp" #: glade/promotion.glade:50 lib/pychess/Utils/repr.py:10 msgid "Queen" msgstr "Hậu" #: glade/promotion.glade:97 lib/pychess/Utils/repr.py:10 msgid "Rook" msgstr "Xe" #: glade/promotion.glade:143 lib/pychess/Utils/repr.py:10 msgid "Bishop" msgstr "Tượng" #: glade/promotion.glade:189 lib/pychess/Utils/repr.py:10 msgid "Knight" msgstr "Mã" #: glade/promotion.glade:221 msgid "Promote pawn to what?" msgstr "Phong cấp Tốt thành quân gì?" #: glade/PyChess.glade:10 msgid "Chess client for the Gnome desktop" msgstr "" #: glade/PyChess.glade:13 msgid "" "PyChess is free software; you can redistribute it and/or modify \n" "it under the terms of the GNU General Public License as published by \n" "the Free Software Foundation; either version 2 of the License, or \n" "(at your option) any later version.\n" "\n" "PyChess is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied warranty of \n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" "GNU General Public License for more details.\n" "\n" "You should have received a copy of the GNU General Public License \n" "along with PyChess; if not, write to the Free Software Foundation, Inc., \n" "51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA" msgstr "" #: glade/PyChess.glade:57 msgid "Game information" msgstr "Thông tin về ván cờ" #: glade/PyChess.glade:179 msgid "Event:" msgstr "Giải đấu:" #: glade/PyChess.glade:193 msgid "Site:" msgstr "Địa chỉ mạng:" #: glade/PyChess.glade:221 msgid "Round:" msgstr "Vòng:" #: glade/PyChess.glade:265 msgid "Game data" msgstr "Dữ liệu ván cờ" #: glade/PyChess.glade:320 msgid "Date of game" msgstr "Ngày diễn ra" #: glade/PyChess.glade:506 msgid "Manage engines" msgstr "" #: glade/PyChess.glade:602 msgid "Name:" msgstr "" #: glade/PyChess.glade:614 msgid "Command:" msgstr "" #: glade/PyChess.glade:628 msgid "Protocol:" msgstr "" #: glade/PyChess.glade:642 msgid "Parameters:" msgstr "" #: glade/PyChess.glade:655 msgid "Command line parameters needed by the engine." msgstr "" #: glade/PyChess.glade:679 msgid "Unique name of the engine used in player popup lists." msgstr "" #: glade/PyChess.glade:699 msgid "Full path to the engine binary or starting script." msgstr "" #: glade/PyChess.glade:724 msgid "" "Engines use uci or xboard communication protocol to talk to the GUI.\n" "If it can use both you can set here which one you like." msgstr "" #: glade/PyChess.glade:750 msgid "Working directory:" msgstr "" #: glade/PyChess.glade:763 msgid "The directory where the engine will be started from." msgstr "" #: glade/PyChess.glade:894 msgid "Preferences" msgstr "Tùy chọn" #: glade/PyChess.glade:932 msgid "The displayed name of the first human player, e.g., John." msgstr "" #: glade/PyChess.glade:946 msgid "Name of _first human player:" msgstr "" #: glade/PyChess.glade:975 msgid "The displayed name of the guest player, e.g., Mary." msgstr "" #: glade/PyChess.glade:989 msgid "Name of s_econd human player:" msgstr "" #: glade/PyChess.glade:1025 msgid "_Hide tabs when only one game is open" msgstr "Ẩ_n tab khi chỉ mở một ván cờ" #: glade/PyChess.glade:1030 msgid "" "If set, this hides the tab in the top of the playing window, when it is not " "needed." msgstr "" #: glade/PyChess.glade:1042 msgid "Auto _rotate board to current human player" msgstr "" #: glade/PyChess.glade:1047 msgid "" "If set, the board will turn after each move, to show the natural view for " "the current player." msgstr "" #: glade/PyChess.glade:1060 msgid "Face _to Face display mode" msgstr "" #: glade/PyChess.glade:1065 msgid "" "If set, the black pieces will be head down, suitable for playing against " "friends on mobile devices." msgstr "" #: glade/PyChess.glade:1077 msgid "Sho_w cords" msgstr "" #: glade/PyChess.glade:1082 msgid "" "If set, the playing board will display labels and ranks for each chess " "field. These are usable in chess notation." msgstr "" #: glade/PyChess.glade:1094 msgid "Show _captured pieces" msgstr "" #: glade/PyChess.glade:1099 msgid "If set, the captured figurines will be shown next to the board." msgstr "" #: glade/PyChess.glade:1111 msgid "Prefer figures in _notation" msgstr "" #: glade/PyChess.glade:1116 msgid "" "If set, PyChess will use figures to express moved pieces, rather than " "uppercase letters." msgstr "" #: glade/PyChess.glade:1144 msgid "General Display Options" msgstr "Các tùy chọn hiển thị chung" #: glade/PyChess.glade:1178 msgid "F_ull board animation" msgstr "" #: glade/PyChess.glade:1183 msgid "Animate pieces, board rotation and more. Use this on fast machines." msgstr "" #: glade/PyChess.glade:1196 msgid "Only animate _moves" msgstr "" #: glade/PyChess.glade:1201 msgid "Only animate piece moves." msgstr "" #: glade/PyChess.glade:1214 msgid "No _animation" msgstr "" #: glade/PyChess.glade:1219 msgid "Never use animation. Use this on slow machines." msgstr "" #: glade/PyChess.glade:1245 msgid "Animation" msgstr "Hình động" #: glade/PyChess.glade:1264 msgid "_General" msgstr "" #: glade/PyChess.glade:1305 msgid "Use opening _book" msgstr "" #: glade/PyChess.glade:1310 msgid "If set, PyChess will suggest best opening moves on hint panel." msgstr "" #: glade/PyChess.glade:1335 msgid "Polyglot book file:" msgstr "" #: glade/PyChess.glade:1379 msgid "Use _local tablebases" msgstr "" #: glade/PyChess.glade:1384 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "You can download tablebase files from:\n" "http://www.olympuschess.com/egtb/gaviota/" msgstr "" #: glade/PyChess.glade:1412 msgid "Gaviota TB path:" msgstr "" #: glade/PyChess.glade:1452 msgid "Use _online tablebases" msgstr "" #: glade/PyChess.glade:1457 msgid "" "If set, PyChess will show game results for different moves in positions containing 6 or less pieces.\n" "It will search positions from http://www.k4it.de/" msgstr "" #: glade/PyChess.glade:1477 msgid "Opening, endgame" msgstr "" #: glade/PyChess.glade:1511 msgid "Use _analyzer" msgstr "Dùng công cụ _phân tích" #: glade/PyChess.glade:1551 msgid "" "The analyzer will run in the background and analyze the game. This is " "necessary for the hint mode to work" msgstr "" #: glade/PyChess.glade:1583 msgid "Use _inverted analyzer" msgstr "Dùng công cụ phân tích _ngược" #: glade/PyChess.glade:1623 msgid "" "The inverse analyzer will analyze the game as if your opponent was to move. " "This is necessary for the spy mode to work" msgstr "" #: glade/PyChess.glade:1657 msgid "Analyzing" msgstr "Đang phân tích" #: glade/PyChess.glade:1679 msgid "_Hints" msgstr "" #: glade/PyChess.glade:1823 msgid "Uninstall" msgstr "" #: glade/PyChess.glade:1877 msgid "Ac_tive" msgstr "" #: glade/PyChess.glade:1928 msgid "Installed Sidepanels" msgstr "" #: glade/PyChess.glade:1943 msgid "Side_panels" msgstr "" #: glade/PyChess.glade:1993 msgid "Themes" msgstr "" #: glade/PyChess.glade:2018 msgid "_Use sounds in PyChess" msgstr "_Bật âm thanh trong PyChess" #: glade/PyChess.glade:2336 msgid "A player _checks:" msgstr "Một người chơi _chiếu vua:" #: glade/PyChess.glade:2351 msgid "A player _moves:" msgstr "Một người chơi _thực hiện nước đi:" #: glade/PyChess.glade:2364 msgid "Game is _drawn:" msgstr "_Hòa cờ:" #: glade/PyChess.glade:2379 msgid "Game is _lost:" msgstr "_Thua cờ:" #: glade/PyChess.glade:2394 msgid "Game is _won:" msgstr "_Thắng cờ:" #: glade/PyChess.glade:2409 msgid "A player c_aptures:" msgstr "Một người chơi ă_n quân:" #: glade/PyChess.glade:2438 msgid "Game is _set-up:" msgstr "Ván cờ được _bày ra:" #: glade/PyChess.glade:2490 msgid "_Observed moves:" msgstr "Các nước đã _quan sát:" #: glade/PyChess.glade:2505 msgid "Observed _ends:" msgstr "_Kết thúc quan sát" #: glade/PyChess.glade:2610 msgid "Play Sound When..." msgstr "Phát Âm Thanh Khi..." #: glade/PyChess.glade:2632 msgid "_Sounds" msgstr "" #: glade/PyChess.glade:2707 msgid "_Game" msgstr "_Ván" #: glade/PyChess.glade:2714 msgid "_New Game" msgstr "_Chơi ván mới" #: glade/PyChess.glade:2727 msgid "Play _Internet Chess" msgstr "" #: glade/PyChess.glade:2746 msgid "_Load Game" msgstr "_Tải ván cờ" #: glade/PyChess.glade:2762 msgid "Load _Recent Game" msgstr "" #: glade/PyChess.glade:2770 msgid "Open _Database" msgstr "" #: glade/PyChess.glade:2780 msgid "Setup Position" msgstr "" #: glade/PyChess.glade:2790 msgid "Enter Game _Notation" msgstr "" #: glade/PyChess.glade:2803 msgid "_Save Game" msgstr "_Lưu lại ván cờ" #: glade/PyChess.glade:2817 msgid "Save Game _As" msgstr "Lưu lại ván với _Tên" #: glade/PyChess.glade:2831 msgid "_Export Position" msgstr "" #: glade/PyChess.glade:2866 msgid "Player _Rating" msgstr "Điểm của người chơi" #: glade/PyChess.glade:2911 msgid "_Edit" msgstr "" #: glade/PyChess.glade:2921 msgid "_Engines" msgstr "" #: glade/PyChess.glade:2947 msgid "_Actions" msgstr "" #: glade/PyChess.glade:2958 msgid "Offer _Abort" msgstr "" #: glade/PyChess.glade:2968 msgid "Offer Ad_journment" msgstr "" #: glade/PyChess.glade:2988 msgid "Offer _Pause" msgstr "" #: glade/PyChess.glade:3004 msgid "Offer _Undo" msgstr "" #: glade/PyChess.glade:3027 msgid "_Call Flag" msgstr "" #: glade/PyChess.glade:3047 msgid "Ask to _Move" msgstr "" #: glade/PyChess.glade:3062 msgid "Auto call _flag" msgstr "" #: glade/PyChess.glade:3074 msgid "_View" msgstr "_Xem" #: glade/PyChess.glade:3081 msgid "_Rotate Board" msgstr "_Xoay bàn cờ" #: glade/PyChess.glade:3095 msgid "_Fullscreen" msgstr "" #: glade/PyChess.glade:3108 msgid "Leave _Fullscreen" msgstr "" #: glade/PyChess.glade:3124 msgid "_Show Sidepanels" msgstr "" #: glade/PyChess.glade:3135 msgid "_Log Viewer" msgstr "Xem _nhật trình" #: glade/PyChess.glade:3152 msgid "_Hint mode" msgstr "Chế độ _gợi ý" #: glade/PyChess.glade:3164 msgid "Sp_y mode" msgstr "Chế độ _gián điệp" #: glade/PyChess.glade:3179 msgid "_Help" msgstr "_Trợ giúp" #: glade/PyChess.glade:3189 msgid "About Chess" msgstr "Giới thiệu Chess" #: glade/PyChess.glade:3198 msgid "How to Play" msgstr "" #: glade/PyChess.glade:3207 msgid "Translate PyChess" msgstr "" #: glade/PyChess.glade:3213 msgid "Tip of the Day" msgstr "" #: glade/saveGamesDialog.glade:8 msgid "Quit PyChess" msgstr "" #: glade/saveGamesDialog.glade:25 lib/pychess/widgets/ionest.py:377 msgid "Close _without Saving" msgstr "Đóng mà _không lưu" #: glade/saveGamesDialog.glade:87 msgid "_Save %d documents" msgstr "" #: glade/saveGamesDialog.glade:145 msgid "" "There are %d games with unsaved moves. Save changes before " "closing?" msgstr "" #: glade/saveGamesDialog.glade:165 msgid "Select the games you want to save:" msgstr "" #: glade/saveGamesDialog.glade:207 msgid "If you don't save, new changes to your games will be permanently lost." msgstr "" #: glade/taskers.glade:128 msgid "_Opponent:" msgstr "" #: glade/taskers.glade:156 msgid "_Your Color:" msgstr "" #: glade/taskers.glade:222 msgid "_Start Game" msgstr "" #: glade/taskers.glade:342 msgid "Log on as G_uest" msgstr "" #: glade/taskers.glade:418 msgid "Ha_ndle:" msgstr "" #: glade/taskers.glade:478 msgid "_Connect to FICS" msgstr "" #: glade/tipoftheday.glade:8 msgid "Tip Of The day" msgstr "" #: glade/tipoftheday.glade:64 msgid "Show tips at startup" msgstr "" #: lib/pychess/Main.py:222 msgid "http://en.wikipedia.org/wiki/Chess" msgstr "http://en.wikipedia.org/wiki/Chess" #: lib/pychess/Main.py:225 msgid "http://en.wikipedia.org/wiki/Rules_of_chess" msgstr "http://en.wikipedia.org/wiki/Rules_of_chess" #: lib/pychess/Main.py:286 lib/pychess/widgets/gamenanny.py:70 msgid "Welcome" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "Id" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "W Elo" msgstr "" #: lib/pychess/Database/gamelist.py:40 msgid "B Elo" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Result" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Event" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Site" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Round" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "Date" msgstr "" #: lib/pychess/Database/gamelist.py:41 msgid "ECO" msgstr "" #: lib/pychess/Database/gamelist.py:62 msgid "PyChess Game Database" msgstr "" #: lib/pychess/Database/PgnImport.py:184 #, python-format msgid "The game #%s can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/ic/FICSConnection.py:109 msgid "The connection was broken - got \"end of file\" message" msgstr "Kết nối bị ngắt - nhận được thông báo \"kết thúc file\"" #: lib/pychess/ic/FICSConnection.py:110 #, python-format msgid "'%s' is not a registered name" msgstr "'%s' không phải là tên đã đăng kí" #: lib/pychess/ic/FICSConnection.py:111 msgid "The entered password was invalid.\n" msgstr "" #: lib/pychess/ic/FICSConnection.py:130 msgid "Connecting to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:142 msgid "Logging on to server" msgstr "" #: lib/pychess/ic/FICSConnection.py:181 msgid "Setting up environment" msgstr "" #: lib/pychess/ic/FICSObjects.py:63 msgid "Online" msgstr "" #: lib/pychess/ic/FICSObjects.py:64 msgid "Offline" msgstr "" #: lib/pychess/ic/FICSObjects.py:80 msgid "Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:82 msgid "Playing" msgstr "" #: lib/pychess/ic/FICSObjects.py:87 msgid "Idle" msgstr "" #: lib/pychess/ic/FICSObjects.py:89 msgid "Examining" msgstr "" #: lib/pychess/ic/FICSObjects.py:91 msgid "Not Available" msgstr "" #: lib/pychess/ic/FICSObjects.py:93 msgid "Running Simul Match" msgstr "" #: lib/pychess/ic/FICSObjects.py:95 msgid "In Tournament" msgstr "" #: lib/pychess/ic/FICSObjects.py:239 lib/pychess/ic/FICSObjects.py:501 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:746 lib/pychess/ic/ICLounge.py:750 #: lib/pychess/ic/ICLounge.py:1759 msgid "Unrated" msgstr "Không được tính điểm" #: lib/pychess/ic/FICSObjects.py:500 lib/pychess/ic/ICLounge.py:452 #: lib/pychess/ic/ICLounge.py:531 lib/pychess/ic/ICLounge.py:573 #: lib/pychess/ic/ICLounge.py:750 lib/pychess/ic/ICLounge.py:1594 msgid "Rated" msgstr "Điểm" #: lib/pychess/ic/FICSObjects.py:510 msgid "Private" msgstr "" #: lib/pychess/ic/FICSObjects.py:517 lib/pychess/ic/ICLounge.py:1579 #, python-format msgid "%d min" msgstr "" #: lib/pychess/ic/FICSObjects.py:519 #, python-format msgid " + %d sec" msgstr "" #: lib/pychess/ic/ICLogon.py:111 lib/pychess/ic/ICLogon.py:117 msgid "Connection Error" msgstr "Lỗi kết nối" #: lib/pychess/ic/ICLogon.py:113 msgid "Log on Error" msgstr "Lỗi Đăng nhập" #: lib/pychess/ic/ICLogon.py:115 msgid "Connection was closed" msgstr "Kết nối bị dừng" #: lib/pychess/ic/ICLogon.py:121 msgid "Address Error" msgstr "" #: lib/pychess/ic/ICLogon.py:124 msgid "Auto-logout" msgstr "" #: lib/pychess/ic/ICLogon.py:125 msgid "You have been logged out because you were idle more than 60 minutes" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:306 msgid "Win" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:300 msgid "Draw" msgstr "" #: lib/pychess/ic/ICLounge.py:256 sidepanel/bookPanel.py:303 msgid "Loss" msgstr "" #: lib/pychess/ic/ICLounge.py:266 msgid "" "On FICS, your \"Wild\" rating encompasses all of the following variants at " "all time controls:\n" msgstr "" #: lib/pychess/ic/ICLounge.py:278 msgid "Sanctions" msgstr "" #: lib/pychess/ic/ICLounge.py:283 msgid "Email" msgstr "thư điện tử" #: lib/pychess/ic/ICLounge.py:288 msgid "Spent" msgstr "" #: lib/pychess/ic/ICLounge.py:290 msgid "online in total" msgstr "trực tuyến trong tổng số" #: lib/pychess/ic/ICLounge.py:294 msgid "Ping" msgstr "Ping" #: lib/pychess/ic/ICLounge.py:295 msgid "Connecting" msgstr "Đang kết nối" #: lib/pychess/ic/ICLounge.py:302 lib/pychess/Savers/epd.py:132 msgid "Unknown" msgstr "Không rõ" #: lib/pychess/ic/ICLounge.py:313 msgid "" "You are currently logged in as a guest.\n" "A guest is not able to play rated games, and thus the offer of games will be smaller." msgstr "" #: lib/pychess/ic/ICLounge.py:318 msgid "Register now" msgstr "Đăng ký ngay" #: lib/pychess/ic/ICLounge.py:451 lib/pychess/ic/ICLounge.py:808 msgid "Name" msgstr "Tên" #: lib/pychess/ic/ICLounge.py:452 msgid "Type" msgstr "Loại" #: lib/pychess/ic/ICLounge.py:452 msgid "Clock" msgstr "Đồng hồ" #: lib/pychess/ic/ICLounge.py:525 #, python-format msgid "Active seeks: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:528 lib/pychess/ic/ICLounge.py:570 #, python-format msgid "%(min)s min" msgstr "" #: lib/pychess/ic/ICLounge.py:530 lib/pychess/ic/ICLounge.py:572 #, python-format msgid " + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:585 #, python-format msgid " would like to resume your adjourned %(time)s " msgstr "" #: lib/pychess/ic/ICLounge.py:588 #, python-format msgid "" " challenges you to a %(time)s %(rated)s %(gametype)s game." msgstr "" #: lib/pychess/ic/ICLounge.py:598 msgid "Accept Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:600 msgid "Decline Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:602 msgid "Ignore Challenge" msgstr "" #: lib/pychess/ic/ICLounge.py:715 msgid " min" msgstr "" #: lib/pychess/ic/ICLounge.py:752 #, python-format msgid "%(min)s min + %(sec)s sec" msgstr "" #: lib/pychess/ic/ICLounge.py:755 msgid "Opponent Rating" msgstr "" #: lib/pychess/ic/ICLounge.py:757 msgid "Manual Accept" msgstr "" #: lib/pychess/ic/ICLounge.py:808 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:58 lib/pychess/widgets/newGameDialog.py:151 msgid "Blitz" msgstr "" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/ICLounge.py:1690 #: lib/pychess/ic/__init__.py:60 msgid "Lightning" msgstr "Cờ chớp" #: lib/pychess/ic/ICLounge.py:809 lib/pychess/ic/__init__.py:87 msgid "Wild" msgstr "" #: lib/pychess/ic/ICLounge.py:809 msgid "Status" msgstr "" #: lib/pychess/ic/ICLounge.py:852 lib/pychess/ic/ICLounge.py:875 #, python-format msgid "Players: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:981 msgid "White Player" msgstr "" #: lib/pychess/ic/ICLounge.py:982 msgid "Black Player" msgstr "Bên Đen" #: lib/pychess/ic/ICLounge.py:983 lib/pychess/ic/ICLounge.py:1113 msgid "Game Type" msgstr "Kiểu ván đấu" #: lib/pychess/ic/ICLounge.py:1032 #, python-format msgid "Games running: %d" msgstr "" #: lib/pychess/ic/ICLounge.py:1112 msgid "Your Color" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Opponent" msgstr "Đối phương" #: lib/pychess/ic/ICLounge.py:1113 msgid "Is Online" msgstr "" #: lib/pychess/ic/ICLounge.py:1113 msgid "Time Control" msgstr "" #: lib/pychess/ic/ICLounge.py:1114 msgid "Date/Time" msgstr "" #: lib/pychess/ic/ICLounge.py:1157 #, python-format msgid "%(player)s is %(status)s" msgstr "" #: lib/pychess/ic/ICLounge.py:1162 #, python-format msgid "" " with whom you have an adjourned %(timecontrol)s %(gametype)s " msgstr "" #: lib/pychess/ic/ICLounge.py:1175 msgid "Request Continuation" msgstr "" #: lib/pychess/ic/ICLounge.py:1177 msgid "Examine Adjourned Game" msgstr "" #: lib/pychess/ic/ICLounge.py:1179 msgid "Do Nothing" msgstr "" #: lib/pychess/ic/ICLounge.py:1436 msgid "" "The chain button is disabled because you are logged in as a guest. Guests " "can't establish ratings, and the chain button's state has no effect when " "there is no rating to which to tie \"Opponent Strength\" to" msgstr "" #: lib/pychess/ic/ICLounge.py:1469 msgid "Challenge: " msgstr "" #: lib/pychess/ic/ICLounge.py:1511 lib/pychess/ic/ICLounge.py:1514 msgid "This option is not applicable because you're challenging a player" msgstr "" #: lib/pychess/ic/ICLounge.py:1527 msgid "Edit Seek: " msgstr "" #: lib/pychess/ic/ICLounge.py:1576 #, python-format msgid "%(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/ic/ICLounge.py:1597 msgid "Manual" msgstr "" #: lib/pychess/ic/ICLounge.py:1737 msgid "Any strength" msgstr "" #: lib/pychess/ic/ICLounge.py:1789 msgid "You can't play rated games because you are logged in as a guest" msgstr "" #: lib/pychess/ic/ICLounge.py:1793 msgid "You can't play rated games because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1794 msgid "and on FICS, untimed games can't be rated" msgstr "" #: lib/pychess/ic/ICLounge.py:1798 msgid "This option is not available because you're challenging a guest, " msgstr "" #: lib/pychess/ic/ICLounge.py:1799 msgid "and guests can't play rated games" msgstr "" #: lib/pychess/ic/ICLounge.py:1813 lib/pychess/Variants/shuffle.py:31 #: lib/pychess/widgets/newGameDialog.py:259 msgid "Shuffle" msgstr "" #: lib/pychess/ic/ICLounge.py:1814 lib/pychess/ic/__init__.py:63 #: lib/pychess/widgets/newGameDialog.py:260 msgid "Other" msgstr "" #: lib/pychess/ic/ICLounge.py:1897 msgid "You can't select a variant because \"Untimed\" is checked, " msgstr "" #: lib/pychess/ic/ICLounge.py:1898 msgid "and on FICS, untimed games have to be normal chess rules" msgstr "" #: lib/pychess/ic/ICLounge.py:1932 msgid "Change Tolerance" msgstr "" #: lib/pychess/ic/ICLounge.py:1984 msgid "" "You may only have 3 outstanding seeks at the same time. If you want to add a" " new seek you must clear your currently active seeks. Clear your seeks?" msgstr "" #: lib/pychess/ic/ICLounge.py:2005 msgid " has declined your offer for a match." msgstr "" #: lib/pychess/ic/__init__.py:62 msgid "Examined" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Administrator" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Blindfold Account" msgstr "" #: lib/pychess/ic/__init__.py:140 msgid "Computer Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Team Account" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Unregistered User" msgstr "" #: lib/pychess/ic/__init__.py:141 msgid "Chess Advisor" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Service Representative" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Tournament Director" msgstr "" #: lib/pychess/ic/__init__.py:142 msgid "Mamer Manager" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "International Master" msgstr "" #: lib/pychess/ic/__init__.py:143 msgid "FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman Grand Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman International Master" msgstr "" #: lib/pychess/ic/__init__.py:144 msgid "Woman FIDE Master" msgstr "" #: lib/pychess/ic/__init__.py:145 msgid "Dummy Account" msgstr "" #: lib/pychess/ic/__init__.py:149 msgid "*" msgstr "" #: lib/pychess/ic/__init__.py:149 lib/pychess/Utils/repr.py:12 msgid "B" msgstr "T" #: lib/pychess/ic/__init__.py:149 msgid "C" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "T" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "U" msgstr "" #: lib/pychess/ic/__init__.py:150 msgid "CA" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "SR" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TD" msgstr "" #: lib/pychess/ic/__init__.py:151 msgid "TM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "GM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "IM" msgstr "" #: lib/pychess/ic/__init__.py:152 msgid "FM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WGM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WIM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "WFM" msgstr "" #: lib/pychess/ic/__init__.py:153 msgid "D" msgstr "" #: lib/pychess/Players/CECPEngine.py:876 #, python-format msgid "The engine %s reports an error:" msgstr "" #: lib/pychess/Players/Human.py:14 msgid "Your opponent has offered you a draw. Accept?" msgstr "" #: lib/pychess/Players/Human.py:15 msgid "" "Your opponent has offered you a draw. If you accept this offer, the game " "will end with a score of 1/2 - 1/2." msgstr "" #: lib/pychess/Players/Human.py:17 msgid "Your opponent wants to abort the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:18 msgid "" "Your opponent has asked that the game be aborted. If you accept this offer, " "the game will end with no rating change." msgstr "" #: lib/pychess/Players/Human.py:20 msgid "Your opponent wants to adjourn the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:21 msgid "" "Your opponent has asked that the game be adjourned. If you accept this " "offer, the game will be adjourned and you can resume it later (when your " "opponent is online and both players agree to resume)." msgstr "" #: lib/pychess/Players/Human.py:23 #, python-format msgid "Your opponent wants to undo %s move(s). Accept?" msgstr "" #: lib/pychess/Players/Human.py:24 #, python-format msgid "" "Your opponent has asked that the last %s move(s) be undone. If you accept " "this offer, the game will continue from the earlier position." msgstr "" #: lib/pychess/Players/Human.py:26 msgid "Your opponent wants to pause the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:27 msgid "" "Your opponent has asked that the game be paused. If you accept this offer, " "the game clock will be paused until both players agree to resume the game." msgstr "" #: lib/pychess/Players/Human.py:29 msgid "Your opponent wants to resume the game. Accept?" msgstr "" #: lib/pychess/Players/Human.py:30 msgid "" "Your opponent has asked that the game be resumed. If you accept this offer, " "the game clock will continue from where it was paused." msgstr "" #: lib/pychess/Players/Human.py:34 msgid "The resignation" msgstr "" #: lib/pychess/Players/Human.py:35 msgid "The flag call" msgstr "" #: lib/pychess/Players/Human.py:36 msgid "The draw offer" msgstr "" #: lib/pychess/Players/Human.py:37 msgid "The abort offer" msgstr "" #: lib/pychess/Players/Human.py:38 msgid "The adjourn offer" msgstr "" #: lib/pychess/Players/Human.py:39 msgid "The pause offer" msgstr "" #: lib/pychess/Players/Human.py:40 msgid "The resume offer" msgstr "" #: lib/pychess/Players/Human.py:41 msgid "The offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:42 msgid "The takeback offer" msgstr "" #: lib/pychess/Players/Human.py:46 msgid "resign" msgstr "" #: lib/pychess/Players/Human.py:47 msgid "call your opponents flag" msgstr "" #: lib/pychess/Players/Human.py:48 msgid "offer a draw" msgstr "" #: lib/pychess/Players/Human.py:49 msgid "offer an abort" msgstr "" #: lib/pychess/Players/Human.py:50 msgid "offer to adjourn" msgstr "" #: lib/pychess/Players/Human.py:51 msgid "offer a pause" msgstr "" #: lib/pychess/Players/Human.py:52 msgid "offer to resume" msgstr "" #: lib/pychess/Players/Human.py:53 msgid "offer to switch sides" msgstr "" #: lib/pychess/Players/Human.py:54 msgid "offer a takeback" msgstr "" #: lib/pychess/Players/Human.py:55 msgid "ask your opponent to move" msgstr "" #: lib/pychess/Players/Human.py:60 msgid "Your opponent is not out of time." msgstr "Đối phương chưa hết giờ." #: lib/pychess/Players/Human.py:62 msgid "The clock hasn't been started yet." msgstr "" #: lib/pychess/Players/Human.py:64 msgid "You can't switch colors during the game." msgstr "" #: lib/pychess/Players/Human.py:66 msgid "You have tried to undo too many moves." msgstr "" #: lib/pychess/Players/Human.py:165 msgid "Your opponent asks you to hurry!" msgstr "Đối thủ giục bạn khẩn trương!" #: lib/pychess/Players/Human.py:166 msgid "" "Generally this means nothing, as the game is timebased, but if you want to " "please your opponent, perhaps you should get going." msgstr "" #: lib/pychess/Players/Human.py:228 #, python-format msgid "%s was declined by your opponent" msgstr "Đối phương từ chối %s" #: lib/pychess/Players/Human.py:229 msgid "" "You can try to send the offer to your opponent later in the game again." msgstr "Bạn có thể thử gửi lại đối phương lời đề nghị vào một thời điểm khác trong ván đấu." #: lib/pychess/Players/Human.py:236 #, python-format msgid "%s was withdrawn by your opponent" msgstr "Đối phương rút lại %s" #: lib/pychess/Players/Human.py:237 msgid "Your opponent seems to have changed his or her mind." msgstr "" #: lib/pychess/Players/Human.py:246 #, python-format msgid "Unable to accept %s" msgstr "" #: lib/pychess/Players/Human.py:247 #, python-format msgid "" "PyChess was unable to get the %s offer accepted. Probably because it has " "been withdrawn." msgstr "" #: lib/pychess/Players/Human.py:254 #, python-format msgid "%s returns an error" msgstr "" #: lib/pychess/Savers/chessalpha2.py:16 msgid "Chess Alpha 2 Diagram" msgstr "" #: lib/pychess/Savers/chessalpha2.py:138 #, python-format msgid "Couldn't load the diagram '%s'" msgstr "" #: lib/pychess/Savers/database.py:16 msgid "PyChess database" msgstr "" #: lib/pychess/Savers/epd.py:7 msgid "Chess Position" msgstr "Thế cờ" #: lib/pychess/Savers/fen.py:5 msgid "Simple Chess Position" msgstr "Thế cờ đơn giản" #: lib/pychess/Savers/pgnbase.py:98 #, python-format msgid "" "The game can't be read to end, because of an error parsing move %(moveno)s " "'%(notation)s'." msgstr "" #: lib/pychess/Savers/pgnbase.py:100 #, python-format msgid "The move failed because %s." msgstr "" #: lib/pychess/Savers/pgnbase.py:108 #, python-format msgid "Error parsing move %(moveno)s %(mstr)s" msgstr "" #: lib/pychess/Savers/pgn.py:21 msgid "Chess Game" msgstr "Ván cờ" #: lib/pychess/Savers/pgn.py:263 msgid "The game can't be loaded, because of an error parsing FEN" msgstr "" #: lib/pychess/Savers/png.py:31 msgid "Export position" msgstr "" #: lib/pychess/Savers/png.py:36 lib/pychess/widgets/ionest.py:213 #: lib/pychess/widgets/ionest.py:328 msgid "vs." msgstr "" #: lib/pychess/Savers/png.py:39 msgid "All files" msgstr "" #: lib/pychess/Savers/png.py:44 msgid "Images" msgstr "" #: lib/pychess/Savers/png.py:62 lib/pychess/widgets/ionest.py:255 msgid "_Replace" msgstr "_Thay thế" #: lib/pychess/Savers/png.py:65 lib/pychess/widgets/ionest.py:259 msgid "File exists" msgstr "Tập tin đã tồn tại" #: lib/pychess/Savers/png.py:67 lib/pychess/widgets/ionest.py:261 #, python-format msgid "" "A file named '%s' already exists. Would you like to replace " "it?" msgstr "Một tập tin có tên '%s' đã tồn tại. Bạn có muốn thay thế nó không?" #: lib/pychess/Savers/png.py:68 lib/pychess/widgets/ionest.py:262 #, python-format msgid "" "The file already exists in '%s'. If you replace it, its content will be " "overwritten." msgstr "Tập tin đã tồn tại ở '%s'. Nếu bạn chọn thay thế, nội dung của nó sẽ bị ghi đè." #: lib/pychess/Savers/png.py:80 lib/pychess/widgets/ionest.py:277 msgid "Could not save the file" msgstr "Không thể lưu tập tin" #: lib/pychess/Savers/png.py:81 msgid "PyChess was not able to export the position" msgstr "" #: lib/pychess/Savers/png.py:82 lib/pychess/widgets/ionest.py:279 #, python-format msgid "The error was: %s" msgstr "Lỗi là: %s" #: lib/pychess/System/ping.py:27 msgid "Destination Host Unreachable" msgstr "" #: lib/pychess/System/ping.py:70 msgid "Died" msgstr "" #: lib/pychess/Utils/GameModel.py:126 msgid "Local Event" msgstr "Giải đấu địa phương" #: lib/pychess/Utils/GameModel.py:127 msgid "Local Site" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "Pawn" msgstr "" #: lib/pychess/Utils/repr.py:10 msgid "King" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "P" msgstr "" #: lib/pychess/Utils/repr.py:12 msgid "N" msgstr "M" #: lib/pychess/Utils/repr.py:12 msgid "R" msgstr "X" #: lib/pychess/Utils/repr.py:12 msgid "Q" msgstr "H" #: lib/pychess/Utils/repr.py:12 msgid "K" msgstr "V" #: lib/pychess/Utils/repr.py:15 msgid "The game ended in a draw" msgstr "Ván cờ kết thúc hoà" #: lib/pychess/Utils/repr.py:16 #, python-format msgid "%(white)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:17 #, python-format msgid "%(black)s won the game" msgstr "" #: lib/pychess/Utils/repr.py:18 msgid "The game has been killed" msgstr "" #: lib/pychess/Utils/repr.py:19 msgid "The game has been adjourned" msgstr "Ván cờ được hoãn lại" #: lib/pychess/Utils/repr.py:20 msgid "The game has been aborted" msgstr "Ván cờ đã bị huỷ bỏ" #: lib/pychess/Utils/repr.py:24 msgid "Because neither player has got sufficient material to mate" msgstr "" #: lib/pychess/Utils/repr.py:25 msgid "Because the same position was repeated three times in a row" msgstr "" #: lib/pychess/Utils/repr.py:26 msgid "Because the last 50 moves brought nothing new" msgstr "" #: lib/pychess/Utils/repr.py:27 msgid "Because both players ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:28 #, python-format msgid "Because %(mover)s stalemated" msgstr "" #: lib/pychess/Utils/repr.py:29 msgid "Because the players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:30 lib/pychess/Utils/repr.py:39 #: lib/pychess/Utils/repr.py:51 msgid "Because of adjudication by an admin" msgstr "" #: lib/pychess/Utils/repr.py:31 msgid "Because the game exceed the max length" msgstr "" #: lib/pychess/Utils/repr.py:32 #, python-format msgid "" "Because %(white)s ran out of time and %(black)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:33 #, python-format msgid "" "Because %(black)s ran out of time and %(white)s hasn't got insufficient " "material to mate" msgstr "" #: lib/pychess/Utils/repr.py:35 #, python-format msgid "Because %(loser)s resigned" msgstr "" #: lib/pychess/Utils/repr.py:36 #, python-format msgid "Because %(loser)s ran out of time" msgstr "" #: lib/pychess/Utils/repr.py:37 #, python-format msgid "Because %(loser)s has been checkmated" msgstr "" #: lib/pychess/Utils/repr.py:38 #, python-format msgid "Because %(loser)s disconnected" msgstr "" #: lib/pychess/Utils/repr.py:40 #, python-format msgid "Because %(loser)s lost all pieces but the king" msgstr "" #: lib/pychess/Utils/repr.py:42 msgid "Because a player lost connection" msgstr "" #: lib/pychess/Utils/repr.py:43 msgid "Because both players agreed to adjourn the game" msgstr "" #: lib/pychess/Utils/repr.py:44 lib/pychess/Utils/repr.py:55 msgid "Because the server was shut down" msgstr "" #: lib/pychess/Utils/repr.py:45 msgid "" "Because a player lost connection and the other player requested adjournment" msgstr "" #: lib/pychess/Utils/repr.py:46 #, python-format msgid "" "Because %(black)s lost connection to the server and %(white)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:47 #, python-format msgid "" "Because %(white)s lost connection to the server and %(black)s requested " "adjournment" msgstr "" #: lib/pychess/Utils/repr.py:48 #, python-format msgid "Because %(white)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:49 #, python-format msgid "Because %(black)s lost connection to the server" msgstr "" #: lib/pychess/Utils/repr.py:52 msgid "Because both players agreed to" msgstr "" #: lib/pychess/Utils/repr.py:53 msgid "Because of courtesy by a player" msgstr "" #: lib/pychess/Utils/repr.py:54 msgid "" "Because a player quit. No winner was found due to the early phase of the " "game" msgstr "" #: lib/pychess/Utils/repr.py:57 #, python-format msgid "Because the %(white)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:58 #, python-format msgid "Because the %(black)s engine died" msgstr "" #: lib/pychess/Utils/repr.py:59 msgid "Because the connection to the server was lost" msgstr "" #: lib/pychess/Utils/repr.py:60 msgid "The reason is unknown" msgstr "" #: lib/pychess/Utils/TimeModel.py:225 msgid "min" msgstr "" #: lib/pychess/Utils/TimeModel.py:227 msgid "sec" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:85 msgid "FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/asymmetricrandom.py:91 msgid "Asymmetric Random" msgstr "" #: lib/pychess/Variants/atomic.py:10 msgid "FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html" msgstr "" #: lib/pychess/Variants/atomic.py:11 msgid "Atomic" msgstr "" #: lib/pychess/Variants/blindfold.py:10 msgid "Classic chess rules with hidden figurines\n" msgstr "" #: lib/pychess/Variants/blindfold.py:12 #: lib/pychess/widgets/newGameDialog.py:257 msgid "Blindfold" msgstr "" #: lib/pychess/Variants/blindfold.py:25 msgid "Classic chess rules with hidden pawns\n" msgstr "" #: lib/pychess/Variants/blindfold.py:27 msgid "Hidden pawns" msgstr "" #: lib/pychess/Variants/blindfold.py:40 msgid "Classic chess rules with hidden pieces\n" msgstr "" #: lib/pychess/Variants/blindfold.py:42 msgid "Hidden pieces" msgstr "" #: lib/pychess/Variants/blindfold.py:55 msgid "Classic chess rules with all pieces white\n" msgstr "" #: lib/pychess/Variants/blindfold.py:57 msgid "All white" msgstr "" #: lib/pychess/Variants/bughouse.py:10 msgid "FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html" msgstr "" #: lib/pychess/Variants/bughouse.py:11 msgid "Bughouse" msgstr "" #: lib/pychess/Variants/corner.py:31 msgid "http://brainking.com/en/GameRules?tp=2\n" msgstr "" #: lib/pychess/Variants/corner.py:37 msgid "Corner" msgstr "" #: lib/pychess/Variants/crazyhouse.py:10 msgid "" "FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html" msgstr "" #: lib/pychess/Variants/crazyhouse.py:11 msgid "Crazyhouse" msgstr "" #: lib/pychess/Variants/fischerandom.py:218 msgid "http://en.wikipedia.org/wiki/Chess960\n" msgstr "" #: lib/pychess/Variants/fischerandom.py:220 msgid "Fischer Random" msgstr "" #: lib/pychess/Variants/knightodds.py:17 msgid "One player starts with one less knight piece" msgstr "" #: lib/pychess/Variants/knightodds.py:18 msgid "Knight odds" msgstr "" #: lib/pychess/Variants/losers.py:12 msgid "FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html" msgstr "" #: lib/pychess/Variants/losers.py:13 msgid "Losers" msgstr "" #: lib/pychess/Variants/normal.py:4 msgid "Classic chess rules\n" msgstr "" #: lib/pychess/Variants/normal.py:6 lib/pychess/widgets/newGameDialog.py:155 msgid "Normal" msgstr "Trung bình" #: lib/pychess/Variants/pawnodds.py:17 msgid "One player starts with one less pawn piece" msgstr "" #: lib/pychess/Variants/pawnodds.py:18 msgid "Pawn odds" msgstr "" #: lib/pychess/Variants/pawnspassed.py:20 msgid "FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspassed.py:22 msgid "Pawns Passed" msgstr "" #: lib/pychess/Variants/pawnspushed.py:19 msgid "FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/pawnspushed.py:21 msgid "Pawns Pushed" msgstr "" #: lib/pychess/Variants/queenodds.py:17 msgid "One player starts with one less queen piece" msgstr "" #: lib/pychess/Variants/queenodds.py:18 msgid "Queen odds" msgstr "" #: lib/pychess/Variants/randomchess.py:28 msgid "FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/randomchess.py:34 #: lib/pychess/widgets/TaskerManager.py:148 msgid "Random" msgstr "" #: lib/pychess/Variants/rookodds.py:17 msgid "One player starts with one less rook piece" msgstr "" #: lib/pychess/Variants/rookodds.py:18 msgid "Rook odds" msgstr "" #: lib/pychess/Variants/shuffle.py:26 msgid "xboard nocastle: http://tim-mann.org/xboard/engine-intf.html#8\n" msgstr "" #: lib/pychess/Variants/suicide.py:10 msgid "" "FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html" msgstr "" #: lib/pychess/Variants/suicide.py:11 msgid "Suicide" msgstr "" #: lib/pychess/Variants/upsidedown.py:18 msgid "FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" msgstr "" #: lib/pychess/Variants/upsidedown.py:21 msgid "Upside Down" msgstr "" #: lib/pychess/widgets/ChatWindow.py:193 msgid "You have opened no conversations yet" msgstr "" #: lib/pychess/widgets/ChatWindow.py:225 msgid "Only registered users may talk to this channel" msgstr "" #: lib/pychess/widgets/ChatWindow.py:281 msgid "No conversation's selected" msgstr "" #: lib/pychess/widgets/ChatWindow.py:318 msgid "Loading player data" msgstr "" #: lib/pychess/widgets/ChatWindow.py:372 msgid "Receiving list of players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:473 msgid "More channels" msgstr "" #: lib/pychess/widgets/ChatWindow.py:480 msgid "More players" msgstr "" #: lib/pychess/widgets/ChatWindow.py:595 msgid "Conversations" msgstr "" #: lib/pychess/widgets/ChatWindow.py:597 msgid "Conversation info" msgstr "" #: lib/pychess/widgets/enginesDialog.py:167 msgid "Select working directory" msgstr "" #: lib/pychess/widgets/enginesDialog.py:217 msgid "Select engine" msgstr "" #: lib/pychess/widgets/enginesDialog.py:222 msgid "Chess engines" msgstr "" #: lib/pychess/widgets/gamenanny.py:111 msgid "Offer Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:113 msgid "Play Rematch" msgstr "" #: lib/pychess/widgets/gamenanny.py:116 msgid "Undo one move" msgstr "" #: lib/pychess/widgets/gamenanny.py:118 msgid "Undo two moves" msgstr "" #: lib/pychess/widgets/gamenanny.py:159 msgid "The game is paused" msgstr "" #: lib/pychess/widgets/gamenanny.py:180 lib/pychess/widgets/gamenanny.py:181 msgid "Loaded game" msgstr "Ván đã được bày lại" #: lib/pychess/widgets/gamenanny.py:187 msgid "Saved game" msgstr "Ván đã được lưu" #: lib/pychess/widgets/gamenanny.py:191 msgid "Analyzer started" msgstr "" #: lib/pychess/widgets/gamenanny.py:240 msgid "You sent an abort offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:242 msgid "You sent an adjournment offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:244 msgid "You sent a draw offer" msgstr "Bạn đã gửi lời đề nghị hoà" #: lib/pychess/widgets/gamenanny.py:246 msgid "You sent a pause offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:248 msgid "You sent a resume offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:250 msgid "You sent an undo offer" msgstr "" #: lib/pychess/widgets/gamenanny.py:252 msgid "You asked your opponent to move" msgstr "" #: lib/pychess/widgets/gamenanny.py:264 #, python-format msgid "Engine, %s, has died" msgstr "Máy, %s, đã dừng hoạt động" #: lib/pychess/widgets/gamenanny.py:265 msgid "" "PyChess has lost connection to the engine, probably because it has died.\n" "\n" "You can try to start a new game with the engine, or try to play against another one." msgstr "PyChess đã mất kết nối đến máy, có thể vì máy đã dừng hoạt động.\n\nBạn có thể thử chơi một ván mới cùng máy, hoặc với một người khác." #: lib/pychess/widgets/gamewidget.py:163 msgid "Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:165 msgid "" "This game can be automatically aborted without rating loss because there has" " not yet been two moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:167 msgid "Offer Abort" msgstr "" #: lib/pychess/widgets/gamewidget.py:169 msgid "" "Your opponent must agree to abort the game because there has been two or " "more moves made" msgstr "" #: lib/pychess/widgets/gamewidget.py:187 msgid "This game can not be adjourned because one or both players are guests" msgstr "" #: lib/pychess/widgets/gamewidget.py:204 msgid "Claim Draw" msgstr "" #: lib/pychess/widgets/gamewidget.py:375 lib/pychess/widgets/ionest.py:61 msgid "vs" msgstr "-" #: lib/pychess/widgets/gamewidget.py:466 msgid "Jump to initial position" msgstr "" #: lib/pychess/widgets/gamewidget.py:471 msgid "Step back one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:476 msgid "Step forward one move" msgstr "" #: lib/pychess/widgets/gamewidget.py:481 msgid "Jump to latest position" msgstr "" #: lib/pychess/widgets/gamewidget.py:707 msgid "PyChess was unable to load your panel settings" msgstr "" #: lib/pychess/widgets/gamewidget.py:708 msgid "" "Your panel settings have been reset. If this problem repeats, you should " "report it to the developers" msgstr "" #: lib/pychess/widgets/ionest.py:84 lib/pychess/widgets/newGameDialog.py:340 #: lib/pychess/widgets/TaskerManager.py:201 msgid "You" msgstr "" #: lib/pychess/widgets/ionest.py:87 lib/pychess/widgets/newGameDialog.py:341 #: lib/pychess/widgets/preferencesDialog.py:49 #: lib/pychess/widgets/TaskerManager.py:204 msgid "Guest" msgstr "Khách" #: lib/pychess/widgets/ionest.py:108 msgid "Correct the move, or start playing with what could be read" msgstr "" #: lib/pychess/widgets/ionest.py:140 lib/pychess/widgets/newGameDialog.py:420 msgid "Open Game" msgstr "Ván đấu mở" #: lib/pychess/widgets/ionest.py:142 msgid "Save Game" msgstr "Lưu lại ván đấu" #: lib/pychess/widgets/ionest.py:149 msgid "All Files" msgstr "Tất cả các tập tin" #: lib/pychess/widgets/ionest.py:152 msgid "Detect type automatically" msgstr "Tự động phát hiện kiểu" #: lib/pychess/widgets/ionest.py:156 msgid "All Chess Files" msgstr "Tất cả các tập tin cờ vua" #: lib/pychess/widgets/ionest.py:230 #, python-format msgid "Unknown file type '%s'" msgstr "Không rõ kiểu tập tin '%s'" #: lib/pychess/widgets/ionest.py:231 #, python-format msgid "" "Was unable to save '%(uri)s' as PyChess doesn't know the format " "'%(ending)s'." msgstr "" #: lib/pychess/widgets/ionest.py:245 #, python-format msgid "Unable to save file '%s'" msgstr "" #: lib/pychess/widgets/ionest.py:247 msgid "" "You don't have the necessary rights to save the file.\n" "Please ensure that you have given the right path and try again." msgstr "" #: lib/pychess/widgets/ionest.py:278 msgid "PyChess was not able to save the game" msgstr "PyChess không thể lưu tập tin" #: lib/pychess/widgets/ionest.py:314 #, python-format msgid "There is %d game with unsaved moves." msgid_plural "There are %d games with unsaved moves." msgstr[0] "" #: lib/pychess/widgets/ionest.py:317 msgid "Save moves before closing?" msgstr "" #: lib/pychess/widgets/ionest.py:334 #, python-format msgid "_Save %d document" msgid_plural "_Save %d documents" msgstr[0] "" #: lib/pychess/widgets/ionest.py:385 msgid "Save the current game before you close it?" msgstr "Lưu lại ván cờ trước khi kết thúc?" #: lib/pychess/widgets/ionest.py:387 msgid "" "It is not possible later to continue the game,\n" "if you don't save it." msgstr "Sau này bạn sẽ không thể tiếp tục ván cờ,\nnếu bây giờ bạn không lưu nó lại." #: lib/pychess/widgets/LogDialog.py:30 msgid "PyChess Information Window" msgstr "" #: lib/pychess/widgets/LogDialog.py:184 lib/pychess/widgets/LogDialog.py:188 msgid "of" msgstr "" #: lib/pychess/widgets/newGameDialog.py:85 #: lib/pychess/widgets/newGameDialog.py:86 msgid "Human Being" msgstr "Người" #: lib/pychess/widgets/newGameDialog.py:153 msgid "Rapid" msgstr "" #: lib/pychess/widgets/newGameDialog.py:217 msgid "Minutes:" msgstr "Phút:" #: lib/pychess/widgets/newGameDialog.py:221 msgid "Gain:" msgstr "Bù thời gian:" #: lib/pychess/widgets/newGameDialog.py:234 #, python-format msgid "%(name)s %(minutes)d min + %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:237 #, python-format msgid "%(name)s %(minutes)d min %(gain)d sec/move" msgstr "" #: lib/pychess/widgets/newGameDialog.py:240 #, python-format msgid "%(name)s %(minutes)d min" msgstr "" #: lib/pychess/widgets/newGameDialog.py:258 msgid "Odds" msgstr "" #: lib/pychess/widgets/newGameDialog.py:283 msgid " chess" msgstr "" #: lib/pychess/widgets/newGameDialog.py:502 msgid "Enter Game" msgstr "Chơi" #: lib/pychess/widgets/preferencesDialog.py:71 msgid "Select book file" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:76 msgid "Opening books" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:108 msgid "Select Gaviota TB path" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:299 msgid "Open Sound File" msgstr "Mở tập tin âm thanh" #: lib/pychess/widgets/preferencesDialog.py:309 msgid "Sound files" msgstr "" #: lib/pychess/widgets/preferencesDialog.py:317 msgid "No sound" msgstr "Không có âm thanh" #: lib/pychess/widgets/preferencesDialog.py:318 msgid "Beep" msgstr "Bíp" #: lib/pychess/widgets/preferencesDialog.py:319 msgid "Select sound file..." msgstr "Chọn tập tin âm thanh..." #: lib/pychess/widgets/preferencesDialog.py:454 msgid "Undescribed panel" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:52 msgid "" "You can start a new game by Game > New Game, in New Game " "window do you can choose Players, Time Control and Chess " "Variants." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:53 msgid "" "You can choose from 8 different difficulties to play against the computer." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:54 msgid "" "Chess Variants are like the pieces of the last line will be placed on the " "board." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:55 msgid "" "To save a game Game > Save Game As, give the filename and " "choose where you want to be saved. At the bottom choose extension type of " "the file, and Save." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:56 msgid "" "Do you know that you can call flag when the clock is with you, " "Actions > Call Flag." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:57 msgid "Pressing Ctrl+Z to offer opponent the possible rollback moves." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:58 msgid "" "To play on Fullscreen mode, just type F11. Coming back, F11 " "again." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:59 msgid "Hint mode analyzing your game, enable this type Ctrl+H." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:60 msgid "" "Spy mode analyzing the oponnent game, enable this type Ctrl+Y." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:61 msgid "" "You can play chess listening to the sounds of the game, for that, " "Settings > Preferences > Sound tab, enable Use " "sounds in PyChess and choose your preferred sounds." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:62 msgid "" "Do you know that you can help translate Pychess in your language, " "Help > Translate Pychess." msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:63 msgid "" "Do you know that it is possible to finish a chess game in just 2 turns?" msgstr "" #: lib/pychess/widgets/tipOfTheDay.py:64 msgid "" "Do you know that the number of possible chess games exceeds the number of " "atoms in the Universe?" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:127 msgid "Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:128 msgid "Chess Shout" msgstr "" #: lib/pychess/ic/managers/ChatManager.py:138 #, python-format msgid "Unofficial channel %d" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:247 msgid "the move needs a piece and a cord" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:301 lib/pychess/Utils/lutils/lmove.py:519 msgid "promotion move without promoted piece is incorrect" msgstr "" #: lib/pychess/Utils/lutils/lmove.py:307 #, python-format msgid "the captured cord (%s) is incorrect" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:23 sidepanel/commentPanel.py:198 #: sidepanel/commentPanel.py:215 msgid "and" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:42 msgid "draws" msgstr "hòa" #: lib/pychess/Utils/lutils/strateval.py:44 msgid "mates" msgstr "chiếu hết" #: lib/pychess/Utils/lutils/strateval.py:48 msgid "puts opponent in check" msgstr "chiếu Vua đối phương" #: lib/pychess/Utils/lutils/strateval.py:72 msgid "improves king safety" msgstr "tăng cường an toàn cho Vua" #: lib/pychess/Utils/lutils/strateval.py:74 msgid "slightly improves king safety" msgstr "phần nào tăng cường sự an toàn cho Vua" #: lib/pychess/Utils/lutils/strateval.py:107 msgid "moves a rook to an open file" msgstr "di chuyển quân Xe đến cột mở" #: lib/pychess/Utils/lutils/strateval.py:108 msgid "moves an rook to a half-open file" msgstr "di chuyển quân Xe đến cột nửa mở" #: lib/pychess/Utils/lutils/strateval.py:118 #: lib/pychess/Utils/lutils/strateval.py:120 #: lib/pychess/Utils/lutils/strateval.py:123 #: lib/pychess/Utils/lutils/strateval.py:125 #, python-format msgid "moves bishop into fianchetto: %s" msgstr "lên Tượng nách: %s" #: lib/pychess/Utils/lutils/strateval.py:131 #, python-format msgid "promotes a Pawn to a %s" msgstr "phong cấp Tốt thành quân %s" #: lib/pychess/Utils/lutils/strateval.py:134 msgid "castles" msgstr "nhập thành" #: lib/pychess/Utils/lutils/strateval.py:157 msgid "takes back material" msgstr "gỡ lại quân" #: lib/pychess/Utils/lutils/strateval.py:161 msgid "sacrifies material" msgstr "thí quân" #: lib/pychess/Utils/lutils/strateval.py:163 msgid "exchanges material" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:165 msgid "captures material" msgstr "đổi quân" #: lib/pychess/Utils/lutils/strateval.py:286 #, python-format msgid "rescues a %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:289 #, python-format msgid "threatens to win material by %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:291 #, python-format msgid "increases the pressure on %s" msgstr "tăng cường áp lực lên %s" #: lib/pychess/Utils/lutils/strateval.py:293 #, python-format msgid "defends %s" msgstr "bảo vệ %s" #: lib/pychess/Utils/lutils/strateval.py:331 #, python-format msgid "pins an enemy %(oppiece)s on the %(piece)s at %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:364 #, python-format msgid "White has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:372 #, python-format msgid "Black has a new piece in outpost: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:411 #, python-format msgid "%(color)s has a new passed pawn on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:465 msgid "half-open" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:467 #, python-format msgid "in the %(x)s%(y)s file" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:469 #, python-format msgid "in the %(x)s%(y)s files" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:472 #, python-format msgid "%(color)s got a double pawn %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:473 #, python-format msgid "%(color)s got new double pawns %(place)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:480 #, python-format msgid "%(color)s got an isolated pawn in the %(x)s file" msgid_plural "%(color)s got isolated pawns in the %(x)s files" msgstr[0] "" #: lib/pychess/Utils/lutils/strateval.py:487 #, python-format msgid "%s moves pawns into stonewall formation" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:502 #: lib/pychess/Utils/lutils/strateval.py:509 #, python-format msgid "%s can no longer castle" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:503 #: lib/pychess/Utils/lutils/strateval.py:510 #, python-format msgid "%s can no longer castle in queenside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:505 #: lib/pychess/Utils/lutils/strateval.py:512 #, python-format msgid "%s can no longer castle in kingside" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:546 #, python-format msgid "%(opcolor)s has a new trapped bishop on %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:568 #, python-format msgid "develops a pawn: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:569 #, python-format msgid "brings a pawn closer to the backrow: %s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:586 #, python-format msgid "brings a %(piece)s closer to enemy king: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:589 #, python-format msgid "develops a %(piece)s: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:607 #, python-format msgid "places a %(piece)s more active: %(cord)s" msgstr "" #: lib/pychess/Utils/lutils/strateval.py:633 msgid "White should do pawn storm in right" msgstr "Trắng nên dâng sóng Tốt phía bên phải" #: lib/pychess/Utils/lutils/strateval.py:635 msgid "Black should do pawn storm in left" msgstr "Đen nên dâng sóng Tốt phía bên trái" #: lib/pychess/Utils/lutils/strateval.py:638 msgid "White should do pawn storm in left" msgstr "Trắng nên dâng sóng Tốt phía bên trái" #: lib/pychess/Utils/lutils/strateval.py:640 msgid "Black should do pawn storm in right" msgstr "Đen nên dâng sóng Tốt phía bên phải" #: lib/pychess/Utils/lutils/strateval.py:673 msgid "Black has a rather cramped position" msgstr "Thế cờ Đen tương đối tù túng" #: lib/pychess/Utils/lutils/strateval.py:675 msgid "Black has a slightly cramped position" msgstr "Thế cờ Đen hơi tù túng" #: lib/pychess/Utils/lutils/strateval.py:677 msgid "White has a rather cramped position" msgstr "Thế cờ Trắng tương đối tù túng" #: lib/pychess/Utils/lutils/strateval.py:679 msgid "White has a slightly cramped position" msgstr "Thế cờ Trắng hơi tù túng" #: sidepanel/annotationPanel.py:16 msgid "Annotation" msgstr "" #: sidepanel/annotationPanel.py:19 msgid "Annotated game" msgstr "" #: sidepanel/annotationPanel.py:143 msgid "Add start comment" msgstr "" #: sidepanel/annotationPanel.py:148 msgid "Add comment" msgstr "" #: sidepanel/annotationPanel.py:152 sidepanel/annotationPanel.py:215 msgid "Edit comment" msgstr "" #: sidepanel/annotationPanel.py:163 msgid "Forced move" msgstr "" #: sidepanel/annotationPanel.py:168 msgid "Add move symbol" msgstr "" #: sidepanel/annotationPanel.py:174 msgid "Unclear position" msgstr "" #: sidepanel/annotationPanel.py:183 msgid "Zugzwang" msgstr "" #: sidepanel/annotationPanel.py:184 msgid "Development adv." msgstr "" #: sidepanel/annotationPanel.py:185 msgid "Initiative" msgstr "" #: sidepanel/annotationPanel.py:186 msgid "With attack" msgstr "" #: sidepanel/annotationPanel.py:187 msgid "Compensation" msgstr "" #: sidepanel/annotationPanel.py:188 msgid "Counterplay" msgstr "" #: sidepanel/annotationPanel.py:189 msgid "Time pressure" msgstr "" #: sidepanel/annotationPanel.py:194 msgid "Add evaluation symbol" msgstr "" #: sidepanel/annotationPanel.py:198 msgid "Remove symols" msgstr "" #: sidepanel/annotationPanel.py:205 msgid "Remove variation" msgstr "" #: sidepanel/annotationPanel.py:488 #, python-format msgid "round %s" msgstr "" #: sidepanel/bookPanel.py:18 msgid "Hints" msgstr "" #: sidepanel/bookPanel.py:22 msgid "" "The hint panel will provide computer advice during each stage of the game" msgstr "" #: sidepanel/bookPanel.py:24 msgid "Official PyChess panel." msgstr "" #: sidepanel/bookPanel.py:80 msgid "Opening Book" msgstr "Sách khai cuộc" #: sidepanel/bookPanel.py:81 msgid "" "The opening book will try to inspire you during the opening phase of the " "game by showing you common moves made by chess masters" msgstr "" #: sidepanel/bookPanel.py:128 #, python-format msgid "Analysis by %s" msgstr "" #: sidepanel/bookPanel.py:129 #, python-format msgid "" "%s will try to predict which move is best and which side has the advantage" msgstr "" #: sidepanel/bookPanel.py:131 #, python-format msgid "Threat analysis by %s" msgstr "" #: sidepanel/bookPanel.py:132 #, python-format msgid "" "%s will identify what threats would exist if it were your opponent's turn to" " move" msgstr "" #: sidepanel/bookPanel.py:148 sidepanel/bookPanel.py:229 msgid "Calculating..." msgstr "" #: sidepanel/bookPanel.py:247 msgid "Engine scores are in units of pawns, from White's point of view." msgstr "" #: sidepanel/bookPanel.py:249 msgid "" "Adding suggestions can help you find ideas, but slows down the computer's " "analysis." msgstr "" #: sidepanel/bookPanel.py:269 msgid "Endgame Table" msgstr "" #: sidepanel/bookPanel.py:272 msgid "" "The endgame table will show exact analysis when there are few pieces on the " "board." msgstr "" #: sidepanel/bookPanel.py:304 sidepanel/bookPanel.py:307 #, python-format msgid "Mate in %d" msgstr "" #: sidepanel/bookPanel.py:489 msgid "" "In this position,\n" "there is no legal move." msgstr "" #: sidepanel/chatPanel.py:15 msgid "Chat" msgstr "" #: sidepanel/chatPanel.py:19 msgid "" "The chat panel lets you communicate with your opponent during the game, " "assuming he or she is interested" msgstr "" #: sidepanel/commentPanel.py:18 msgid "Comments" msgstr "Bình luận" #: sidepanel/commentPanel.py:22 msgid "The comments panel will try to analyze and explain the moves played" msgstr "" #: sidepanel/commentPanel.py:128 msgid "Initial position" msgstr "Vị trí ban đầu" #: sidepanel/commentPanel.py:261 #, python-format msgid "%(color)s moves a %(piece)s to %(cord)s" msgstr "" #: sidepanel/engineOutputPanel.py:14 msgid "Engines" msgstr "" #: sidepanel/engineOutputPanel.py:19 msgid "" "The engine output panel shows the thinking output of chess engines (computer" " players) during a game" msgstr "" #: sidepanel/engineOutputPanel.py:42 msgid "No chess engines (computer players) are participating in this game." msgstr "" #: sidepanel/historyPanel.py:15 msgid "Move History" msgstr "Các nước đã chơi" #: sidepanel/historyPanel.py:18 msgid "" "The moves sheet keeps track of the players' moves and lets you navigate " "through the game history" msgstr "" #: sidepanel/scorePanel.py:15 msgid "Score" msgstr "Điểm số" #: sidepanel/scorePanel.py:19 msgid "" "The score panel tries to evaluate the positions and shows you a graph of the" " game progress" msgstr "" pychess-0.12beta3/pychess.desktop0000755000175000017470000000041512161415524016144 0ustar tamasusers[Desktop Entry] Type=Application Name=PyChess Comment=PyChess is a fully featured, nice looking, easy to use chess client for the Gnome desktop GenericName=Chess Game Icon=pychess Exec=pychess Terminal=false Categories=Game;BoardGame; MimeType=application/x-chess-pgn; pychess-0.12beta3/DOCUMENTERS0000755000175000017470000000004212161415523014601 0ustar tamasusersThomas Dybdahl Ahle Thijs Vermeir pychess-0.12beta3/pychess.svg0000755000175000017470000004432012161415524015275 0ustar tamasusers image/svg+xml pychess-0.12beta3/manpages/0000755000175000017470000000000012176727272014677 5ustar tamasuserspychess-0.12beta3/manpages/pychess.1.gz0000755000175000017470000000103612161415524017045 0ustar tamasusersB׋Epychess.1]RMs0WR>RaBHghiDeIHr=+[C~և U#5`UU7|XW2WE}m#G ҉RR[#j{Uޘ$f`5瞵3 $Y'5ly"utP+%Qh1K*%.9GՔ?+gdBк,~Xbpychess-0.12beta3/pychess.png0000755000175000017470000000227112161415524015261 0ustar tamasusersPNG  IHDRw=bKGD pHYs }eYtIME  [ɥ{FIDATHǝTmPTe=}.K.,5cY+ [!3f?F'aM?_Ք2e66DIB9[9 겋+X~{޽3\{}yAr8"*Si[(.bY*QFHN[\WqS2M .Y]Zj\+ҘOOOx 4NmXS;,g~'fZo?$IE_3E_}y;ݏpoJJiߜ̜Uis 0-|LA!ӛ1`̏-ܒ@tdg&fJ^b/kk?w$00fg /2ji~?\Sk;?.߰g=h<, ŵBG~cSSf pPrr O-.|J~WTM=}g[7-qd9|Cczl$/v8Xm!+kxq);ׇT}^>45M7__v]N'^7WK~Ʈf#>7m.-45X 'YRXF9X"5Cn2!}@lNϞɫk^%~+T56UC "9"/-*\|pV3+j4SQd2iFwk Z,Vp 8+;LӍA4l9!8s&CRB !g&z= 2.6' sys.exit(1) import pygtk pygtk.require("2.0") try: import rsvg except ImportError: print 'ERROR: Could not load the rsvg python module.' print 'You need to install the rsvg python package which is called ' print 'python-rsvg in Debian/Ubuntu and gnome-python2-rsvg in RPM based ' print 'distributions like Fedora' sys.exit(1) try: import gtksourceview2 except ImportError: print 'ERROR: Could not load the gtksourceview2 python module.' print 'You need to install the gtksourceview2 python package which is ' print 'called pygtksourceview in most distributions' sys.exit(1) ############################################################################### # Fix environment if not "HOME" in os.environ: os.environ["HOME"] = os.path.expanduser("~") if "PYTHONPATH" in os.environ: os.environ["PYTHONPATH"] = os.pathsep.join( os.path.abspath(p) for p in os.environ["PYTHONPATH"].split(os.pathsep)) ############################################################################### # Ensure access to data store try: from pychess.System.prefix import addDataPrefix, getDataPrefix, isInstalled except ImportError: print "ERROR: Could not import modules." print "Please try to run pychess as stated in the INSTALL file" sys.exit(1) ############################################################################### # Set up translations import gettext, locale locale.setlocale(locale.LC_ALL, '') domain = "pychess" if isInstalled(): gettext.install(domain, unicode=1, names=('ngettext',)) else: locale_dir = addDataPrefix("lang") gettext.install(domain, localedir=locale_dir, unicode=1, names=('ngettext',)) if sys.platform == "win32": from ctypes import cdll libintl = cdll.intl libintl.bindtextdomain(domain, locale_dir) libintl.bind_textdomain_codeset(domain, 'UTF-8') else: locale.bindtextdomain(domain, locale_dir) ############################################################################### # Parse command line arguments import pychess no_debug = False glock_debug = False thread_debug = False chess_file = sys.argv[1] if len(sys.argv) > 1 else None ics_host = None ics_port = None try: import argparse except ImportError: print "argparse library not found, so thread debugging will be turned off" else: version = "%s (%s)" % (pychess.VERSION, pychess.VERSION_NAME) description = "The PyChess chess client, version %s." % version parser = argparse.ArgumentParser(description=description) parser.add_argument('--version', action='version', version="%(prog)s" + " %s" % version) parser.add_argument('--no-debug', action='store_true', help='turn off debugging output') parser.add_argument('--glock-debug', action='store_true', help='turn on glock debugging output (WARNING: creates alot of output)') parser.add_argument('--thread-debug', action='store_true', help='turn on thread debugging output') parser.add_argument('--ics_host', action='store', help='the hostname of internet chess server (default is freechess.org)') parser.add_argument('--ics_port', action='store', type=int, help='the connection port of internet chess server (default is 5000)') parser.add_argument('chess_file', nargs='?', metavar='chessfile', help='a chess file in PGN, EPD, FEN, or HTML (Chess Alpha 2 Diagram) format') args = parser.parse_args() no_debug = args.no_debug glock_debug = args.glock_debug thread_debug = args.thread_debug chess_file = args.chess_file ics_host = args.ics_host ics_port = args.ics_port ############################################################################### # Let's rumble! import pychess.Main pychess.Main.run(no_debug, glock_debug, thread_debug, chess_file, ics_host, ics_port) pychess-0.12beta3/INSTALL0000755000175000017470000000133012161415523014120 0ustar tamasusersPyChess does not have to be compiled/installed to run. To run: Excute the following in this directory: $ PYTHONPATH=lib/ ./pychess To install to disk: Run following as root # python setup.py install To see other install options/formats: $ python setup.py --help-commands To run the pychess engine in text based mode $ PYTHONPATH=lib/ python lib/pychess/Players/PyChess.py To run unit tests for pychess: cd testing $ PYTHONPATH=lib/ python run_tests.py ------------- Dependencies: python >= 2.5 pygtk pygobject pycairo gnome-python-desktop python-rsvg (if it's in a separate package in your distribution) gnome-icon-theme gst-python (OPTIONAL for sound) gmpy (OPTIONAL for stronger play) psyco (OPTIONAL for stronger play) pychess-0.12beta3/eco.db0000644000175000017470000077600012176710401014155 0ustar tamasusersSQLite format 3@  ~OtableopeningsopeningsCREATE TABLE openings(hash blob, base integer, eco text, lang text, opening text, variation text)y FqK wFQiF!% ;)|CبA00enCrab Opening.? -{)RA00enWare (Meadow Hay) Opening(3 >_rA00enAnderssen's Opening(3 pY_A00enNovosibirsk Opening'1 H3A00enBattambang Opening9U 7ԆGsA00enDunst (Sleipner-Heinrichsen) Opening:W s~EA00enDunst (Sleipner, Heinrichsen) Opening # zŃA00enAmar gambit) 5 -L^FA00enAmar (Paris) Opening# ) ,rCA00enGlobal OpeningE m K25nA00enClemenz (Mead's, Basman's or de Klerk's) Opening/ 9Fv_A00enGrobRomford counter-gambit% %5Ӻ6A00enGrobFritz gambit%%\ : >A00enGrobSpike attack"' vA00enGrob's attack5+/; EA00enBenko's Openingreversed Alekhine)5 w"fA00enLasker simul special$+ j-YF$A00enBenko's Opening-1~[CA00enPolishOutflank variation.3mB|P A00enPolishTuebingen variation.? 㴰'A00enPolish (Sokolsky) opening Dg>R,ADA(;7\2 jA01enNimzovich-Larsen attackSymmetrical variation<';-YW*A01enNimzovich-Larsen attackPolish variation;&;+^r/A01enNimzovich-Larsen attackDutch variation=%;/,'3[A01enNimzovich-Larsen attackEnglish variation?$;3OXPA01enNimzovich-Larsen attackClassical variation<#;-s¹agA01enNimzovich-Larsen attackIndian variation<";-@_oA01enNimzovich-Larsen attackModern variation,!; ʝLA01enNimzovich-Larsen attack$ + AFKRA00enDurkin's attack0C ژ 1A00enAnti-Borg (Desprez) Opening?a ߺmN~A00enHammerschlag (Fried fox/Pork chop Opening)%- (p)[A00enGedult's Opening%- SADXcEA00enAmsterdam attack)5 Ԫ2t8A00enVan't Kruijs Opening'1 rrbA00enVenezolana Opening%- ;[NA00enValencia Opening#) b]~A00enMieses Opening#) URGHA00enMieses Opening&/ 0nA00enSaragossa Opening <}Fl7lE<E=eӭc`A05enRetiKing's Indian attack, Reti-Smyslov variation-<5HՖDA05enRetiKing's Indian attackB;_SO2A05enRetiKing's Indian attack, Spassky's variation!:% ƱNӍ7A05enReti Opening*9/3b+A04enRetiHerrstroem gambit%8%b1+ g,A04enRetiWade defense!7% 쏬A04enReti Opening16=8}7A04enRetiLisitsin gambit deferred-557?+ uA04enRetiPirc-Lisitsin gambit!4% 0wA04enReti v Dutch!3% _z~wA04enReti Opening32)-,AA03enBird's OpeningLasker variation21)+@IxT29A03enBird's OpeningWilliams gambit%0- dV%$4A03enMujannah Opening#/) >Gԏ3A03enBird's Opening%.%;nț>A02enBirdHobbs gambit1-E *bC@XA02enBird's Opening, Swiss gambit5,Eg|p1A02enBirdFrom gambit, Lipke variation6+G"Q'OdEA02enBirdFrom gambit, Lasker variation$*#1U_9#A02enBirdFrom gambit#)) -A02enBird's Opening MMY*?sM$P+ #Zg.A10enEnglish Opening$O+  EWq0A07enRetiKing's Indian attack, Keres variationAD]4ڮՔA07enRetiKing's Indian attack, Yugoslav variation=CU4t A07enRetiKing's Indian attack (Barcza system)0B;88.A06enRetiNimzovich-Larsen attack9AU 2U #nA06enTennison (Lemberg, Zukertort) gambit'@1 -VDA06enSantasiere's folly*?//3hSA06enRetiOld Indian attack!>% 5XӇA06enReti Opening Vu=d8vP!V,b-\cA.QA13enEnglishKurajica defense7a+3·YY0A13enEnglish OpeningAgincourt variation)`' W}A13enEnglishWimpey system7_+3a5﹎A13enEnglish OpeningAgincourt variation-^/ YA13enEnglishRomanishin gambit$]+ o MA13enEnglish OpeningL\mWKdμA12enEnglishCaro-Kann defensive system, Bogoljubov variation2[9^+A12enEnglishCapablanca's variation>ZQAbA12enEnglishNew York (London) defensive system*Y)dA12enEnglishBled variation6XAXl/A12enEnglishCaro-Kann defensive system3W;~۬_)PuA12enEnglishLondon defensive system2V9IWA12enEnglishTorre defensive system6UAJe VA12enEnglishCaro-Kann defensive system6TAXb"^ A11enEnglishCaro-Kann defensive system/S3^wozEA10enEnglishAnglo-Dutch defense+R+c)3A10enEnglishJaenisch gambit+Q+m_eVtA10enEnglishAdorjan defense Ws;S[5W3t;$A18enEnglishMikenas-Carls variation1s73RA17enEnglishNimzo-English Opening?rSA17enEnglishQueens Indian, Romanishin variation3q;r A17enEnglishQueens Indian formation$p+ Z"A17enEnglish OpeningGocmA16enEnglishAnglo-Gruenfeld defense, Korchnoi variation3n; ӟA16enEnglishAnglo-Gruenfeld defense:mI'u*A16enEnglishAnglo-Gruenfeld, Czech defense bA14enEnglishSymmetrical, Keres defense0e5J ބA14enEnglishNeo-Catalan declined0d5pGA13enEnglishNeo-Catalan accepted'c#i[q|A13enEnglishNeo-Catalan ;H"`1 xLr;4=%K;2;&A24enEnglishBremen system with ...g6:I^{>tgaA23enEnglishBremen system, Keres variation29fC|A22enEnglishBremen, Smyslov system29It`A22enEnglishBremen, reverse Dragon05`IA22enEnglishCarls' Bremen system)'"wyᗰA22enEnglishBellon gambit$+ -!clA22enEnglish Opening:W rpOnVA21enEnglish, Kramnik-Shirov counterattack-= [q A21enEnglish, Smyslov defense$~+ Y)cC$A21enEnglish Opening-}= <AoA21enEnglish, Keres variation-|= ]"SA21enEnglish, Troeger defense${+ -tA21enEnglish Opening8zS fA20enEnglish, Nimzovich, Flohr variation1yE 퀮ΐA20enEnglish, Nimzovich variation$x+ @`v{A20enEnglish Opening=wO>` 6cA19enEnglishMikenas-Carls, Sicilian variation;vKsصA18enEnglishMikenas-Carls, Kevitz variation:uI<QA18enEnglishMikenas-Carls, Flohr variation <k6 c4g'x<9G-WlA28enEnglishFour knights, Stean variation.1=[K xA28enEnglishFour knights, 4.e3>Q>4A28enEnglishFour knights, Capablanca variation:I[ (X&A28enEnglishFour knights, Marini variation=OT};A28enEnglishFour knights, Nimzovich variation3;z ZhA28enEnglishBradley Beach variation/3pA28enEnglishNenarokov variation/35A28enEnglishFour knights system05~-}JA27enEnglishThree knights system,-oEdA26enEnglishBotvinnik system)'GbS#nA26enEnglishClosed system9G~2|jjA25enEnglishClosed system (without ...d6)< MێDOyA25enEnglishClosed, 5.Rb1 Taimanov variation) 'WA25enEnglishClosed, 5.Rb12 9/CfA25enEnglishClosed, Hort variation6 Aѻ\tpA25enEnglishClosed, Taimanov variation) '78A25enEnglishClosed system-/6wA25enEnglishSicilian Reversed \KX$t@\1)7P}A36enEnglishSymmetrical variation<(MѼ[A35enEnglishSymmetrical, Four knights system1'7|y{<A35enEnglishSymmetrical variation:&I㿍QYVA34enEnglishSymmetrical, Rubinstein system1%7O%GA34enEnglishSymmetrical variation=$OCۧ,عA34enEnglishSymmetrical, Three knights system1#70h;?A34enEnglishSymmetrical variation9"GH4A33enEnglishSymmetrical, Geller variation1!7wQ"٘oA33enEnglishSymmetrical variation1 7'+:b :A32enEnglishSymmetrical variation9Gi/;~ QA31enEnglishSymmetrical, Benoni formationE_WtkA30enEnglishSymmetrical, hedgehog, flexible formation8E U{q"A30enEnglishSymmetrical, hedgehog system17,iؒ\A30enEnglishSymmetrical variation=Ovt0pA29enEnglishFour knights, kingside Fianchetto>Qd;҆4A28enEnglishFour knights, Romanishin variation ]E[z= ].:%'3]A40enQueen's pawnKeres defense!9% yKzAA40enQueen's pawn#8) ӧlA40enPolish defense07%+gfEA40enQueen's pawnEnglish defense/6%)WY A40enQueen's pawnEnglund gambit:5%? v)A40enQueen's pawnCharlick (Englund) gambit@4%K(aPtA40enQueen's pawnLundin (Kevitz-Mikenas) defense!3% XA40enQueen's pawn:2Io))'A39enEnglishSymmetrical, Main line with d4:1Ic[A38enEnglishSymmetrical, Main line with b3:0IcV|~A38enEnglishSymmetrical, Main line with d31/7<6D7A38enEnglishSymmetrical variationB.Y [A37enEnglishSymmetrical, Botvinnik system Reversed1-7giA43enWoozle defense'J1  hA43enOld Benoni defense1I!1KM߱a A43enOld BenoniMujannah formation4H!7m6aA43enOld BenoniFranco-Benoni defense'G1 ehڣA43enOld Benoni defenseCF)M.A42enModern defenseAverbakh system, Kotov variationJE)[`i xXA42enModern defenseAverbakh system, Randspringer variation(D3 icVIA42enPterodactyl defense2C)+P?UA42enModern defenseAverbakh system8B-3r/A41enRobatsch defenseRossolimo variation#A) ƸA41enModern defense'@1 6/3A41enOld Indian defense:?!Cc CdA41enOld IndianTartakower (Wade) variation!>% / A41enQueen's Pawn&=/ v:A40enBeefeater defense#<) j|CA40enModern defense>;%G"A40enQueen's pawnFranco-Indian (Keres) defense \{AiDh+\C`)M bϵA47enQueen's IndianMarienbad system, Berg variation3_)-)IA47enQueen's IndianMarienbad system+^9 h(fAA44enOld Benoni defense.O!+ ,A43enOld BenoniSchmid's system'N1 ͽ.AA43enOld Benoni defense 2e+n:r@g22s!3jA54enOld IndianUkrainian variation1r!1.NvA53enOld IndianJanowski variation'q1 my;r"A53enOld Indian defense>pO"%$FA52enBudapestAlekhine variation, Balogh gambit7oAn><4A52enBudapestAlekhine, Abonyi variation/n1EXoA52enBudapestAlekhine variation1m5QXWA52enBudapestRubinstein variation,l+aRфXA52enBudapestAdler variation%k-  7eA52enBudapest defense:jG7ŗA51enBudapestFajarowicz, Steiner variation1i5x.4A51enBudapestFajarowicz variation.h? ޻)zHyA51enBudapest defense declined/gA ?[s.A50enQueen's Indian Accelerated.f? .ʁA48enKing's IndianEast Indian defense O^8vR WuO#) ~r6=A60enBenoni defense*%O{JA59enBenko gambitMain line!% qg8A59enBenko gambit.%'I7=0#A59enBenko gambitNe2 variation%%BivA59enBenko gambit7.e45%5 ܯRZW52A58enBenko gambitFianchetto variation.%'x=ӀA58enBenko gambitNd2 variation*7 9qP>A58enBenko gambit accepted6%7uiA57enBenko gambitNescafe Frappe attack/~%)e!A57enBenko gambitZaitsev system/}A K ~*A57enBenko gambit half accepted!|% haRA57enBenko gambit5{%5m\XA56enCzech BenoniKing's Indian system)z5 M A56enCzech Benoni defense$y+ 2=+A56enVulture defense4xK 1]A56enBenoni defense, Hromodka system#w) 02A56enBenoni defense(v!0 96A55enOld IndianMain line9u!Ax4iA54enOld IndianUkrainian variation, 4.Nf38t!?U A54enOld IndianDus-Khotimirsky variation Sj8NOS3=u֫SA74enBenoniClassical, 9...a6, 10.a4+-$L>A73enBenoniClassical, 9.O-O2;_xA72enBenoniClassical without 9.O-O+- f;wAA71enBenoniClassical, 8.Bg52;5=*A70enBenoniClassical without 9.O-O4?{ g#A70enBenoniClassical with e4 and Nf37ES5,A69enBenoniFour pawns attack, Main line,/< yxA68enBenoniFour pawns attack-1qb(RcA67enBenoniTaimanov variation,/0IYA66enBenoniMikenas variation/5]{{;A66enBenonipawn storm variationIٳ-ԟUA65enBenoni6.e4/5ך$Iw8A64enBenoniFianchetto, 11...Re8/ 5њI3 A63enBenoniFianchetto, 9...Nbd7/ 5 IR)A62enBenoniFianchetto variation/ 5躉̡A61enBenoniFianchetto variation> Sb,/A61enBenoniNimzovich (knight's tour) variation, /yTVA61enBenoniUhlmann variation#) ,v)A61enBenoni defense WY\+}BW(-)D(gA82enDutchBalogh defense),+fcRPA A82enDutchStaunton gambit7+GuzA81enDutchLeningrad, Karlsbad variation2*=a3MuOA81enDutchLeningrad, Basman system")' <- Ÿ/A81enDutch defense8(S [\R_A81enDutch defense, Blackburne variation"'' ;djY$8A81enDutch defense+&9 ; Z'A80enDutch, 2.Bg5 variation*%7 ,QA80enDutch, Krejcik gambit+$9 {s5A80enDutch, Korchnoi attack.#? b<8A80enDutch, Von Pretzel gambitB"g smwA80enDutch, Manhattan (Alapin, Ulvestad) variation,!; U>RA80enDutch, Spielmann gambit  a+A80enDutch+--5JB|A79enBenoniClassical, 11.f3;MC{ eA78enBenoniClassical with ...Re8 and ...Na65A xdA77enBenoniClassical, 9...Re8, 10.Nd2-1й N1SA76enBenoniClassical, 9...Re8<OwaaY)A75enBenoniClassical with ...a6 and 10...Bg4 VUV1gBV3??n1. A87enDutchLeningrad, Main variation->3}\A86enDutchLeningrad variation.=5AA86enDutchHort-Antoshin system'<1 JϻΩA86enDutch with c4 & g3(;3 ;;lXǔHA85enDutch with c4 & Nc3":' tW%A84enDutch defense29=)2v }z_A84enDutchStaunton gambit deferred88S  EA84enDutch defense, Rubinstein variation"7' 5>UA84enDutch defense26'-0*A84enDutch defenseBladel variation"5' B@WA84enDutch defense>4U?H7A83enDutchStaunton gambit, Nimzovich variation=3S,ӵA83enDutchStaunton gambit, Chigorin variation;2OSnV|A83enDutchStaunton gambit, Lasker variation=1SAvsA83enDutchStaunton gambit, Alekhine variation:0MwVfFA83enDutchStaunton gambit, Staunton's line?/WAWPA82enDutchStaunton gambit, Tartakower variation).+uze~A82enDutchStaunton gambit G^Z*b'G;QO gشA98enDutchIlyin-Genevsky variation with Qc2:PM)7M<A97enDutchIlyin-Genevsky, Winter variation2O=bA97enDutchIlyin-Genevsky variation-N3 ;0A96enDutchClassical variation8MIi QRA95enDutchStonewall: Chekhover variation,L1x?4,fA95enDutchStonewall with Nc3,K1iRLA94enDutchStonewall with Ba38JItU-\A93enDutchStonewall, Botwinnik variation,I1E-۷*A92enDutchStonewall with Nc3-H35yu7A92enDutchStonewall variation6GO [[/A92enDutch defense, Alekhine variation"F' lY)A92enDutch defense"E' ;m(*A91enDutch defense5DM ZA90enDutch-Indian, Alekhine variationFC'UwNA90enDutch defenseDutch-Indian (Nimzo-Dutch) variation"B' /=A90enDutch defense7"tB01enScandinavian gambit1r%-3M}7uB01enScandinavianIcelandic gambit)q5 {gP B01enScandinavian defense5p%5ZC%Q.B01enScandinavianPytel-Wade variation7oQ Bo$B01enScandinavian, Mieses-Kotrvc gambitLn%c7ʣuB01enScandinavianAnderssen counter-attack, Collijn variationJm%_5lvIB01enScandinavianAnderssen counter-attack, Goteborg systemIl%]b$B01enScandinavianAnderssen counter-attack Orthodox attack9k%=tB01enScandinavianAnderssen counter-attack>j_ ?2\B01enScandinavian defense, Gruenfeld variation)i5 g#m dB01enScandinavian defense;hY ]_B01enScandinavian defense, Lasker variation:gW VDaB01enScandinavian (centre counter) defense5f#7 jQǢިB00enKing's pawnNeo-Mongoloid defenseGe#[V(B00enKing's pawnNimzovich defense, Bogolyubov variation ?c9F^%?C1Ed~(B02enAlekhine's defenseTwo pawns' (Lasker's) attack81/UB02enAlekhine's defenseSteiner variation'1 8B02enAlekhine's defense81/@8B02enAlekhine's defenseWelling variation61+,~XB02enAlekhine's defenseSaemisch attack61+B_ߚtB02enAlekhine's defenseKmoch variation'1 |f7SB02enAlekhine's defense7~1-EgB02enAlekhine's defenseBrooklyn defenseH}1O漫B02enAlekhine's defenseMokele Mbembe (Buecker) variation8|1/ax֦B02enAlekhine's defenseKrejcik variation8{1/wvlp{B02enAlekhine's defenseMaroczy variation:z13ԜwWB02enAlekhine's defenseSpielmann variation=y19/B02enAlekhine's defenseScandinavian variation'x1 үPB02enAlekhine's defense2w%/W |)B01enScandinavianRichter variation/v%)6 03oB01enScandinavianKiel variation3u%1!|<>B01enScandinavianMarshall variation @M#?q!@K1UXB5B03enAlekhine's defenseFour pawns attack, Planinc variationN1[TORB03enAlekhine's defenseFour pawns attack, Tartakower variation?1=VήB03enAlekhine's defenseFour pawns attack, 7.Be3M1Y ԤB03enAlekhine's defenseFour pawns attack, Ilyin-Genevsky var.A1Ab B03enAlekhine's defenseFour pawns attack, 6...Nc6L1Wdy7sɮB03enAlekhine's defenseFour pawns attack, Korchnoi variation81/ؚL]>B03enAlekhine's defenseFour pawns attackA 1AՔtB03enAlekhine's defenseExchange, Karpov variation9 11dSKSxB03enAlekhine's defenseExchange variation' 1 @NB03enAlekhine's defense7 1-kBqXB03enAlekhine's defenseBalogh variation' 1 4jY7B03enAlekhine's defense81/ي#SîB03enAlekhine's defenseO'Sullivan gambit'1 I ~B03enAlekhine's defenseK1UHژ&B02enAlekhine's defenseTwo pawns' attack, Mikenas variation D^$ZTuD.#? l55B06enRobatsch (Modern) defense&"/ xSB06enNorwegian defense.!? k B06enRobatsch (Modern) defense> 1;F3ִ=B05enAlekhine's defenseModern, Vitolins attackA1Aՠf5.B05enAlekhine's defenseModern, Alekhine variation>1;p$FB05enAlekhine's defenseModern, Panov variation>1;y1B05enAlekhine's defenseModern, Flohr variation@1?YvX)B05enAlekhine's defenseModern variation, 4...Bg4>1;g7B04enAlekhine's defenseModern, Keres variationC1E`JĈB04enAlekhine's defenseModern, Fianchetto variation?1=r˼)%=B04enAlekhine's defenseModern, Schmid variation?1=au3s.JB04enAlekhine's defenseModern, Larsen variation71-[P31`VB04enAlekhine's defenseModern variationN1[[¬óB03enAlekhine's defenseFour pawns attack, Trifunovic variationN1[1.`XuB03enAlekhine's defenseFour pawns attack, Fianchetto variation Vb1pLxM)V76IaBB08enPircClassical (Two knights) system45-+XB07enRobatsch defenseGeller's system24?h{jB07enPircbayonet (Mariotti) attack*3/W8 B07enPircChinese variation!2% Dn+>B07enPirc defense(1+$ uB07enPircByrne variation&0'TtB07enPircHolmov system*//ଅB07enPircSveshnikov system#.!Dtc(B07enPirc150 attack!-% 7~]*7tB07enPirc defense1,=L#&x5MB07enPircUfimtsev-Pytel variation!+% QB07enPirc defense;*-9!:)eB06enRobatsch defensePseudo-Austrian attackC)-I2UcLB06enRobatsch defenseTwo knights, Suttles variation:(-7H"lB06enRobatsch defenseTwo knights variation.'? ,T|B06enRobatsch (Modern) defense9&-5s_IB06enRobatsch defenseGurgenidze variation%%- µB06enRobatsch defense7$-1uB06enRobatsch defenseThree pawns attack Vc8 x;i-V3H7ߠ?B10enCaro-KannTwo knights variation;GGԙ7:iB10enCaro-KannGOldman (Spielmann) variation&F/ nH3B10enCaro-Kann defense7E?jA)B10enCaro-KannClosed (Breyer) variation9DCˏU w B10enCaro-KannAnti-anti-Caro-Kann defense4C9e9*B10enCaro-KannAnti-Caro-Kann defense.B-s—DB10enCaro-KannHillbilly attack&A/ Fvђ-B10enCaro-Kann defense>@WgT8B09enPircAustrian attack, Ljubojevic variation:?OG t_@B09enPircAustrian attack, Dragon formation/>9L;B09enPircAustrian attack, 6.Bd3/=9dB09enPircAustrian attack, 6.Be3.<7a q@,,B09enPircAustrian attack, 6.e5(;+mu^ HB09enPircAustrian attack(:+h 3I4B09enPircAustrian attack09;/&.B08enPircClassical system, 5.Be2-85UQi{5B08enPircClassical, h3 system77I\׹*B08enPircClassical (Two knights) system :wN%Z!x7~:AZS(wYB13enCaro-KannPanov-Botvinnik, Czerniak variation?YO3,8$B13enCaro-KannPanov-Botvinnik, normal variation=XKxB6rB13enCaro-KannPanov-Botvinnik, Herzog defense4W9(mvQֽB13enCaro-KannPanov-Botvinnik attack>VM韌%B13enCaro-KannPanov-Botvinnik, Gunderam attack4U9A!>B13enCaro-KannPanov-Botvinnik attack08B12enCaro-KannTartakower (fantasy) variation&M/ P{IB12enCaro-Kann defense&L/ m6B12enCaro-Masi defense(K3 GĉB12ende Bruycker defense&J/ sYoB12enCaro-Kann defense2I5 j1B11enCaro-KannTwo knights, 3...Bg4 Xs4 kBd1X-k+;K h_B18enCaro-KannClassical, 6.h47j?Zk.cB18enCaro-KannClassical, Maroczy attack8iA̳ ErY0B18enCaro-KannClassical, Flohr variation1h3J߫[B18enCaro-KannClassical variation0g1%B17enCaro-KannSteinitz variation8fA>ϕEulB16enCaro-KannBronstein-Larsen variation/e/I B15enCaro-KannForgacs variation>dMb oB15enCaro-KannTartakower (Nimzovich) variation-c+%W[ѲB15enCaro-KannAlekhine gambit&b/ YL!RWB15enCaro-Kann defense1a3 ,B15enCaro-KannRasa-Studier gambit/`/B:0B15enCaro-KannGurgenidze system7_?ˊ ^έB15enCaro-KannGurgenidze counter-attack&^/ c.sB15enCaro-Kann defense<]IX>-*QDB14enCaro-KannPanov-Botvinnik attack, 5...g6<\I^GIFB14enCaro-KannPanov-Botvinnik attack, 5...e6K[g:~B13enCaro-KannPanov-Botvinnik, Reifir (Spielmann) variation bh8[tBb6|?f&EmB22enSicilianAlapin's variation (2.c3)@{SEAB21enSicilianSmith-Morra gambit, Chicago defense/z1'B21enSicilianSmith-Morra gambit/y1٠EEB21enSicilianAndreaschek gambit/x1xeTgB21enSicilianSmith-Morra gambit.w/[7wbB21enSicilianGrand Prix attack4v;p1*}GB20enSicilianKeres variation (2.Ne2)rO3+@B20enSicilianwing gambit, Santasiere variation(q#θ?R&B20enSicilianwing gambit/p1H⁒B20enSicilianSteinitz variation-o-B20enSicilianGloria variation%n- dMJVJB20enSicilian defense:mEW^B19enCaro-KannClassical, Spassky variation0l1AǹpB19enCaro-KannClassical, 7...Nd7 ;f7h/ f9n;03VS?B27enSicilianHungarian variation03@3MB27enSicilianKatalimov variation0 36)dB27enSicilianQuinteros variation: GfZ3S YB27enSicilianStiletto (Althouse) variation% - )j+B27enSicilian defense* '?7ݦB26enSicilianClosed, 6.Be38 CY\KB25enSicilianClosed, 6.f4 e5 (Botvinnik))%!TsB25enSicilianClosed, 6.f49E^3B25enSicilianClosed, 6.Ne2 e5 (Botvinnik)#c7)j?(B25enSicilianClosed6?8Et<B24enSicilianClosed, Smyslov variation#11 B24enSicilianClosedBW5 DsB23enSicilianGrand Prix attack, Schofman variation./!ȴPB23enSicilianGrand Prix attack03 aq`B23enSicilianchameleon variation,+47%m1B23enSicilianClosed, 2...Nc67A@!98~B23enSicilianClosed, Korchnoi variation#~R\2B23enSicilianClosed7}A!%B22enSicilian2.c3, Heidenfeld variation ;bKq/r;4;GY@}sB33enSicilianPelikan, Bird variationBWz5cB33enSicilianPelikan (Lasker/Sveshnikov) variation%- ݫB33enSicilian defenseMmnF rB32enSicilianLabourdonnais-Loewenthal (Kalashnikov) variation?QcbȠIB32enSicilianLabourdonnais-Loewenthal variation03l<YB32enSicilianNimzovich variation,+d jf~B32enSicilianFlohr variation%- Q@j裗B32enSicilian defenseMm^PuB31enSicilianNimzovich-Rossolimo attack, Gurgenidze variationSyήe:B31enSicilianNimzovich-Rossolimo attack (with ...g6, without ...d6)Ga'EVB30enSicilianNimzovich-Rossolimo attack (without ...d6)%- ~{!B30enSicilian defenseLkT?‘B29enSicilianNimzovich-Rubinstein; Rubinstein counter-gambit;IǒJj@B29enSicilianNimzovich-Rubinstein variation./mW B28enSicilianO'Kelly variation,+/7B27enSicilianActon extension =Dg:p=0.3od,B40enSicilianAnderssen variation%-- SuB40enSicilian defense/,1YB40enSicilianMarshall variation%+- ^T9rB40enSicilian defenseE*]r<&4B39enSicilianAccelerated Fianchetto, Breyer variationH)cOX DбB38enSicilianAccelerated Fianchetto, Maroczy bind, 6.Be3F(_]kDB37enSicilianAccelerated Fianchetto, Simagin variationJ'ga3B36enSicilianAccelerated Fianchetto, Maroczy bindN$oV@B35enSicilianAccelerated Fianchetto, Modern variation with Bc4E#]Xѿ@HB34enSicilianAccelerated Fianchetto, Modern variationG"aLMY, B34enSicilianAccelerated Fianchetto, Exchange variation1!5[>yJ B33enSicilianSveshnikov variation; Is^eB33enSicilianPelikan, Chelyabinsk variation GR%r<t2G6?? gbHtB45enSicilianTaimanov, American attack/>1d\JB45enSicilianTaimanov variationC=i k-B44enSicilian, Szen variation, Dely-Kasparov gambit7<Q .֧-s=B44enSicilian, Szen, hedgehog variation?;a jft{B44enSicilian, Szen (`anti-Taimanov') variation%:- D-B44enSicilian defense'9!u*\+B43enSicilianKan, 5.Nc388CZB42enSicilianKan, Swiss cheese variation87C B42enSicilianKan, Polugaievsky variation369ʭuϽ&B42enSicilianKan, Gipslis variation'5!̪>WB42enSicilianKan, 5.Bd3D4[ \B41enSicilianKan, Maroczy bind - Bronstein variation?3Qj5,>B41enSicilianKan, Maroczy bind (Reti variation)*2'm辕B41enSicilianKan variation013qCB55enSicilianPrins variation, Venice attack5M=Ns*oB54enSicilianPrins (Moscow) variationL {,ĴB54enSicilian9KEm*B53enSicilianChekhover, Zaitsev variation2JG a2dB53enSicilian, Chekhover variationFI_4vB52enSicilianCanal-Sokolsky attack, Sokolsky variationDH[H,WB52enSicilianCanal-Sokolsky attack, Bronstein gambit;GIW! B52enSicilianCanal-Sokolsky attack, 3...Bd7PFsM\8B51enSicilianCanal-Sokolsky (Nimzovich-Rossolimo, Moscow) attack1E5,fE~B50enSicilianwing gambit deferredD 0ibB50enSicilian/C1|יB49enSicilianTaimanov variation/B1v1{B48enSicilianTaimanov variation;AIbcB47enSicilianTaimanov (Bastrikov) variation/@1lH;Ͳ(B46enSicilianTaimanov variation Ob9^\OUB69enSicilianRichter-Rauzer, Rauzer attack, 7...a6 defense, 11.Bxf6Sjy Lo> B68enSicilianRichter-Rauzer, Rauzer attack, 7...a6 defense, 9...Be7SiyaB67enSicilianRichter-Rauzer, Rauzer attack, 7...a6 defense, 8...Bd7BhW:ze5|B66enSicilianRichter-Rauzer, Rauzer attack, 7...a6Ug}X<B65enSicilianRichter-Rauzer, Rauzer attack, 7...Be7 defense, 9...Nxd4Uf}f,OB65enSicilianRichter-Rauzer, Rauzer attack, 7...Be7 defense, 9...Nxd4Lek7 1aB64enSicilianRichter-Rauzer, Rauzer attack, Geller variationQdu3@1 B64enSicilianRichter-Rauzer, Rauzer attack, 7...Be7 defense, 9.f4CcYAyB63enSicilianRichter-Rauzer, Rauzer attack, 7...Be7:bG\FgB63enSicilianRichter-Rauzer, Rauzer attack @UO Jw@4}; @B75enSicilianDragon, Yugoslav attackB|WOA`"0B74enSicilianDragon, Classical, Alekhine variationI{e>=rB74enSicilianDragon, Classical, Reti-Tartakower variation?zQ\VٷB74enSicilianDragon, Classical, Bernard defenseCyYЈQ1uB74enSicilianDragon, Classical, Spielmann variation@xSt "$.B74enSicilianDragon, Classical, Stockholm attack5w=ɔH'.B74enSicilianDragon, Classical, 9.Nb3AvUuӉ7B73enSicilianDragon, Classical, Richter variation>uOuY%]B73enSicilianDragon, Classical, Zollner gambit5t=WM!iB73enSicilianDragon, Classical, 8.O-ODs[Ib˪[B72enSicilianDragon, Classical, Nottingham variationCrY3XBB72enSicilianDragon, Classical, Grigoriev variationCqY iz#1B72enSicilianDragon, Classical, Amsterdam variation5p=Ղ B72enSicilianDragon, Classical attack*o'AOO@B78enSicilianDragon, Yugoslav attack, 10.O-O-O=MlOB77enSicilianDragon, Yugoslav attack, 9...Bd7E]EJ>B77enSicilianDragon, Yugoslav attack, Byrne variation;Iu )>&֟B77enSicilianDragon, Yugoslav attack, 9.Bc4F_.5]FB76enSicilianDragon, Yugoslav attack, Rauser variation=~ML {޽3B76enSicilianDragon, Yugoslav attack, 7...O-O .{0J_%U.$ %MB90enSicilianNajdorf/1 &x2B89enSicilianVelimirovic attack)%t 'B89enSicilianSozin, 7.Be35=<S0B88enSicilianSozin, Fischer variation7Ae|J,B88enSicilianSozin, Leonhardt variation7Af!m$B87enSicilianSozin with ...a6 and ...b5)%Α嚽1B86enSicilianSozin attack>OTeB85enSicilianScheveningen, Classical Main line4;QyBfB85enSicilianScheveningen, ClassicalD[lj B85enSicilianScheveningen, Classical, Maroczy systemU}"ĵ=LCYB85enSicilianScheveningen, Classical variation with ...Qc7 and ...Nc6Hct?DCbB84enSicilianScheveningen (Paulsen), Classical variation@SATȠcB84enSicilianScheveningen, Classical, Nd7 systemHc UTTUsB84enSicilianScheveningen (Paulsen), Classical variationD[$:B83enSicilianModern Scheveningen, Main line with Nb3;I@^[YB83enSicilianModern Scheveningen, Main line :S u=Z*:D.[L&͗B98enSicilianNajdorf, Goteborg (Argentine) variation6-?$]2'4B98enSicilianNajdorf, Browne variation-,-PU6nUB98enSicilianNajdorf, 7...Be7=+M FBB97enSicilianNajdorf, Poisoned pawn variation-*-fR6/KB97enSicilianNajdorf, 7...Qb6E)]cG9[PB96enSicilianNajdorf, Polugayevsky, Simagin variation<(K$ghDB96enSicilianNajdorf, Polugayevsky variation*''DB96enSicilianNajdorf, 7.f4,&+TB95enSicilianNajdorf, 6...e65%=RhjB94enSicilianNajdorf, Ivkov variation+$)r9vTJB94enSicilianNajdorf, 6.Bg5*#'XTm B93enSicilianNajdorf, 6.f4:"Gz"L!B92enSicilianNajdorf, Opovcensky variationC!Y%DN+WB91enSicilianNajdorf, Zagreb (Fianchetto) variation< KzƔ B90enSicilianNajdorf, Byrne (English) attack6?j'eY$B90enSicilianNajdorf, Lipnitzky attack27Q_FpB90enSicilianNajdorf, Adams attack Xo6vM'c*X/B5}QpC00enFrenchSchlechter variation#A) dh.C00enFrench defense'@1 ㉷8ZC00enSt. George defense'?1 Ъ&C00enLengfellner system#>) 1~FC00enFrench defense6=C r"C C00enFrenchReversed Philidor formation/<5Z華jC00enFrenchKing's Indian attack-;1bMCw@C00enFrenchChigorin variation0:7Qҿ!|C00enFrenchTwo knights variation,9/w.ڢ C00enFrenchPelikan variation#8) q'SC00enFrench defense&7#|LC00enFrenchWing gambit#6) //հC00enFrench defense25; ]lMC00enFrenchLabourdonnais variation*4+2-C00enFrenchSteinitz attack53Ax 5?C00enFrenchReti (Spielmann) variation62O xhEC11enFrenchSwiss variation#e) mH6qC11enFrench defense3d=vC10enFrenchFrere (Becker) variation6cC狉MsC10enFrenchRubinstein, Capablanca line/b5(krC10enFrenchRubinstein variation.a3oP7jC10enFrenchFort Knox variation/`5 tc5)C10enFrenchRubinstein variation-_1U;C10enFrenchMarshall variation,^/O|}0yC10enFrenchPaulsen variation>]ScIꎴ)WC09enFrenchTarrasch, Open variation, Main line2\;ޚ^ C08enFrenchTarrasch, Open, 4.ed ed8[G@_C07enFrenchTarrasch, Eliskases variation3Z=  C07enFrenchTarrasch, Open variation8YG!zh C06enFrenchTarrasch, Leningrad variation@XW)C06enFrenchTarrasch, Closed variation, Main line5WA@eC05enFrenchTarrasch, Closed variation8VGe<C05enFrenchTarrasch, Botvinnik variation5UAH_)[C05enFrenchTarrasch, Closed variation <f6S'y<<Dw_.| ּC12enFrenchMacCutcheon, Dr. Olland (Dutch) variation:vK|SH;C12enFrenchMacCutcheon, Janowski variation;uMwC?/C12enFrenchMacCutcheon, Bernstein variation;tM XEC12enFrenchMacCutcheon, Grigoriev variation:sK]VB_C12enFrenchMacCutcheon, Chigorin variation9rIz`EUDaC12enFrenchMacCutcheon, Advance variationSv'ӻrC19enFrenchWinawer, Advance, Smyslov variation4?NXCmC19enFrenchWinawer, Advance, 6...Ne77EIC18enFrenchWinawer, Classical variation5A9HC18enFrenchWinawer, Advance variation=Qh bD8C17enFrenchWinawer, Advance, Rauzer variation19VS.[C17enFrenchWinawer, Advance, 5.a3>STp̅OC17enFrenchWinawer, Advance, Russian variationAY(GFC17enFrenchWinawer, Advance, Bogolyubov variation5A(bBC17enFrenchWinawer, Advance variation Bc.yT/kHyB49#5kVxj6C22enCentre gameKupreichik variation08#-owC22enCentre gameBerger variation27#1dĘC22enCentre gamel'Hermet variation36#30]o7C22enCentre gameCharousek variation.5#)46L)C22enCentre gamePaulsen attack 4# UyFC22enCentre game 3# +oC21enCentre game32'/lWC21enDanish gambitSoerensen defense41'1uRJC21enDanish gambitSchlechter defense10'+J8UC21enDanish gambitCollijn defense"/' Nk6qC21enDanish gambit".' ?׽~C21enHalasz gambit7-Q hUW ,C21enCentre game, Kieseritsky variation ,# V2FC21enCentre game%+- xFߴ^C20enAlapin's Opening-*#'~k&C20enKing's pawnLopez Opening2)#1f)BC20enKing's pawnNapoleon's Opening.(#)IpVC20enKing's pawnKing's head Opening3&#3آ<'7C20enKing's pawnMengarini's Opening .h._+~Ed.3J-)0M.C24enBishop's OpeningBerlin defense7I-1?C23enBishop's OpeningFour pawns' gambit=H-=兇;8C23enBishop's OpeningMacDonnell double gambit0G-#l*3C23enBishop's OpeningWing gambit1F-%LÝLC23enBishop's OpeningLewis gambit6E-/{C23enBishop's Openingdel Rio variation9D-55Z!%C23enBishop's OpeningLewis counter-gambit4C-+HD;C23enBishop's OpeningPratt variation7B-10\C23enBishop's OpeningPhilidor variation1A-%+#ɷKC23enBishop's OpeningLopez gambit8@-3ciC23enBishop's OpeningClassical variationQ?-eQ<~ C23enBishop's OpeningCalabrese counter-gambit, Jaenisch variation=>-=A?BC23enBishop's OpeningCalabrese counter-gambit7=-1U[C23enBishop's OpeningLisitsyn variation<<-;1wC23enBishop's OpeningPhilidor counter-attack%;- k'2FoC23enBishop's Opening.:#)v'dfVC22enCentre gameHall variation M`]4Y4M9\I-C25enViennaHamppe-Muzio, Dubois variation.[3IC25enViennaHamppe-Muzio gambitCZ]ਏ8rHC25enViennaHamppe-Allgaier gambit, Alapin variation1Y9;%C25enViennaHamppe-Allgaier gambit"X' ??C25enVienna gambitFWcYC25enViennaSteinitz gambit, Fraser-Minckwitz variation=VQe;S vC25enViennaSteinitz gambit, Zukertort defense*U+;ceC25enViennaSteinitz gambit"T' (.WC25enVienna gambit&S# |N8C25enViennaFyfe gambit,R/t]PFBC25enViennaPaulsen variation3QI X>SZzC25enVienna game, Max Lange defense2P;4ƤC25enViennaZhuravlev countergambit O# Ӌ;yC25enVienna gameCN-I3缮JC24enBishop's OpeningUrusov gambit, Panov variation2M-'6VvC24enBishop's OpeningUrusov gambit4L-+, JC28enVienna game@i=3(7J$AC27enBoden-Kieseritsky gambitLichtenhein defense-h= ]GjgC27enBoden-Kieseritsky gambit-g1aNƋC27enViennaAlekhine variation f# ||NC27enVienna game(e'Րۄ\QC27enViennaAdams' gambit;dMţoF[C27enVienna`Frankenstein-Dracula' variation c# v9Ey93XOLWnC30enKing's gambit declinedClassical variationMx9Q^,JC30enKing's gambit declinedNorwalde variation, Buecker gambit=w91jsC30enKing's gambit declinedNorwalde variation8v9'#?"TC30enKing's gambit declinedMafia defense:u9+wrC30enKing's gambit declinedKeene's defense"t' Rwe)C30enKing's gambit6sO ~#9C29enVienna gambit, Steinitz variation3rI n.ēeC29enVienna gambit, Wurzburger trap"q' Oe{C29enVienna gambit 9j5VAu99 9)44uC32enKing's gambit declinedFalkbeer, 5.deB 9;XJADM$8C31enKing's gambit declinedFalkbeer, Morphy gambit9 9)E8GK+C31enKing's gambit declinedFalkbeer, 4.d3H 9GK?*fO|C31enKing's gambit declinedFalkbeer, Nimzovich variationI 9INXU"4C31enKing's gambit declinedFalkbeer, Rubinstein variation;9-x WC31enKing's gambit declinedFalkbeer, 3...e4C9=ŝ+F[C31enKing's gambit declinedNimzovich counter-gambitB9;WN1ވ C31enKing's gambit declinedFalkbeer counter-gambitK9Mԡ)SHC31enKing's gambit declinedFalkbeer, Milner-Barry variationI9I\ W2C31enKing's gambit declinedFalkbeer, Tartakower variationB9;p8C31enKing's gambit declinedFalkbeer counter-gambit29ڟſC30enKing's gambit declined2...Nf6E9Adw*C30enKing's gambit declinedClassical, Heath variationK9M6xknC30enKing's gambit declinedClassical, SOldatenkov variation Gn$J\GF9C#WcC33enKing's gambit acceptedVillemson (Steinitz) gambitB9;[yC33enKing's gambit acceptedCarrera (Basman) gambit99)Iu+*AC33enKing's gambit acceptedSchurig gambitH9G{HC33enKing's gambit acceptedPawn's gambit (Stamma gambit)89'~ݜ'C33enKing's gambit acceptedOrsini gambit<9/dZnXC33enKing's gambit acceptedTumbleweed gambit+9 ԉFC33enKing's gambit acceptedC9="9C32enKing's gambit declinedFalkbeer, Reti variationD9?ŴbpLC32enKing's gambit declinedFalkbeer, Keres variationH9G ǜgC32enKing's gambit declinedFalkbeer, Charousek variationE9AiU^C32enKing's gambit declinedFalkbeer, Charousek gambitG9ECؗHC32enKing's gambit declinedFalkbeer, Tarrasch variationG9E 4d mC32enKing's gambit declinedFalkbeer, Main line, 7...Bf5E9A2AC32enKing's gambit declinedFalkbeer, Alapin variation ez=ReL'9O>C33enKing's gambit acceptedBishop's gambit, Fraser variationL&9OwkXvC33enKing's gambit acceptedBishop's gambit, McDonnell attackL%9O! ,cC33enKing's gambit acceptedBishop's gambit, McDonnell attackM$9Q CϻC33enKing's gambit acceptedBishop's gambit, Classical defenseH#9Gkg _C33enKing's gambit acceptedBishop's gambit, Grimm attackM"9Q_*T=C33enKing's gambit acceptedBishop's gambit, Classical defenseK!9MA3A4C33enKing's gambit acceptedBishop's gambit, Greco variationM 9QVL4iC33enKing's gambit acceptedBishop's gambit, Chigorin's attack:9+k`nU[C33enKing's gambit acceptedBishop's gambit_9uoXWpG^C33enKing's gambit acceptedLesser Bishop's (Petroff-Jaenisch-Tartakower) gambit89'jFC33enKing's gambit acceptedBreyer gambitH9GO+H$C33enKing's gambit acceptedKeres (Mason-Steinitz) gambit mVag mM29QVL4iC33enKing's gambit acceptedBishop's gambit, Gifford variationL19OB=}C33enKing's gambit acceptedBishop's gambit, Bledow variationX09gdu;2 C33enKing's gambit acceptedLopez-Gianutio counter-gambit, Hein variationY/9i8axC33enKing's gambit acceptedBishop's gambit, Lopez-Gianutio counter-gambitM.9QN)C33enKing's gambit acceptedBishop's gambit, Ruy Lopez defenseK-9MԆCxXC33enKing's gambit acceptedBishop's gambit, Maurian defenseL,9OA$`C33enKing's gambit acceptedBishop's gambit, Steinitz defenseP+9Wo DfC33enKing's gambit acceptedBishop's gambit, Bryan counter-gambitP*9W]o}P3C33enKing's gambit acceptedBishop's gambit, Bryan counter-gambitI)9I݊C33enKing's gambit acceptedBishop's gambit, Boden defense[(9msWC33enKing's gambit acceptedBishop's gambit, Classical defense, Cozio attack NV_JN;?9-R VC34enKing's gambit acceptedSchallop defense9>9)UKsC34enKing's gambit acceptedBecker defense:=9+4C34enKing's gambit acceptedFischer defenseB<9;S^C34enKing's gambit acceptedGianutio counter-gambitF;9C•i}C34enKing's gambit acceptedBonsch-Osmolovsky variation+:9 Ǽ8.LC34enKing's knight's gambitN99SMhv1EC33enKing's gambit acceptedBishop's gambit, Jaenisch variationJ89Kw*3 NxRC33enKing's gambit acceptedBishop's gambit, Paulsen attackP79WLC33enKing's gambit acceptedBishop's gambit, Bogolyubov variationR69[$TTC33enKing's gambit acceptedBishop's gambit, Cozio (Morphy) defenseL59OͮiQC33enKing's gambit acceptedBishop's gambit, Morphy variationO49U*k>C33enKing's gambit acceptedBishop's gambit, Anderssen variationU39a^C33enKing's gambit acceptedBishop's gambit, Boren-Svenonius variation [y-4g)[KL9M@'C37enKing's gambit acceptedLolli gambit (wild Muzio gambit)9K9)h*nC37enKing's gambit acceptedBlachly gambitAJ99$L|C37enKing's gambit acceptedKing's knight's gambit;I9-[TFq3C37enKing's gambit acceptedSoerensen gambit=H9110C37enKing's gambit acceptedRosentreter gambit8G9'hxC37enKing's gambit acceptedQuaade gambitOF9U$b⛂WKC36enKing's gambit acceptedAbbazia defense, Botvinnik variationLE9O>$ vC36enKing's gambit acceptedAbbazia defense, Modern variationaD9yBkC36enKing's gambit acceptedAbbazia defense (Classical defense, Modern defense[!])CC9=-Ma^aC35enKing's gambit acceptedCunningham, Euwe defenseIB9I4HC35enKing's gambit acceptedCunningham, Three pawns gambitDA9?ihlC35enKing's gambit acceptedCunningham, Bertin gambit=@91pKNQC35enKing's gambit acceptedCunningham defense 0s4b%a 0YZ9i O>C37enKing's gambit acceptedMuzio gambit, Kling and Horwitz counter-attackIY9I,-Xz[C37enKing's gambit acceptedMuzio gambit, Holloway defenseEX9A>"q2C37enKing's gambit acceptedMuzio gambit, From defense>W93FœC37enKing's gambit accepteddouble Muzio gambitJV9K8[ XC37enKing's gambit acceptedMuzio gambit, Paulsen variation7U9%^k?oǐC37enKing's gambit acceptedMuzio gambit:T9+r_uC37enKing's gambit acceptedHerzfeld gambit:S9+WC37enKing's gambit acceptedCochrane gambitRR9["OC37enKing's gambit acceptedSalvio gambit, Anderssen counter-attack?Q95KY>C37enKing's gambit acceptedSilberschmidt gambit8P9'H.C37enKing's gambit acceptedSalvio gambit-lC39enKing's gambit acceptedAllgaier, Cook variationFd9CthFsC39enKing's gambit acceptedAllgaier, ThorOld variationBc9;=8}C39enKing's gambit acceptedAllgaier, Horny defense:b9+h9C39enKing's gambit acceptedAllgaier gambit+a9 \Td4C39enKing's knight's gambitM`9QLt9uC38enKing's gambit acceptedPhilidor gambit, Schultz variation7_9%L⿰C38enKing's gambit acceptedGreco gambit:^9+Sy8C38enKing's gambit acceptedPhilidor gambit:]9+:VC38enKing's gambit acceptedHanstein gambit+\9 ACUGt9Eo?'T$.C39enKing's gambit acceptedKieseritsky, Neumann defenseGs9EN*n-C39enKing's gambit acceptedKieseritsky, Polerio defenseWr9eŮ}C39enKing's gambit acceptedKieseritsky, Salvio defense, Cozio variationRq9[}8 /GC39enKing's gambit acceptedKieseritsky, Salvio (Rosenthal) defenseXp9g]Θl<[C39enKing's gambit acceptedKieseritsky, Brentano defense, Caro variationHo9Gb80F3xC39enKing's gambit acceptedKieseritsky, Brentano defense\n9o;C:;MC39enKing's gambit acceptedKieseritsky, Brentano defense, Kaplanek variationSm9]W C39enKing's gambit acceptedKieseritsky, Brentano (Campbell) defense]l9q:X" C39enKing's gambit acceptedKieseritsky, long whip defense, Jaenisch variation`k9wy ZC39enKing's gambit acceptedKieseritsky, long whip (Stockwhip, Classical) defenseGj9E>s0JC39enKing's gambit acceptedKieseritsky, Paulsen defense Lm{N&f8|L-/Ӵ>C40enLatvianPolerio variation-/:~3C40enLatvianBehting variation*7 $]#C40enLatvian gambit, 3.Bc4*)R5l vC40enLatvianFraser defense/3 Yr]knC40enLatvianNimzovich variation+9 GOuCC40enLatvian counter-gambit4/):7C40enQP counter-gambitMaroczy gambit8~S VJ]ƖC40enQP counter-gambit (elephant gambit)&}/ uy<C40enDamiano's defense"|' +cpC40enGreco defense%{- Hߠ.vC40enGunderam defense*z7 ؝C40enKing's knight OpeningCy9=BGY. C39enKing's gambit acceptedKieseritsky, Rice gambitMx9Q:gN|C39enKing's gambit acceptedKieseritsky, Berlin defense, 6.Bc4Yw9i NP#C39enKing's gambit acceptedKieseritsky, Berlin defense, Riviere variationFv9CYl0f?C39enKing's gambit acceptedKieseritsky, Berlin defenseGu9E;8q@C39enKing's gambit acceptedKieseritsky, Kolisch defense am9IS!a--:£kfC41enPhilidorLarsen variation--ENL0jC41enPhilidorBerger variation/1 {C41enPhilidorExchange variation+) j+ C41enPhilidorPaulsen attack/1E:C41enPhilidorExchange variation,++%3C41enPhilidorBoden variation/1̥بC41enPhilidorExchange variationIe@WC41enPhilidorPhilidor counter-gambit, Zukertort variationF_"6C41enPhilidorPhilidor counter-gambit, Berger variationD [t_Ϗ}iC41enPhilidorPhilidor counter-gambit, del Rio attack4 ;{+lC41enPhilidorPhilidor counter-gambit' 1 /'ţC41enPhilidor's defenseE ]ƫ[C41enPhilidorLopez counter-gambit, Jaenisch variation1 5F;0SBt8M C42enPetrovClassical attack, Maroczy variation=/Q/oU|RC42enPetrovClassical attack, Krause variation=.QGn!'RC42enPetrovClassical attack, Berger variation?-UfzpiwC42enPetrovClassical attack, Chigorin variation+,-wC42enPetrovClassical attack0+777ΐC42enPetrovCozio (Lasker) attack+*-/B65C42enPetrovNimzovich attack*)+'12C42enPetrovKaufmann attack(('{D C42enPetrovFrench attack \q;ZP)\+K)>ACtC44enPonzianiCaro variation%J- _rC44enPonziani Opening#I) ?[C44enTayler Opening$H+ "I+iC44enInverted Hanham'G1 M$7=C44enInverted Hungarian$F+ 8*T֙C44enDresden Opening.E? T+OTC44enKonstantinopolsky Opening+D9 *Ͱ&{C44enIrish (Chicago) gambit%C- xͧ}C44enKing's pawn game>BS #ՍCC43enPetrovModern attack, Trifunovic variation?AUL*ZC43enPetrovModern attack, Symmetrical variation(@'6VvC43enPetrovUrusov gambit>?S4k~.C43enPetrovModern attack, Bardeleben variation<>OqIPFC43enPetrovModern attack, Steinitz variation3==C#C43enPetrovModern attack, Main line3<=Md!IC43enPetrovModern (Steinitz) attack,;/}1OC42enPetrovItalian variation.:? sYSi C42enPetrov Three knights game,9/: !.C42enPetrovDamiano variation /d6f%h<}/K^'_>C44enScotch gambitAnderssen (Paulsen, Suhle) counter-attack"]' E56roC44enScotch gambit?\UA=cC44enScotchGoering gambit, Bardeleben variation)[)v/C44enScotchGoering gambit)Z)%C44enScotchSea-cadet mate)Y)P\zAKOC44enScotchGoering gambit7XEXSJC44enScotchRelfsson gambit ('MacLopez')-W1PmC44enScotchCochrane variation*V+s$(kC44enScotchLolli variation#U) JPC44enScotch Opening>T_ z7P)C44enPonziani counter-gambit, Cordel variationC44enScotch gambitBenima defense4e'1PM@HC44enScotch gambitCochrane variation"d' n޿C44enScotch gambit4c'1pԔjC44enScotch gambitHanneken variation"b' t_ZMC44enScotch gambit0a'){Bc˭C44enScotch gambitVitzhum attack9`';ePSC44enScotch gambitCochrane-Shumov defense"_' HC44enScotch gambit 9|J[)Jo93%1(10C46enFour knightsGunsberg variation2%/?qPhwC46enFour knightsItalian variation8%;f܅C46enFour knightsSchultze-Mueller gambit&/ شYxC46enFour knights game?'Gga+C46enThree knightsSteinitz, Rosenthal variation4'1jm C46enThree knightsSteinitz variationB'M55kҙC46enThree knightsWinawer defense (Gothic defense)6~'5Ls)- C46enThree knightsSchlechter variation'}1 ZaGC46enThree knights game/|5&]C45enScotchRomanishin variation+{-x~ %C45enScotchPotter variation,z/mUWfq^QC45enScotchBlumenfeld attack,y/ħgFVC45enScotchMeitner variation4x?VyP*'\C45enScotchPaulsen, Gunsberg defense)w)t(sC45enScotchPaulsen attack/v5Ek 3C45enScotchGottschall variation,u/W?C45enScotchBlackburne attack t#  2x= w@A>>$%GٟYC49enFour knightsNimzovich (Paulsen) variation<#%Cqٳ]C49enFour knightsSymmetrical, Maroczy system@"%KS 5%C49enFour knightsSymmetrical, Tarrasch variation=!%E0F E}BzbC49enFour knightsSymmetrical, Blake variationA %MZuC49enFour knightsSymmetrical, Pillsbury variationB%OVqwXC49enFour knightsSymmetrical, Capablanca variation:%?iC49enFour knightsSymmetrical, Metger unpin6%7i%2C49enFour knightsSymmetrical variation4%3U3C49enFour knightsSvenonius variation3%1/{^3lC49enFour knightsJanowski variation!% kz>UC49enFour knights5%5Vܧ8^uC49enFour knightsGunsberg counter-attack1%-"+3VpC49enFour knightsdouble Ruy LopezQ%mBbM#߸C48enFour knightsRubinstein counter-gambit, Henneberger variation SVa(SS=6] +>qqTC51enEvans gambit declined, Vasquez variation@5c \bC51enEvans gambit declined, Hirschbach variation<4[ QodӚLC51enEvans gambit declined, Pavlov variation;3Y ~^W[C51enEvans gambit declined, Lange variation*27 "SD-C51enEvans gambit declined51/+G^yC50enGiuoco PianissimoCanal variationD0/Iz9 C50enGiuoco PianissimoItalian Four knights variation&// C)]C50enGiuoco Pianissimo6./-PxxvLC50enGiuoco PianissimoDubois variation&-/ ǔboC50enGiuoco Pianissimo.,%'QC50enGiuoco PianoJerome gambit7+%9{*C50enGiuoco PianoFour knights variation!*% cW}AC50enGiuoco Piano:)/5'pC50enHungarian defenseTartakower variation&(/ `kC50enHungarian defense$'+ uHC50enRousseau gambit/&A Ȼ 6C50enBlackburne shilling gambit%%- ~&?8C50enKing's pawn game .L Sa0b.1I%- C51enEvans gambitCordel variation(H%pEF,C51enEvans gambit5...Be7.G%']#n+C51enEvans gambitMayet defense5F%5o(SSQC51enEvans gambitStone-Ware variation7E%9*o~ػC51enEvans gambitFraser-Mortimer attack.D%'eUbcZC51enEvans gambitFraser attack!C% e]C51enEvans gambit3B%1u\C51enEvans gambitSteinitz variation/A%)9onߣC51enEvans gambitGoering attack.@%'gt(ئaC51enEvans gambitMorphy attack2?%/5e5C51enEvans gambitPaulsen variation3>%1)޼C51enEvans gambitUlvestad variation1=%- ':$C51enEvans gambitnormal variation!<% #z̞C51enEvans gambit);5 ϐcC51enEvans counter-gambit<:[ <XeC51enEvans gambit declined, Cordel variation?9a ĝ&ekAC51enEvans gambit declined, Showalter variation08C tw@DC51enEvans gambit declined, 5.a4<7[ &ګC51enEvans gambit declined, Hicken variation ][Kg5]8[%;804C53enGiuoco PianoLaBourdonnais variation!Z% %N=C53enGiuoco Piano:Y%?2 qAC52enEvans gambitAlapin-Steinitz variation9X%=iC52enEvans gambitSanders-Alapin variation/W%)+D<C52enEvans gambitLasker defense.V%'UQC52enEvans gambitWaller attack!U% 1Cב'bfC52enEvans gambit2T%/"C8 C52enEvans gambitRichardson attack!S% A+ C52enEvans gambit3R%1LY96OC52enEvans gambitSokolsky variation4Q%3cq.C52enEvans gambitLevenfish variation2P%/ <C52enEvans gambitTartakower attack!O% J4C52enEvans gambit4N%3ӽ{i`dC52enEvans gambitLeonhardt variationFM%W~9C52enEvans gambitcompromised defense, Potter variationGL%YZ%l^C52enEvans gambitcompromised defense, Paulsen variation4K%3m&݈C52enEvans gambitcompromised defense!J% v:ĉ C52enEvans gambit b['x=V$b!n% L6J1C54enGiuoco Piano1m%-P5TC54enGiuoco PianoAitken variation4l%3M9KC54enGiuoco PianoBernstein variation0k%+HHC54enGiuoco PianoGreco variation/j%)x!bC54enGiuoco PianoGreco's attack1i%-I`C54enGiuoco PianoCracow variation1h%-JcC54enGiuoco PianoKrause variation!g% ikt9b:C54enGiuoco Piano4f%3[C53enGiuoco PianoAnderssen variation!e% =TC53enGiuoco Piano8d%;RއC53enGiuoco PianoGhulam Kassim variation!c% ^b"C53enGiuoco Piano.b%'1.cC53enGiuoco PianoBird's attack!a% WxC53enGiuoco Piano3`%1~hC53enGiuoco PianoEisinger variation1_%- C;-C53enGiuoco PianoMestel variation3^%1GnC53enGiuoco PianoTarrasch variation9]%=~wu$C53enGiuoco Pianocentre-hOlding variation0\%+[FpWC53enGiuoco Pianoclose variation 9PXlA9F#Y{캺yoC55enTwo knightsMax Lange attack, Rubinstein variationD~#U-?pC55enTwo knightsMax Lange attack, Marshall variationB}#Q:%xSdMC55enTwo knightsMax Lange attack, Berger variation0|#-+iWC55enTwo knightsMax Lange attack({3 `y;{C55enTwo knights defense;zY H .D+]C55enTwo knights defense, Perreux variation;yY qq+jzn2C55enTwo knights defense, Keidanz variation(x3 yC55enTwo knights defenseBwg 4֪QzC55enTwo knights defense (Modern Bishop's Opening)2v%/`C55enGiuoco pianoHolzhausen attack!u% K;9N9(C55enGiuoco piano6t%7ǬZAC55enGiuoco pianoRosentreter variation(s3 @'Ӓ:C55enTwo knights defense8r%;>rC54enGiuoco PianoMoeller, bayonet attack:q%? z,C54enGiuoco PianoTherkatz-Herzog variation:p%?VDu+اC54enGiuoco PianoMoeller (Therkatz) attack3o%1) C54enGiuoco PianoSteinitz variation mu.I\m83-TdwC57enTwo knights defenseFegatello attack8 3-'mҾC57enTwo knights defensePincus variation4 3%,a.4C57enTwo knights defenseLolli attack? 3;i [%C57enTwo knights defenseFritz, Gruber variation7 3+c ^C57enTwo knights defenseFritz variation: 31JC57enTwo knights defenseUlvestad variationH3M_]C57enTwo knights defenseWilkes Barre (Traxler) variation(3 B; C57enTwo knights defense73+'P2C56enTwo knights defenseCanal variation83- 9B%C56enTwo knights defenseYurdansky attack(3 7=C56enTwo knights defenseB#QG3(mZC55enTwo knightsMax Lange attack, Krause variationD#U1pUbC55enTwo knightsMax Lange attack, Steinitz variationF#YΠbAC55enTwo knightsMax Lange attack, Schlechter variation?#Kz߼ oC55enTwo knightsMax Lange attack, Loman defense Wd9Ta6 W:310TC59enTwo knights defenseSteinitz variation93/'{02C59enTwo knights defenseGoering variation83-搂xPC59enTwo knights defenseKnorre variation(3 &3.`?C59enTwo knights defense(3 #xHC58enTwo knights defense<35يFC58enTwo knights defenseBlackburne variation83-0:3C58enTwo knights defenseColman variation73+.x:hC58enTwo knights defensePaoli variation<35wC58enTwo knights defenseBogolyubov variation(3 I[2| C58enTwo knights defense93/ኛr hC58enTwo knights defenseMaroczy variation;33&=VtC58enTwo knights defenseYankovich variation=37ODC58enTwo knights defenseKieseritsky variation(3 Īq C58enTwo knights defenseI3OśsYcC57enTwo knights defenseFegatello attack, Polerio defenseM3WVWZAC57enTwo knights defenseFegatello attack, Leonhardt variation 6i:b!{4q68/A2%C64enRuy LopezClassical (Cordel) defenseB.U$}AC63enRuy LopezSchliemann defense, Berger variation0-1|8̟C63enRuy LopezSchliemann defenseH,a~(C62enRuy LopezOld Steinitz defense, Semi-Duras variationD+Y 'IwC62enRuy LopezOld Steinitz defense, Nimzovich attack2*5ropC62enRuy LopezOld Steinitz defense?)Oo@C61enRuy LopezBird's defense, Paulsen variation,()n@SC61enRuy LopezBird's defense>'Mgpu2C60enRuy LopezCozio defense, Paulsen variation+&'u\ɞeC60enRuy LopezCozio defenseA%S% |VC60enRuy LopezFianchetto (Smyslov/Barnes) defense.$-P|C60enRuy LopezBrentano defense2#5ѳ+@wC60enRuy LopezVinogradov variation,")_NBC60enRuy LopezLucena defense-!+\T+LC60enRuy LopezPollock defense1 3FpHbC60enRuy LopezNuernberg variation0C KvrC60enRuy Lopez (Spanish Opening) U<URUA>SÕ};i,C65enRuy LopezBerlin defense, Beverwijk variation3=7n9`tC65enRuy LopezBerlin defense, 4.O-O@<Q`L~6uRC65enRuy LopezBerlin defense, Kaufmann variation=;K 5C65enRuy LopezBerlin defense, Duras variationA:S-S C65enRuy LopezBerlin defense, Anderssen variation;9G%C65enRuy LopezBerlin defense, Mortimer trap@8QNC65enRuy LopezBerlin defense, Mortimer variation;7G0HvMC65enRuy LopezBerlin defense, Nyholm attack,6)BTC65enRuy LopezBerlin defense+5'&C64enRuy LopezCordel gambit@4Q +irC64enRuy LopezClassical defense, Boden variationD3Yp/( C64enRuy LopezClassical defense, Charousek variationD2Y)o"C64enRuy LopezClassical defense, Benelux variation 51;bhU C64enRuy LopezClassical defense, 4.c3B0UP$ C64enRuy LopezClassical defense, Zaitsev variation AEiOAALS  $C67enRuy LopezBerlin defense, Pillsbury variationAKS GNC67enRuy LopezBerlin defense, Zukertort variationFJ]7&C67enRuy LopezBerlin defense, Rio de Janeiro variation:IE+|~R[C67enRuy LopezOpen Berlin defense, 5...Be7FH]q{LAC67enRuy LopezOpen Berlin defense, Showalter variationEG[.zrC67enRuy LopezOpen Berlin defense, l'Hermet variationC66enRuy LopezClosed Berlin defense, Showalter variationHBaYB65C66enRuy LopezClosed Berlin defense, Bernstein variation;AGM2C66enRuy LopezBerlin defense, Tarrasch trap@@QC66enRuy LopezBerlin defense, hedgehog variation7??W2qf=C66enRuy LopezBerlin defense, 4.O-O, d6 ?;C Nv?4\9uVC70enRuy LopezCozio defense deferred9[CASJC70enRuy LopezFianchetto defense deferredZ aAoC70enRuy Lopez;YG5GީC69enRuy LopezExchange, Bronstein variation:XEL;[C69enRuy LopezExchange, Gligoric variation?WOwm TC69enRuy LopezExchange variation, Alapin gambit7V?nְC69enRuy LopezExchange variation, 5.O-Ov+C67enRuy LopezBerlin defense, Minckwitz variationBOUJ;GC67enRuy LopezBerlin defense, Trifunovic variation>NM.lwMC67enRuy LopezBerlin defense, Cordel variationC70enRuy LopezTaimanov (chase/wing/Accelerated counterthrust) variation,a)5B~ѷC70enRuy LopezGraz variation,`)C70enRuy LopezCaro variation8_AJshC70enRuy LopezClassical defense deferred7^?a*C70enRuy LopezAlapin's defense deferred5];/JC70enRuy LopezBird's defense deferred 0|Dm+Y%e02{5 %b-C78enRuy LopezRabinovich variation+z'~gd=C78enRuy Lopez...b5 & ...d6)y#}C78enRuy LopezWing attack#x|аHmC78enRuy Lopez5.O-O=wK47t\wC77enRuy LopezMorphy defense, Duras variation1v3]>1+C77enRuy LopezAnderssen variationAuSC77enRuy LopezWormald attack, Gruenfeld variation5t;erƂuC77enRuy LopezWormald (Alapin) attackSswk1eC77enRuy LopezTreybal (Bayreuth) variation (Exchange var. deferred)?rOFYC77enRuy LopezFour knights (Tarrasch) variation,q) ̻.}C77enRuy LopezMorphy defenseWp)%KUF8C76enRuy LopezModern Steinitz defense, Fianchetto (Bronstein) variationKog<ʭS_C75enRuy LopezModern Steinitz defense, Rubinstein variation5n;FY1C75enRuy LopezModern Steinitz defense7m?NyD~E6 =`.~C80enRuy LopezOpen, Schlechter defense) #Fz[+C80enRuy LopezOpen, 7.Bb35 ;/eT\C80enRuy LopezOpen, Richter variation13+y͘g7C80enRuy LopezOpen, Friess attack+'6<C80enRuy LopezOpen, 6.d4 b525nc-k)C80enRuy LopezOpen, Riga variation(!#V<C80enRuy LopezOpen, 6.d449\+t}ЧC80enRuy LopezOpen, Knorre variation8AG C80enRuy LopezOpen, Tartakower variation5;0ȉR~C80enRuy LopezOpen (Tarrasch) defenseNm9PtnBC79enRuy LopezSteinitz defense deferred, Boleslavsky variationMkMYcC79enRuy LopezSteinitz defense deferred, Rubinstein variationLi/2@WC79enRuy LopezSteinitz defense deferred, Lipnitsky variationI~cb0C79enRuy LopezSteinitz defense deferred (Russian defense)-}+ a‹zzC78enRuy LopezMoeller defenseC|W T )C78enRuy LopezArchangelsk (counterthrust) variation /i/~J\$x/F]A禂VC82enRuy LopezOpen, Motzko attack, Nenarokov variation13C82enRuy LopezOpen, Motzko attack6=(-V؁C82enRuy LopezOpen, Dilworth variation<I YC82enRuy LopezOpen, St. Petersburg variation5;Sc;gMLC82enRuy LopezOpen, Italian variation49roUg~C82enRuy LopezOpen, Berlin variation(!'`;C82enRuy LopezOpen, 9.c3ASC81enRuy LopezOpen, Howell attack, Adam variationE[ ZC81enRuy LopezOpen, Howell attack, Ekstroem variation13P3K9C81enRuy LopezOpen, Howell attackF] A C80enRuy LopezOpen, Bernstein variation, Karpov gambit7?ggC80enRuy LopezOpen, Bernstein variation+' }C80enRuy LopezOpen, 8...Be67?Ye}%A =$uC91enRuy LopezClosed, 9.d46==>e[wC90enRuy LopezClosed, Suetin variation7<?Mi$EHC90enRuy LopezClosed, Lutikov variation6;=vhC90enRuy LopezClosed, Pilnik variation1:3ht, 7C90enRuy LopezClosed (with ...d6)@9Q}ѓC89enRuy LopezMarshall, Herman Steiner variationD8Yz߅/CC89enRuy LopezMarshall, Main line, Spassky variation;7GR<'paC89enRuy LopezMarshall, Main line, 14...Qh3:6EB:Ϥ`BkC89enRuy LopezMarshall, Main line, 12.d2d485A|8ۗ.BC89enRuy LopezMarshall, Kevitz variation>4Mweo)C89enRuy LopezMarshall counter-attack, 11...c653;Ԥb|C89enRuy LopezMarshall counter-attack*2%QΙo@ZC88enRuy LopezClosed, 8.c381ALCC88enRuy LopezClosed, anti-Marshall 8.a4-0+'aZ.OC88enRuy LopezClosed, 7...O-O6/=,i C88enRuy LopezTrajkovic counter-attack-.+JEnC88enRuy LopezNoah's ark trap 4Ux@ L n47N?SJhvC96enRuy LopezClosed, Borisenko defense.M-O%(>C96enRuy LopezClosed (10...c5)7L?tc ИC96enRuy LopezClosed, Rossolimo defense.K-%o#CC96enRuy LopezClosed (8...Na5)?JOB4gC95enRuy LopezClosed, Breyer, Simagin variation@IQ" ǀC95enRuy LopezClosed, Breyer, Gligoric variationAHSݼ^DHC95enRuy LopezClosed, Breyer, Borisenko variation3G7_%UHC95enRuy LopezClosed, Breyer, 10.d44F9+j %eC94enRuy LopezClosed, Breyer defense5E;p{y`C93enRuy LopezClosed, Smyslov defenseRDu0o^C92enRuy LopezClosed, Flohr-Zaitsev system (Lenzerheide variation)KCgyѻCx0C92enRuy LopezClosed, Ragozin-Petrosian (`Keres') variation7B??@ɦC92enRuy LopezClosed, Kholmov variation>AM,/C92enRuy LopezClosed, Keres (9...a5) variation*@%C92enRuy LopezClosed, 9.h3:?E;z[*C91enRuy LopezClosed, Bogolyubov variation EF f1}IE:_+9bD00enBlackmar-DiemerLemberg counter-gambit0^+%gQQD00enBlackmar-DiemerEuwe defense+]9 bD00enBlackmar-Diemer gambit-\%% I6D00enQueen's pawnAnti-Veresov3[%1Yn!D00enQueen's pawnChigorin variation1Z%-LC+D00enQueen's pawnStonewall attack$Y+ cp "D00enBlackmar gambit̐+D0D00enLevitsky attack (Queen's Bishop attack)KWy ;A~D00enQueen's pawn, Mason variation, Steinitz counter-gambit2VG 0}'uD00enQueen's pawn, Mason variation&U/ dD00enQueen's pawn game9TC4Q۾C99enRuy LopezClosed, Chigorin, 12...c5d4=SKsh +C98enRuy LopezClosed, Chigorin, Rauzer attack8RA o@GC98enRuy LopezClosed, Chigorin, 12...Nc6?QOSڐ]C97enRuy LopezClosed, Chigorin, Yugoslav system6P=_JXJ}C97enRuy LopezClosed, Chigorin defenseb_ oxS1aD01enRichter-Veresov attack, Richter variation>a_ Fa(D01enRichter-Veresov attack, Veresov variation+`9 `GDD01enRichter-Veresov attack ot!KIo9}U =mCDD10enQueen's Gambit declined"Slav defenseF|;A"MXD09enQueen's Gambit declinedAlbin counter-gambit, 5.g3R{;Yړ:D08enQueen's Gambit declinedAlbin counter-gambit, Balogh variationTz;]}V */D08enQueen's Gambit declinedAlbin counter-gambit, Janowski variationSy;[F~D08enQueen's Gambit declinedAlbin counter-gambit, Krenosz variationRx;YW(l=PD08enQueen's Gambit declinedAlbin counter-gambit, Alapin variation@w;5u0cD08enQueen's Gambit declinedAlbin counter-gambitMv;OY4 4}D08enQueen's Gambit declinedAlbin counter-gambit, Lasker trap@u;5? KfD08enQueen's Gambit declinedAlbin counter-gambitPt;U_1(D07enQueen's Gambit declinedChigorin defense, Janowski variationv/DE3*bcZD17enQueen's Gambit declined"SlavWiesbaden variationCE1#d5D17enQueen's Gambit declined"SlavCarlsbad variation>E'S{xD17enQueen's Gambit declined"SlavKrause attack>E'Y wD17enQueen's Gambit declined"SlavCzech defenseBE/< ЕpD16enQueen's Gambit declined"SlavSteiner variationHE;#2ID16enQueen's Gambit declined"SlavSoultanbeieff variationBE/RQGD16enQueen's Gambit declined"SlavSmyslov variationJW-n~D16enQueen's Gambit declined"Slav acceptedAlapin variationEE5t\a^D15enQueen's Gambit declined"SlavTolush-Geller gambit<E#u!D15enQueen's Gambit declined"SlavSlav gambitJE? RL#qD15enQueen's Gambit declined"Slav5.e3 (Alekhine variation):W &D15enQueen's Gambit declined"Slav acceptedE E5z2}D15enQueen's Gambit declined"SlavSchlechter variationD E3כbD15enQueen's Gambit declined"SlavSuechting variation Pr/e2?PR';Y24N1 D22enQueen's Gambit acceptedAlekhine defense, Alatortsev variation<&;-Q {CD22enQueen's Gambit acceptedAlekhine defenseX%;e-D21enQueen's Gambit acceptedAlekhine defense, Borisenko-Furman variation=$;/!SyD21enQueen's Gambit acceptedEricson variation1#;%F[!D21enQueen's Gambit accepted3.Nf3<";-)VaߵJD20enQueen's Gambit acceptedSchwartz defense=!;/BGDD20enQueen's Gambit acceptedLinares variation0 ;F0a=gD20enQueen's Gambit accepted3.e4,; XA=D20enQueen's gambit acceptedJE?9C9kD19enQueen's Gambit declined"SlavDutch, Saemisch variationKEAMWtD19enQueen's Gambit declined"SlavDutch variation, Main line@E+N8D19enQueen's Gambit declined"SlavDutch variationHE;[UcD18enQueen's Gambit declined"SlavDutch, Lasker variation@E+E.2D18enQueen's Gambit declined"SlavDutch variation fN,vJ@fK7;KO[D27enQueen's Gambit acceptedClassical, Rubinstein variation=6;/:܎AD27enQueen's Gambit acceptedClassical, 6...a6I5;G $[D26enQueen's Gambit acceptedClassical, Steinitz variationF4;ALYvD26enQueen's Gambit acceptedClassical variation, 6.O-OG3;C}zmD26enQueen's Gambit acceptedClassical, Furman variation?2;37%D26enQueen's Gambit acceptedClassical variation21;U0sAD26enQueen's Gambit accepted4...e6)05 !^5#K D25enQGA, Flohr variation3/I w5m3,{|D25enQGA, Janowsky-Larsen variation+.9 RZqXD25enQGA, Smyslov variation- ukrD25enQGA, 4.e3.,? 5=D24enQGA, Bogolyubov variation+! #\CxnD24enQGA, 4.Nc3>*;1 oXD23enQueen's Gambit acceptedMannheim variation,); OD23enQueen's gambit accepted?(;3vdD22enQueen's Gambit acceptedHaberditz variation Ow7b3BO; 0D30enQueen's gambit declinedH=;E>߹D29enQueen's Gambit acceptedClassical, Smyslov variation><;1"AD29enQueen's Gambit acceptedClassical, 8...Bb7F;;Aw~VD28enQueen's Gambit acceptedClassical, Flohr variation=:;/[X k5hD28enQueen's Gambit acceptedClassical, 7...b5<9;-;2D28enQueen's Gambit acceptedClassical, 7.Qe2G8;CD27enQueen's Gambit acceptedClassical, Geller variation 8vBt<]8NT;QG">PD32enQueen's Gambit declinedTarrasch, von Hennig-Schara gambitJ;1PcިD31enQueen's Gambit declinedJanowski variation1I;C&tD31enQueen's Gambit declined3.Nc3>H;1Ѕ,ъ?D30enQueen's Gambit declinedHastings variationFG;A(2"D30enQueen's Gambit declinedCapablanca-Duras variation =h-y0=D`;=aR*D34enQueen's Gambit declinedTarrasch, Reti variationW_;c_\D34enQueen's Gambit declinedTarrasch, Prague variation, Normal positionO^;SvUsЧD34enQueen's Gambit declinedTarrasch, Prague variation, 7...Be7F];A`J/Y{]rD33enQueen's Gambit declinedTarrasch, Wagner variationF\;Aiq5OD33enQueen's Gambit declinedTarrasch, Prague variationh[;E_^D33enQueen's Gambit declinedTarrasch, Schlechter-Rubinstein system, Rey Ardid variationTZ;]TH#OTD33enQueen's Gambit declinedTarrasch, Folkestone (Swedish) variationRY;YD33enQueen's Gambit declinedTarrasch, Schlechter-Rubinstein systemf;1RcA) wsD35enQueen's Gambit declinedExchange variation;e;+{O R+OD44enQueen's Gambit declined Semi-Slav5.Bg5 dcHzO1Ѕ,ъ?D43enQueen's Gambit declined Semi-SlavHastings variation6yO WdD43enQueen's Gambit declined Semi-Slav@x;5U=)}7D42enQueen's Gambit declinedSemi-Tarrasch, 7.Bd3Aw;7]DlGD41enQueen's Gambit declinedSemi-Tarrasch with e3Rv;Y1^D41enQueen's Gambit declinedSemi-Tarrasch, San Sebastian variationJu;I#Q PD41enQueen's Gambit declinedSemi-Tarrasch, Kmoch variation?t;3ov|qD41enQueen's Gambit declinedSemi-Tarrasch, 5.cdVs;ajD40enQueen's Gambit declinedSemi-Tarrasch defense, Pillsbury variationNr;QolZtiD40enQueen's Gambit declinedSemi-Tarrasch, Levenfish variationPq;U'OBD40enQueen's Gambit declinedSemi-Tarrasch, Symmetrical variationAp;7a\8 D40enQueen's Gambit declinedSemi-Tarrasch defenseEo;?Z01nD39enQueen's Gambit declinedRagozin, Vienna variation M`i-MTOIV=/zD45enQueen's Gambit declined Semi-SlavRubinstein (anti-Meran) systemFO-:fhD45enQueen's Gambit declined Semi-SlavStoltz variation=Oth D45enQueen's Gambit declined Semi-Slav5...Nd7\OYjhsD45enQueen's Gambit declined Semi-SlavAccelerated Meran (Alekhine variation)GO/C롁?D45enQueen's Gambit declined Semi-SlavStonewall defense:OzO]D45enQueen's Gambit declined Semi-Slav5.e3SOG+Oi2D44enQueen's Gambit declined Semi-SlavAnti-Meran, Alatortsev systemQOCj)DVD44enQueen's Gambit declined Semi-SlavAnti-Meran, Szabo variationVOMr6n)D44enQueen's Gambit declined Semi-SlavAnti-Meran, Lilienthal variationG~O/wKwD44enQueen's Gambit declined Semi-SlavAnti-Meran gambitG}O/w_^<`D44enQueen's Gambit declined Semi-SlavEkstrom variationS|OG ]ED44enQueen's Gambit declined Semi-SlavBotvinnik system (anti-Meran) Iu-^ u'IJO5EiʀfD48enQueen's Gambit declined Semi-SlavMeran, Old Main linePOA<0_D48enQueen's Gambit declined Semi-SlavMeran, ReynOlds' variation;O$ԦD48enQueen's Gambit declined Semi-SlavMeranKO7ɂCmD48enQueen's Gambit declined Semi-SlavMeran, Pirc variationCO'9/KjD48enQueen's Gambit declined Semi-SlavMeran, 8...a6KO7[_Xw-D47enQueen's Gambit declined Semi-SlavMeran, Wade variationROE&ĵD47enQueen's Gambit declined Semi-Slavneo-Meran (Lundin variation)E O+%,$H"jD47enQueen's Gambit declined Semi-SlavMeran variation; OE(N WD47enQueen's Gambit declined Semi-Slav7.Bc4F O-z.2[D46enQueen's Gambit declined Semi-SlavChigorin defenseE O+*]D46enQueen's Gambit declined Semi-SlavRomih variationJ O5X0_CD46enQueen's Gambit declined Semi-SlavBogolyubov variation;OޔCMrD46enQueen's Gambit declined Semi-Slav6.Bd3 ;X gRt;6!;!QD51enQueen's Gambit declined4.Bg5 Nbd7D ;=9uD50enQueen's Gambit declinedCanal (Venice) variation9;'rHDZBJD50enQueen's Gambit declinedSemi-TarraschX;e{PD50enQueen's Gambit declinedSemi-Tarrasch, Primitive Pillsbury variationK;Knl-9D50enQueen's Gambit declinedSemi-Tarrasch, Krause variationA;7|b\|tWD50enQueen's Gambit declinedBeen-Koomen variation1;3*D50enQueen's Gambit declined4.Bg5LO9PP:[,D49enQueen's Gambit declined Semi-SlavMeran, Rellstab attackLO9'D49enQueen's Gambit declined Semi-SlavMeran, Sozin variationPOAԙweD49enQueen's Gambit declined Semi-SlavMeran, Stahlberg variationLO9q40D49enQueen's Gambit declined Semi-SlavMeran, Sozin variationQOCgwD49enQueen's Gambit declined Semi-SlavMeran, Rabinovich variationQOC͹EwD49enQueen's Gambit declined Semi-SlavMeran, Blumenfeld variation CPPMCK.;K^^VD52enQueen's Gambit declinedCambridge Springs defense, 7.cd[-;k1)D52enQueen's Gambit declinedCambridge Springs defense, Capablanca variation[,;k"D52enQueen's Gambit declinedCambridge Springs defense, Rubinstein variationZ+;ia%KD52enQueen's Gambit declinedCambridge Springs defense, Argentine variation[*;k1ʠ D52enQueen's Gambit declinedCambridge Springs defense, Bogoljubow variationE);? mJKD52enQueen's Gambit declinedCambridge Springs defense,(; Mõ$kD52enQueen's Gambit declinedW';c];hHD51enQueen's Gambit declinedCapablanca anti-Cambridge Springs variation2&;YҬ D51enQueen's Gambit declined5...c6?%;3͜;3`D51enQueen's Gambit declinedManhattan variation,$; ݴ=BD51enQueen's Gambit declined>#;1$ =^jD51enQueen's Gambit declinedAlekhine variation=";/QGD51enQueen's Gambit declinedRochlin variation /l-m.Z/M<;O8S!CD56enQueen's Gambit declinedLasker defense, Russian variationO;;S`Se/1D56enQueen's Gambit declinedLasker defense, Teichmann variation::;)N[D56enQueen's Gambit declinedLasker defenseI9;G:Fk({GD55enQueen's Gambit declinedNeo-Orthodox variation, 7.Bh4?8;3qi^9+D55enQueen's Gambit declinedPetrosian variationJ7;Iy<D55enQueen's Gambit declinedNeo-Orthodox variation, 7.Bxf6B6;9`۬YD55enQueen's Gambit declinedNeo-Orthodox variation<5;-̀>{D55enQueen's Gambit declinedPillsbury attack14;>LxD55enQueen's Gambit declined6.Nf3G3;CVu%*D54enQueen's Gambit declinedAnti-neo-Orthodox variation?2;3)ZQ8$qD53enQueen's Gambit declined4.Bg5 Be7, 5.e3 O-O<1;-CD53enQueen's Gambit declinedLasker variation50;=՘D53enQueen's Gambit declined4.Bg5 Be7Y/;gtpC D52enQueen's Gambit declinedCambridge Springs defense, Yugoslav variation <fh)/<NH;QePD63enQueen's Gambit declinedOrthodox defense, Pillsbury attackCG;;F /©D63enQueen's Gambit declinedOrthodox defense, 7.Rc1YF;gD62enQueen's Gambit declinedOrthodox defense, 7.Qc2 c5, 8.cd (Rubinstein)RE;YpĴaD61enQueen's Gambit declinedOrthodox defense, Rubinstein variationND;Q$e+UD60enQueen's Gambit declinedOrthodox defense, Rauzer variationQC;Wg1P?vD60enQueen's Gambit declinedOrthodox defense, Botvinnik variation;S=kXD57enQueen's Gambit declinedLasker defense, Bernstein variationE=;?lPD57enQueen's Gambit declinedLasker defense, Main line #MW(#\S;m"ߗ"D66enQueen's Gambit declinedOrthodox defense, Bd3 line, Fianchetto variationFR;Ay1EaD66enQueen's Gambit declinedOrthodox defense, Bd3 lineZQ;iA:D65enQueen's Gambit declinedOrthodox defense, Rubinstein attack, Main linedP;}NV0D64enQueen's Gambit declinedOrthodox defense, Rubinstein attack, Gruenfeld variationcO;{Og߭D64enQueen's Gambit declinedOrthodox defense, Rubinstein attack, Karlsbad variation_N;s-ڳD64enQueen's Gambit declinedOrthodox defense, Rubinstein attack, Wolf variationZM;i%,JFD64enQueen's Gambit declinedOrthodox defense, Rubinstein attack (with Rc1)_dD68enQueen's Gambit declinedOrthodox defense, Classical, 13.d1c2 (Vidmar)ZZ;iQ)6)D68enQueen's Gambit declinedOrthodox defense, Classical, 13.d1b1 (Maroczy)QY;WFvUD68enQueen's Gambit declinedOrthodox defense, Classical variationNX;Q=S &D67enQueen's Gambit declinedOrthodox defense, Bd3 line, 11.O-OZW;iKqQ1w_D67enQueen's Gambit declinedOrthodox defense, Bd3 line, Alekhine variationFV;AUsv|wD67enQueen's Gambit declinedOrthodox defense, Bd3 lineZU;i> irYD67enQueen's Gambit declinedOrthodox defense, Bd3 line, Janowski variationcT;{&3M D67enQueen's Gambit declinedOrthodox defense, Bd3 line, Capablanca freeing manoevre D\O&b< ~D7r?q]D84enGruenfeldGruenfeld gambit acceptedCqWV[VD83enGruenfeldGruenfeld gambit, Botvinnik variationDpYp|'qD83enGruenfeldGruenfeld gambit, Capablanca variation.o-_5%}D83enGruenfeldGruenfeld gambit#nޝUtD82enGruenfeld4.Bf4/m/s6/D81enGruenfeldRussian variation.l-lVD80enGruenfeldLundin variation1k3,|3D80enGruenfeldStockholm variation*j%`zX$aD80enGruenfeldSpike gambit&i/ Ê{eD80enGruenfeld defense4hK Q.e죵D79enNeo-Gruenfeld, 6.O-O, Main line,g; ,tQ<D78enNeo-Gruenfeld, 6.O-O c6)f5 әD77enNeo-Gruenfeld, 6.O-O8eS Q\D76enNeo-Gruenfeld, 6.cd Nxd5, 7.O-O Nb6=d] X-*_D75enNeo-Gruenfeld, 6.cd Nxd5, 7.O-O c5, 8.dc>c_ 2,_ID75enNeo-Gruenfeld, 6.cd Nxd5, 7.O-O c5, 8.Nc34bK /]SvND74enNeo-Gruenfeld, 6.cd Nxd5, 7.O-O)a5 *P0mMD73enNeo-Gruenfeld, 5.Nf3 LURGrL#n?D91enGruenfeld5.Bg5-+z=D90enGruenfeldFlohr variation5;R_lD90enGruenfeldThree knights variation25z2}D90enGruenfeldSchlechter variation5~;xD90enGruenfeldThree knights variation:}E*a D89enGruenfeldExchange, Sokolsky variationB|U~i'TD89enGruenfeldSpassky variation, Main line, 13.Bd3J{e'`"`sfD88enGruenfeldSpassky variation, Main line, 10...cd, 11.cd9zCLȨQD87enGruenfeldExchange, Seville variation9yCrXU#bՏD87enGruenfeldExchange, Spassky variationDxY?\oh{D86enGruenfeldExchange, Simagin's improved variationBwU@͝iiD86enGruenfeldExchange, Simagin's lesser variation8vAg6D86enGruenfeldExchange, Larsen variation;uG%W:D86enGruenfeldExchange, Classical variation7t?2+|D85enGruenfeldModern Exchange variation0s1RN?lD85enGruenfeldExchange variation EQ_+E~E6==+"D97enGruenfeldRussian, Prins variation@Q OD97enGruenfeldRussian, Byrne (Simagin) variation:EvS 1D97enGruenfeldRussian, Levenfish variationDY3eBmD97enGruenfeldRussian, Szabo (Boleslavsky) variationE[s^J"FvD97enGruenfeldRussian, Alekhine (Hungarian) variation7?LD97enGruenfeldRussian variation with e4// vjgD96enGruenfeldRussian variation/ /fx)FD95enGruenfeldPachman variation1 3CYTBD95enGruenfeldBotvinnik variation, ; 5.sD95enGruenfeld with e3 & Qb3+ '5[<+mvD94enGruenfeldFlohr defense- +ۅjD94enGruenfeldSmyslov defense-= Zڤi3lPD94enGruenfeld with e3 Bd325&Z_~<'D94enGruenfeldOpovcensky variation13"pgD94enGruenfeldMakogonov variation"|{GD94enGruenfeld5.e3-= ԃJ7D@D93enGruenfeld with Bf4 e3#sLO%D92enGruenfeld5.Bf4 CQ d:oCrC,'-sSE08enCatalanClosed, Qc2 & b39&GxvEdE08enCatalanClosed, Zagoryansky variation)%'GZ9˅E08enCatalanClosed, 7.Qc27$Cq<1N7E07enCatalanClosed, Botvinnik variation,#-^(+.E07enCatalanClosed, 6...Nbd7)"'`cb,(E06enCatalanClosed, 5.Nf30!5#fQ05E05enCatalanOpen, Classical line' #7jE04enCatalanOpen, 5.Nf34='-E03enCatalanOpen, 5.Qa4 Nbd7, 6.Qxc44=;ְE03enCatalanOpen, Alekhine variation'#>jRaE02enCatalanOpen, 5.Qa4">ZzazE01enCatalanClosed$+ R[Xs%E00enCatalan Opening1E dApE00enNeo-Indian (Seirawan) attack&/ "RE00enQueen's pawn gameA/Cg=t&XsD99enGruenfeld defenseSmyslov, Yugoslav variation8/1LSD99enGruenfeld defenseSmyslov, Main line6=^NiD98enGruenfeldRussian, Keres variation8Ăꇰ@D98enGruenfeldRussian, Smyslov variation <b9< |<g<(9)i.]bE12enQueen's Indian4.Nc338)-Y%t.E12enQueen's IndianPetrosian system27)+I5E12enQueen's IndianMiles variation+69 Eg}E12enQueen's Indian defense95U peE11enBogo-Indian defense, Monticelli trap=4] glE11enBogo-Indian defense, Nimzovich variation=3] iHc2E11enBogo-Indian defense, Gruenfeld variation(23 0eҞE11enBogo-Indian defense"1' @;+ GE10enDoery defense-0= +'W~I2E10enDzindzikhashvili defenseC/i >6E10enBlumenfeld counter-gambit, Spielmann variationI.u z/1E10enBlumenfeld counter-gambit, Dus-Chotimursky variation7-Q CE10enBlumenfeld counter-gambit accepted.,? ŭLd=E10enBlumenfeld counter-gambit&+/ i E10enQueen's pawn game6*A+IyE09enCatalanClosed, Sokolsky variation-)/S-ŰE09enCatalanClosed, Main line2(9'lG:*E08enCatalanClosed, Spassky gambit Q`(~D h9Q1J))W4'fE17enQueen's IndianEuwe variation7I)5цڥE17enQueen's IndianOld Main line, 6.O-O7H)5GkE17enQueen's IndianOpovcensky variation=G)ATdA)E17enQueen's IndianAnti-Queen's Indian system,F)r)~E17enQueen's Indian5.Bg2 Be73E)-~OoE16enQueen's IndianRiumin variation2D)+~}E16enQueen's IndianYates variation7C)5r~ uCE16enQueen's IndianCapablanca variation4B)/?mw.E15enQueen's IndianBuerger variation7A)56M-E15enQueen's IndianRubinstein variation+@)϶qo E15enQueen's Indian4.g3 Bb7O?)eqO}E15enQueen's IndianNimzovich variation (exaggerated Fianchetto)'>)_=E15enQueen's Indian4.g35=)1(9E14enQueen's IndianAverbakh variation'<)?CE14enQueen's Indian4.e33;)-HM(E13enQueen's Indian4.Nc3, Main line=:)AFZGJE12enQueen's Indian4.Nc3, Botvinnik variation ?_,w2{:?>Z%GFE24enNimzo-IndianSaemisch, Botvinnik variation3Y%12E24enNimzo-IndianSaemisch variation@X%KbkE23enNimzo-IndianSpielmann, Staahlberg variation>W%G 鵽YE23enNimzo-IndianSpielmann, San Remo variation>V%G95WE23enNimzo-IndianSpielmann, Karlsbad variationS%GwbTE21enNimzo-IndianThree knights, Euwe variationBR%OvE21enNimzo-IndianThree knights, Korchnoi variation8Q%;}|E21enNimzo-IndianThree knights variationEP%U<*M9E20enNimzo-IndianRomanishin-Kasparov (Steiner) system/O%)=:pE20enNimzo-IndianMikenas attack0N%+~wPE20enNimzo-IndianKmoch variation)M5 bxE20enNimzo-Indian defense8L)7) FE19enQueen's IndianOld Main line, 9.Qxc37K)5 haE18enQueen's IndianOld Main line, 7.Nc3 OKj3GOKj%aHACPE33enNimzo-IndianClassical, Milner-Barry (Zurich) variation3i%1 ; {xE33enNimzo-IndianClassical, 4...Nc6:h%?ds3dE32enNimzo-IndianClassical, Adorjan gambit4g%3{jL݂E32enNimzo-IndianClassical variation5f%5{cE31enNimzo-IndianLeningrad, Main line8e%;"=QqE30enNimzo-IndianLeningrad, ...b5 gambit4d%38:.E30enNimzo-IndianLeningrad variation?c%Iz E29enNimzo-IndianSaemisch, Capablanca variation4b%3 b߮E29enNimzo-IndianSaemisch, Main line3a%1p4E28enNimzo-IndianSaemisch variation3`%1\PTk;E27enNimzo-IndianSaemisch variation<_%C'k뤩E26enNimzo-IndianSaemisch, O'Kelly variation3^%1N"Z*Q5E26enNimzo-IndianSaemisch variation?]%I 5E25enNimzo-IndianSaemisch, Romanovsky variation:\%?Rg<\&E25enNimzo-IndianSaemisch, Keres variation3[%1?lE25enNimzo-IndianSaemisch variation ;=f%O$w;9z%=‚qm'E44enNimzo-IndianFischer variation, 5.Ne22y%/&TFE43enNimzo-IndianFischer variationꣂb?E41enNimzo-Indian4.e3 c59u%= MTAE40enNimzo-Indian4.e3, Taimanov variation%t%OD\iBE40enNimzo-Indian4.e3:s%?2A"NhxE39enNimzo-IndianClassical, Pirc variation2r%/G 2E E38enNimzo-IndianClassical, 4...c5>q%GPqE37enNimzo-IndianClassical, San Remo variationKp%aIɟѻE37enNimzo-IndianClassical, Noa variation, Main line, 7.Qc2Do%S WZSE36enNimzo-IndianClassical, Noa variation, Main line?n%IO'>0E36enNimzo-IndianClassical, Botvinnik variation?m%IٿE36enNimzo-IndianClassical, Noa variation, 5.a3Bl%O/NGrE35enNimzo-IndianClassical, Noa variation, 5.cd ed9k%=$E34enNimzo-IndianClassical, Noa variation <X#=M<I %]$)kE54enNimzo-Indian4.e3, Gligoric system, Smyslov variationB %O\pPE54enNimzo-Indian4.e3, Gligoric system with 7...dcD%St'2P`E53enNimzo-Indian4.e3, Gligoric system with 7...Nbd76%7O99 7E53enNimzo-Indian4.e3, Keres variation;%AZifE53enNimzo-Indian4.e3, Main line with ...c5;%A׍ZE52enNimzo-Indian4.e3, Main line with ...b68%;zW{r1E51enNimzo-Indian4.e3, Ragozin variation6%7}E51enNimzo-Indian4.e3 e8g8, 5.Nf3 d7d5@%KlzE50enNimzo-Indian4.e3 e8g8, 5.Nf3, without ...d57%9T`?E49enNimzo-Indian4.e3, Botvinnik system3%1gE, E48enNimzo-Indian4.e3 O-O, 5.Bd3 d50%+QBE47enNimzo-Indian4.e3 O-O, 5.Bd32~%/xz O>E46enNimzo-IndianSimagin variation4}%3C󉜀E46enNimzo-Indian4.e3 O-OB{%O #LE45enNimzo-Indian4.e3, Bronstein (Byrne) variation +r(['W#y+K'_@h;E62enKing's IndianFianchetto, Kavalek (Bronstein) variation;'?*eլ E62enKing's IndianFianchetto, Larsen system6'58dE62enKing's IndianFianchetto variation0')IE61enKing's IndianSmyslov system1E FYP+E61enKing's Indian defense, 3.Nc3?'GƦX,E60enKing's Indian3.g3, counterthrust variation&'yrq<E60enKing's Indian3.g3/''g{h~dE60enKing's IndianDanube gambit0')k ?YE60enKing's IndianAnti-Gruenfeld1%- n3%`E60enQueen's pawnMengarini attack)5 f9E60enKing's Indian, 3.Nf3*7 wA8"E60enKing's Indian defense0%+BƍE59enNimzo-Indian4.e3, Main line>%G.}/+E58enNimzo-Indian4.e3, Main line with 8...Bxc3G %Y3E57enNimzo-Indian4.e3, Main line with 8...dc and 9...cd= %E # E56enNimzo-Indian4.e3, Main line with 7...Nc6K %a-J?HE55enNimzo-Indian4.e3, Gligoric system, Bronstein variation ?{(f&h?=*'Cͻ3"E70enKing's IndianAccelerated Averbakh system/)''EʺTE70enKing's IndianKramer system&('2[id@]}E70enKing's Indian4.e4A''K\^ 8'H$E69enKing's IndianFianchetto, Classical Main lineG&'Wn[DRmE68enKing's IndianFianchetto, Classical variation, 8.e4A%'K@cfgE67enKing's IndianFianchetto, Classical variation8$'9mAE67enKing's IndianFianchetto with ...Nd7<#'AZby¾E66enKing's IndianFianchetto, Yugoslav Panno="'C8E65enKing's IndianFianchetto, Yugoslav, 7.O-O=!'CaM=*E64enKing's IndianFianchetto, Yugoslav system= 'CS98BE63enKing's IndianFianchetto, Panno variation?'GPwCQtE62enKing's IndianFianchetto, Simagin variationP'iѽhVE62enKing's IndianFianchetto, lesser Simagin (Spassky) variationG'WE62enKing's IndianFianchetto, Uhlmann (Szabo) variation8'9,ѳx넎E62enKing's IndianFianchetto with ...Nc6 2a7]'q;i24;'1eP42aE80enKing's IndianSaemisch variation>:'ERUx4]E79enKing's IndianFour pawns attack, Main lineE9'S3E78enKing's IndianFour pawns attack, with Be2 and Nf3F8'U دEW1E77enKing's IndianFour pawns attack, Florentine gambit37'/~`|I7E77enKing's IndianFour pawns attack26'-D.[|iE77enKing's IndianSix pawns attack:5'=F_E77enKing's IndianFour pawns attack, 6.Be2A4'K{BP0H'E.E89enKing's IndianSaemisch, Orthodox Main line=G'CմE88enKing's IndianSaemisch, Orthodox, 7.d5 c6IF'["9oRE87enKing's IndianSaemisch, Orthodox, Bronstein variation:E'=,vlgoE87enKing's IndianSaemisch, Orthodox, 7.d5?D'GVA/wE86enKing's IndianSaemisch, Orthodox, 7.Nge2 c6>C'EG%32E85enKing's IndianSaemisch, Orthodox variation;B'?i/1E84enKing's IndianSaemisch, Panno Main line;A'?qNLY%E83enKing's IndianSaemisch, Panno formation;@'?;ע RE83enKing's IndianSaemisch, Ruban variation3?'/wGE83enKing's IndianSaemisch, 6...Nc6G>'WwUE82enKing's IndianSaemisch, double Fianchetto variation;='? p϶E81enKing's IndianSaemisch, Byrne variation3<'/oE81enKing's IndianSaemisch, 5...O-O Qi1y9}FQrZ'+M!bP@E97enKing's IndianOrthodox, Aronin-Taimanov variation (Yugoslav attack / Mar del Plata variation)?Y'G³&E96enKing's IndianOrthodox, 7...Nbd7, Main line;X'?{E95enKing's IndianOrthodox, 7...Nbd7, 8.Re14W'1nCu![E94enKing's IndianOrthodox, 7...Nbd7MĎUE93enKing's IndianPetrosian system, Main lineCR'OǃeGE92enKing's IndianPetrosian system, Stein variation2Q'-6$&E92enKing's IndianPetrosian system:P'=P<:5E92enKing's IndianGligoric-Taimanov system5O'3H5#E92enKing's IndianAndersson variation5N'3#u.SE92enKing's IndianClassical variation2M'---JE91enKing's IndianKazakh variation'L'}.eE91enKing's Indian6.Be2 "m$\/\"7gQ gRhػA08esApertura Reti, Ataque indio de reyHfs 4t A07esApertura Reti, Ataque indio de rey (sistema Barcza)*e7 5XӇA06esApertura Reti, 2...d5+d9 ƱNӍ7A05esApertura Reti, 2...Cf6*c7 _z~wA04esApertura Reti, 1. Cf3*b7 >Gԏ3A03esApertura Bird, 1...d5"a' -A02esApertura Bird$`+ ʝLA01esApertura Larsen,_9 㴰'A00esAperturas irregulares (incluye Apertura Anderssen, Apertura Amar, Apertura Barnes, Apertura Benko, Apertura Clemenz, Apertura Desprez, Apertura Dunst , Apertura Durkin, Ataque Grob, Apertura Mieses, Apertura Saragossa, Apertura Sokolsky, Apertura Van 't Kruijs, y Apertura Ware)I^'[{r0E99enKing's IndianOrthodox, Aronin-Taimanov, Benko attackF]'UXݵE99enKing's IndianOrthodox, Aronin-Taimanov, Main lineB\'M+)}E98enKing's IndianOrthodox, Aronin-Taimanov, 9.Ne1K['_Xȏt!(E97enKing's IndianOrthodox, Aronin-Taimanov, bayonet attack :j.c,c;s:6yO GbS#nA26esApertura inglesa, sistema cerrado:xW 6wA25esApertura inglesa, Siciliana invertida@wc %K;2;&A24esApertura inglesa, sistema Bremen con 3...g6Evm ^{>tgaA23esApertura inglesa, sistema Bremen, variante Keres%u- -!clA22esApertura inglesa%t- -tA21esApertura inglesa%s- @`v{A20esApertura inglesa?ra >` 6cA19esInglesa, Mikenas-Carls, variante Siciliana4qK $A18esInglesa, variante Mikenas-Carls4pK Z"A17esApertura inglesa, Defensa Erizo%o- ja%k:A16esApertura inglesa;nY =d A15esInglesa, 1...Cf6 (Defensa Anglo-India):mW J ބA14esInglesa, declinada hacia Neo-Catalana%l- o MA13esApertura inglesa9kU Je VA12esInglesa, sistema defensivo Caro-Kann9jU Xb"^ A11esInglesa, sistema defensivo Caro-Kann%i-  A58esGambito Benko aceptado"' haRA57esGambito Benko#) 02A56esDefensa Benoni4K 0 96A55esIndia antigua, línea principal7Q jA54esIndia antigua, variante ucrainiana*7 my;r"A53esDefensa india antigua%-  7eA52esGambito Budapest1E ޻)zHyA51esGambito Budapest no aceptadoL{ Tc;OA50esApertura de peón de dama, Tango de los caballos negros4K ։YA49esIndia de rey, fianchetto sin c48S 02c>A48esIndia de rey, Defensa india de este*7 h(fAA44esOld Benoni defence' 1 ehڣA43esOld Benoni defenceL { P?UA42esDefensa moderna, sistema Averbakh también Defensa Wade<[ / A41esApertura de peón de dama, Defensa Wade @}<k0Ly@6,O xdA77esBenoni, clásica, 9...Te8, 10.Cd2.+? й N1SA76esBenoni, clásica, 9...Te89*U waaY)A75esBenoni, clásica con...a6 y 10...Ag44)K u֫SA74esBenoni, clásica, 9...a6, 10.a4,(; $L>A73esBenoni, clásica, 9.O-O0'C _xA72esBenoni, clásica sint 9.O-O,&; f;wAA71esBenoni, clásica, 8.Bg52%G { g#A70esBenoni, clásica con e4 y Cf3J$w S5,A69esBenoni, ataque de los cuatro peones, línea principal8#S < yxA68esBenoni, ataque de los cuatro peones."? qb(RcA67esBenoni, variante Taimanov8!S ]{{;A66esBenoni, variante tormenta de peones! % Iٳ-ԟUA65esBenoni, 6.e4>_ ך$Iw8A64esBenoni, variante del Fianchetto, 11...Te8>_ њI3 A63esBenoni, variante del Fianchetto, 9...Cbd74K IR)A62esBenoni, variante del Fianchetto#) ,v)A61esDefensa Benoni#) ~r6=A60esDefensa Benoni [lCMJ![1=E iRLA94esHolandesa, Stonewall con Aa3=<] tU-\A93esHolandesa, Stonewall, variante Botvinnik&;/ lY)A92esDefensa holandesa&:/ ;m(*A91esDefensa holandesa&9/ /=A90esDefensa holandesaE8m ˮr@A89esHolandesa, Leningrad, variante principal con Cc6G7q \rA88esHolandesa, Leningrad, varante principal con 7...c6=6] n1. A87esHolandesa, Leningrad, variante principal.5? JϻΩA86esHolandesa con 2.c4 y 3.g3/4A ;;lXǔHA85esHolandesa con 2.c4 y 3.Cc3&3/ B@WA84esDefensa holandesaC2i wVfFA83esHolandesa, gambito Staunton, variante StauntonR1 fcRPA A82esHolandesa, gambito Staunton, incluye también Defensa Balogh&0/ ;djY$8A81esDefensa holandesa&// a+A80esDefensa holandesa,.; -5JB|A79esBenoni, clásica, 11.f39-U C{ eA78esBenoni, clásica con ...Te8 y ...Ca6|#(-27<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|(=Pbt   ) : M`s-?Qdt#6HZk| !."?#Q$a%n&}' ().*B+T,f-w./0%192J3\4p56 78'92:?;Lt?@A'B8CKD^ErFGH$I6JIK[LnMNOP/Q>RLS\TkU{V WX-Y>ZN[_\q]}^ _`'a7bFcTd`enf{ghi!j.k<lHmSn`orpqr's9tJuZvjwzx yz*{;|K}Z~g}$*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|pb,=K]k} *:ITbr-;HTev'6DRgz!3FXhx';Oct.@Rcu#4CTj{ ˜.Ø=ĘKŘXƘgǘwșəʙ'˙:̙K͙[Ιjϙ|К њҚ)Ӛ5ԚD՚T֚gךw؛ ٛڛ(ۛ7ܛKݛ`ޛrߜ)9K]l} (8L^q 0@O]iv*7ES <^b(y<:KW aBB08esPirc, sistema clásico (dos caballos)!J% QB07esDefensa PircEIm k B06esDefensa Robatsch (Moderna), incluye Monkey's Bum@Hc YvX)B05esDefensa Alekhine, variante moderna, 4...Ag47GQ [P31`VB04esDefensa Alekhine, variante moderna*F7 I ~B03esDefensa Alekhine 3.d4%E- үPB02esDefensa Alekhine@Dc VDaB01esDefensa escandinava (Contradefensa central)]C B_ !uA99esHolandesa, variante Ilyin-Genevsky con b3?Aa  gشA98esHolandesa, variante Ilyin-Genevsky con Dc27@Q bA97esHolandesa, variante Ilyin-Genevsky1?E  ;0A96esHolandesa, variante clásica1>E x?4,fA95esHolandesa, Stonewall con Cc3 LpGl8<}L.]? ?7ݦB26esSiciliana, cerrada, 6.Ae3'\1 c7)j?(B25esSiciliana, cerrada'[1 11 B24esSiciliana, cerrada'Z1 R\2B23esSiciliana, cerrada>Y_ f&EmB22esDefensa siciliana, variante Alapin (2.c3)hX1 [7wbB21esSiciliana, ataque Grand Prix y Gambito Smith-Morra, incluyendo la Trampa Siberiana&W/ dMJVJB20esDefensa siciliana1VE AǹpB19esCaro-Kann, clásica, 7...Cd71UE J߫[B18esCaro-Kann, variante clásica1TE %B17esCaro-Kann, variante Steinitz9SU >ϕEulB16esCaro-Kann, variante Bronstein-Larsen&R/ c.sB15esDefensa Caro-Kann=Q] ^GIFB14esCaro-Kann, atque Panov-Botvinnik, 5...e63PI wqLݣOB13esCaro-Kann, variante del cambio&O/ sYoB12esDefensa Caro-Kann5NM j1B11esCaro-Kann, dos caballos, 3...Ag4&M/ Fvђ-B10esDefensa Caro-Kann,L; h 3I4B09esPirc, ataque austríaco Gd;v!tpG&k/ ^T9rB40esDefensa SicilianaMj} r<&4B39esDefensa siciliana, fianchetto acelerado, variante BreyerVi OX DбB38esDefensa siciliana, fianchetto acelerado, variante Maroczy, 6.Ae3Xh a3B36esDefensa siciliana, fianchetto acelerado, variante MaróczyWf V@B35esDefensa siciliana, fianchetto acelerado, variante moderna con Ac4Re LMY, B34esDefensa siciliana, fianchetto acelerado, variante del cambioDdk ݫB33esSiciliana, variante Sveshnikov (Lasker-Pelikan)&c/ Q@j裗B32esDefensa sicilianaRb ήe:B31esSiciliana, ataque Nimzovich-Rossolimo (con ...g6, sin ...d6)&a/ ~{!B30esDefensa Siciliana=`] ǒJj@B29esSiciliana, variante Nimzovich-Rubinstein0_C mW B28esSiciliana, variante O'Kelly&^/ )j+B27esDefensa Siciliana gwNr>oN g(}3 8hB58esSiciliana, clásicaW|  6B57esSiciliana, Sozin (no Scheveningen) incluyendo Trampa Magnus Smith{ Uw^B56esSiciliana>z_ >qCB55esSiciliana, Prins variation, Venice attacky {,ĴB54esSiciliana2xG a2dB53esSiciliana, variante Chekhover>w_ W! B52esSiciliana, ataque Canal-Sokolsky, 3...Ad75vM M\8B51esSiciliana, ataque Canal-Sokolskyu 0ibB50esSiciliana1tE |יB49esSiciliana, variante Taimanov1sE v1{B48esSiciliana, variante Taimanov=r] bcB47esSiciliana, variante Taimanov (Bastrikov)1qE lH;Ͳ(B46esSiciliana, variante Taimanov1pE d\JB45esSiciliana, variante Taimanov&o/ D-B44esDefensa Siciliana*n7 u*\+B43esSiciliana, Kan, 5.Cc3*m7 ̪>WB42esSiciliana, Kan, 5.Ad3,l; m辕B41esSiciliana, variante Kan SHwxS; Y ؜B71esSiciliana, Dragón, variante Levenfish0 C 2ᇧSB70esSiciliana, variante DragónW [>UB69esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 11.Axf6W Lo> B68esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 9...Ae7W aB67esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...a6, 8...Ad7Em :ze5|B66esSiciliana, Richter-Rauzer, ataque Rauzer, 7...a6Z f,OB65esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...Ae7 , 9...Cxd4U 3@1 B64esSiciliana, Richter-Rauzer, ataque Rauzer, defensa 7...Ae7, 9.f4=] \FgB63esSiciliana, Richter-Rauzer, ataque Rauzer6O B62esSiciliana, Richter-Rauzer, 6...e6Fo |;$B61esSiciliana, Richter-Rauzer, variante Larsen, 7.Dd2.? [( B60esSiciliana, Richter-Rauzer;~Y 18B59esSiciliana, variante Boleslavsky, 7.Cb3 VYM^(V,; Α嚽1B86esSiciliana, ataque SozinT "ĵ=LCYB85esSiciliana, Scheveningen, variante clásica con ...Dc7 y ...Cc6Iu UTTUsB84esSiciliana, Scheveningen (Paulsen), variante clásica3I ޢ4ۭB83esSiciliana, Scheveningen, 6.Ae22G P4[oڅB82esSiciliana, Scheveningen, 6.f4:W o'Z B81esSiciliana, Scheveningen, ataque Keres5M "&Ͳ B80esSiciliana, variante ScheveningenBg i<ǘYB79esSiciliana, Dragón, ataque Yugoslavo, 12.h4]]Em O@B78esSiciliana, Dragón, ataque Yugoslavo, 10.O-O-O]]@c u )>&֟B77esSiciliana, Dragón, ataque Yugoslavo, 9.Ac4Bg L {޽3B76esSiciliana, Dragón, ataque Yugoslavo, 7...O-O9U @B75esSiciliana, Dragón, ataque Yugoslavo8 S ɔH'.B74esSiciliana, Dragón, clásica, 9.Cb38 S WM!iB73esSiciliana, Dragón, clásica, 8.O-O. ? Az<H7:Q NXCmC19esFrancesa, Winawer, avance, 6...Ce7;9Y 9HC18esFrancesa, Winawer, variante del avance;8Y (bBC17esFrancesa, Winawer, variante del avance;7Y %?C16esFrancesa, Winawer, variante del avance;6Y {;[C15esFrancesa, variante Winawer (Nimzovich)05C -@euC14esFrancesa, variante clásica04C lQ}C13esFrancesa, variante clásica33I vvKbC12esFrancesa, variante MacCutcheon%2- mH6qC11esDefensa Francesa/1A O|}0yC10esFrancesa, variante PaulsenK0y cIꎴ)WC09esFrancesa, Tarrasch, variante abierta, línea principal=/] ޚ^ C08esFrancesa, Tarrasch, abierta, 4.exd5 exd59.U  C07esFrancesa, Tarrasch, variante abiertaK-y )C06esFrancesa, Tarrasch, variante cerrada, línea principal9,U H_)[C05esFrancesa, Tarrasch, variante cerrada9+U \&^8C04esFrancesa, Tarrasch, variante Guimard 8i"m2jD8KIy Ǽ8.LC34esGambito de rey aceptado, incluyendo la Defensa Fischer,H; ԉFC33esGambito de rey aceptadoBGg 44uC32esGambito de rey no aceptado, Falkbeer, 5. dxe4GFq p8C31esGambito de rey no aceptado, contragambito Falkbeer#E) Rwe)C30esGambito de reyVD AT @C29esGambito vienés, Variante Kaufmann incluyendo Trampa Würzburger%C- `cӇ8> JC28esApertura vienesaDBk v9E/ k'2FoC23esApertura de alfil(=3 UyFC22esApertura del centroD<k V2FC21esApertura del centro (incluyendo Gambito danés); DnC20esApertura de peón de rey (incluye Apertura Alapín, Apertura López, Apertura Napoleón, Apertura portuguesa y Ataque Parham) YXw|<Y&T/ A{C45esApertura escocesa6SM xͧ}C44esApertura de peón de rey (incluyendo Apertura Ponziani, Apertura húngara invertida, Gambito irlandés, Apertura Konstantinopolsky y parte de Apertura escocesa)=R] Md!IC43esDefensa Petrov, Ataque Moderno(Steinitz)?Qa K C42esDefensa Petrov, incluyendo Celada Marshall%P- jC41esDefensa Philidor O{ ؝C40esApertura de caballo (incluyendo defensa Gunderam, defensa Greco, defensa Damiano , gambito elefante, y gambito letón.)pNA \Td4C39esGambito de rey aceptado, gambito Allagier y gambito Kiesertisky incluyendo el Gambito Rice,M; Ao_ ($DC72esEspañola, Defensa Steinitz moderna 5.0-0\n ]_p9&C71esEspañola, Defensa Steinitz moderna incluyendo Celada del Arca de Noém aAoC70esEspañola:lW nְC69esEspañola, variante del cambio, 5.O-O3kI ˽3aC68esEspañola, variante del cambioAje ?w9ӈC67esEspañola, Defensa Berlín, variante abierta:iW W2qf=C66esEspañola, Defensa Berlín, 4.O-O, d6Jhw BTC65esEspañola, Defensa Berlín incluyendo Celada Mortimer9gU 2%C64esEspañola, Defensa clásica (Cordel)2fG |8̟C63esEspañola, Defensa Schliemann4eK ropC62esEspañola, Defensa Old Steinitz,d; n@SC61esEspañola, Defensa Bird4cK KvrC60esApertura española (Ruy López) <rJYp3 l<-= C92esEspañola, cerrada, 9.h3-= A =$uC91esEspañola, cerrada, 9.d42G ht, 7C90esEspañola, cerrada (con...d6)5M Ԥb|C89esEspañola, Contraataque Marshall'1 -F7C88esEspañola, cerrada:~W $m/3C87esEspañola, cerrada, variante Averbach.}? z4xC86esEspañola, Ataque WorrallG|q J0uC85esEspañola, variante del cambio doblemente diferido/{A ?zYC84esEspañola, Defensa cerrada9zU Tg C83esEspañola, abierta, Defensa clásica-y= '`;C82esEspañola, abierta, 9.c36xO P3K9C81esEspañola, abierta, Ataque Howell:wW 0ȉR~C80esEspañola, Defensa abierta (Tarrasch)Hvs b0C79esEspañola, Defensa Steinitz diferida (Defensa Rusa)%u- |аHmC78esEspañola, 5.O-O.t? ̻.}C77esEspañola, Defensa MorphyZs )%KUF8C76esEspañola, Defensa Steinitz moderna, variante fianchetto (Bronstein) 1Rfv= 1wO G؃4D06esGambito de dama declinado (incluyendo la Defensa Báltica, Defensa Marshall y Defensa Simétrica)^ ]&bD05esApertura de peón de dama, variante Zukertort (incluyendo Sistema Colle).? +z7D04esApertura de peón de dama6O @dD03esAtaque Torre, variante TartakowerV  wPjD02esApertura Grünfeld invertida (Apertura de peón de dama, 2. Cf3)% - `GDD01esApertura Veresovl 9 dD00esApertura de peón de dama (incluyendo Gambito Blackmar-Diemer, Celada Halosar y otras)< [ 4Q۾C99esEspañola, cerrada, Chigorin, 12...c5d4; Y o@GC98esEspañola, cerrada, Chigorin, 12...Cc69U _JXJ}C97esEspañola, cerrada, Defensa Chigorin0C %o#CC96esEspañola, cerrada, 8...Ca56O _%UHC95esEspañola, cerrada, Breyer, 10.d47Q +j %eC94esEspañola, cerrada, Defensa Breyer8S p{y`C93esEspañola, cerrada, Defensa Smyslov 7eUm7Jw N8D19esGambito de dama declinado, Eslava, variante HolandesaJw E.2D18esGambito de dama declinado, Eslava, variante HolandesaEm Y wD17esGambito de dama declinado, Eslava, Defensa ChecaQ n~D16esGambito de dama declinado, Eslava Aceptada, variante Alapin=] c )̨E6D15esGambito de dama declinado, Eslava, 4.Cc3W J |D14esGambito de dama declinado, Eslava, variante del cambio, 6.Af4 Af5Ky hHD13esGambito de dama declinado, Eslava, variante del cambio@c RFD12esGambito de dama declinado, Eslava, 4.e3 Af5=] YǥyD11esGambito de dama declinado, Eslava, 3.Cf3>_ =mCDD10esGambito de dama declinado, Defensa EslavaIu "MXD09esGambito de dama declinado, Contragambito Albin, 5.g3T ? KfD08esGambito de dama declinado, Contragambito Albin y Celada LaskerAe !`D07esGambito de dama declinado, variante Chigorin SW'w4m5SA-e vUsЧD34esGambito de dama declinado, Tarrasch, 7...Ae7X, D33esGambito de dama declinado, Tarrasch, Sistema Schlechter-Rubinstein@+c ?- D32esGambito de dama declinado, Defensa Tarrasch5*M C&tD31esGambito de dama declinado, 3.Cc3.)? 0D30esGambito de dama declinadoI(u "AD29esGambito de dama aceptado, variante clásica, 8...Ab7G'q ;2D28esGambito de dama aceptado, variante clásica, 7.De2@&c :܎AD27esGambito de dama aceptado, variante clásica@%c U0sAD26esGambito de dama aceptado, variante clásica3$I ukrD25esGambito de dama aceptado, 4.e34#K #\CxnD24esGambito de dama aceptado, 4.Cc3-"= OD23esGambito de dama aceptado?!a Q {CD22esGambito de dama aceptado, Defensa Alekhine4 K %F[!D21esGambito de dama aceptado, 3.Cf3-= XA=D20esGambito de dama aceptado 1f.X<q1=;] 9/KjD48esGambito de dama declinado, Meran, 8...a6A:e E(N WD47esGambito de dama declinado, Semi-Eslava 7.Ac4A9e ޔCMrD46esGambito de dama declinado, Semi-Eslava 6.Ad3@8c zO]D45esGambito de dama declinado, Semi-Eslava 5.e3F7o  R+OD44esGambito de dama declinado, Semi-Eslava 5.Ag5 dxc4C6i WdD43esGambito de dama declinado, Defensa Semi-EslavaD5k U=)}7D42esGambito de dama declinado, Semi-Tarrasch, 7.Ad3C4i ov|qD41esGambito de dama declinado, Semi-Tarrasch, 5.cdE3m a\8 D40esGambito de dama declinado, Defensa Semi-TarraschH2s Z01nD39esGambito de dama declinado, Ragozin, variante Vienna@1c Nl_D38esGambito de dama declinado, variante Ragozin50M -6_D37esGambito de dama declinado, 4.Cf3Q/ NP)N#D36esGambito de dama declinado, cambio, línea posicional, 6.Dc2C.i \I䯹gD35esGambito de dama declinado, variante del cambio 1a)61VH pĴaD61esGambito de dama declinado, Defensa Ortodoxa, variante Rubinstein@Gc ƓD60esGambito de dama declinado, Defensa OrtodoxafF- 6˺ŝD59esGambito de dama declinado, Sistema Tartakower (Makagonov-Bondarevsky), 8.cd Cxd5[E Q/{֑D58esGambito de dama declinado, Sistema Tartakower (Makagonov-Bondarevsky)QD lPD57esGambito de dama declinado, Defensa Lasker, línea principal>C_ N[D56esGambito de dama declinado, Defensa Lasker5BM >LxD55esGambito de dama declinado, 6.Cf3JAw Vu%*D54esGambito de dama declinado, variante Anti-Neo-Ortodoxa9@U =՘D53esGambito de dama declinado, 4.Ag5 Ae7.?? Mõ$kD52esGambito de dama declinadoi>3 QD51esGambito de dama declinado, 4.Ag5 Cbd7 (Defensa Cambridge Springs y Celada Elefante)5=M 3*D50esGambito de dama declinado, 4.Ag5><_ ͹EwD49esGambito de dama declinado, Meran, 11.Cxb5 <UTh<)T5 *P0mMD73esNeo-Grünfeld, 5.Cf3:SW yKNN2D72esNeo-Grünfeld, 5.cd, línea principal(R3 s'&E%D71esNeo-Grünfeld, 5.cd*Q7 V<SD70esDefensa Neo-GrünfeldTP g1wפkD69esGambito de dama declinado, Defensa Ortodoxa, clásica, 13.dxe5TO FvUD68esGambito de dama declinado, Defensa Ortodoxa, variante clásicapNA &3M D67esGambito de dama declinado, Defensa Ortodoxa, línea Ad3, Maniobra Liberadora de CapablancajM5 y1EaD66esGambito de dama declinado, Defensa Ortodoxa, línea Ad3 incluyendo Celada RubinsteinfL- A:D65esGambito de dama declinado, Defensa Ortodoxa, Ataque Rubinstein, línea principal^K %,JFD64esGambito de dama declinado, Defensa Ortodoxa, Ataque Rubinstein (con Tc1)GJq F /©D63esGambito de dama declinado, Defensa Ortodoxa, 7.Tc1^I D62esGambito de dama declinado, Defensa Ortodoxa, 7.Dc2 c5, 8.cd (Rubinstein) OM![3 f+O6eO xD90esGrünfeld, variante tres caballosJdw ~i'TD89esGrünfeld, variante Spassky, línea principal, 13.Ad3Sc '`"`sfD88esGrünfeld, variante Spassky, línea principal, 10...cd, 11.cd8bS rXU#bՏD87esGrünfeld, cambio, variante Spassky9aU %W:D86esGrünfeld, cambio, variante clásica3`I RN?lD85esGrünfeld, variante del cambio/_A q]D84esGambito Grünfeld aceptado&^/ _5%}D83esGambito Grünfeld%]- ޝUtD82esGrünfeld, 4.Af4-\= s6/D81esGrünfeld, variante Rusa&[/ Ê{eD80esDefensa Grünfeld;ZY Q.e죵D79esNeo-Grünfeld, 6.O-O, línea principal,Y; ,tQ<D78esNeo-Grünfeld, 6.O-O c6)X5 әD77esNeo-Grünfeld, 6.O-O8WS Q\D76esNeo-Grünfeld, 6.cd Cxd5, 7.O-O Cb6>V_ 2,_ID75esNeo-Grünfeld, 6.cd Cxd5, 7.O-O c5, 8.Cc34UK /]SvND74esNeo-Grünfeld, 6.cd Cxd5, 7.O-O GkDn*PzG0vC ^(+.E07esCatalana, cerrada, 6...Cbd7-u= `cb,(E06esCatalana, cerrada, 5.Cf37tQ #fQ05E05esCatalana, abierta, línea clásica-s= 7jE04esCatalana, abierta, 5.Cf39rU ;ְE03esCatalana, abierta, variante Alekhine-q= >jRaE02esCatalana, abierta, 5.Da4&p/ >ZzazE01esCatalana, cerrada~o] "RE00esApertura de peón de dama (incluyendo Ataque NeoIndio, Ataque Trompowski, Apertura Catalana entre otros)Ane LSD99esDefensa Grünfeld, Smyslov, línea principal6mO ̆ꇰ@D98esGrünfeld, Rusa, variante Smyslov6lO LD97esGrünfeld, variante Rusa con 7.e4-k= vjgD96esGrünfeld, variante Rusa1jE 5.sD95esGrünfeld con 5.e3 O-O 6.Db3$i+ |{GD94esGrünfeld, 5.e31hE ԃJ7D@D93esGrünfeld con 5.Af4 O-O 6.e3%g- sLO%D92esGrünfeld, 5.Af46fO n?D91esGrünfeld, variante tres caballos @f<Ft2@Ci ?lE25esNimzo-India, variante Saemisch, variante Keres3I 2E24esNimzo-India, variante Saemisch=] @kE23esNimzo-India, Spielmann, 4...c5, 5.dc Cc63I *2NMIE22esNimzo-India, variante Spielman?a }|E21esNimzo-India, variante de los trec caballos(3 bxE20esDefensa Nimzo-India9U ) FE19esIndia de Dama, Old Main line, 9.Dxc38S haE18esIndia de Dama, Old Main line, 7.Cc3-= r)~E17esIndia de Dama, 5.Ag2 Ae78S r~ uCE16esIndia de Dama, Capablanca variation(~3 _=E15esIndia de Dama, 4.g3)}5 ?CE14esQueen's Indian, 4.e34|K HM(E13esIndia de Dama, 4.Cc3, Main line*{7 Eg}E12esDefensa India de Dama'z1 0eҞE11esDefensa Bogo-India,y; i E10esQueen's Pawn Game 3.Cf38xS S-ŰE09esCatalana, cerrada, línea principal-w= GZ9˅E08esCatalana, cerrada, 7.Dc2 Cp4k5s2lC&/ OD\iBE40esNimzo-India, 4.e39U 2A"NhxE39esNimzo-India, Clásica, variante Pirc2G G 2E E38esNimzo-India, Clásica, 4...c5R IɟѻE37esNimzo-India, Clásica, variante Noa, línea principal, 7.Dc2>_ ٿE36esNimzo-India, Clásica, variante Noa, 5.a3Em /NGrE35esNimzo-India, Clásica, variante Noa, 5.cxd5 exd58S $E34esNimzo-India, Clásica, variante Noa<[ ; {xE33esNimzo-India, variante Clásica, 4...Cc63I {jL݂E32esNimzo-India, variante ClásicaFo {cE31esNimzo-India, variante Leningrad, línea principal5 M 8:.E30esNimzo-India, variante Leningrad,E m  b߮E29esNimzo-India, variante Saemisch, línea principal9 U p4E28esNimzo-India, variante Saemisch, 6.e3< [ \PTk;E27esNimzo-India, variante Saemisch, 5...0-0N  N"Z*Q5E26esNimzo-India, variante Saemisch, 4.a3 Axc3+ 5.bxc3 c5 6.e3 )_#|E Jp)D'k # E56esNimzo-India, 4.e3, Línea principal con 7...Cc6L&{ -J?HE55esNimzo-India, 4.e3, sistema Gligoric, variante BronsteinC%i \pPE54esNimzo-India, 4.e3, sistema Gligoric con 7...dcB$g ZifE53esNimzo-India, 4.e3, Línea principal con ...c5B#g ׍ZE52esNimzo-India, 4.e3, Línea principal con ...b67"Q }E51esNimzo-India, 4.e3 e8g8, 5.Cf3 d7d5=!] lzE50esNimzo-India, 4.e3 e8g8, 5.Cf3, sin ...d59 U T`?E49esNimzo-India, 4.e3, sistema Botvinnik4K gE, E48esNimzo-India, 4.e3 O-O, 5.Ad3 d51E QBE47esNimzo-India, 4.e3 O-O, 5.Ad3*7 >󉜀E46esNimzo-India, 4.e3 O-OCi #LE45esNimzo-India, 4.e3, Bronstein (Byrne) variation9U ‚qm'E44esNimzo-India, variante Fischer, 5.Ce22G &TFE43esNimzo-India, variante Fischer=] O%oE42esNimzo-India, 4.e3 c5, 5.Ce2 (Rubinstein))5 [>ꣂb?E41esNimzo-India, 4.e3 c5 N]"FT N;6Y "PE71esIndia de Rey, sistema Makagonov (5.h3)'51 2[id@]}E70esIndia de Rey, 4.e4R4 \^ 8'H$E69esIndia de Rey, Fianchetto, variante Clásica línea principalF3o n[DRmE68esIndia de Rey, Fianchetto, variante Clásica, 8.e482S mAE67esIndia de Rey, Fianchetto con ...Cd7=1] Zby¾E66esIndia de Rey, Fianchetto, Yugoslav Panno20G 8E65esIndia de Rey, Yugoslav, 7.O-O?/a aM=*E64esIndia de Rey, Fianchetto, sistema Yugoslav=.] S98BE63esIndia de Rey, Fianchetto, variante Panno:-W 8dE62esIndia de Rey, variante del Fianchetto0,C FYP+E61esDefensa India de Rey, 3.Cc3)+5 wA8"E60esDefensa India de Rey8*S BƍE59esNimzo-India, 4.e3, Línea principalE)m .}/+E58esNimzo-India, 4.e3, Línea principal con 8...Axc3X( 3E57esNimzo-India, 4.e3, Línea principal con 8...dxc4 and 9...Axc4 cxd4 eo/=s&e>D_ G%32E85esIndia de Rey, Sämisch, variante OrtodoxaFCo i/1E84esIndia de Rey, Sämisch, línea principal de Panno4BK wGE83esIndia de Rey, Sämisch, 6...Cc6JAw wUE82esIndia de Rey, Sämisch, variante del doble Fianchetto4@K oE81esIndia de Rey, Sämisch, 5...O-O4?K eP42aE80esIndia de Rey, variante SämischY> RUx4]E79esDefensa India de Rey, Ataque de los cuatro peones, línea principalV= 3E78esDefensa India de Rey, Ataque de los cuatro peones, con Be2 y Cf3M<} F_E77esDefensa India de Rey, Ataque de los cuatro peones, 6.Ae2F;o )E76esDefensa India de Rey, Ataque de los cuatro peones=:] aE75esIndia de Rey, Averbakh, línea principal39I R gE74esIndia de Rey, Averbakh, 6...c5(83 xa|Z^E73esIndia de Rey, 5.Ae2-7= 'DDr(E72esIndia de Rey con e4 & g3 P>e\PNR XݵE99esIndia de Rey, Ortodoxa, Aronin-Taimanov, línea principalCQi +)}E98esIndia de Rey, Ortodoxa, Aronin-Taimanov, 9.Ce1rPE M!bP@E97esIndia de Rey, Ortodoxa, variante Aronin-Taimanov (ataque Yugoslavo / variante Mar del Plata)GOq ³&E96esIndia de Rey, Ortodoxa, 7...Cbd7, línea principalMĎUE93esIndia de Rey, sistema Petrosian, línea principal4KK #u.SE92esIndia de Rey, variante Clásica(J3 }.eE91esIndia de Rey, 6.Ae2(I3 Ѕu-E90esIndia de Rey, 5.Cf3IHu .E89esIndia de Rey, Sämisch, línea principal de Ortodoxa>G_ մE88esIndia de Rey, Sämisch, Ortodoxa, 7.d5 c6;FY ,vlgoE87esIndia de Rey, Sämisch, Ortodoxa, 7.d5@Ec VA/wE86esIndia de Rey, Sämisch, Ortodoxa, 7.Cge2 c6 5yT/T"I T5g @`v{A20daEngelsk?fa >` 6cA19daEngelsk, Mikenas-Carls, siciliansk variant3eI $A18daEngelsk, Mikenas-Carls variantd Z"A17daEngelskc ja%k:A16daEngelskGԏ3A03daBirds åbning"U' -A02daBirds åbning.T? ʝLA01daNimzowitsch-Larsen angreb.S? 㴰'A00daIrregulære Ã¥bninger VL x4mBV=z] o))'A39daEngelsk, symmetrisk, hovedvariant med d4(y3 <6D7A38daEngelsk, symmetrisk(x3 gitgaA23daEngelsk, Bremen system, Keres varianti -!clA22daEngelskh -tA21daEngelsk DtF]&wAjD#) ~r6=A60daBenoni forsvar)5 BivA59daBenkö gambit, 7. e4+ 9 9qP>A58daBenkö gambit modtaget" ' haRA57daBenkö gambit# ) 02A56daBenoni forsvar/ A 0 96A55daGammelindisk, hovedvariant3 I jA54daGammelindisk, ukrainsk variant)5 my;r"A53daGammelindisk forsvar%-  7eA52daBudapestergambit.? ޻)zHyA51daBudapestergambit afslået'1 Tc;OA50daDronningebondespil4K ։YA49daKongeindisk, fianchetto uden c45M 02c>A48daKongeindisk, Øst-indisk forsvar,; h(fAA44daGammelt Benoni forsvar+~9 ehڣA43daGammelt Benoni forsvar5}M P?UA42daModerne forsvar, Averbakh system'|1 / A41daDronningebondespil'{1 XA40daDronningebondespil Wl0 z=t<W:!W C{ eA78daBenoni, klassisk med ...Te8 og ...Sa66 O xdA77daBenoni, klassisk, 9...Te8, 10.Sd2.? й N1SA76daBenoni, klassisk, 9...Te8;Y waaY)A75daBenoni, klassisk med ...a6 og 10...Lg45M u֫SA74daBenoni, klassisk, 9...a6, 10. a4-= $L>A73daBenoni, klassisk, 9. O-O1E _xA72daBenoni, klassisk uden 9. O-O,; f;wAA71daBenoni, klassisk, 8.Lg53I { g#A70daBenoni, klassisk med e4 og Sf3:W S5,A69daBenoni, firbonde-angreb, hovedvariant,; < yxA68daBenoni, firbonde-angreb-= qb(RcA67daBenoni, Taimanov variant/A ]{{;A66daBenoni, bondestorm-variant"' Iٳ-ԟUA65daBenoni, 6. e49U ך$Iw8A64daBenoni, fianchetto variant, 11...Te89U њI3 A63daBenoni, fianchetto variant, 9...Sbd7/A IR)A62daBenoni, fianchetto variant#) ,v)A61daBenoni forsvar a~L w=d;a03C  ;0A96daHollandsk, klassisk variant12E x?4,fA95daHollandsk, Stonewall med Sc311E iRLA94daHollandsk, Stonewall med La3<0[ tU-\A93daHollandsk, Stonewall, Botwinnik variant&// lY)A92daHollandsk forsvar&./ ;m(*A91daHollandsk forsvar&-/ /=A90daHollandsk forsvar?,a ˮr@A89daHollandsk, Leningrad, hovedvariant med Sc6B+g \rA88daHollandsk, Leningrad, hovedvariant med 7...c67*Q n1. A87daHollandsk, Leningrad, hovedvariant1)E JϻΩA86daHollandsk med 2. c4 og 3. g32(G ;;lXǔHA85daHollandsk med 2. c4 og 3. Sc3&'/ B@WA84daHollandsk forsvar@&c wVfFA83daHollandsk, Staunton gambit, Stauntons linje/%A fcRPA A82daHollandsk, Staunton gambit&$/ ;djY$8A81daHollandsk forsvar&#/ a+A80daHollandsk åbning-"= -5JB|A79daBenoni, klassisk, 11. f3 HF p-nEqH&F/ c.sB15daCaro-Kann forsvar>E_ ^GIFB14daCaro-Kann, Panov-Botvinnik angreb, 5...e61DE wqLݣOB13daCaro-Kann, Afbytningsvariant&C/ sYoB12daCaro-Kann forsvar3BI j1B11daCaro-Kann, Tospringer, 3...Lg4&A/ Fvђ-B10daCaro-Kann forsvar+@9 h 3I4B09daPirc, østrigsk angreb8?S aBB08daPirc, Klassisk (Tospringer-) system!>% QB07daPirc forsvar/=A k B06daRobatsch (Moderne) forsvar@<c YvX)B05daAljechins forsvar, Moderne variant, 4...Lg47;Q [P31`VB04daAljechins forsvar, Moderne variant&:/ I ~B03daAljechins forsvar&9/ үPB02daAljechins forsvar!8% VDaB01daSkandinavisk#7) 5_  gشA98daHollandsk, Ilyin-Genevsky variant med Dc264O bA97daHollandsk, Ilyin-Genevsky variant U_+{Q'n,U'X1 ݫB33daSiciliansk forsvar'W1 Q@j裗B32daSiciliansk forsvarVV ήe:B31daSiciliansk, Nimzowitsch-Rossolimo angreb (med ...g6, uden ...d6)'U1 ~{!B30daSiciliansk forsvar?Ta ǒJj@B29daSiciliansk, Nimzowitsch-Rubinstein variant0SC mW B28daSiciliansk, O'Kelly variant'R1 )j+B27daSiciliansk forsvar/QA ?7ݦB26daSiciliansk, Lukket, 6. Le3'P1 c7)j?(B25daSiciliansk, Lukket'O1 11 B24daSiciliansk, Lukket'N1 R\2B23daSiciliansk, Lukket8MS f&EmB22daSiciliansk, Alapins variant (2. c3)HLs [7wbB21daSiciliansk, Grand Prix angreb og Smith-Morra Gambit'K1 dMJVJB20daSiciliansk forsvar1JE AǹpB19daCaro-Kann, Klassisk, 7...Sd70IC J߫[B18daCaro-Kann, Klassisk variant0HC %B17daCaro-Kann, Steinitz variant8GS >ϕEulB16daCaro-Kann, Bronstein-Larsen variant 0_k!j@ d01hE |יB49daSiciliansk, Taimanov variant1gE v1{B48daSiciliansk, Taimanov variant=f] bcB47daSiciliansk, Taimanov (Bastrikov) variant1eE lH;Ͳ(B46daSiciliansk, Taimanov variant1dE d\JB45daSiciliansk, Taimanov variant'c1 D-B44daSiciliansk forsvar,b; u*\+B43daSiciliansk, Kan, 5. Sc3,a; ̪>WB42daSiciliansk, Kan, 5. Ld3,`; m辕B41daSiciliansk, Kan variant'_1 ^T9rB40daSiciliansk forsvarG^q r<&4B39daSiciliansk, accelereret fianchetto, Breyer variantQ] OX DбB38daSiciliansk, accelereret fianchetto, Maroczy binding, 6. Le3R\ a3B36daSiciliansk, accelereret fianchetto, Maroczy bindingQZ V@B35daSiciliansk, accelereret fianchetto, moderne variant med Lc4JYw LMY, B34daSiciliansk, accelereret fianchetto, afbytningsvariant 3B Kd*3Zx f,OB65daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...Le7 forsvar, 9...Sxd4Vw 3@1 B64daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...Le7 forsvar, 9.f4>v_ \FgB63daSiciliansk, Richter-Rauzer, Rauzer angreb7uQ B62daSiciliansk, Richter-Rauzer, 6...e6Gtq |;$B61daSiciliansk, Richter-Rauzer, Larsen variant, 7. Dd2/sA [( B60daSiciliansk, Richter-Rauzern_ >qCB55daSiciliansk, Prins variant, Venedig-angrebm! {,ĴB54daSiciliansk2lG a2dB53daSiciliansk, Chekhover variant?ka W! B52daSiciliansk, Canal-Sokolsky angreb, 3...Ld7Wj M\8B51daSiciliansk, Canal-Sokolsky (Nimzowitsch-Rossolimo, Moskva) angrebi! 0ibB50daSiciliansk a\v4@aIu O@B78daSiciliansk, Dragevar., jugoslavisk angreb, 10. O-O-OFo u )>&֟B77daSiciliansk, Dragevar., jugoslavisk angreb, 9. Lc4Gq L {޽3B76daSiciliansk, Dragevar., jugoslavisk angreb, 7...O-O>_ @B75daSiciliansk, Dragevar., jugoslavisk angreb<[ ɔH'.B74daSiciliansk, Dragevar., klassisk, 9. Sb3<[ WM!iB73daSiciliansk, Dragevar., klassisk, 8. O-O2G AUB69daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 11.Lxf6X{ Lo> B68daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 9...Le7Xz aB67daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 forsvar, 8...Ld7Fyo :ze5|B66daSiciliansk, Richter-Rauzer, Rauzer angreb, 7...a6 @A -`5s@0C r9vTJB94daSiciliansk, Najdorf, 6. Lg5/A XTm B93daSiciliansk, Najdorf, 6. f4Em z"L!B92daSiciliansk, Najdorf, Zagreb (fianchetto) variantEm %DN+WB91daSiciliansk, Najdorf, Zagreb (fianchetto) variant(3 %MB90daSiciliansk, Najdorf.? t 'B89daSiciliansk, Sozin, 7. Le39U e|J,B88daSiciliansk, Sozin, Leonhardt variant-= f!m$B87daSozin med ...a6 og ...b5- = Α嚽1B86daSiciliansk, Sozin angrebV  "ĵ=LCYB85daSiciliansk, Scheveningen, klassisk variant med ...Dc7 and ...Sc6I u UTTUsB84daSiciliansk, Scheveningen (Paulsen), klassisk variant5 M ޢ4ۭB83daSiciliansk, Scheveningen, 6. Le24 K P4[oڅB82daSiciliansk, Scheveningen, 6. f4;Y o'Z B81daSiciliansk, Scheveningen, Keres angreb5M "&Ͳ B80daSiciliansk, Scheveningen variantFo i<ǘYB79daSiciliansk, Dragevar., jugoslavisk angreb, 12. h4 Lg3pH UL0'C vvKbC12daFransk, MacCutcheon variant#&) mH6qC11daFransk forsvar,%; O|}0yC10daFransk, Paulsen variantB$g cIꎴ)WC09daFransk, Tarrasch, åben variant, hovedvariant9#U ޚ^ C08daFransk, Tarrasch, åben, 4.exd5 exd54"K  C07daFransk, Tarrasch, åben variantC!i )C06daFransk, Tarrasch, lukket variant, hovedvariant5 M H_)[C05daFransk, Tarrasch, lukket variant;Y \&^8C04daFransk, Tarrasch, Guimard hovedvariant%- zܽC03daFransk, Tarrasch0C mr"l0C02daFransk, fremrykningsvariant.? nAC01daFransk, afbytningsvariant Kia3C00daFransk>_ ҮB99daSiciliansk, Najdorf, 7...Se7 Hovedvariant1E PU6nUB98daSiciliansk, Najdorf, 7...Le71E fR6/KB97daSiciliansk, Najdorf, 7...Db6/A DB96daSiciliansk, Najdorf, 7. f40C TB95daSiciliansk, Najdorf, 6...e6 Ok-mG#M*}O+;9 44uC32daKGD, Falkbeer, 5. dxe4-:= p8C31daKGD, Falkbeers modgambit 9# Rwe)C30daKongegambit48K AT @C29daWiener gambit, Kaufmann variant 7# `cӇ8> JC28daWienerparti 6# v9E= pKNQC35daKGA, Cunninghams forsvar)=5 Ǽ8.LC34daKongespringer gambit)<5 ԉFC33daKongegambit modtaget Td:b0R!T;cY ($DC72daSpansk, moderne Steinitz forsvar 5.0-05bM ]_p9&C71daSpansk, moderne Steinitz forsvara aAoC70daSpansk6`O nְC69daSpansk, afbytningsvariant, 5. O-O._? ˽3aC68daSpansk, afbytningsvariant:^W ?w9ӈC67daSpansk, Berlin forsvar, åben variant7]Q W2qf=C66daSpansk, Berlin forsvar, 4. O-O, d6+\9 BTC65daSpansk, Berlin forsvar6[O 2%C64daSpansk, klassisk (Cordel) forsvar/ZA |8̟C63daSpansk, Schliemann forsvar5YM ropC62daSpansk, gammelt Steinitz forsvar+X9 n@SC61daSpansk, Bird's forsvarW KvrC60daSpansk'V1 &3.`?C59daTospringer forsvar'U1 Īq C58daTospringer forsvar'T1 B; C57daTospringer forsvar'S1 7=C56daTospringer forsvar'R1 @'Ӓ:C55daTospringer forsvar!Q% ikt9b:C54daGiuoco piano!P% %N=C53daGiuoco piano KGRQ ~K0tC Ԥb|C89daSpansk, Marshalls modangreb#s) -F7C88daSpansk, lukket5rM $m/3C87daSpansk, lukket, Averbach variant+q9 z4xC86daSpansk, Worrall angrebDpk J0uC85daSpansk, afbytningsvariant dobbelt udsat (DERLD)+o9 ?zYC84daSpansk, lukket forsvar5nM Tg C83daSpansk, åbent, klassisk forsvar*m7 '`;C82daSpansk, åbent, 9. c32lG P3K9C81daSpansk, åbent, Howell angreb6kO 0ȉR~C80daSpansk, åbent (Tarrasch) forsvarEjm b0C79daSpansk, Steinitz forsvar udsat (Russisk forsvar)#i) |аHmC78daSpansk, 5. O-O+h9 ̻.}C77daSpansk, Morphy forsvarVg )%KUF8C76daSpansk, moderne Steinitz forsvar, fianchetto (Bronstein) variant5fM FY1C75daSpansk, moderne Steinitz forsvar5eM 燧cI)C74daSpansk, moderne Steinitz forsvarFdo LMC73daSpansk, moderne Steinitz forsvar, Richter variant Dt=h,e-qD*7 ? KfD08daQGD; Albins modgambit,; !`D07daQGD; Tschigorin forsvar#) G؃4D06daDronninggambit:W ]&bD05daDronningebondespil, Zukertort variant'1 +z7D04daDronningebondespil5M @dD03daTorre angreb, Tartakower variant/A wPjD02daDronningebondespil, 2. Sf3+9 `GDD01daRichter-Veresov Angreb'1 dD00daDronningebondespil:~W 4Q۾C99daSpansk, Lukket, Tschigorin, 12...c5d49}U o@GC98daSpansk, Lukket, Tschigorin, 12...Sc67|Q _JXJ}C97daSpansk, Lukket, Tschigorin forsvar,{; %o#CC96daSpansk, lukket, 8...Sa53zI _%UHC95daSpansk, lukket, Breyer, 10. d43yI +j %eC94daSpansk, Lukket, Breyer forsvar4xK p{y`C93daSpansk, lukket, Smyslov forsvar*w7 C92daSpansk, lukket, 9. d4*v7 A =$uC91daSpansk, lukket, 9. d4/uA ht, 7C90daSpansk, lukket (med ...d6) Gl5k.eBtG*7 :܎AD27daQGA; klassisk variant*7 U0sAD26daQGA; klassisk variant! ukrD25daQGA, 4. e3 # #\CxnD24daQGA, 4. Sc3,; OD23daDronninggambit modtaget*7 Q {CD22daQGA; Aljechin forsvar # %F[!D21daQGA, 3. Sf3,; XA=D20daDronninggambit modtaget+9 N8D19daQGD; Hollandsk variant+9 E.2D18daQGD; Hollandsk variant;Y Y wD17daQGD; Slavisk forsvar, tjekkisk forsvar:W n~D16daQGD; Slavisk modtaget, Alapin variantIu c )̨E6D15daQGD; Slavisk modtaget, afbytningsvariant, 6. Lf4 Lf5< [ J |D14daQGD; Slavisk forsvar, afbytningsvariant< [ hHD13daQGD; Slavisk forsvar, afbytningsvariant4 K RFD12daQGD; Slavisk forsvar, 4. e3 Lf51 E YǥyD11daQGD; Slavisk forsvar, 3. Sf3) 5 =mCDD10daQGD; Slavisk forsvar1E "MXD09daQGD; Albins modgambit, 5. g3 5hE>Z(e5-.= E(N WD47daQGD; Semi-slavisk 7. Lc4--= ޔCMrD46daQGD; Semi-slavisk 6. Ld3,,; zO]D45daQGD; Semi-slavisk 5. e30+C  R+OD44daQGD; Semi-slavisk 5. Lg5 dc.*? WdD43daQGD; Semi-slavisk forsvar/)A U=)}7D42daQGD; Semi-Tarrasch, 7. Ld3.(? ov|qD41daQGD; Semi-Tarrasch, 5. cd/'A a\8 D40daQGD; Semi-Tarrasch forsvar/&A Z01nD39daQGD; Ragozin, Wien variant)%5 Nl_D38daQGD; Ragozin variant $# -6_D37daQGD; 4. Sf3B#g NP)N#D36daQGD; afbytning, positionsspilsvariant, 6. Dc2!"% \I䯹gD35daQGD; 3...Sf6+!9 vUsЧD34daQGD; Tarrasch, 7...Le7@ c D33daQGD; Tarrasch, Schlechter-Rubinstein system*7 ?- D32daQGD; Tarrasch forsvar # C&tD31daQGD, 3. Sc3,; 0D30daDronninggambit afslået2G "AD29daQGA; klassisk variant 8...Lb71E ;2D28daQGA; klassisk variant 7. De2 4[@ZQ4L@{ A:D65daQGD; Ortodokst forsvar, Rubinstein angreb, HovedvariantH?s %,JFD64daQGD; Ortodokst forsvar, Rubinstein angreb (med Tc1)3>I F /©D63daQGD; Ortodokst forsvar, 7. Tc1J=w D62daQGD; Ortodokst forsvar, 7. Dc2 c5, 8. cd (Rubinstein)?<a pĴaD61daQGD; Ortodokst forsvar, Rubinstein variant+;9 ƓD60daQGD; Ortodokst forsvarP: 6˺ŝD59daQGD; Tartakower (Makagonov-Bondarevsky) system, 8. cd Sxd5C9i Q/{֑D58daQGD; Tartakower (Makagonov-Bondarevsky) system78Q lPD57daQGD; Laskers forsvar, hovedvariant)75 N[D56daQGD; Laskers forsvar 6# >LxD55daQGD; 6. Sf335I Vu%*D54daQGD; Anti-neo-Ortodoks variant$4+ =՘D53daQGD; 4. Lg5 Le73 Mõ$kD52daQGD%2- QD51daQGD; 4. Lg5 Sbd7 1# 3*D50daQGD; 4. Lg5+09 ͹EwD49daQGD; Meraner, 11. Sxb5)/5 9/KjD48daQGD; Meraner, 8...a6 ,j*U(oB|T,%R- _5%}D83daGrünfeld gambit%Q- ޝUtD82daGrünfeld 4. Lf4/PA s6/D81daGrünfeld; russisk variant&O/ Ê{eD80daGrünfeld forsvar8NS Q.e죵D79daNeo-Grünfeld, 6. O-O, hovedvariant-M= ,tQ<D78daNeo-Grünfeld, 6. O-O c6*L7 әD77daNeo-Grünfeld, 6. O-O:KW Q\D76daNeo-Grünfeld, 6. cd Sxd5, 7. O-O Sb6@Jc 2,_ID75daNeo-Grünfeld, 6. cd Sxd5, 7. O-O c5, 8.Sc36IO /]SvND74daNeo-Grünfeld, 6. cd Sxd5, 7. O-O*H7 *P0mMD73daNeo-Grünfeld, 5. Sf37GQ yKNN2D72daNeo-Grünfeld, 5. cd, hovedvariant)F5 s'&E%D71daNeo-Grünfeld, 5. cd*E7 V<SD70daNeo-Grünfeld forsvar?Da g1wפkD69daQGD; Ortodokst forsvar, klassisk, 13. dxe5=C] FvUD68daQGD; Ortodokst forsvar, klassisk variantVB &3M D67daQGD; Ortodokst forsvar, Ld3 line, Capablancas befrielsesmanøvre:AW y1EaD66daQGD; Ortodokst forsvar, Ld3 varianter :Kt? Md:'c1 "RE00daDronningebondespil=b] LSD99daGrünfeld forsvar, Smyslov, hovedvariant8aS ̆ꇰ@D98daGrünfeld, russisk, Smyslov variant9`U LD97daGrünfeld, russisk variant med 7. e4/_A vjgD96daGrünfeld, russisk variant3^I 5.sD95daGrünfeld med 5. e3 O-O 6. Db3%]- |{GD94daGrünfeld, 5. e33\I ԃJ7D@D93daGrünfeld med 5. Lf4 O-O 6. e3&[/ sLO%D92daGrünfeld, 5. Lf42ZG n?D91daGrünfeld, Trespringervariant2YG xD90daGrünfeld, TrespringervariantFXo ~i'TD89daGrünfeld, Spassky variant, hovedvariant, 13. Ld3NW '`"`sfD88daGrünfeld, Spassky variant, hovedvariant, 10...cd, 11. cd:VW rXU#bՏD87daGrünfeld, afbytning, Spassky variant;UY %W:D86daGrünfeld, afbytning, klassisk variantCTi RN?lD85daGrünfeld, afbytningsvariant, Nadanian variant.S? q]D84daGrünfeld gambit modtaget _k:l5m?_Aue haE18daDronningeindisk, gammel hovedvariant, 7. Sc30tC r)~E17daDronningeindisk, 5. Lg2 Le78sS r~ uCE16daDronningeindisk, Capablanca variant+r9 _=E15daDronningeindisk, 4. g3+q9 ?CE14daDronningeindisk, 4. e3:pW HM(E13daDronningeindisk, 4. Sc3, hovedvariant,o; Eg}E12daDronningeindisk forsvar(n3 0eҞE11daBogo-Indisk forsvar.m? i E10daDronningebondespil 3. Sf34lK S-ŰE09daKatalansk, lukket, hovedvariant.k? GZ9˅E08daKatalansk, lukket, 7. Dc20jC ^(+.E07daKatalansk, lukket, 6...Sbd7.i? `cb,(E06daKatalansk, lukket, 5. Sf36hO #fQ05E05daKatalansk, åbent, klassisk linje.g? 7jE04daKatalansk, åbent, 5. Sf38fS ;ְE03daKatalansk, åbent, Aljechin variant.e? >jRaE02daKatalansk, åbent, 5. Da4&d/ >ZzazE01daKatalansk, lukket [Ua L[<[ ; {xE33daNimzo-indisk, klassisk variant, 4...Sc63I {jL݂E32daNimzo-indisk, klassisk variantBg {cE31daNimzo-indisk, Leningrad variant, hovedvariant4K 8:.E30daNimzo-indisk, Leningrad variantAe  b߮E29daNimzo-indisk, Sämisch variant, hovedvariant:W p4E28daNimzo-indisk, Sämisch variant, 6. e3<~[ \PTk;E27daNimzo-indisk, Sämisch variant, 5...0-0R} N"Z*Q5E26daNimzo-indisk, Sämisch variant, 4. a3 Lxc3+ 5. bxc3 c5 6. e3B|g ?lE25daNimzo-indisk, Sämisch variant, Keres variant3{I 2E24daNimzo-indisk, Sämisch variant?za @kE23daNimzo-indisk, Spielmann, 4...c5, 5. dc Sc64yK *2NMIE22daNimzo-indisk, Spielmann variant7xQ }|E21daNimzo-indisk, Trespringer- variant)w5 bxE20daNimzo-indisk forsvarBvg ) FE19daDronningeindisk, gammel hovedvariant, 9. Dxc3 G|:wLi#G:W T`?E49daNimzo-indisk, 4. e3, Botvinnik system7Q gE, E48daNimzo-indisk, 4. e3 O-O, 5. Ld3 d53I QBE47daNimzo-indisk, 4. e3 O-O, 5.Ld3,; >󉜀E46daNimzo-indisk, 4. e3 O-OCi #LE45daNimzo-indisk, 4. e3, Bronstein (Byrne) variant:W ‚qm'E44daNimzo-indisk, Fischer variant, 5. Se22G &TFE43daNimzo-indisk, Fischer variant@ c O%oE42daNimzo-indisk, 4. e3 c5, 5. Se2 (Rubinstein)+ 9 [>ꣂb?E41daNimzo-indisk, 4. e3 c5( 3 OD\iBE40daNimzo-indisk, 4. e39 U 2A"NhxE39daNimzo-indisk, klassisk, Pirc variant3 I G 2E E38daNimzo-indisk, klassisk, 4...c5N IɟѻE37daNimzo-indisk, klassisk, Noa variant, Hovedvariant, 7. Dc2?a ٿE36daNimzo-indisk, klassisk, Noa variant, 5. a3Fo /NGrE35daNimzo-indisk, klassisk, Noa variant, 5. cxd5 exd58S $E34daNimzo-indisk, klassisk, Noa variant 2<cGu2@#c aM=*E64daKongeindisk, fianchetto, jugoslavisk system;"Y S98BE63daKongeindisk, fianchetto, Panno variant3!I 8dE62daKongeindisk, fianchettovariant0 C FYP+E61daKongeindisk forsvar, 3. Sc3(3 wA8"E60daKongeindisk forsvar6O BƍE59daNimzo-indisk, 4. e3, hovedvariantCi .}/+E58daNimzo-indisk, 4. e3, hovedvariant med 8...Lxc3U 3E57daNimzo-indisk, 4. e3, hovedvariant med 8...dxc4 og 9...Lxc4 cxd4Bg # E56daNimzo-indisk, 4. e3, hovedvariant med 7...Sc6L{ -J?HE55daNimzo-indisk, 4. e3, Gligoric system, Bronstein variantDk \pPE54daNimzo-indisk, 4. e3, Gligoric system med 7...dc@c ZifE53daNimzo-indisk, 4. e3, hovedvariant med ...c5@c ׍ZE52daNimzo-indisk, 4. e3, hovedvariant med ...b6:W }E51daNimzo-indisk, 4. e3 e8g8, 5. Sf3 d7d5Ae lzE50daNimzo-indisk, 4. e3 e8g8, 5. Sf3, uden ...d5 +LX(Ya+34I oE81daKongeindisk, Sämisch, 5...O-O23G eP42aE80daKongeindisk, Sämisch variant?2a RUx4]E79daKongeindisk, firbonde-angreb, hovedvariantB1g 3E78daKongeindisk, firbonde-angreb, med Le2 and Sf390U F_E77daKongeindisk, firbonde-angreb, 6. Le21/E )E76daKongeindisk, firbonde-angreb8.S aE75daKongeindisk, Averbakh, hovedvariant2-G R gE74daKongeindisk, Averbakh, 6...c5(,3 xa|Z^E73daKongeindisk, 5. Le2-+= 'DDr(E72daKongeindisk med e4 og g3:*W "PE71daKongeindisk, Makagonov system (5. h3)')1 2[id@]}E70daKongeindisk, 4. e4C(i \^ 8'H$E69daKongeindisk, fianchetto, klassisk hovedvariantD'k n[DRmE68daKongeindisk, fianchetto, klassisk variant, 8.e47&Q mAE67daKongeindisk, fianchetto med ...Sd7?%a Zby¾E66daKongeindisk, fianchetto, jugoslavisk Panno5$M 8E65daKongeindisk, jugoslavisk, 7. O-O wAAr/wBCg ³&E96daKongeindisk, ortodoks, 7...Nbd7, Hovedvariant;BY {E95daKongeindisk, ortodoks, 7...Nbd7, 8.Re12AG ]CE94daKongeindisk, ortodoks variant@@c >MĎUE93daKongeindisk, Petrosjan system, Hovedvariant2?G #u.SE92daKongeindisk, klassisk variant(>3 }.eE91daKongeindisk, 6. Le2(=3 Ѕu-E90daKongeindisk, 5. Sf3A<e .E89daKongeindisk, Sämisch, ortodoks hovedvariant=;] մE88daKongeindisk, Sämisch, ortodoks 7. d5 c6;:Y ,vlgoE87daKongeindisk, Sämisch, ortodoks, 7. d5@9c VA/wE86daKongeindisk, Sämisch, ortodoks, 7. Sge2 c6<8[ G%32E85daKongeindisk, Sämisch, ortodoks variant>7_ i/1E84daKongeindisk, Sämisch, Panno hovedvariant36I wGE83daKongeindisk, Sämisch, 6...Sc6E5m wUE82daKongeindisk, Sämisch, dobbeltfianchetto variant 2F`9 k<Y2$T+ o MA13deReti-Eröffnung8SS Je VA12deReti-Eröffnung (New Yorker System)$R+ Xb"^ A11deReti-EröffnungWQ  Gԏ3A03deBird-Eröffnung4IK -A02deFroms Gambit undBird-Eröffnung&H/ ʝLA01deLarsen-Eröffnung7GQ >_rA00deseltene Eröffnungen wieOrang-UtanIFu XݵE99daKongeindisk, ortodoks, Aronin-Taimanov, hovedvariantCEi +)}E98daKongeindisk, ortodoks, Aronin-Taimanov, 9. Se1qDC M!bP@E97daKongeindisk, ortodoks, Aronin-Taimanov variant (jugoslavisk angreb / Mar del Plata variant) 5bB"Ig4h50jC =C2A35deEnglische Symmetrievariante0iC qeVA34deEnglische Symmetrievariante0hC wQ"٘oA33deEnglische Symmetrievariante0gC nJA32deEnglische Symmetrievariante0fC 2A31deEnglische Symmetrievariante0eC ЏuA30deEnglische Symmetrievariante5dM vt0pA29deEnglisch (Vierspringer-Variante)5cM U6݅A28deEnglisch (Vierspringer-Variante)6bO _KYfĔA27deEnglisch (Holländische Struktur)6aO `PA26deEnglisch (Sizilianisch im Anzuge)6`O })uUYsA25deEnglisch (Sizilianisch im Anzuge)_ c7wTA24deEnglisch^ ^{>tgaA23deEnglisch] fC|A22deEnglisch\ MdA21deEnglisch[ 퀮ΐA20deEnglischZ >` 6cA19deEnglischY $A18deEnglischX 3RA17deEnglischW ja%k:A16deEnglisch4VK =d A15deEnglisch gegenKönigsfianchetto$U+ J ބA14deReti-Eröffnung 0Re2\/i06{O QXWA52deBudapester Gambit (Hauptvariante)8zS x.4A51deBudapester Gambit,Fajarowicz-Gambit*y7 =C A50deDamenindischer Aufbau,x; ։YA49deKönigsindischer Aufbau,w; ,je AA48deKönigsindischer Aufbau*v7 z0%7A47deDamenindischer Aufbau5uM ĶjA46deDamenbauernspiel (Torre-Angriff)=t] q(KA45deDamenbauernspiel (Trompowsky-Eröffnung),s; >fAA44deAlt-Benoni-Verteidigung,r; ͽ.AA43deAlt-Benoni-Verteidigung0qC 6/3A42dez. B. Moderne Verteidigung>p_ / A41deunregelmäßige Systeme,Wade-VerteidigungvoM v)A40deEnglund-Gambit,Owen-Verteidigung,Känguru-Verteidigung,Moderne Verteidigung,Horwitz-Verteidigung0nC o))'A39deEnglische Symmetrievariante0mC cV|~A38deEnglische Symmetrievariante0lC  [A37deEnglische SymmetrievarianteEkm x K؟A36deEnglische Symmetrievariante (Botwinnik-Variante) =pE^+K~=> _ ˵16<A70deModerne Benoni-Verteidigung (Hauptsystem)< [ S5,A69deBenoni-Verteidigung (Dreibauern-System)D k MXG<A68deModerne Benoni-Verteidigung (Dreibauern-System)D k qb(RcA67deModerne Benoni-Verteidigung (Dreibauern-System)D k ǠM=A66deModerne Benoni-Verteidigung (Zentraler Angriff)0C Iٳ-ԟUA65deModerne Benoni-Verteidigung0C ך$Iw8A64deModerne Benoni-Verteidigung0C {A63deModerne Benoni-Verteidigung0C QU^A62deModerne Benoni-Verteidigung0C ,v)A61deModerne Benoni-Verteidigung Bv!|RA60deBenoni/A BivA59deWolga-Gambit,Benkö-Gambit/A 9qP>A58deWolga-Gambit,Benkö-Gambit/A v@A57deWolga-Gambit,Benkö-Gambit(3 ̦oA56deBenoni-Verteidigung-~= 0 96A55deAltindische Verteidigung-}= x4iA54deAltindische Verteidigung-|= my;r"A53deAltindische Verteidigung Aj)f%\8A@c +zO1A86deHolländisch (Leningrader Variante) mit Sh3!% ;;lXǔHA85deHolländisch!% tW%A84deHolländisch3I wVfFA83deHolländisch (Staunton-Gambit)3I fcRPA A82deHolländisch (Staunton-Gambit)!% ;djY$8A81deHolländischDk a+A80deHolländische Verteidigung (kurz: Holländisch)>_ -5JB|A79deModerne Benoni-Verteidigung (Hauptsystem)>_ ǯe8qA78deModerne Benoni-Verteidigung (Hauptsystem)>_ lA77deModerne Benoni-Verteidigung (Hauptsystem)>_ a 7A76deModerne Benoni-Verteidigung (Hauptsystem)>_ waaY)A75deModerne Benoni-Verteidigung (Hauptsystem)>_ F5%A74deModerne Benoni-Verteidigung (Hauptsystem)>_ ;~ӻ;A73deModerne Benoni-Verteidigung (Hauptsystem)Hs tNXG A72deModerne Benoni-Verteidigung (Hauptsystem mit 9.Lg5)Hs f;wAA71deModerne Benoni-Verteidigung (Hauptsystem mit 8.Lg5) 0O[$[7r0?.a @NB03deAljechin-Verteidigung (Vierbauernvariante)9-U 8B02deAljechin-Verteidigung (Jagdvariante)0,C VDaB01deSkandinavische VerteidigungS+ U@ B00deOwen-Verteidigung;Nimzowitsch-Verteidigung;Baker-Verteidigung!*% !uA99deHolländisch!)%  gشA98deHolländisch!(% )7M<A97deHolländischG'q V@aA96deHolländisch (Hauptvariante),Iljin-Genewski-System4&K ʕAA95deHolländisch (Stonewall-System)4%K iRLA94deHolländisch (Stonewall-System)4$K C%A93deHolländisch (Stonewall-System)4#K myA92deHolländisch (Stonewall-System)G"q utA91deHolländisch (Klassisches System mit Abweichungen)9!U <~ȤA90deHolländisch (Klassisches Stonewall)8 S ˮr@A89deHolländisch (Leningrader Variante)8S \rA88deHolländisch (Leningrader Variante)8S m&vCA87deHolländisch (Leningrader Variante) ^Td^^;=Y T?}a(-+B18deCaro-Kann-Verteidigung (Hauptvariante);<Y %B17deCaro-Kann-Verteidigung (Hauptvariante)B;g >ϕEulB16deCaro-Kann-Verteidigung (Nimzowitsch-Variante)<:[ b oB15deCaro-Kann-Verteidigung (Flohr-Variante);9Y ^GIFB14deCaro-Kann-Verteidigung (Panow-Angriff)>8_ VEUمB13deCaro-Kann-Verteidigung (Abtauschvariante)>7_ 1`m-B12deCaro-Kann-Verteidigung (Vorstoßvariante)C6i j1B11deCaro-Kann-Verteidigung (Zweispringer-Variante)+59 }U?uB10deCaro-Kann-VerteidigungB4g h 3I4B09dePirc-Ufimzew-Verteidigung (Dreibauernangriff).3? aBB08dePirc-Ufimzew-VerteidigungI2u %]nZd/B07dePirc-Ufimzew-Verteidigung,Jugoslawische Verteidigung)15 l55B06deModerne Verteidigung=0] YvX)B05deAljechin-Verteidigung (Moderne Variante)=/] [P31`VB04deAljechin-Verteidigung (Moderne Variante) s H NRK cbȠIB32deSizilianisch (Löwenthal-Variante), (Labourdonnais-Variante)6JO ήe:B31deSizilianisch (Rossolimo-Variante)6IO Qm]tB30deSizilianisch (Rossolimo-Variante)7HQ ǒJj@B29deSizilianisch (Rubinstein-Variante)2GG mW B28deSizilianisch (O'Kelly-System)LF{ VS?B27deSizilianisch (frühes Fianchetto) (Ungarische Variante)9EU ?7ݦB26deSizilianisch, (geschlossenes System)9DU !TsB25deSizilianisch, (geschlossenes System)9CU ZGEB24deSizilianisch, (geschlossenes System)'B1 !ȴPB23deGrand-Prix-Angriff3AI f&EmB22deSizilianisch (Alapin-Variante)P@ 'B21deSizilianisch (Morra-Gambit), (Sizilianisches Mittelgambit)L?{ θ?R&B20deSizilianische Verteidigung,Sizilianisch (seltene Züge);>Y rMYZwB19deCaro-Kann-Verteidigung (Hauptvariante) :FEX!s:6XO ?uhNq bB45deSizilianisch (Klassisches System)=W] jft{B44deSizilianisch (Paulsen-Taimanow-Variante)4VK u*\+B43deSizilianisch (Paulsen-Variante)4UK ̪>WB42deSizilianisch (Paulsen-Variante)4TK j5,>B41deSizilianisch (Paulsen-Variante)@Sc od,B40deSizilianisch (Klassisches System) mit e7-e6RR r<&4B39deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)RQ *B38deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)RP ilzh4B37deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)RO NW B36deSizilianisch (beschleunigte Drachenvariante, Maroczy-Aufbau)TN V@B35deSizilianisch (beschleunigte Drachenvariante, Simagin-Variante)TM KgDGB34deSizilianisch (beschleunigte Drachenvariante, Simagin-Variante)`L! nF rB33deSizilianisch (Sweschnikow-Variante), (Lasker-Variante), (Pelikan-Variante) AIix*A;gY T#zѝ٤B60deSizilianisch (Richter-Rauser-Variante)8fS 18B59deSizilianisch (Boleslawski-Variante)8eS 'UB58deSizilianisch (Boleslawski-Variante)2dG  6B57deSizilianisch (Sosin-Variante)Kcy :wB56deSizilianisch Abweichung von Sosin- und Rauser-VarianteLb{ >qCB55deSizilianisch (Rauser-Variante), (Anti-Drachen-Variante)La{ ^h>B54deSizilianisch (Rauser-Variante), (Anti-Drachen-Variante)P` a2dB53deSizilianisch (Ungarische Variante), (Tschechower-Variante)6_O W! B52deSizilianisch (Rossolimo-Variante)I^u 9$T;B51deSizilianisch (Rossolimo-Variante), (Moskauer System)!]% }(z*bB50deSizilianisch4\K |יB49deSizilianisch (Paulsen-Variante)4[K {)ּB48deSizilianisch (Paulsen-Variante)=Z] NbPqB47deSizilianisch (Paulsen-Taimanow-Variante)=Y] lH;Ͳ(B46deSizilianisch (Paulsen-Taimanow-Variante) HFNf0H;wY IB76deSizilianisch (Moderne Drachenvariante);vY 4 ?.uCB75deSizilianisch (Moderne Drachenvariante)3uI ɔH'.B74deSizilianisch (Drachenvariante)3tI uӉ7B73deSizilianisch (Drachenvariante)3sI Ib˪[B72deSizilianisch (Drachenvariante)3rI ؜B71deSizilianisch (Drachenvariante)3qI 2ᇧSB70deSizilianisch (Drachenvariante);pY [>UB69deSizilianisch (Richter-Rauser-Variante);oY Lo> B68deSizilianisch (Richter-Rauser-Variante);nY aB67deSizilianisch (Richter-Rauser-Variante);mY :ze5|B66deSizilianisch (Richter-Rauser-Variante);lY X<B65deSizilianisch (Richter-Rauser-Variante);kY 3@1 B64deSizilianisch (Richter-Rauser-Variante);jY \FgB63deSizilianisch (Richter-Rauser-Variante);iY B62deSizilianisch (Richter-Rauser-Variante);hY |;$B61deSizilianisch (Richter-Rauser-Variante) oF d*t@o>_ %DN+WB91deSizilianisch (Najdorf-Variante) mit 6. g3Bg j'eY$B90deSizilianisch (Najdorf-Variante), AbweichungenHs t 'B89deSizilianisch (Sosin-Angriff), (Velimirovic-Angriff)1E bs4B88deSizilianisch (Sosin-Angriff)1E f!m$B87deSizilianisch (Sosin-Angriff)Em Α嚽1B86deSizilianisch (Sosin-Angriff), (Fischer-Variante)7Q f\"B85deSizilianisch (Scheveninger System)7Q t?DCbB84deSizilianisch (Scheveninger System)7~Q uO}֢JB83deSizilianisch (Scheveninger System)7}Q P4[oڅB82deSizilianisch (Scheveninger System)1|E o'Z B81deSizilianisch (Keres-Angriff)7{Q ĝR)?4B80deSizilianisch (Scheveninger System);zY vaB79deSizilianisch (Moderne Drachenvariante);yY S1|B78deSizilianisch (Moderne Drachenvariante);xY lOB77deSizilianisch (Moderne Drachenvariante) Ps1Z#g0P5M [s$C06deFranzösisch (Tarrasch-Variante)5M .tC05deFranzösisch (Tarrasch-Variante)5M \&^8C04deFranzösisch (Tarrasch-Variante)5M F_BC03deFranzösisch (Tarrasch-Variante)4K mr"l0C02deFranzösisch (Vorstoßvariante)4K nAC01deFranzösisch (Abtauschvariante)Ky Kia3C00deFranzösische Verteidigung,Französisch, seltene Züge4K ҮB99deSizilianisch (Najdorf-Variante)4 K hvXLB98deSizilianisch (Najdorf-Variante)D k fR6/KB97deSizilianisch (Najdorf-Variante) mit 7. ...Db6,(K y $ghDB96deSizilianisch (Najdorf-Variante), (Polugajewski-System)? a ;)B95deSizilianisch (Najdorf-Variante) mit 6. Lg5? a  d޹B94deSizilianisch (Najdorf-Variante) mit 6. Lg5>_ XTm B93deSizilianisch (Najdorf-Variante) mit 6. f4Iu z"L!B92deSizilianisch (Najdorf-Variante), (Opocenský-System) /X>u2wS/!'% 0M.C24deLäuferspiel!&% ciC23deLäuferspiel!%% +oC22deMittelgambit&$/ Nk6qC21deNordisches Gambit(#3 DnC20deKönigsbauernspiele@"c v'ӻrC19deFranzösisch (Nimzowitsch/Winawer-Variante)@!c NXCmC18deFranzösisch (Nimzowitsch/Winawer-Variante)@ c VS.[C17deFranzösisch (Nimzowitsch/Winawer-Variante)@c JiC16deFranzösisch (Nimzowitsch/Winawer-Variante)@c M^$]wvC15deFranzösisch (Nimzowitsch/Winawer-Variante)Em ̀7_ GOuCC40deLettisches Gambit,Gambit in der Rückhand=6] \Td4C39deKönigsspringer-Gambit (Allgaier-Gambit)D5k A JC28deWiener Partie"*' v9ESZzC25deWiener Partie ?s=d0vAn?,K; KvrC60deSpanische Partie (kurz:GJq #xHC59deZweispringerspiel im Nachzuge (Klassisches System)GIq Īq C58deZweispringerspiel im Nachzuge (Klassisches System)I q)C47deSchottisches Vierspringerspiel&=/ ZaGC46deDreispringerspiel'<1 A{C45deSchottische Partie7;Q xͧ}C44deKönigsbauernspiele mit 2. Sf3 Sc6 +bRp/l+>[_ )%KUF8C76deSpanisch, (Moderne Steinitz-Verteidigung)>Z_ FY1C75deSpanisch, (Moderne Steinitz-Verteidigung)>Y_ 燧cI)C74deSpanisch, (Moderne Steinitz-Verteidigung)>X_ LMC73deSpanisch, (Moderne Steinitz-Verteidigung)>W_ ($DC72deSpanisch, (Moderne Steinitz-Verteidigung)>V_ ]_p9&C71deSpanisch, (Moderne Steinitz-Verteidigung)6UO aAoC70deSpanisch (Abweichungen im 4. Zug)1TE 4C69deSpanisch, (Abtauschvariante)1SE ˽3aC68deSpanisch, (Abtauschvariante)8RS ?w9ӈC67deSpanisch, (Rio-de-Janeiro-Variante)BQg W2qf=C66deSpanisch, (Verbesserte Steinitz-Verteidigung):PW BTC65deSpanisch: (Berliner Verteidigung bzw.PO 2%C64deSpanisch, (Cordel-Verteidigung), (Schliemann-Verteidigung)/NA |8̟C63deSpanisch (Jänisch-Gambit)5MM ropC62deSpanisch (Steinitz-Verteidigung)1LE n@SC61deSpanisch (Bird-Verteidigung) V~Hz3IV3jI A =$uC91deSpanisch (Bogoljubow-Variante)Big )>ZC90deSpanisch (Abweichungen von der Hauptvariante)1hE Ԥb|C89deSpanisch, (Marshall-Angriff)Age 'aZ.OC88deGeschlossene Verteidigung (Spanische Partie)Dfk $m/3C87deSpanisch, (Russische Variante mitZugumstellung)0eC z4xC86deSpanisch, (Worrall-Angriff)9dU J0uC85deSpanisch, (Steenwijker Verteidigung)1cE \ڕk*tC84deSpanisch, (Zentrums-Angriff)Dbk Tg C83deSpanisch, (Offene Verteidigung) (Hauptvariante)Ma} '`;C82deSpanisch, (Offene Verteidigung), (Italienische Variante)D`k P3K9C81deSpanisch, (Offene Verteidigung), (Keres-System)4_K 0ȉR~C80deSpanisch, (Offene Verteidigung)3^I b0C79deSpanisch, (Russische Variante)I]u |аHmC78deSpanisch, (Archangelsk-Variante), (Möller-Variante)3\I ̻.}C77deSpanisch, (Anderssen-Variante) @g6^)n9j@'|1 "MXD09deAlbins Gegengambit'{1 W(l=PD08deAlbins Gegengambit:zW !`D07deDamengambit (Tschigorin-Verteidigung)0yC ^m of=rD06deDamengambit (seltene Züge)2xG ]&bD05deDamenbauernspiel:Colle-System2wG Ͳй<D04deDamenbauernspiel:Colle-System%v- @dD03deDamenbauernspiel%u- ]$U0D02deDamenbauernspiel?ta `GDD01deDamenbauernspiel (Richter-Weressow-System)&s/ dD00deDamenbauernspiel,2rG 4Q۾C99deSpanisch, (Tschigorin-System)2qG o@GC98deSpanisch, (Tschigorin-System)Zp _JXJ}C97deSpanisch, (Abweichungen vom Tschigorin-System), (Panow-Verteidigung)Coi %o#CC96deSpanisch, (Abweichungen vom Tschigorin-System).n? _%UHC95deSpanisch, (Breyer-System).m? +j %eC94deSpanisch, (Breyer-System)1lE p{y`C93deSpanisch, (Smyslow-Variante)1kE C92deSpanisch, (Saitzew-Variante) HKu8h8xH- = w5m3,{|D25deAngenommenes Damengambit- = #\CxnD24deAngenommenes Damengambit- = oXD23deAngenommenes Damengambit- = Q {CD22deAngenommenes Damengambit-= %F[!D21deAngenommenes Damengambit-= XA=D20deAngenommenes DamengambitGq MWtD19deDamengambit (Slawische Verteidigung Hauptvariante)Gq E.2D18deDamengambit (Slawische Verteidigung Hauptvariante)9U S{xD17deDamengambit (Slawische Verteidigung):W ołD16deDamengambit (Lasker/Smyslow-Variante)9U &D15deDamengambit (Slawische Verteidigung)Jw J |D14deDamengambit (Slawische Verteidigung),AbtauschvarianteJw ȑD13deDamengambit (Slawische Verteidigung),Abtauschvariante9U 5sNOKD12deDamengambit (Slawische Verteidigung)9~U YǥyD11deDamengambit (Slawische Verteidigung):}W =mCDD10deDamengambit (Slawische Verteidigung), Dp@gNDDk ]DlGD42deDamengambit (Verbesserte Tarrasch-Verteidigung)Dk ov|qD41deDamengambit (Verbesserte Tarrasch-Verteidigung)Dk a\8 D40deDamengambit (Verbesserte Tarrasch-Verteidigung)2G Z01nD39deDamengambit (Wiener Variante)3I Nl_D38deDamengambit (Ragosin-Variante)+9 -6_D37deDamengambit mit 5. Lf43I NP)N#D36deDamengambit (Abtauschvariante)3I \I䯹gD35deDamengambit (Abtauschvariante)Fo iq5OD34deDamengambit (Tarrasch-Verteidigung Hauptvariante)8S D33deDamengambit (Tarrasch-Verteidigung)8S ?- D32deDamengambit (Tarrasch-Verteidigung)=] uD31deDamengambit (Halbslawische Verteidigung) # 'TEGŐD30deDamengambit-= [X k5hD29deAngenommenes Damengambit-= ;2D28deAngenommenes Damengambit-= LYvD27deAngenommenes Damengambit- = U0sAD26deAngenommenes Damengambit hn0PNhJ)w qǍdwD54deAbgelehntes Damengambit (Hauptvariante, Abweichungen)J(w l+K D53deAbgelehntes Damengambit (Hauptvariante, Abweichungen)I'u Mõ$kD52deAbgelehntes Damengambit (Cambridge-Springs-Variante)[& ݴ=BD51deAbgelehntes Damengambit (Cambridge-Springs-Variante und Abweichungen)A%e |b\|tWD50deAbgelehntes Damengambit (Canal-Prins-Gambit)]$ EiʀfD49deDamengambit,Halbslawische Verteidigung (Meraner Variante,Sosin-Angriff)N# 9/KjD48deDamengambit,Halbslawische Verteidigung (Meraner Variante)N" E(N WD47deDamengambit,Halbslawische Verteidigung (Meraner Variante);!Y ޔCMrD46deDamengambit,Halbslawische Verteidigung; Y :fhD45deDamengambit,Halbslawische VerteidigungQ  R+OD44deDamengambit,Halbslawische Verteidigung (Botwinnik-Variante,;Y WdD43deDamengambit,Halbslawische Verteidigung 0p-SM0^5 7|3VD66deAbgelehntes Damengambit (Orthodoxe Verteidigung, Erweitertes Fianchetto)[4 A:D65deAbgelehntes Damengambit (Orthodoxe Verteidigung, Tempokampf-Variante)[3 NV0D64deAbgelehntes Damengambit (Orthodoxe Verteidigung, Tempokampf-Variante)Q2 F /©D63deAbgelehntes Damengambit (Orthodoxe Verteidigung mit 7. Tc1)[1 e AAD62deAbgelehntes Damengambit (Orthodoxe Verteidigung mit 7. Dc2 c5 8. cd5)Q0 3)҈tD61deAbgelehntes Damengambit (Orthodoxe Verteidigung mit 7. Dc2)E/m g1P?vD60deAbgelehntes Damengambit (Orthodoxe Verteidigung)F.o 6˺ŝD59deAbgelehntes Damengambit (Tartakower-Verteidigung)F-o `rn D58deAbgelehntes Damengambit (Tartakower-Verteidigung)@,c ߸c7D57deAbgelehntes Damengambit,Lasker-Verteidigung@+c 7YD56deAbgelehntes Damengambit,Lasker-VerteidigungJ*w >LxD55deAbgelehntes Damengambit (Hauptvariante, Abweichungen) B@j2RqB,D; s6/D81deGrünfeld-Verteidigung(6CO ,|3D80deGrünfeld-Verteidigung mit 4. Lg55BM "^LɸD79deGrünfeld-Verteidigung mit 3. g35AM u^tD78deGrünfeld-Verteidigung mit 3. g35@M lD77deGrünfeld-Verteidigung mit 3. g35?M Q\D76deGrünfeld-Verteidigung mit 3. g35>M X-*_D75deGrünfeld-Verteidigung mit 3. g35=M +9D74deGrünfeld-Verteidigung mit 3. g35<M +/TD73deGrünfeld-Verteidigung mit 3. g35;M maeD72deGrünfeld-Verteidigung mit 3. g35:M la``9D71deGrünfeld-Verteidigung mit 3. g359M 3q 4D70deGrünfeld-Indische Verteidigung,c8' D~`=D69deOrthodoxe Verteidigung, (Capablancas Entlastungsmanöver, Rubinstein-Angriff)]7 >_dD68deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver)]6 .!6MD67deAbgelehntes Damengambit (Hauptvariante,Capablancas Entlastungsmanöver) ,NK|C,RT =+"D97deGrünfeld-Verteidigung (Russisches System, Ragosin-Variante)?Sa 5Wb݋D96deGrünfeld-Verteidigung (Russisches System)=R] 5.sD95deGrünfeld-Indisch (Geschlossenes System)=Q]  }>D94deGrünfeld-Indisch (Geschlossenes System)6PO ԃJ7D@D93deGrünfeld-Verteidigung mit 5. Lf46OO yD92deGrünfeld-Verteidigung mit 5. Lf46NO n?D91deGrünfeld-Verteidigung mit 5. Lg5,M; x1{qD90deGrünfeld-Verteidigung(+L9 }D89deGrünfeld-Verteidigung>K_ $9cD88deGrünfeld-Verteidigung(Hauptfortsetzung, >J_ r8qD87deGrünfeld-Verteidigung(Hauptfortsetzung, >I_ oBQ D86deGrünfeld-Verteidigung(Hauptfortsetzung, =H] 2+|D85deGrünfeld-Verteidigung(Hauptfortsetzung)=G] ͔q1`D84deGrünfeld-Verteidigung(Hauptfortsetzung)6FO 5jD83deGrünfeld-Verteidigung mit 4. Lf46EO ޝUtD82deGrünfeld-Verteidigung mit 4. Lf4 NVlI&s?NE00deKatalanische Eröffnung,KatalanischRV LSD99deGrünfeld-Verteidigung (Russisches System, Smyslow-Variante)RU )>q;D98deGrünfeld-Verteidigung (Russisches System, Smyslow-Variante) T["h/KT-w= {jL݂E32deNimzo-Indisch mit 4. Dc2Dvk {cE31deNimzo-Indisch mit 4. Lg5 (Leningrader Variante,Duk "=QqE30deNimzo-Indisch mit 4. Lg5 (Leningrader Variante)6tO  b߮E29deNimzo-Indisch (Sämisch-Variante)6sO Qd3E28deNimzo-Indisch (Sämisch-Variante)6rO avE27deNimzo-Indisch (Sämisch-Variante)6qO p4E26deNimzo-Indisch (Sämisch-Variante)6pO ?lE25deNimzo-Indisch (Sämisch-Variante)6oO Wc`I~uّE24deNimzo-Indisch (Sämisch-Variante)Bng @kE23deNimzo-Indisch mit 4. Db3 (Spielmann-Variante)Bmg jE22deNimzo-Indisch mit 4. Db3 (Spielmann-Variante)-l= }|E21deNimzo-Indisch mit 4. Sf36kO ~wPE20deNimzowitsch-Indisch,Nimzo-Indisch4jK ) FE19deDamenindisch (Hauptfortsetzung)4iK Y qXE18deDamenindisch (Hauptfortsetzung)4hK цڥE17deDamenindisch (Hauptfortsetzung) Ap@w>Z!yA5 M =E50deNimzo-Indisch (Moderne Variante)5M %ex<жE49deNimzo-Indisch (Moderne Variante)5M ~Q7l_E48deNimzo-Indisch (Moderne Variante)5M P 0bd E47deNimzo-Indisch (Moderne Variante)6O GSE46deNimzo-Indisch (Rubinstein-System)6O #LE45deNimzo-Indisch (Rubinstein-System)6O r9?|E44deNimzo-Indisch (Rubinstein-System)6O +;E43deNimzo-Indisch (Rubinstein-System)6O O%oE42deNimzo-Indisch (Rubinstein-System)6O 3HLE41deNimzo-Indisch (Rubinstein-System)6O  MTAE40deNimzo-Indisch (Rubinstein-System)-~= 2A"NhxE39deNimzo-Indisch mit 4. Dc2-}= mD2pE38deNimzo-Indisch mit 4. Dc2-|= WZSE37deNimzo-Indisch mit 4. Dc2-{= δߢlOE36deNimzo-Indisch mit 4. Dc2-z= /NGrE35deNimzo-Indisch mit 4. Dc2-y= *;Z2TVE34deNimzo-Indisch mit 4. Dc2-x= ; {xE33deNimzo-Indisch mit 4. Dc2 PX x@vI P<[ Zby¾E66deKönigsindisch (Jugoslawische Variante)<[ 8E65deKönigsindisch (Jugoslawische Variante)<[ aM=*E64deKönigsindisch (Jugoslawische Variante)9U S98BE63deKönigsindisch mit g3 und 6. ... Sc6*7 8dE62deKönigsindisch mit g3Ci FYP+E61deKönigsindisch (Abweichungen derHauptvariante)Iu wA8"E60deKönigsindische Verteidigung,Königsindisch ohne Sc35M {:}FE59deNimzo-Indisch (Moderne Variante)5M (bE95deKlassisches System (Königsindische Verteidigung)F5o K6͸}E94deKlassisches System (Königsindische Verteidigung)F4o ldt E93deKlassisches System (Königsindische Verteidigung)F3o tiE92deKlassisches System (Königsindische Verteidigung)F2o ~i`؏E91deKlassisches System (Königsindische Verteidigung)F1o -D/E90deKlassisches System (Königsindische Verteidigung)60O ^V3*E89deKönigsindisch (Sämisch-Angriff)6/O lktE88deKönigsindisch (Sämisch-Angriff)6.O cMR5E87deKönigsindisch (Sämisch-Angriff)6-O VA/wE86deKönigsindisch (Sämisch-Angriff)6,O qNLY%E85deKönigsindisch (Sämisch-Angriff)6+O i/1E84deKönigsindisch (Sämisch-Angriff)6*O _rA00huAnderzen megnyitás-J= pY_A00huNovoszibirszk megnyitás*I7 H3A00huBattambang megnyitás&H/ 7ԆGsA00huDunszt megnyitás&G/ s~EA00huDunszt megnyitásF zŃA00huAmar csel$E+ -L^FA00huAmar megnyitás'D1 K25nA00huClemenz megnyitás*C/Fv_A00huGrobRomford ellencsel#B!5Ӻ6A00huGrobFritz-csel(A+\ : >A00huGrobSpike támadás#@) vA00huGrob támadás8?/1; EA00huBenkö-megnyitásfordított Aljehin&>/ j-YF$A00huBenkö-megnyitás.=1~[CA00huLengyelOutflank változat/<3mB|P A00huLengyelTuebingen változat5;M 㴰'A00huLengyel (Szokolszkij) megnyitásF:o H74${kE99deKlassisches System (Königsindische Verteidigung)F9o 㓎&QE98deKlassisches System (Königsindische Verteidigung)F8o Xȏt!(E97deKlassisches System (Königsindische Verteidigung) 7]4 X)U-x7>`_ gRhػA08huRéti megnyitás, Királyindiai támadásQ_ 4t A07huRéti megnyitás, Királyindiai támadás (Barcza-rendszer)-^= 5XӇA06huRéti megnyitás, 2...d5.]? ƱNӍ7A05huRéti megnyitás, 2...Hf6%\- _z~wA04huRéti megnyitás-[= >Gԏ3A03huBird megnyitása, 1...d5$Z+ -A02huBird megnyitás&Y/ ʝLA01huLarsen megnyitás%X- AFKRA00huDurkin támadás)W5 ژ 1A00huAnti-Borg megnyitás,V; ߺmN~A00huHammerschlag megnyitás&U/ (p)[A00huGedult megnyitás)T5 SADXcEA00huAmszterdam támadás,S; Ԫ2t8A00huVan't Kruijs megnyitás*R7 rrbA00huVenezolana megnyitás(Q3 ;[NA00huValencia megnyitás&P/ b]~A00huMieses megnyitás&O/ URGHA00huMieses megnyitás)N5 0nA00huZaragóza megnyitás$M+ ;)|CبA00huCrab megnyitás$L+ -{)RA00huWare megnyitás 1rA|>`8i15rM GbS#nA26huAngol megnyitás, zárt rendszertgaA23huAngol megnyitás, Brémai rendszer, Keres-változat%n- -!clA22huAngol megnyitás%m- -tA21huAngol megnyitás%l- @`v{A20huAngol megnyitásJkw >` 6cA19huAngol megnyitás, Mikenas-Carls, szicíliai változat>j_ $A18huAngol megnyitás, Mikenas-Carls változat;iY Z"A17huAngol megnyitás, sündisznó védelem%h- ja%k:A16huAngol megnyitás;gY =d A15huAngol, 1...Hf6 (Anglo-indiai védelem)4fK J ބA14huAngol, elhárított újkatalán%e- o MA13huAngol megnyitás.d? Je VA12huAngol, Caro-Kann védelem.c? Xb"^ A11huAngol, Caro-Kann védelem%b-  t_ 5A28huAngol megnyitás, négyhuszáros rendszer?sa ~-}JA27huAngol megnyitás, háromhuszáros rendszer 2X+}FlIp2;Y њI3 A63huBenoni, Fianchetto változat, 9...Hbd71E IR)A62huBenoni, Fianchetto változat$+ ,v)A61huBenoni védelem$+ ~r6=A60huBenoni védelem&/ BivA59huBenkö csel, 7.e4+9 9qP>A58huElfogadott Benkö-csel # haRA57huBenkö-csel$+ 02A56huBenoni védelem+9 0 96A55huÓindiai, föváltozat/A jA54huÓindiai, ukrán változat& / my;r"A53huÓindiai védelem' 1  7eA52huBudapesti védelem4 K ޻)zHyA51huElhárított Budapesti védelem) 5 Tc;OA50huVezérgyalog játék: W ։YA49huKirályindiai, Fianchetto c4 nélkülBg 02c>A48huKirályindiai védelem, kelet-indiai védelem*7 h(fAA44huÓbenoni védelem&/ ehڣA43huÓbenoni védelem =i7Pj7e=%)- ;djY$8A81huHolland védelem%(- a+A80huHolland védelem.'? -5JB|A79huBenoni, klasszikus, 11.f3;&Y C{ eA78huBenoni, klasszikus, Be8 és ...Ha6-tal8%S xdA77huBenoni, klasszikus, 9...Be8, 10.Hd20$C й N1SA76huBenoni, klasszikus, 9...Be8?#a waaY)A75huBenoni, klasszikus ...a6 és 10...Fg4-gyel6"O u֫SA74huBenoni, klasszikus, 9...a6, 10.a4.!? $L>A73huBenoni, klasszikus, 9.O-O7 Q _xA72huBenoni, klasszikus, 9.O-O nélkül.? f;wAA71huBenoni, klasszikus, 8.Bg57Q { g#A70huBenoni, klasszikus, e4 és Hf3-malBg S5,A69huBenoni, négygyalogos támadás, föváltozat4K < yxA68huBenoni, négygyalogos támadás/A qb(RcA67huBenoni, Tajmanov változat2G ]{{;A66huBenoni, gyalogroham változat!% Iٳ-ԟUA65huBenoni, 6.e4;Y ך$Iw8A64huBenoni, Fianchetto változat, 11...Re8 Oh0fZO?9a bA97huHolland védelem, Ilyin-Genevsky változatB8g  ;0A96huHolland védelem, Dutch, klasszikus változat?7a x?4,fA95huHolland védelem, Dutch, Stonewall Hc3-mal?6a iRLA94huHolland védelem, Dutch, Stonewall Ba3-malE5m tU-\A93huHolland védelem, Stonewall, Botwinnik-változat%4- lY)A92huHolland védelem%3- ;m(*A91huHolland védelem%2- /=A90huHolland védelemI1u ˮr@A89huHolland védelem, leningrádi, fö változat Hc6-talL0{ \rA88huHolland védelem, leningrádi, fö változat 7...c6-talA/e n1. A87huHolland védelem, leningrádi, fö változat4.K JϻΩA86huHolland védelem, 2.c4 és 3.g35-M ;;lXǔHA85huHolland védelem, 2.c4 és 3.Hc3%,- B@WA84huHolland védelem?+a wVfFA83huHolland, Staunton-csel, Staunton-változat+*9 fcRPA A82huHolland, Staunton-csel Pm=@zPzP'K1 c.sB15huCaro-Kann védelemAJe ^GIFB14huCaro-Kann, Panov-Botvinnik-támadás, 5...e6.I? wqLݣOB13huCaro-Kann, csereváltozat'H1 sYoB12huCaro-Kann védelem4GK j1B11huCaro-Kann, kétcsikós, 3...Fg4'F1 Fvђ-B10huCaro-Kann védelem-E= h 3I4B09huPirc, osztrák támadás- үPB02huAljehin-védelem(=3 VDaB01huSkandináv védelem-<= ϕEulB16huCaro-Kann, Bronstein-Larsen-változat +wL\ ]V+(l3 D-B44huSzicíliai védelem+k9 u*\+B43huSzicíliai, Kan, 5.Hh3+j9 ̪>WB42huSzicíliai, Kan, 5.Fd3.i? m辕B41huSzicíliai, Kan-változat(h3 ^T9rB40huSzicíliai védelemLg{ r<&4B39huSzicíliai védelem, gyors fianchetto, Breyer-változatTf OX DбB38huSzicíliai védelem, gyors fianchetto, Maróczy-kötés, 6.Fe3Ve a3B36huSzicíliai védelem, gyors fianchetto, Maróczy-kötésVc V@B35huSzicíliai védelem, gyors fianchetto, modern változat Fc4-gyelJbw LMY, B34huSzicíliai védelem, gyors fianchetto, csereváltozatGaq ݫB33huSzicíliai, Szvesnyikov (Lasker-Pelikan) változat(`3 Q@j裗B32huSzicíliai védelem[_ ήe:B31huSzicíliai, Nimzovich-Rossolimo-támadás (...g6-tal, ...d6 nélkül)(^3 ~{!B30huSzicíliai védelem XQd- g2X/}A [( B60huSzicíliai, Richter-Rauzer=|] 18B59huSzicíliai, Boleslavsky-változat, 7.Hb3+{9 8hB58huSzicíliai, klasszikus7z!=FaYE!B57huSzicíliaiSzozin, Benkö változat2y!3 ҙ jB57huSzicíliaiMagnus Smith csapda8x!? 6B57huSzicíliaiSzozin, nem Scheveningeniw! Uw^B56huSzicíliaiDvk >qCB55huSzicíliai, Prins-változat, Velencei támadásu! {,ĴB54huSzicíliai4tK a2dB53huSzicíliai, Chekhover-változatBsg W! B52huSzicíliai, Canal-Sokolsky-támadás, 3...Fd79rU M\8B51huSzicíliai, Canal-Sokolsky-támadás3qI |יB49huSzicíliai, Tajmanov-változat3pI v1{B48huSzicíliai, Tajmanov-változat@oc bcB47huSzicíliai, Tajmanov (Basztrikov) változat3nI lH;Ͳ(B46huSzicíliai, Tajmanov-változat3mI d\JB45huSzicíliai, Tajmanov-változat ${7y-od$= ] WM!iB73huSzicíliai, sárkány, klasszikus, 8.O-O1 E AUB69huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 11.Fxf6\ Lo> B68huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 9...Fe7\ aB67huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6 védelem, 8...Fd7Iu :ze5|B66huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...a6^ f,OB65huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...Fe7 védelem, 9...Hxd4Z 3@1 B64huSzicíliai, Richter-Rauzer, Rauzer-támadás, 7...Fe7 védelem, 9.f4Ae \FgB63huSzicíliai, Richter-Rauzer, Rauzer-támadás7Q B62huSzicíliai, Richter-Rauzer, 6...e6H~s |;$B61huSzicíliai, Richter-Rauzer, Larsen-változat, 7.Vd2 >}1Q [ t>3I f!m$B87huSzozin ...a6-tal és ...b5-tel1E Α嚽1B86huSzicíliai, Szozin-támadás_ "ĵ=LCYB85huSzicíliai, scheveningeni, klasszikus változat ...Vc7-tel és ...Hc6-talN UTTUsB84huSzicíliai, scheveningeni (Paulsen), klasszikus változat5M ޢ4ۭB83huSzicíliai, scheveningeni, 6.fe24K P4[oڅB82huSzicíliai, scheveningeni, 6.f4@c o'Z B81huSzicíliai, scheveningeni, Keresz-támadásAe "&Ͳ B80huSzicíliai védelem, scheveningeni változatFo i<ǘYB79huSzicíliai, sárkány, jugoszláv tamadás, 12.h4Jw O@B78huSzicíliai, sárkány, jugoszláv támadás, 10.O-O-OGq u )>&֟B77huSzicíliai, sárkány, jugoszláv támadás, 9.Fc4I u L {޽3B76huSzicíliai, sárkány, jugoszláv támadás, 7...O-O@ c @B75huSzicíliai, sárkány, jugoszláv támadás= ] ɔH'.B74huSzicíliai, sárkány, klasszikus, 9.Hb3 Zee2p.Z0(C zܽC03huFrancia, Tarrasch-változat4'K mr"l0C02huFrancia, elöretórö változat?&a nAC01huFrancia, csereváltozat, Kingston-védelem%%- Kia3C00huFrancia védelem?$a ҮB99huSzicíliai, Najdorf, 7...Fe7 Fö változat1#E PU6nUB98huSzicíliai, Najdorf, 7...Fe7Z" fR6/KB97huSzicíliai, Najdorf, 7...Vb6 beleértve: Mérgezett gyalog változat.!? DB96huSzicíliai, Najdorf, 7.f40 C TB95huSzicíliai, Najdorf, 6...e6/A r9vTJB94huSzicíliai, Najdorf, 6.Fg5.? XTm B93huSzicíliai, Najdorf, 6.f4Em z"L!B92huSzicíliai, Najdorf, Opocensky-változat (6.Fe2)R %DN+WB91huSzicíliai, Najdorf, zágrábi (fianchetto) változat (6.g3)(3 %MB90huSzicíliai, Najdorf.? t 'B89huSzicíliai, Szozin, 7.Fe3<[ e|J,B88huSzicíliai, Szozin, Leonhardt-változat 6;wE}?6F8o NXCmC19huFrancia, Winawer, elöretörö változat, 6...He7=7] 9HC18huFrancia, Winawer, elöretörö változat=6] (bBC17huFrancia, Winawer, elöretörö változat=5] %?C16huFrancia, Winawer, elöretörö változat;4Y {;[C15huFrancia, Winawer (Nimzovich)-változat23G -@euC14huFrancia, klasszikus változat22G lQ}C13huFrancia, klasszikus változat31I vvKbC12huFrancia, MacCutcheon-változat%0- mH6qC11huFrancia védelem//A O|}0yC10huFrancia, Paulsen-változatH.s cIꎴ)WC09huFrancia, Tarrasch, nyílt változat, fö folytatás;-Y ޚ^ C08huFrancia, Tarrasch, nyílt, 4.exd5 exd58,S  C07huFrancia, Tarrasch, nyílt változatG+q )C06huFrancia, Tarrasch, zárt változat, fö folytatás7*Q H_)[C05huFrancia, Tarrasch, zárt változat>)_ \&^8C04huFrancia, Tarrasch, Guimard fö folytatás Gd)\6MmG#L) Ӌ;yC25huBécsi játék6KO 0M.C24huFutómegnyitás, berlini védelem$J+ k'2FoC23huFutómegnyitás#I) UyFC22huCentrumjáték#H) +oC21huCentrumjáték1G3lWC21huDán cselSoerensen véldelem2F5uRJC21huDán cselSchlechter véldelem/E/J8UC21huDán cselCollijn véldelemD Nk6qC21huDán csel!C% ?׽~C21huHalász-csel:BW hUW ,C21huCentrumjáték, Kieseritsky változat#A) V2FC21huCentrumjáték&@/ xFߴ^C20huAlapin megnyitás2?'-~k&C20huKirálygyalogLopez megnyitás6>'5f)BC20huKirálygyalogNapóleon megnyitás3='/IpVC20huKirálygyalogKing's head megnyitás6;'5آ<'7C20huKirálygyalogMengarini megnyitás3:'/P*dtC20huKirálygyalogIndiai megnyitás*97 DnC20huKirálygyalog-játék 7gA b-q=z7@^c pKNQC35huElfogadott királycsel, Cunningham-védelemJ]w Ǽ8.LC34huElfogadott királycsel, beleértve a Fischer-védelem+\9 ԉFC33huElfogadott királycselE[m 44uC32huVisszautasított királycsel, Felkbeer-ellencsel1ZE p8C31huVisszautsaított királycsel Y# Rwe)C30huKirálycsel7XQ ~#9C29huBécsi játék, Steinitz változat6WO n.ēeC29huBécsi játék, Wurzburger csapda#V) Oe{C29huBécsi játék2U)+ m. C29huBécsi játékHeyde változat7T)5~)C29huBécsi játékBardeleben változat4S)/[Kݝo |C29huBécsi játékPaulsen támadás3R)-.9L_kC29huBécsi játékBreyer változat5Q)1H5nC29huBécsi játékKaufmann változat#P) AT @C29huBécsi játék#O) `cӇ8> JC28huBécsi játék6NO v9EC40huLitvánPolerio változat-m/:~3C40huLitvánBehting változat*l7 $]#C40huLitván gambit, 3.Bc4+k+R5l vC40huLitvánFraser védelem/j3 Yr]knC40huLitvánNimzovich változat&i/ GOuCC40huLitván ellencsel;h=):7C40huKirályhuszár ellencselMaroczy gambit=g] VJ]ƖC40huKirályhuszár ellencsel (elefánt csel)%f- uy<C40huDamiano védelem#e) +cpC40huGreco védelem&d/ Hߠ.vC40huGunderam védelem.c? ؝C40huKirályhuszár-megnyitás+b9 \Td4C39huElfogadott királycsel+a9 Aw_ jZ-RC48huNégyhuszáros játék, spanyol változat _ nְC69huSpanyol megnyitás, csereváltozat, 5.0-07 Q ˽3aC68huSpanyol megnyitás, csereváltozatK y ?w9ӈC67huSpanyol megnyitás, berlini védelem, nyílt változatD k W2qf=C66huSpanyol megnyitás, berlini védelem, 4.0-0, d69U BTC65huSpanyol megnyitás, berlini védelemN 2%C64huSpanyol megnyitás, Cordel-védelem (Klasszikus védelem)<[ |8̟C63huSpanyol megnyitás, Schliemann-védelemAe ropC62huSpanyol megnyitás Régi Steinitz-megnyitás 6T#x4{,y6@ c Ԥb|C89huSpanyol megnyitás, Marshall-ellentámadás.? -F7C88huSpanyol megnyitás, zártBg $m/3C87huSpanyol megnyitás, zárt, Averbach-változat:W z4xC86huSpanyol megnyitás. Worrall-támadásL{ J0uC85huSpanyol megnyitás, duplán elhárított csereváltozat7Q ?zYC84huSpanyol megnyitás, zárt védelemDk Tg C83huSpanyol megnyitás, nyílt, klasszikus védelem5M '`;C82huSpanyol megnyitás, nyílt, 9.c3Ae P3K9C81huSpanyol megnyitás, nyílt, Howell-támadásL{ 0ȉR~C80huSpanyol megnyitás, nyílt védelem (Tarrasch-védelem)Y b0C79huSpanyol megnyitás, elhárított Steinitz-védelem (orosz védelem).? |аHmC78huSpanyol megnyitás, 5.0-08S ̻.}C77huSpanyol megnyitás, Morphy-védelemn= )%KUF8C76huSpanyol megnyitás, modern Steinitz-védelem, Bronstein-változat (fianchetto-változat) JWVZ(J>0_ ]&bD05huVezérgyalog-játék, Zukertort-változat)/5 +z7D04huVezérgyalog-játék;.Y @dD03huTorre-támadás, Tartakower-válto9zat0-C wPjD02huVezérgyalog-játék, 2.Hf3/,A `GDD01huRichter-Vereszov-támadás)+5 dD00huVezérgyalog-játékD*k 4Q۾C99huSpanyol megnyitás, zárt, Csigorin, 12....c5d4B)g o@GC98huSpanyol megnyitás, zárt, Csigorin, 12...Hc6A(e _JXJ}C97huSpanyol megnyitás, zárt, Csigorin-védelem7'Q %o#CC96huSpanyol megnyitás, zárt, 8...Ha5=&] _%UHC95huSpanyol megnyitás, zárt, Breyer, 10.d4?%a +j %eC94huSpanyol megnyitás, zárt, Breyer-védelemB$g p{y`C93huSpanyol megnyitás, zárt, Szmiszlov-védelem4#K C92huSpanyol megnyitás, zárt, 9.h33"I A =$uC91huSpanyol megnyitás, zárt 9.d49!U ht, 7C90huSpanyol megnyitás, zárt, ...d6-tal fd+>r0f1@E %F[!D21huElfogadott vezércsel, 3.Hf3*?7 XA=D20huElfogadott vezércsel1>E N8D19huVezércsel, Holand változat2=G E.2D18huVezércsel, Holland változat?<a Y wD17huVezércsel, Szláv védelem, Cseh védelemL;{ n~D16huVezércsel, Elfogadott szlav védelem, Alapin-változat7:Q c )̨E6D15huVezércsel, Szláv védelem, 4.Hc3@9c J |D14huVezércsel, Szláv védelem, csereváltozat@8c hHD13huVezércsel, Szláv védelem, csereváltozat:7W RFD12huVezércsel, Szláv védelem, 4.e3 Ff576Q YǥyD11huVezércsel, Szláv védelem, 3.Hf305C =mCDD10huVezércsel, Szláv védelem64O "MXD09huVezércsel, Albin-ellencsel, 5.g3B3g ? KfD08huVezércsel, Albin-ellencsel és Lasker-csapda22G !`D07huVezércsel, Csigorin-védelem1! G؃4D06huVezércsel &`-^l &VO NP)N#D36huElhárított vezércsel, csereváltozat, pozíciós vonal, 6.Vc2n)_f3]I 3*D50huElhárított vezércsel, 4.Fg5>\_ ͹EwD49huElhárított vezércsel, meráni, 11.Hxb5=[] 9/KjD48huElhárított vezércsel, meráni, 8...a6?Za E(N WD47huElhárított vezércsel, Fél-szláv 7.Fc4?Ya ޔCMrD46huElhárított vezércsel, Fél-szláv 6.Fd3>X_ zO]D45huElhárított vezércsel, Fél-szláv 5.e3DWk  R+OD44huElhárított vezércsel, Fél-szláv 5.Fg5 dxc4BVg WdD43huElhárított vezércsel, Fél-szláv védelemBUg U=)}7D42huElhárított vezércsel, fél-Tarrasch, 7.Fd3ATe ov|qD41huElhárított vezércsel, fél-Tarrasch, 5.cdDSk a\8 D40huElhárított vezércsel, fél-Tarrasch-védelemGRq Z01nD39huElhárított vezércsel, Ragozin, bécsi változat?Qa Nl_D38huElhárított vezércsel, Ragozin-változat3PI -6_D37huElhárított vezércsel, 4.Hf3 ^d*jV^\i D62huElhárított vezércsel, Ortodox védelem, 7.Vc2 c5, 8.cd (Rubinstein)Uh pĴaD61huElhárított vezércsel, Ortodox védelem, Rubinstein-változat>g_ ƓD60huElhárított vezércsel, Ortodox védelem^f 6˺ŝD59huElhárított vezércsel, Tartakower (Makagonov-Bondarevszkij), 8.cd Hxd5ee+ Q/{֑D58huElhárított vezércsel, Tartakower-rendszer (Makagonov-Bondarevszkij-rendszer)Hds lPD57huElhárított vezércsel, Lasker-védelem, fö vonal=c] N[D56huElhárított vezércsel, Lasker-védelem3bI >LxD55huElhárított vezércsel, 6.Hf3Gaq Vu%*D54huElhárított vezércsel, Anti-neoortodox változat7`Q =՘D53huElhárított vezércsel, 4.Fg5 Fe7,_; Mõ$kD52huElhárított vezércselj^5 QD51huElhárított vezércsel, 4.Fg5 Hbd7 (Cambridge Springs-védelem és elefánt-csapda) GU4W*G@vc 2,_ID75huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O c5, 8.Hc36uO /]SvND74huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O)t5 *P0mMD73huÚj-Grünfeld, 5.Hf38sS yKNN2D72huÚj-Grünfeld, 5.cxd5, föváltozat*r7 s'&E%D71huÚj-Grünfeld, 5.cxd5+q9 V<SD70huÚj-Grünfeld-védelemTp g1wפkD69huElhárított vezércsel, Ortodox védelem, klasszikus, 13.dxe5Uo FvUD68huElhárított vezércsel, Ortodox védelem, klasszikus változaton? &3M D67huElhárított vezércsel, Ortodox védelem, Fd3 vonal, Capablanca felszabadító manövereImu y1EaD66huElhárított vezércsel, Ortodox védelem, Fd3 vonal`l! A:D65huElhárított vezércsel, Ortodox védelem, Rubinstein-támadás, fö vonal`k! %,JFD64huElhárított vezércsel, Ortodox védelem, Rubinstein-támadás (Bc1-gyel)Ejm F /©D63huElhárított vezércsel, Ortodox védelem, 7.Bc1 5h.S"=f5.? ԃJ7D@D93huGrünfeld, 5.Ff4 O-O 6.e3%- sLO%D92huGrünfeld, 5.Ff4%- n?D91huGrünfeld, 5.Fg59U xD90huGrünfeld, háromhuszáros változatHs ~i'TD89huGrünfeld, Spaszkij-változat, föváltozat, 13.Fd3V '`"`sfD88huGrünfeld, Spaszkij-változat, föváltozat, 10...cxd4, 11. cxd4Bg rXU#bՏD87huGrünfeld, csereváltozat, Spaszkij-változatDk %W:D86huGrünfeld, csereváltozat, klasszikus változat.? RN?lD85huGrünfeld, csereváltozat.? q]D84huElfogadott Grünfeld-csel#~) _5%}D83huGrünfeld-csel%}- ޝUtD82huGrünfeld, 4.Ff4/|A s6/D81huGrünfeld, orosz változat'{1 Ê{eD80huGrünfeld-védelem7zQ Q.e죵D79huÚj-Grünfeld, 6.O-O, föváltozat,y; ,tQ<D78huÚj-Grünfeld, 6.O-O c6)x5 әD77huÚj-Grünfeld, 6.O-O:wW Q\D76huÚj-Grünfeld, 6.cxd5 Hxd5, 7.O-O Hb6 Fv>e>g9rF)5 0eҞE11huBogo-indiai védelem/A i E10huVezérgyalog játék 3.Hf33I S-ŰE09huKatalán, zárt, fö változat+9 GZ9˅E08huKatalán, zárt, 7.Vc2.? ^(+.E07huKatalán, zárt, 6...Hbd7+9 `cb,(E06huKatalán, zárt, 5.Hf3;Y #fQ05E05huKatalán, nyílt, klasszikus változat,; 7jE04huKatalán, nyílt, 5.Hf38S ;ְE03huKatalán, nyílt, Aljehin-változat,; >jRaE02huKatalán, nyílt, 5.Va4$+ >ZzazE01huKatalán, zárt(3 "RE00huVezérgyalog játek+9 V<SD70huÚj-Grünfeld-védelem@c LSD99huGrünfeld-védelem, Szmiszlov, föváltozat: W ̆ꇰ@D98huGrünfeld, orosz, Szmiszlov-változat5 M LD97huGrünfeld, orosz változat, 7.e4/ A vjgD96huGrünfeld, orosz változat. ? 5.sD95huGrünfeld, 5.e3 O-O 6.Vb3$ + |{GD94huGrünfeld, 5.e3 noE [/^nY* N"Z*Q5E26huNimzoindiai védelem, Saemisch-változat, 4.a3 Fxc3+ 5.bxc3 c5 6.e3Q) ?lE25huNimzoindiai védelem, Saemisch-változat, Keresz-variáció=(] 2E24huNimzoindiai védelem, Saemisch-változatF'o @kE23huNimzoindiai védelem, Spielmann, 4...c5, 5.dc Hc6>&_ *2NMIE22huNimzoindiai védelem, Spielmann-változatD%k }|E21huNimzoindiai védelem, háromhuszáros változat)$5 bxE20huNimzoindiai védelem>#_ ) FE19huVezérindiai, régi fö változat, 9.Vxc3="] haE18huVezérindiai, régi fö változat, 7.Hc3,!; r)~E17huVezérindiai, 5.Fg2 Fe77 Q r~ uCE16huVezérindiai, Capablanca-változat'1 _=E15huVezérindiai, 4.g3'1 ?CE14huVezérindiai, 4.e37Q HM(E13huVezérindiai, 4.Hc3, fö változat*7 Eg}E12huVezérindiai védelem 4q&Ri}4F7o 2A"NhxE39huNimzoindiai védelem, klasszikus, Pirc-variáció=6] G 2E E38huNimzoindiai védelem, klasszikus, 4...c5[5 IɟѻE37huNimzoindiai védelem, klasszikus, Noa-variáció, fö változat 7.Vc2K4y ٿE36huNimzoindiai védelem, klasszikus, Noa-variáció, 5.a3S3 /NGrE35huNimzoindiai védelem, klasszikus, Noa-variáció, 5.cxd5 exd5E2m $E34huNimzoindiai védelem, klasszikus, Noa-variációH1s ; {xE33huNimzoindiai védelem, klasszikus változat, 4...Hc6?0a {jL݂E32huNimzoindiai védelem, klasszikus változatK/y {cE31huNimzoindiai védelem, leningrádi változat, fö vonalA.e 8:.E30huNimzoindiai védelem, leningrádi változat,H-s  b߮E29huNimzoindiai védelem, Saemisch-változat, fö vonalC,i p4E28huNimzoindiai védelem, Saemisch-változat, 6.e3F+o \PTk;E27huNimzoindiai védelem, Saemisch-változat, 5...0-0 YPyC2YHEs ZifE53huNimzoindiai védelem, 4.e3, fö változat ...c5-telHDs ׍ZE52huNimzoindiai védelem, 4.e3, fö változat ...b6-tal@Cc }E51huNimzoindiai védelem, 4.e3 e8g8, 5.Hf3 d7d5KBy lzE50huNimzoindiai védelem, 4.e3 e8g8, 5.Hf3, ...d5 nélkülCAi T`?E49huNimzoindiai védelem, 4.e3, Botvinnik-rendszer=@] gE, E48huNimzoindiai védelem, 4.e3 O-O, 5.Fd3 d5:?W QBE47huNimzoindiai védelem, 4.e3 O-O, 5.Fd33>I >󉜀E46huNimzoindiai védelem, 4.e3 O-OM=} #LE45huNimzoindiai védelem, 4.e3, Bronstein (Byrne)-variációD<k ‚qm'E44huNimzoindiai védelem, Fischer-variáció, 5.He2=;] &TFE43huNimzoindiai védelem, Fischer-variációF:o O%oE42huNimzoindiai védelem, 4.e3 c5, 5.He2 (Rubinstein)29G [>ꣂb?E41huNimzoindiai védelem, 4.e3 c5/8A OD\iBE40huNimzoindiai védelem, 4.e3 AT`>}A9SU mAE67huKirályindiai, Fianchetto ...Hd7-tel@Rc Zby¾E66huKirályindiai, Fianchetto, jugoszláv Panno5QM 8E65huKirályindiai, jugoszláv, 7.O-OCPi aM=*E64huKirályindiai, Fianchetto, jugoszláv rendszer@Oc S98BE63huKirályindiai, Fianchetto, Panno-variáció8NS 8dE62huKirályindiai, Fianchetto-változat2MG FYP+E61huKirályindiai védelem, 3.Hc3+L9 wA8"E60huKirályindiai védelem>K_ BƍE59huNimzoindiai védelem, 4.e3, fö változatGJq .}/+E58huNimzoindiai védelem, 4.e3, fö változat 8...Fxc3ZI 3E57huNimzoindiai védelem, 4.e3, fö változat 8...dxc4 és 9...Fxc4 cxd4JHw # E56huNimzoindiai védelem, 4.e3, fö változat 7...Hc6-talYG -J?HE55huNimzoindiai védelem, 4.e3, Gligoric-rendszer, Bronstein-variációMF} \pPE54huNimzoindiai védelem, 4.e3, Gligoric-rendszer 7...dc-vel >g<i,I>Hbs wUE82huKirályindiai, Sämisch, dupla fianchetto változat5aM oE81huKirályindiai, Sämisch, 5...O-O7`Q eP42aE80huKirályindiai, Sämisch-variációK_y RUx4]E79huKirályindiai, négy gyalogos támadás, fö változatR^ 3E78huKirályindiai, négy gyalogos támadás, Fe2-vel és Hf3-malC]i F_E77huKirályindiai, négy gyalogos támadás, 6.Fe2E\m )E76huKirályindiai védelem, négy gyalogos támadás:[W aE75huKirályindiai, Averbah, fö változat3ZI R gE74huKirályindiai, Averbah, 6...c5)Y5 xa|Z^E73huKirályindiai, 5.Fe2.X? 'DDr(E72huKirályindiai e4 & g3-mal=W] "PE71huKirályindiai, Makagonov-rendszer (5.h3)(V3 2[id@]}E70huKirályindiai, 4.e4HUs \^ 8'H$E69huKirályindiai, Fianchetto, klasszikus fö változatKTy n[DRmE68huKirályindiai, Fianchetto, klasszikus variáció, 8.e4 A9 \#Cpi ³&E96huKirályindiai Ortodox, 7...Hbd7, fö változatMĎUE93huKirályindiai, Petroszjan-rendszer, fö változat9lU #u.SE92huKirályindiai, klasszikus variáció)k5 }.eE91huKirályindiai, 6.Fe2)j5 Ѕu-E90huKirályindiai, 5.Hf3Cii .E89huKirályindiai, Sämisch, Ortodox fö változat>h_ մE88huKirályindiai, Sämisch, Ortodox, 7.d5 c6;gY ,vlgoE87huKirályindiai, Sämisch, Ortodox, 7.d5@fc VA/wE86huKirályindiai, Sämisch, Ortodox, 7.Hge2 c6?ea G%32E85huKirályindiai, Sämisch, Ortodox változatBdg i/1E84huKirályindiai, Sämisch, Panno, fö változat5cM wGE83huKirályindiai, Sämisch, 6...Hc6 =Ms} XݵE99huKirályindiai, Orthodox, Aronyin-Tajmanov, fö változatDrk +)}E98huKirályindiai, Ortodox, Aronyin-Tajmanov, 9.He1yqS M!bP@E97huKirályindiai, Ortodox, Aronyin-Tajmanov változat (Jugoszláv támadás / Mar del Plata-változat)pychess-0.12beta3/TRANSLATORS0000755000175000017470000002321712161415523014636 0ustar tamasusers[af] Afrikaans Thomas Fogwill [af] Afrikaans Thomas Fogwill [af] Afrikaans Thomas Fogwill [ar] Arabic Aymen AlSalem صقر بن عبدالله [ar] Arabic Aymen AlSalem صقر بن عبدالله [az] Azerbaijani Elxan İsmayılov Emin Mastizadeh [az] Azerbaijani Elxan İsmayılov Emin Mastizadeh [bg] Bulgarian B.U.S.T.T.E.R. Daniel Stoyanov svilborg [bg] Bulgarian B.U.S.T.T.E.R. Daniel Stoyanov svilborg [bn] Bengali Kaustav Das Modak Scio [bn] Bengali Kaustav Das Modak Scio [br] Breton Ronan Le Déroff [br] Breton Ronan Le Déroff [ca] Catalan Norbux [ca] Catalan Norbux [cs] Czech Jakub Žáček Jan Tojnar Konki Kuvaly [LCT] [cs] Czech Jakub Žáček Jan Tojnar Konki Kuvaly [LCT] [da] Danish GonzoDark Thomas Dybdahl Ahle [da] Danish GonzoDark Thomas Dybdahl Ahle [de] German Cyron Dennis Baudys Keruskerfuerst Mario Fuest Martin S. Nils Naumann Norbert Fabritius Philipp Enoeckl Sascha Frömmel Sascha K. B. Thomas Dybdahl Ahle Yarin Kaul [de] German Cyron Dennis Baudys Keruskerfuerst Mario Fuest Martin S. Nils Naumann Norbert Fabritius Philipp Enoeckl Sascha Frömmel Sascha K. B. Thomas Dybdahl Ahle Yarin Kaul [de] German Cyron Dennis Baudys Keruskerfuerst Mario Fuest Martin S. Nils Naumann Norbert Fabritius Philipp Enoeckl Sascha Frömmel Sascha K. B. Thomas Dybdahl Ahle Yarin Kaul [el] Greek Athanasia Tziola Edward Karavakis Leonardo Gregianin Nick Agianniotis Vassilis attikon [el] Greek Athanasia Tziola Edward Karavakis Leonardo Gregianin Nick Agianniotis Vassilis attikon [en_CA] English (Canada) Dan Klassen [en_CA] English (Canada) Dan Klassen [en_GB] English (United Kingdom) Aaron Zeng [en_GB] English (United Kingdom) Aaron Zeng [es] Spanish Felipe Morales Fitoschido Gus Ivan Juanes (Kerberos) Jorge González Joshua Nobles JoséP1983 Leonardo Gregianin Manuel Kaufmann NessaGP Paco Molinero Perberos Roberto Barbé Thomas Dybdahl Ahle skarevoluti starmaker [es] Spanish Felipe Morales Fitoschido Gus Ivan Juanes (Kerberos) Jorge González Joshua Nobles JoséP1983 Leonardo Gregianin Manuel Kaufmann NessaGP Paco Molinero Perberos Roberto Barbé Thomas Dybdahl Ahle skarevoluti starmaker [et] Estonian gert7 [et] Estonian gert7 [et] Estonian gert7 [eu] Basque Leonardo Gregianin [eu] Basque Leonardo Gregianin [fa] Persian Artin [fa] Persian Artin [fi] Finnish Heikki Kulhia Jouni Mettala Lartza Taneli Nurmenniemi [fi] Finnish Heikki Kulhia Jouni Mettala Lartza Taneli Nurmenniemi [fr] French Belenyx Bodinux Cyriaque Daniel U. Thibault ElseSystem Eric Bkr Guillaume Lemaître Jofs Abbes Maxime Nicolas NOEL Patrick Fiquet Phnx Pierre Rudloff Rémi Duclos Thibault Févry Thomas Dybdahl Ahle Thomas Grim baptiste Rajaut ddavout goofy khaneboubi mitsurugi reminoushka royto stephane_plop [fr] French Belenyx Bodinux Cyriaque Daniel U. Thibault ElseSystem Eric Bkr Guillaume Lemaître Jofs Abbes Maxime Nicolas NOEL Patrick Fiquet Phnx Pierre Rudloff Rémi Duclos Thibault Févry Thomas Dybdahl Ahle Thomas Grim baptiste Rajaut ddavout goofy khaneboubi mitsurugi reminoushka royto stephane_plop [fr] French Belenyx Bodinux Cyriaque Daniel U. Thibault ElseSystem Eric Bkr Guillaume Lemaître Jofs Abbes Maxime Nicolas NOEL Patrick Fiquet Phnx Pierre Rudloff Rémi Duclos Thibault Févry Thomas Dybdahl Ahle Thomas Grim baptiste Rajaut ddavout goofy khaneboubi mitsurugi reminoushka royto stephane_plop [ga] Irish Seanan [ga] Irish Seanan [gl] Galician Leonardo Gregianin Manuel A. Vázquez Diz Miguel Anxo Bouzada NessaGP [gl] Galician Leonardo Gregianin Manuel A. Vázquez Diz Miguel Anxo Bouzada NessaGP [he] Hebrew Leonardo Gregianin Tal Einat [he] Hebrew Leonardo Gregianin Tal Einat [hi] Hindi Lakshay Pushkarna Leonardo Gregianin [hi] Hindi Lakshay Pushkarna Leonardo Gregianin [hr] Croatian [hr] Croatian [hr] Croatian [hu] Hungarian Richard Somlói Thomas Dybdahl Ahle [hu] Hungarian Richard Somlói Thomas Dybdahl Ahle [id] Indonesian rotyyu [id] Indonesian rotyyu [is] Icelandic Rúnar Freyr Þorsteinsson [is] Icelandic Rúnar Freyr Þorsteinsson [is] Icelandic Rúnar Freyr Þorsteinsson [it] Italian Aldo Latino Clasprea Daniele Lucarelli Edoardo Mercone Mauro Batini Milo Casagrande Stefano Maggiolo Thomas Dybdahl Ahle Weldzar _hilbert_ ltlollo reto ambrosini simone.sandri [it] Italian Aldo Latino Clasprea Daniele Lucarelli Edoardo Mercone Mauro Batini Milo Casagrande Stefano Maggiolo Thomas Dybdahl Ahle Weldzar _hilbert_ ltlollo reto ambrosini simone.sandri [ja] Japanese Leonardo Gregianin [ja] Japanese Leonardo Gregianin [jbo] Lojban Qantourisc [jbo] Lojban Qantourisc [jv] Javanese Arief Setiadi Wibowo [jv] Javanese Arief Setiadi Wibowo [ko] Korean Para [ko] Korean Para [ku] Kurdish Omer Ensari [ku] Kurdish Omer Ensari [ml] Malayalam [ml] Malayalam [nb] Norwegian Bokmal Marstein Monjako Ole Christian Norum Tom Eriksen [nb] Norwegian Bokmal Marstein Monjako Ole Christian Norum Tom Eriksen [nl] Dutch Jan Willems Rachid Wouter Stomp megabyte rob [nl] Dutch Jan Willems Rachid Wouter Stomp megabyte rob [nl] Dutch Jan Willems Rachid Wouter Stomp megabyte rob [oc] Occitan (post 1500) Cédric VALMARY (Tot en òc) [oc] Occitan (post 1500) Cédric VALMARY (Tot en òc) [pl] Polish Krzysztof Wittek Leonardo Gregianin Marcin Wolak Merdyn Michał Trzebiatowski Thomas Dybdahl Ahle Wojtek Jamrozy qoqosz [pl] Polish Krzysztof Wittek Leonardo Gregianin Marcin Wolak Merdyn Michał Trzebiatowski Thomas Dybdahl Ahle Wojtek Jamrozy qoqosz [pt] Portuguese Dark_Webster David Gomes Leonardo Gregianin Luis Reis Nuno Messeder Ferreira Tiago Silva [pt] Portuguese Dark_Webster David Gomes Leonardo Gregianin Luis Reis Nuno Messeder Ferreira Tiago Silva [pt_BR] Brazilian Portuguese Cristiano Nunes George S. Silva (Zathara) Raphael Ottoni Thomas Dybdahl Ahle golfinho [pt_BR] Brazilian Portuguese Cristiano Nunes George S. Silva (Zathara) Raphael Ottoni Thomas Dybdahl Ahle golfinho [ro] Romanian Alexandru Moșoi Coman Mihai Ionuț Jula [ro] Romanian Alexandru Moșoi Coman Mihai Ionuț Jula [ro] Romanian Alexandru Moșoi Coman Mihai Ionuț Jula [ru] Russian Alexandre Prokoudine Alexey Denisov Andrey Krivko Ivan Kliouchenkov Leonardo Gregianin Roman A. aka BasicXP Sergey Mastykov Thomas Dybdahl Ahle ssergeje [ru] Russian Alexandre Prokoudine Alexey Denisov Andrey Krivko Ivan Kliouchenkov Leonardo Gregianin Roman A. aka BasicXP Sergey Mastykov Thomas Dybdahl Ahle ssergeje [ru] Russian Alexandre Prokoudine Alexey Denisov Andrey Krivko Ivan Kliouchenkov Leonardo Gregianin Roman A. aka BasicXP Sergey Mastykov Thomas Dybdahl Ahle ssergeje [si] Sinhalese Samith Sandanayake [si] Sinhalese Samith Sandanayake [sk] Slovak DAG Software Miroslav Vojtuš Tomáš Hledík pe3k [sk] Slovak DAG Software Miroslav Vojtuš Tomáš Hledík pe3k [sk] Slovak DAG Software Miroslav Vojtuš Tomáš Hledík pe3k [sl] Slovenian Igor2x Klemen Košir [sl] Slovenian Igor2x Klemen Košir [sv] Swedish Bajusz Tamás Calle Mikael Olofsson [sv] Swedish Bajusz Tamás Calle Mikael Olofsson [sv] Swedish Bajusz Tamás Calle Mikael Olofsson [tr] Turkish ANIL KARDEŞ Baris Akkurt Hamit Selahattin Naiboğlu Mert Bozkurt Selim Sercan Suerkan denz hasan k ryukun [tr] Turkish ANIL KARDEŞ Baris Akkurt Hamit Selahattin Naiboğlu Mert Bozkurt Selim Sercan Suerkan denz hasan k ryukun [vi] Vietnamese Nguyen Quang Chien Tran Duc Loi [vi] Vietnamese Nguyen Quang Chien Tran Duc Loi [vi] Vietnamese Nguyen Quang Chien Tran Duc Loi [wa] Walloon [wa] Walloon [zh_CN] Chinese (Simplified) Gavin Huang Leonardo Gregianin Ryan Li mike2718 冯超 [zh_CN] Chinese (Simplified) Gavin Huang Leonardo Gregianin Ryan Li mike2718 冯超 [zu] Zulu Xolani1990 [zu] Zulu Xolani1990 pychess-0.12beta3/README0000755000175000017470000000226312161415523013755 0ustar tamasusersPyChess - a free chess client for Linux The mission of PyChess is to create a free, pleasant, pygtk, chess game for the Linux desktop that does everything you require from an advanced chess client. Project homepage: http://pychess.org/ Download page: http://code.google.com/p/pychess/downloads/list Development page: http://code.google.com/p/pychess/ TRANSLATION if you want to translate PyChess into you language, please look for a template.po file in the lang/ directory. This can be edited using a program like poedit, free from http://www.poedit.org/ , when you are finished, please send your file, and a message of what language you have translated into, to pychess-people@googlegroups.com or translation Pychess directly in web browsing with Transifex, instructions http://code.google.com/p/pychess/wiki/TransifexTranslates WORKING WITH PO FILES To create po files from glade and python files, use $ sh create_template.po.sh To merge to files for like to update your old translation to a new PyChess version, use $ msgmerge oldtranslation.po newtemplate.po -o tobetranslated.po To compile the po file to an mo file (machine readable file) use $ msgfmt mytranslation.po -o mytranslation.mo pychess-0.12beta3/setup.py0000755000175000017470000001312312161415524014605 0ustar tamasusers#!/usr/bin/env python # -*- coding: UTF-8 -*- from imp import load_module, find_module pychess = load_module("pychess", *find_module("pychess",["lib"])) from distutils.core import setup from glob import glob from os import listdir from os.path import isdir, isfile import os import sys if sys.version_info < (2, 6, 0): print 'ERROR: PyChess requires Python >= 2.6' sys.exit(1) # To run "setup.py register" change name to "NAME+VERSION_NAME" # because pychess from another author already exist in pypi. VERSION = pychess.VERSION DESC = "Gnome chess game" LONG_DESC = """PyChess is a Gtk chess client, originally developed for Gnome, but running well under all other Linux desktops. (Which we know of, at least). PyChess is 100% python code, from the top of the UI to the bottom of the chess engine, and all code is licensed under the GNU General Public License. The goal of PyChess is to provide an advanced chess client for Linux following the Gnome Human Interface Guidelines. The client should be usable to those new to chess, who just want to play a short game and get back to their work, as well as those who wants to use the computer to further enhance their play.""" CLASSIFIERS = [ 'Development Status :: 3 - Alpha', 'Environment :: X11 Applications :: Gnome', 'Intended Audience :: End Users/Desktop', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Operating System :: POSIX', 'Programming Language :: Python', 'Topic :: Desktop Environment :: Gnome', 'Topic :: Games/Entertainment :: Board Games', 'Natural Language :: Arabic', 'Natural Language :: Bulgarian', 'Natural Language :: Catalan', 'Natural Language :: Czech', 'Natural Language :: Danish', 'Natural Language :: Dutch', 'Natural Language :: English', 'Natural Language :: Finnish', 'Natural Language :: French', 'Natural Language :: German', 'Natural Language :: Greek', 'Natural Language :: Hebrew', 'Natural Language :: Hindi', 'Natural Language :: Hungarian', 'Natural Language :: Italian', 'Natural Language :: Japanese', 'Natural Language :: Norwegian', 'Natural Language :: Persian', 'Natural Language :: Polish', 'Natural Language :: Portuguese', 'Natural Language :: Portuguese (Brazilian)', 'Natural Language :: Romanian', 'Natural Language :: Russian', 'Natural Language :: Slovak', 'Natural Language :: Spanish', 'Natural Language :: Swedish', 'Natural Language :: Turkish', ] os.chdir(os.path.abspath(os.path.dirname(__file__))) if not isfile("eco.db"): execfile("pgn2ecodb.py") if not isfile(os.path.abspath("pieces/Pychess.png")): execfile("create_theme_preview.py") DATA_FILES = [("share/pychess", ["README", "AUTHORS", "ARTISTS", "DOCUMENTERS", "LICENSE", "TRANSLATORS", "pychess_book.bin", "eco.db"])] # UI DATA_FILES += [("share/pychess/glade", glob('glade/*.glade'))] DATA_FILES += [("share/pychess/glade", glob('glade/*.png'))] DATA_FILES += [("share/pychess/glade", glob('glade/*.svg'))] DATA_FILES += [("share/pychess/flags", glob('flags/*.png'))] # Sidepanel (not a package) DATA_FILES += [("share/pychess/sidepanel", glob('sidepanel/*.glade'))] DATA_FILES += [("share/pychess/sidepanel", glob('sidepanel/*.py'))] # Data DATA_FILES += [('share/applications', ['pychess.desktop'])] DATA_FILES += [('share/icons/hicolor/scalable/apps', ['pychess.svg'])] DATA_FILES += [('share/pixmaps', ['pychess.svg'])] DATA_FILES += [("share/pychess/sounds", glob('sounds/*.ogg'))] DATA_FILES += [('share/icons/hicolor/24x24/apps', ['pychess.png'])] DATA_FILES += [('share/gtksourceview-1.0/language-specs', ['gtksourceview-1.0/language-specs/pgn.lang'])] # Piece sets DATA_FILES += [("share/pychess/pieces", glob('pieces/*.png'))] DATA_FILES += [("share/pychess/pieces/ttf", glob('pieces/ttf/*.ttf'))] for dir in [d for d in listdir('pieces') if isdir(os.path.join('pieces', d)) and d != 'ttf']: DATA_FILES += [("share/pychess/pieces/"+dir, glob('pieces/'+dir+'/*.svg'))] # Manpages DATA_FILES += [('share/man/man1', ['manpages/pychess.1.gz'])] # Language pofile = "LC_MESSAGES/pychess" if sys.platform == "win32": argv0_path = os.path.dirname(os.path.abspath(sys.executable)) sys.path.append(argv0_path + "\\tools\\i18n") import msgfmt for dir in [d for d in listdir("lang") if d.find(".svn") < 0 and isdir("lang/"+d) and d != "en"]: if sys.platform == "win32": file = "lang/%s/%s" % (dir,pofile) msgfmt.make(file+".po", file+".mo") else: os.popen("msgfmt lang/%s/%s.po -o lang/%s/%s.mo" % (dir,pofile,dir,pofile)) DATA_FILES += [("share/locale/"+dir+"/LC_MESSAGES", ["lang/"+dir+"/"+pofile+".mo"])] # Packages PACKAGES = ["pychess", "pychess.gfx", "pychess.ic", "pychess.ic.managers", "pychess.Players", "pychess.Savers", "pychess.System", "pychess.Utils", "pychess.Utils.lutils", "pychess.Variants", "pychess.widgets", "pychess.widgets.pydock" ] # Setup setup ( name = 'pychess', version = VERSION, author = 'Pychess team', author_email = 'pychess-people@googlegroups.com', maintainer = 'Thomas Dybdahl Ahle', classifiers = CLASSIFIERS, keywords = 'python gtk chess xboard gnuchess game pgn epd board linux', description = DESC, long_description = LONG_DESC, license = 'GPL3', url = 'http://pychess.org', download_url = 'http://code.google.com/p/pychess/downloads/list', package_dir = {'': 'lib'}, packages = PACKAGES, data_files = DATA_FILES, scripts = ['pychess'] ) pychess-0.12beta3/lib/0000755000175000017470000000000012176727272013652 5ustar tamasuserspychess-0.12beta3/lib/pychess/0000755000175000017470000000000012176727272015330 5ustar tamasuserspychess-0.12beta3/lib/pychess/ic/0000755000175000017470000000000012176727272015723 5ustar tamasuserspychess-0.12beta3/lib/pychess/ic/FICSObjects.py0000644000175000017470000006270412176726235020342 0ustar tamasusersimport datetime import gobject from gobject import GObject, SIGNAL_RUN_FIRST from pychess.Utils.IconLoader import load_icon from pychess.Utils.Rating import Rating from pychess.Utils.const import * from pychess.ic import TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_WILD, \ TYPE_LOSERS, TITLE_TYPE_DISPLAY_TEXTS, TITLE_TYPE_DISPLAY_TEXTS_SHORT, \ GAME_TYPES_BY_RATING_TYPE, TYPE_UNREGISTERED, TYPE_COMPUTER, TYPE_ADMINISTRATOR, \ GAME_TYPES_BY_FICS_NAME, GAME_TYPES, TYPE_CRAZYHOUSE class FICSPlayer (GObject): def __init__ (self, name, online=False, status=IC_STATUS_OFFLINE, game=None, titles=None, ratings=None): assert type(name) is str, name assert type(online) is bool, online GObject.__init__(self) self.name = name self.online = online self._status = status self.status = status self.game = None self.adjournment = False if titles is None: self.titles = set() else: self.titles = titles if ratings is None: self.ratings = {} for ratingtype in (TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_WILD, TYPE_CRAZYHOUSE, TYPE_LOSERS): ratingobj = Rating(ratingtype, 0) self.setRating(ratingtype, ratingobj) else: self.ratings = ratings def long_name (self, game_type=None): name = self.name if game_type is None: rating = self.getRatingForCurrentGame() else: rating = self.getRating(game_type.rating_type) if rating is not None: rating = rating.elo if rating: name += " (%d)" % rating title = self.display_titles() if title: name += " %s" % title return name def get_online (self): return self._online def set_online (self, online): self._online = online online = gobject.property(get_online, set_online) @property def display_online (self): if self.online: return _("Online") else: return _("Offline") def get_status (self): return self._status def set_status (self, status): self._previous_status = self._status self._status = status status = gobject.property(get_status, set_status) def restore_previous_status (self): self.status = self._previous_status @property def display_status (self): status = "" if self.status == IC_STATUS_AVAILABLE: status = _("Available") elif self.status == IC_STATUS_PLAYING: status = _("Playing") game = self.game if game is not None: status += " " + game.display_text elif self.status == IC_STATUS_IDLE: status = _("Idle") elif self.status == IC_STATUS_EXAMINING: status = _("Examining") elif self.status in (IC_STATUS_NOT_AVAILABLE, IC_STATUS_BUSY): status = _("Not Available") elif self.status == IC_STATUS_RUNNING_SIMUL_MATCH: status = _("Running Simul Match") elif self.status == IC_STATUS_IN_TOURNAMENT: status = _("In Tournament") # log.debug("display_status: returning \"%s\" for %s\n" % (status, self)) return status def get_game (self): return self._game def set_game (self, game): self._game = game game = gobject.property(get_game, set_game) def get_titles (self): return self._titles def set_titles (self, titles): self._titles = titles titles = gobject.property(get_titles, set_titles) def display_titles (self, long=False): r = "" for title in self.titles: if long: r += " (" + TITLE_TYPE_DISPLAY_TEXTS[title] + ")" else: r += " (" + TITLE_TYPE_DISPLAY_TEXTS_SHORT[title] + ")" return r @property def blitz (self): return self.getRating(TYPE_BLITZ).elo @property def standard (self): return self.getRating(TYPE_STANDARD).elo @property def lightning (self): return self.getRating(TYPE_LIGHTNING).elo @property def wild (self): return self.getRating(TYPE_WILD).elo @property def crazyhouse (self): return self.getRating(TYPE_CRAZYHOUSE).elo @property def losers (self): return self.getRating(TYPE_LOSERS).elo def __hash__ (self): """ Two players are equal if the first 10 characters of their name match. This is to facilitate matching players from output of commands like the 'game' command which only return the first 10 characters of a player's name """ return hash(self.name[0:10].lower()) def __eq__ (self, player): if type(self) == type(player) and hash(self) == hash(player): return True else: return False def __repr__ (self): r = "name='%s'" % (self.name + self.display_titles()) r += ", online=%s" % repr(self.online) r += ", adjournment=%s" % repr(self.adjournment) r += ", status=%i" % self.status game = self.game if game != None: r += ", game.gameno=%d" % game.gameno r += ", game.private=" + repr(game.private) else: r += ", game=None" for rating_type in (TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_WILD, TYPE_CRAZYHOUSE, TYPE_LOSERS): if rating_type in self.ratings: r += ", ratings[%s] = (" % \ GAME_TYPES_BY_RATING_TYPE[rating_type].display_text r += self.ratings[rating_type].__repr__() + ")" return "" def isAvailableForGame (self): if self.status in \ (IC_STATUS_PLAYING, IC_STATUS_BUSY, IC_STATUS_OFFLINE, IC_STATUS_RUNNING_SIMUL_MATCH, IC_STATUS_NOT_AVAILABLE, IC_STATUS_EXAMINING, IC_STATUS_IN_TOURNAMENT): return False else: return True def isObservable (self): return self.status in (IC_STATUS_PLAYING, IC_STATUS_EXAMINING) and \ self.game is not None and not self.game.private and self.game.supported def isGuest (self): return TYPE_UNREGISTERED in self.titles def isComputer (self): return TYPE_COMPUTER in self.titles def isAdmin (self): return TYPE_ADMINISTRATOR in self.titles @classmethod def getIconByRating (cls, rating, size=16): assert type(rating) == int, "rating not an int: %s" % str(rating) if rating >= 1900: return load_icon(size, "weather-storm") elif rating >= 1600: return load_icon(size, "weather-showers") elif rating >= 1300: return load_icon(size, "weather-overcast") elif rating >= 1000: return load_icon(size, "weather-few-clouds") else: return load_icon(size, "weather-clear") def getIcon (self, size=16, gametype=None): assert type(size) == int, "size not an int: %s" % str(size) if self.isGuest(): return load_icon(size, "stock_people", "system-users") elif self.isComputer(): return load_icon(size, "computer", "stock_notebook") elif self.isAdmin(): return load_icon(size, "security-high", "stock_book_blue") else: if gametype: rating = self.getRating(gametype.rating_type) rating = rating.elo if rating is not None else 0 else: rating = self.getStrength() return self.getIconByRating(rating, size) def getMarkup (self, gametype=None): markup = "%s" % self.name if self.isGuest(): markup += " (%s)" % \ TITLE_TYPE_DISPLAY_TEXTS[TYPE_UNREGISTERED] else: if gametype: rating = self.getRating(gametype.rating_type) rating = rating.elo if rating is not None else 0 else: rating = self.getStrength() if rating < 1: rating = _("Unrated") markup += " (%s)" % rating if self.display_titles() != "": markup += "%s" % self.display_titles(long=True) return markup def getRating (self, rating_type): if rating_type in self.ratings: return self.ratings[rating_type] else: return None def setRating (self, rating_type, ratingobj): self.ratings[rating_type] = ratingobj def addRating (self, rating_type, rating): if rating == None: return ratingobj = Rating(rating_type, rating) self.ratings[rating_type] = ratingobj def copy (self): player = FICSPlayer(self.name, online=self.online, status=self.status, titles=self.titles.copy(), ratings={}) for ratingtype, rating in self.ratings.iteritems(): player.ratings[ratingtype] = rating.copy() player.game = self.game player.adjournment = self.adjournment return player def update (self, player): if not isinstance(player, FICSPlayer): raise TypeError if self.game != player.game: self.game = player.game if self.adjournment != player.adjournment: self.adjournment = player.adjournment if not self.titles >= player.titles: self.titles |= player.titles for ratingtype in (TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_WILD, TYPE_CRAZYHOUSE, TYPE_LOSERS): self.ratings[ratingtype].update(player.ratings[ratingtype]) if self.status != player.status: self.status = player.status # do last so rating info is there when notifications are generated if self.online != player.online: self.online = player.online def getRatingMean (self): ratingtotal = 0 numratings = 0 for ratingtype in self.ratings: if self.ratings[ratingtype].elo == 0: continue if self.ratings[ratingtype].deviation == DEVIATION_NONE: ratingtotal += self.ratings[ratingtype].elo * 3 numratings += 3 elif self.ratings[ratingtype].deviation == DEVIATION_ESTIMATED: ratingtotal += self.ratings[ratingtype].elo * 2 numratings += 2 elif self.ratings[ratingtype].deviation == DEVIATION_PROVISIONAL: ratingtotal += self.ratings[ratingtype].elo * 1 numratings += 1 return numratings > 0 and ratingtotal / numratings or 0 # FIXME: this isn't very accurate because of inflated standard ratings # and deflated lightning ratings and needs work # IDEA: use rank in addition to rating to determine strength def getStrength (self): if TYPE_BLITZ in self.ratings and \ self.ratings[TYPE_BLITZ].deviation == DEVIATION_NONE: return self.ratings[TYPE_BLITZ].elo elif TYPE_LIGHTNING in self.ratings and \ self.ratings[TYPE_LIGHTNING].deviation == DEVIATION_NONE: return self.ratings[TYPE_LIGHTNING].elo else: return self.getRatingMean() def getRatingForCurrentGame (self): """ Note: This will not work for adjourned or history games since player.game is not set in those cases """ if self.game == None: return None rating = self.getRating(self.game.game_type.rating_type) if rating != None: return rating.elo else: return None class FICSPlayers (GObject): __gsignals__ = { 'FICSPlayerEntered' : (SIGNAL_RUN_FIRST, None, (object,)), 'FICSPlayerExited' : (SIGNAL_RUN_FIRST, None, (object,)) } def __init__ (self, connection): GObject.__init__(self) self.players = {} self.players_cids = {} self.connection = connection def start (self): # self.connection.fm.connect("fingeringFinished", self.onFinger) pass def __getitem__ (self, player): if type(player) is not FICSPlayer: raise TypeError("%s" % repr(player)) if hash(player) in self.players: return self.players[hash(player)] else: raise KeyError def __setitem__ (self, key, value): """ key and value must be the same FICSPlayer object """ if type(key) is not FICSPlayer: raise TypeError if type(value) is not FICSPlayer: raise TypeError if key != value: raise Exception("Not the same: %s %s" % (repr(key), repr(value))) if hash(value) in self.players: raise Exception("%s already exists in %s" % (repr(value), repr(self))) self.players[hash(value)] = value self.players_cids[hash(value)] = value.connect("notify::online", self.online_changed) def __delitem__ (self, player): if type(player) is not FICSPlayer: raise TypeError if player in self: del self.players[hash(player)] if hash(player) in self.players_cids: if player.handler_is_connected(self.players_cids[hash(player)]): player.disconnect(self.players_cids[hash(player)]) del self.players_cids[hash(player)] def __contains__ (self, player): if type(player) is not FICSPlayer: raise TypeError if hash(player) in self.players: return True else: return False def keys(self): return self.players.keys() def items(self): return self.players.items() def iteritems(self): return self.players.iteritems() def iterkeys(self): return self.players.iterkeys() def itervalues(self): return self.players.itervalues() def values(self): return self.players.values() def online_changed (self, player, property): if player.online: self.emit("FICSPlayerEntered", player) # This method is a temporary hack until ChatWindow/ChatManager are # converted to use FICSPlayer references rather than player's names def get_online_playernames (self): names = [] for player in self.players.itervalues(): if player.online: names.append(player.name) return names def get (self, player, create=True): # TODO: lock if player in self: player = self[player] elif create: self[player] = player else: raise KeyError return player def player_disconnected (self, player): if player in self: player = self[player] if player.adjournment: player.online = False player.status = IC_STATUS_OFFLINE else: del self[player] self.emit('FICSPlayerExited', player) # def onFinger (self, fm, finger): # player = FICSPlayer(finger.getName()) # if player in self: # self[player].finger = finger # # TODO: merge ratings and titles from finger object into ficsplayer object class FICSBoard: def __init__ (self, wms, bms, fen=None, pgn=None): assert type(wms) is int, wms assert type(bms) is int, bms self.wms = wms self.bms = bms # assert fen != None or pgn != None self.fen = fen self.pgn = pgn class FICSGame (GObject): def __init__ (self, wplayer, bplayer, gameno=None, game_type=None, rated=False, min=None, inc=None, result=None, reason=None, board=None, private=False): assert isinstance(wplayer, FICSPlayer), wplayer assert isinstance(bplayer, FICSPlayer), bplayer assert gameno is None or type(gameno) is int, gameno assert type(rated) is bool, rated assert game_type is None or game_type is GAME_TYPES_BY_FICS_NAME["wild"] \ or game_type in GAME_TYPES.values(), game_type assert min is None or type(min) is int, min assert inc is None or type(inc) is int, inc assert result is None or type(result) is int, result assert reason is None or type(reason) is int, reason assert board is None or isinstance(board, FICSBoard), board assert type(private) is bool, private GObject.__init__(self) self.wplayer = wplayer self.bplayer = bplayer self.gameno = gameno self.rated = rated self.game_type = game_type self.min = min # not always set ("game created ..." message doesn't specify) self.inc = inc # not always set ("game created ..." message doesn't specify) self.result = result self.reason = reason self.board = board self.private = private def __hash__ (self): return hash(":".join((self.wplayer.name[0:10].lower(), self.bplayer.name[0:10].lower(), str(self.gameno)))) def __eq__ (self, game): if isinstance(game, FICSGame) and hash(self) == hash(game): return True else: return False def __repr__ (self): r = "" @property def display_time (self): if self.time is not None: return self.time.strftime("%x %H:%M") @property def opponent (self): if self.our_color == WHITE: return self.bplayer elif self.our_color == BLACK: return self.wplayer class FICSGames (GObject): __gsignals__ = { 'FICSGameCreated' : (SIGNAL_RUN_FIRST, None, (object,)), 'FICSGameEnded' : (SIGNAL_RUN_FIRST, None, (object,)), 'FICSAdjournedGameRemoved' : (SIGNAL_RUN_FIRST, None, (object,)), } def __init__ (self, connection): GObject.__init__(self) self.games = {} self.games_by_gameno = {} self.connection = connection def start (self): self.connection.adm.connect("onAdjournmentsList", self.onAdjournmentsList) self.connection.bm.connect("curGameEnded", self.onCurGameEnded) def __getitem__ (self, game): if not isinstance(game, FICSGame): raise TypeError("Not a FICSGame: %s" % repr(game)) if hash(game) in self.games: return self.games[hash(game)] else: raise KeyError def __setitem__ (self, key, value): """ key and value must be the same game """ if not isinstance(key, FICSGame): raise TypeError if not isinstance(value, FICSGame): raise TypeError if key != value: raise Exception("Not the same: %s %s" % (repr(key), repr(value))) if hash(value) in self.games: raise Exception("%s already exists in %s" % (repr(value), repr(self))) self.games[hash(value)] = value self.games_by_gameno[value.gameno] = value def __delitem__ (self, game): if not isinstance(game, FICSGame): raise TypeError if game in self: del self.games[hash(game)] if game.gameno in self.games_by_gameno: del self.games_by_gameno[game.gameno] def __contains__ (self, game): if not isinstance(game, FICSGame): raise TypeError if hash(game) in self.games: return True else: return False def keys(self): return self.games.keys() def items(self): return self.games.items() def iteritems(self): return self.games.iteritems() def iterkeys(self): return self.games.iterkeys() def itervalues(self): return self.games.itervalues() def values(self): return self.games.values() def get_game_by_gameno (self, gameno): if type(gameno) is not int: raise TypeError return self.games_by_gameno.get(gameno) def get (self, game, create=True, emit=True): # TODO: lock if game in self: self[game].update(game) game = self[game] elif create: self[game] = game if emit: self.emit("FICSGameCreated", game) else: raise KeyError return game def game_ended (self, game): if game in self: game = self[game] del self[game] self.emit("FICSGameEnded", game) def onAdjournmentsList (self, adm, adjournments): for game in self.values(): if isinstance(game, FICSAdjournedGame): if game not in adjournments: del self[game] game.opponent.adjournment = False self.emit("FICSAdjournedGameRemoved", game) def onCurGameEnded (self, bm, game): for _game in self.values(): if isinstance(_game, FICSAdjournedGame): for player in (game.wplayer, game.bplayer): if player == _game.opponent: del self[_game] _game.opponent.adjournment = False self.emit("FICSAdjournedGameRemoved", _game) class FICSSeek: def __init__ (self, name, min, inc, rated, color, game_type, rmin=0, rmax=9999): assert game_type in GAME_TYPES, game_type self.seeker = name self.min = min self.inc = inc self.rated = rated self.color = color self.game_type = game_type self.rmin = rmin # minimum rating one has to have to be offered this seek self.rmax = rmax # maximum rating one has to have to be offered this seek pychess-0.12beta3/lib/pychess/ic/ICLounge.py0000755000175000017470000027345212175445770017761 0ustar tamasusers# -*- coding: utf-8 -*- import Queue from StringIO import StringIO from time import strftime, localtime, time from math import e from operator import attrgetter from itertools import groupby import gtk, gobject, pango, re from gtk.gdk import pixbuf_new_from_file from gobject import GObject, SIGNAL_RUN_FIRST from pychess.ic import * from pychess.System import conf, glock, uistuff from pychess.System.GtkWorker import Publisher from pychess.System.prefix import addDataPrefix from pychess.System.ping import Pinger from pychess.System.Log import log from pychess.widgets import ionest from pychess.widgets import gamewidget from pychess.widgets.ChatWindow import ChatWindow from pychess.widgets.ConsoleWindow import ConsoleWindow from pychess.widgets.SpotGraph import SpotGraph from pychess.widgets.ChainVBox import ChainVBox from pychess.widgets.preferencesDialog import SoundTab from pychess.widgets.InfoBar import * from pychess.Utils.const import * from pychess.Utils.GameModel import GameModel from pychess.Utils.IconLoader import load_icon from pychess.Utils.TimeModel import TimeModel from pychess.Players.ICPlayer import ICPlayer from pychess.Players.Human import Human from pychess.Savers import pgn, fen from pychess.Variants import variants from pychess.Variants.normal import NormalChess from FICSObjects import * from ICGameModel import ICGameModel from pychess.Utils.Rating import Rating class ICLounge (GObject): __gsignals__ = { 'logout' : (SIGNAL_RUN_FIRST, None, ()), 'autoLogout' : (SIGNAL_RUN_FIRST, None, ()), } def __init__ (self, connection, helperconn, host): GObject.__init__(self) self.connection = connection self.helperconn = helperconn self.host = host self.need_who = True self.need_games = True self.widgets = uistuff.GladeWidgets("fics_lounge.glade") uistuff.keepWindowSize("fics_lounge", self.widgets["fics_lounge"]) self.infobar = InfoBar() self.infobar.hide() self.widgets["fics_lounge_infobar_vbox"].pack_start(self.infobar, expand=False, fill=False) def on_window_delete (window, event): self.close() self.emit("logout") return True self.widgets["fics_lounge"].connect("delete-event", on_window_delete) def on_logoffButton_clicked (button): self.close() self.emit("logout") self.widgets["logoffButton"].connect("clicked", on_logoffButton_clicked) def on_autoLogout (alm): self.close() self.emit("autoLogout") self.connection.alm.connect("logOut", on_autoLogout) self.connection.connect("disconnected", lambda connection: self.close()) self.connection.connect("error", self.on_connection_error) # workaround for https://code.google.com/p/pychess/issues/detail?id=677 self.connection.nm.connect("readNews", self.on_news_item) if self.connection.isRegistred(): numtimes = conf.get("numberOfTimesLoggedInAsRegisteredUser", 0) + 1 conf.set("numberOfTimesLoggedInAsRegisteredUser", numtimes) global sections sections = ( VariousSection(self.widgets, self.connection), UserInfoSection(self.widgets, self.connection, self.host), NewsSection(self.widgets, self.connection), SeekTabSection(self.widgets, self.connection, self.infobar), SeekGraphSection(self.widgets, self.connection), PlayerTabSection(self.widgets, self.connection), GameTabSection(self.widgets, self.connection), AdjournedTabSection(self.widgets, self.connection, self.infobar), ChatWindow(self.widgets, self.connection), ConsoleWindow(self.widgets, self.connection), SeekChallengeSection(self.widgets, self.connection), # This is not really a section. It handles server messages which # don't correspond to a running game Messages(self.widgets, self.connection, self.infobar), # This is not really a section. Merely a pair of BoardManager connects # which takes care of ionest and stuff when a new game is started or # observed CreatedBoards(self.widgets, self.connection) ) self.widgets['notebook'].connect("switch-page", self.onSwitchPage) def onSwitchPage(self, notebook, page, page_num): # We don't want to slow down the login process, so load # all players and all games just on first time when needed #b: blitz l: lightning u: untimed e: examined game #s: standard w: wild x: atomic z: crazyhouse #B: Bughouse L: losers S: Suicide if notebook.get_nth_page(page_num) == self.widgets['playersListContent']: if self.need_who: # New ivar pin # http://www.freechess.org/Help/HelpFiles/new_features.html self.helperconn.client.run_command("who IsblwzL") self.need_who = False if notebook.get_nth_page(page_num) == self.widgets['gamesListContent']: if self.need_games: self.helperconn.client.run_command("games /sblwzL") self.need_games = False @glock.glocked def on_news_item (self, nm, news): self.widgets["show_chat_button"].set_sensitive(True) def show (self): self.widgets["fics_lounge"].show() def present (self): self.widgets["fics_lounge"].present() def on_connection_error (self, connection, error): log.warn("ICLounge.on_connection_error: %s\n" % repr(error)) self.close() @glock.glocked def close (self): if self.widgets != None: self.widgets["fics_lounge"].hide() global sections if 'sections' in globals() and sections != None: for i in range(len(sections)): if hasattr(sections[i], "__del__"): sections[i].__del__() sections = None if self.connection != None: self.connection.close() self.connection = None if self.helperconn != None: self.helperconn.close() self.helperconn = None self.widgets = None ################################################################################ # Initialize Sections # ################################################################################ class Section (object): def get_infobarmessage_content (self, player, text, gametype=None): content = gtk.HBox() icon = gtk.Image() icon.set_from_pixbuf(player.getIcon(size=32, gametype=gametype)) content.pack_start(icon, expand=False, fill=False, padding=4) label = gtk.Label() label.set_markup(player.getMarkup(gametype=gametype)) content.pack_start(label, expand=False, fill=False) label = gtk.Label() label.set_markup(text) content.pack_start(label, expand=False, fill=False) return content ############################################################################ # Initialize Various smaller sections # ############################################################################ class VariousSection(Section): def __init__ (self, widgets, connection): #sizeGroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) #sizeGroup.add_widget(widgets["show_chat_label"]) #sizeGroup.add_widget(widgets["show_console_label"]) #sizeGroup.add_widget(widgets["log_off_label"]) #widgets["show_console_button"].hide() connection.em.connect("onCommandNotFound", lambda em, cmd: log.error("Fics answered '%s': Command not found" % cmd)) ############################################################################ # Initialize User Information Section # ############################################################################ class UserInfoSection(Section): def __init__ (self, widgets, connection, host): self.widgets = widgets self.connection = connection self.host = host self.pinger = None self.dock = self.widgets["fingerTableDock"] self.connection.fm.connect("fingeringFinished", self.onFinger) self.connection.fm.finger(self.connection.getUsername()) self.connection.bm.connect("curGameEnded", lambda *args: self.connection.fm.finger(self.connection.getUsername())) self.widgets["usernameLabel"].set_markup( "%s" % self.connection.getUsername()) def __del__ (self): if self.pinger != None: self.pinger.stop() def onFinger (self, fm, finger): if finger.getName().lower() != self.connection.getUsername().lower(): print finger.getName(), self.connection.getUsername() return glock.acquire() try: rows = 1 if finger.getRating(): rows += len(finger.getRating())+1 if finger.getEmail(): rows += 1 if finger.getCreated(): rows += 1 table = gtk.Table(6, rows) table.props.column_spacing = 12 table.props.row_spacing = 4 def label(value, xalign=0, is_error=False): if type(value) == float: value = str(int(value)) if is_error: label = gtk.Label() label.set_markup('' + value + "") else: label = gtk.Label(value) label.props.xalign = xalign return label row = 0 if finger.getRating(): for i, item in enumerate((_("Rating"), _("Win"), _("Draw"), _("Loss"))): table.attach(label(item, xalign=1), i+1,i+2,0,1) row += 1 for rating_type, rating in finger.getRating().iteritems(): ratinglabel = label( \ GAME_TYPES_BY_RATING_TYPE[rating_type].display_text + ":") table.attach(ratinglabel, 0, 1, row, row+1) if rating_type is TYPE_WILD: ratinglabel.set_tooltip_text( _("On FICS, your \"Wild\" rating encompasses all of the following variants at all time controls:\n") + ", ".join([gt.display_text for gt in WildGameType.instances()])) table.attach(label(rating.elo, xalign=1), 1, 2, row, row+1) table.attach(label(rating.wins, xalign=1), 2, 3, row, row+1) table.attach(label(rating.draws, xalign=1), 3, 4, row, row+1) table.attach(label(rating.losses, xalign=1), 4, 5, row, row+1) row += 1 table.attach(gtk.HSeparator(), 0, 6, row, row+1, ypadding=2) row += 1 if finger.getSanctions() != "": table.attach(label(_("Sanctions")+":", is_error=True), 0, 1, row, row+1) table.attach(label(finger.getSanctions()), 1, 6, row, row+1) row += 1 if finger.getEmail(): table.attach(label(_("Email")+":"), 0, 1, row, row+1) table.attach(label(finger.getEmail()), 1, 6, row, row+1) row += 1 if finger.getCreated(): table.attach(label(_("Spent")+":"), 0, 1, row, row+1) s = strftime("%Y %B %d ", localtime(time())) s += _("online in total") table.attach(label(s), 1, 6, row, row+1) row += 1 table.attach(label(_("Ping")+":"), 0, 1, row, row+1) pingLabel = gtk.Label(_("Connecting")+"...") pingLabel.props.xalign = 0 self.pinger = pinger = Pinger(self.host) def callback (pinger, pingtime): if type(pingtime) == str: pingLabel.set_text(pingtime) elif pingtime == -1: pingLabel.set_text(_("Unknown")) else: pingLabel.set_text("%.0f ms" % pingtime) pinger.connect("recieved", callback) pinger.connect("error", callback) pinger.start() table.attach(pingLabel, 1, 6, row, row+1) row += 1 if not self.connection.isRegistred(): vbox = gtk.VBox() table.attach(vbox, 0, 6, row, row+1) label0 = gtk.Label(_("You are currently logged in as a guest.\nA guest is not able to play rated games, and thus the offer of games will be smaller.")) label0.props.xalign = 0 label0.props.wrap = True label0.props.width_request = 300 vbox.add(label0) eventbox = uistuff.LinkLabel(_("Register now"), "http://www.freechess.org/Register/index.html") vbox.add(eventbox) if self.dock.get_children(): self.dock.remove(self.dock.get_children()[0]) self.dock.add(table) self.dock.show_all() finally: glock.release() ############################################################################ # Initialize News Section # ############################################################################ class NewsSection(Section): def __init__(self, widgets, connection): self.widgets = widgets connection.nm.connect("readNews", self.onNewsItem) def onNewsItem (self, nm, news): glock.acquire() try: weekday, month, day, title, details = news dtitle = "%s, %s %s: %s" % (weekday, month, day, title) label = gtk.Label(dtitle) label.props.width_request = 300 label.props.xalign = 0 label.set_ellipsize(pango.ELLIPSIZE_END) expander = gtk.Expander() expander.set_label_widget(label) expander.set_tooltip_text(title) textview = gtk.TextView () textview.set_wrap_mode (gtk.WRAP_WORD) textview.set_editable (False) textview.set_cursor_visible (False) textview.props.pixels_above_lines = 4 textview.props.pixels_below_lines = 4 textview.props.right_margin = 2 textview.props.left_margin = 6 uistuff.initTexviewLinks(textview, details) alignment = gtk.Alignment() alignment.set_padding(3, 6, 12, 0) alignment.props.xscale = 1 alignment.add(textview) expander.add(alignment) expander.show_all() self.widgets["newsVBox"].pack_end(expander) finally: glock.release() ############################################################################ # Initialize Lists # ############################################################################ class ParrentListSection (Section): """ Parrent for sections mainly consisting of a large treeview """ def __init__ (self): def updateLists (queuedCalls): for task in queuedCalls: func = task[0] func(*task[1:]) self.listPublisher = Publisher(updateLists, Publisher.SEND_LIST) self.listPublisher.start() def addColumns (self, treeview, *columns, **keyargs): if "hide" in keyargs: hide = keyargs["hide"] else: hide = [] if "pix" in keyargs: pix = keyargs["pix"] else: pix = [] for i, name in enumerate(columns): if i in hide: continue if i in pix: crp = gtk.CellRendererPixbuf() crp.props.xalign = .5 column = gtk.TreeViewColumn(name, crp, pixbuf=i) else: crt = gtk.CellRendererText() column = gtk.TreeViewColumn(name, crt, text=i) column.set_sort_column_id(i) column.set_resizable(True) column.set_reorderable(True) treeview.append_column(column) def lowLeftSearchPosFunc (self, tv, search_dialog): x = tv.allocation.x + tv.get_toplevel().window.get_position()[0] y = tv.allocation.y + tv.get_toplevel().window.get_position()[1] + \ tv.allocation.height search_dialog.move(x, y) search_dialog.show_all() def pixCompareFunction (self, treemodel, iter0, iter1, column): pix0 = treemodel.get_value(iter0, column) pix1 = treemodel.get_value(iter1, column) if type(pix0) == gtk.gdk.Pixbuf and type(pix1) == gtk.gdk.Pixbuf: return cmp(pix0.get_pixels(), pix1.get_pixels()) return cmp(pix0, pix1) def timeCompareFunction (self, treemodel, iter0, iter1, column): (minute0, minute1) = (treemodel.get_value(iter0, 7), treemodel.get_value(iter1, 7)) return cmp(minute0, minute1) ######################################################################## # Initialize Seek List # ######################################################################## class SeekTabSection (ParrentListSection): def __init__ (self, widgets, connection, infobar): ParrentListSection.__init__(self) self.widgets = widgets self.connection = connection self.infobar = infobar self.messages = {} self.seeks = {} self.challenges = {} self.seekPix = pixbuf_new_from_file(addDataPrefix("glade/seek.png")) self.chaPix = pixbuf_new_from_file(addDataPrefix("glade/challenge.png")) self.manSeekPix = pixbuf_new_from_file(addDataPrefix("glade/manseek.png")) self.tv = self.widgets["seektreeview"] self.store = gtk.ListStore(str, gtk.gdk.Pixbuf, str, int, str, str, str, float, str, str) self.tv.set_model(gtk.TreeModelSort(self.store)) self.addColumns (self.tv, "gameno", "", _("Name"), _("Rating"), _("Rated"), _("Type"), _("Clock"), "gametime", "textcolor", "tooltip", hide=[0,7,8,9], pix=[1] ) self.tv.set_search_column(2) self.tv.set_tooltip_column(9,) for i in range(1, 7): self.tv.get_model().set_sort_func(i, self.compareFunction, i) try: self.tv.set_search_position_func(self.lowLeftSearchPosFunc) except AttributeError: # Unknow signal name is raised by gtk < 2.10 pass for n in range(1, 6): column = self.tv.get_column(n) for cellrenderer in column.get_cell_renderers(): column.add_attribute(cellrenderer, "foreground", 8) self.selection = self.tv.get_selection() self.lastSeekSelected = None self.selection.set_select_function(self.selectFunction, full=True) self.selection.connect("changed", self.onSelectionChanged) self.widgets["clearSeeksButton"].connect("clicked", self.onClearSeeksClicked) self.widgets["acceptButton"].connect("clicked", self.onAcceptClicked) self.widgets["declineButton"].connect("clicked", self.onDeclineClicked) self.tv.connect("row-activated", self.row_activated) self.connection.glm.connect("addSeek", lambda glm, seek: self.listPublisher.put((self.onAddSeek, seek)) ) self.connection.glm.connect("removeSeek", lambda glm, gameno: self.listPublisher.put((self.onRemoveSeek, gameno)) ) self.connection.om.connect("onChallengeAdd", lambda om, index, match: self.listPublisher.put((self.onChallengeAdd, index, match)) ) self.connection.om.connect("onChallengeRemove", lambda om, index: self.listPublisher.put((self.onChallengeRemove, index)) ) self.connection.glm.connect("clearSeeks", lambda glm: self.listPublisher.put((self.onClearSeeks,)) ) self.connection.bm.connect("playGameCreated", lambda bm, game: self.listPublisher.put((self.onPlayingGame,)) ) self.connection.bm.connect("curGameEnded", lambda bm, game: self.listPublisher.put((self.onCurGameEnded,)) ) def selectFunction (self, selection, model, path, is_selected): if model[path][8] == "grey": return False else: return True def __isAChallengeOrOurSeek (self, row): gameno = row[0] textcolor = row[8] if (gameno is not None and gameno.startswith("C")) or (textcolor == "grey"): return True else: return False def compareFunction (self, model, iter0, iter1, column): row0 = list(model[model.get_path(iter0)]) row1 = list(model[model.get_path(iter1)]) is_ascending = True if self.tv.get_column(column-1).get_sort_order() is \ gtk.SORT_ASCENDING else False if self.__isAChallengeOrOurSeek(row0) and not self.__isAChallengeOrOurSeek(row1): if is_ascending: return -1 else: return 1 elif self.__isAChallengeOrOurSeek(row1) and not self.__isAChallengeOrOurSeek(row0): if is_ascending: return 1 else: return -1 elif column is 6: return self.timeCompareFunction(model, iter0, iter1, column) else: value0 = row0[column] value0 = value0.lower() if isinstance(value0, str) else value0 value1 = row1[column] value1 = value1.lower() if isinstance(value1, str) else value1 return cmp(value0, value1) def __updateActiveSeeksLabel (self): count = len(self.seeks) + len(self.challenges) self.widgets["activeSeeksLabel"].set_text(_("Active seeks: %d") % count) def onAddSeek (self, seek): time = _("%(min)s min") % {'min': seek["t"]} if seek["i"] != "0": time += _(" + %(sec)s sec") % {'sec': seek["i"]} rated = seek["r"] == "u" and _("Unrated") or _("Rated") pix = seek["manual"] and self.manSeekPix or self.seekPix player = self.connection.players.get(FICSPlayer(seek["w"])) textcolor = "grey" if player.name == self.connection.getUsername() \ else "black" is_rated = False if seek["r"] == "u" else True tooltiptext = SeekGraphSection.getSeekTooltipText(player, seek["rt"], is_rated, seek["manual"], seek["gametype"], seek["t"], seek["i"], rmin=seek["rmin"], rmax=seek["rmax"]) seek_ = [seek["gameno"], pix, player.name + player.display_titles(), int(seek["rt"]), rated, seek["gametype"].display_text, time, float(seek["t"] + "." + seek["i"]), textcolor, tooltiptext] if textcolor == "grey": ti = self.store.prepend(seek_) self.tv.scroll_to_cell(self.store.get_path(ti)) self.widgets["clearSeeksButton"].set_sensitive(True) else: ti = self.store.append(seek_) self.seeks [seek["gameno"]] = ti self.__updateActiveSeeksLabel() def onRemoveSeek (self, gameno): if not gameno in self.seeks: # We ignore removes we haven't added, as it seams fics sends a # lot of removes for games it has never told us about return treeiter = self.seeks [gameno] if not self.store.iter_is_valid(treeiter): return self.store.remove (treeiter) del self.seeks[gameno] self.__updateActiveSeeksLabel() def onChallengeAdd (self, index, match): log.debug("onChallengeAdd: %s\n" % match) SoundTab.playAction("aPlayerChecks") time = _("%(min)s min") % {'min': match["t"]} if match["i"] != "0": time += _(" + %(sec)s sec") % {'sec': match["i"]} rated = match["r"] == "u" and _("Unrated") or _("Rated") player = self.connection.players.get(FICSPlayer(match["w"])) nametitle = player.name + player.display_titles() is_rated = False if match["r"] == "u" else True is_manual = False # TODO: differentiate between challenges and manual-seek-accepts # (wait until seeks are comparable FICSSeek objects to do this) if match["is_adjourned"]: text = _(" would like to resume your adjourned %(time)s " + \ "%(gametype)s game.") % {"time": time, "gametype": match["gametype"].display_text} else: text = _(" challenges you to a %(time)s %(rated)s %(gametype)s game.") \ % {"time": time, "rated": rated.lower(), "gametype": match["gametype"].display_text} content = self.get_infobarmessage_content(player, text, gametype=match["gametype"]) def callback (infobar, response): if response == gtk.RESPONSE_ACCEPT: self.connection.om.acceptIndex(index) elif response == gtk.RESPONSE_NO: self.connection.om.declineIndex(index) message = InfoBarMessage(gtk.MESSAGE_QUESTION, content, callback) message.add_button(InfoBarMessageButton(_("Accept Challenge"), gtk.RESPONSE_ACCEPT)) message.add_button(InfoBarMessageButton(_("Decline Challenge"), gtk.RESPONSE_NO)) message.add_button(InfoBarMessageButton(_("Ignore Challenge"), gtk.RESPONSE_CANCEL)) self.messages[index] = message self.infobar.push_message(message) tooltiptext = SeekGraphSection.getSeekTooltipText(player, match["rt"], is_rated, is_manual, match["gametype"], match["t"], match["i"]) ti = self.store.prepend (["C"+index, self.chaPix, nametitle, int(match["rt"]), rated, match["gametype"].display_text, time, float(match["t"] + "." + match["i"]), "black", tooltiptext]) self.challenges[index] = ti self.__updateActiveSeeksLabel() self.widgets["seektreeview"].scroll_to_cell(self.store.get_path(ti)) def onChallengeRemove (self, index): if not index in self.challenges: return if index in self.messages: self.messages[index].dismiss() del self.messages[index] ti = self.challenges[index] if not self.store.iter_is_valid(ti): return self.store.remove(ti) del self.challenges[index] self.__updateActiveSeeksLabel() def onClearSeeks (self): self.store.clear() self.seeks = {} self.__updateActiveSeeksLabel() def onAcceptClicked (self, button): model, iter = self.tv.get_selection().get_selected() if iter == None: return index = model.get_value(iter, 0) if index.startswith("C"): index = index[1:] self.connection.om.acceptIndex(index) else: self.connection.om.playIndex(index) if index in self.messages: self.messages[index].dismiss() del self.messages[index] def onDeclineClicked (self, button): model, iter = self.tv.get_selection().get_selected() if iter == None: return index = model.get_value(iter, 0) if index.startswith("C"): index = index[1:] self.connection.om.declineIndex(index) if index in self.messages: self.messages[index].dismiss() del self.messages[index] def onClearSeeksClicked (self, button): self.connection.client.run_command("unseek") self.widgets["clearSeeksButton"].set_sensitive(False) def row_activated (self, treeview, path, view_column): model, iter = self.tv.get_selection().get_selected() if iter == None: return index = model.get_value(iter, 0) if index != self.lastSeekSelected: return if path != model.get_path(iter): return self.onAcceptClicked(None) def onSelectionChanged (self, selection): model, iter = self.widgets["seektreeview"].get_selection().get_selected() if iter == None: return self.lastSeekSelected = model.get_value(iter, 0) def _clear_messages (self): for message in self.messages.values(): message.dismiss() self.messages = {} def onPlayingGame (self): self._clear_messages() self.widgets["seekListContent"].set_sensitive(False) self.widgets["clearSeeksButton"].set_sensitive(False) self.store.clear() self.__updateActiveSeeksLabel() def onCurGameEnded (self): self.widgets["seekListContent"].set_sensitive(True) self.connection.glm.refresh_seeks() ######################################################################## # Initialize Seek Graph # ######################################################################## YMARKS = (800, 1600, 2400) YLOCATION = lambda y: min(y/3000.,3000) XMARKS = (5, 15) XLOCATION = lambda x: e**(-6.579/(x+1)) # This is used to convert increment time to minutes. With a GAME_LENGTH on # 40, a game on two minutes and twelve secconds will be placed at the same # X location as a game on 2+12*40/60 = 10 minutes GAME_LENGTH = 40 class SeekGraphSection (ParrentListSection): def __init__ (self, widgets, connection): ParrentListSection.__init__(self) self.widgets = widgets self.connection = connection self.graph = SpotGraph() for rating in YMARKS: self.graph.addYMark(YLOCATION(rating), str(rating)) for mins in XMARKS: self.graph.addXMark(XLOCATION(mins), str(mins) + _(" min")) self.widgets["graphDock"].add(self.graph) self.graph.show() self.graph.connect("spotClicked", self.onSpotClicked) self.connection.glm.connect("addSeek", lambda glm, seek: self.listPublisher.put((self.onSeekAdd, seek)) ) self.connection.glm.connect("removeSeek", lambda glm, gameno: self.listPublisher.put((self.onSeekRemove, gameno)) ) self.connection.glm.connect("clearSeeks", lambda glm: self.listPublisher.put((self.onSeekClear,)) ) self.connection.bm.connect("playGameCreated", lambda bm, game: self.listPublisher.put((self.onPlayingGame,)) ) self.connection.bm.connect("curGameEnded", lambda bm, game: self.listPublisher.put((self.onCurGameEnded,)) ) def onSpotClicked (self, graph, name): self.connection.bm.play(name) @classmethod def getSeekTooltipText (cls, player, rating, is_rated, is_manual, gametype, min, gain, rmin=0, rmax=9999): text = "%s" % player.name if int(rating) == 0: if not player.isGuest(): text += " (" + _("Unrated") + ")" else: text += " (%s)" % rating text += "%s" % player.display_titles(long=True) rated = _("Rated") if is_rated else _("Unrated") text += "\n%s %s" % (rated, gametype.display_text) text += "\n" + _("%(min)s min + %(sec)s sec") % {'min': min, 'sec': gain} rrtext = SeekChallengeSection.getRatingRangeDisplayText(rmin, rmax) if rrtext: text += "\n%s: %s" % (_("Opponent Rating"), rrtext) if is_manual: text += "\n%s" % _("Manual Accept") return text def onSeekAdd (self, seek): x = XLOCATION (float(seek["t"]) + float(seek["i"]) * GAME_LENGTH/60.) y = seek["rt"].isdigit() and YLOCATION(float(seek["rt"])) or 0 type = seek["r"] == "u" and 1 or 0 player = self.connection.players.get(FICSPlayer(seek["w"])) is_rated = False if seek["r"] == "u" else True text = self.getSeekTooltipText(player, seek["rt"], is_rated, seek["manual"], seek["gametype"], seek["t"], seek["i"], rmin=seek["rmin"], rmax=seek["rmax"]) self.graph.addSpot(seek["gameno"], text, x, y, type) def onSeekRemove (self, gameno): self.graph.removeSpot(gameno) def onSeekClear (self): self.graph.clearSpots() def onPlayingGame (self): self.widgets["seekGraphContent"].set_sensitive(False) self.graph.clearSpots() def onCurGameEnded (self): self.widgets["seekGraphContent"].set_sensitive(True) ######################################################################## # Initialize Players List # ######################################################################## class PlayerTabSection (ParrentListSection): widgets = [] def __init__ (self, widgets, connection): ParrentListSection.__init__(self) PlayerTabSection.widgets = widgets self.connection = connection self.players = {} self.tv = widgets["playertreeview"] self.store = gtk.ListStore(FICSPlayer, gtk.gdk.Pixbuf, str, int, int, int, int, int, str, str) self.tv.set_model(gtk.TreeModelSort(self.store)) self.addColumns(self.tv, "FICSPlayer", "", _("Name"), _("Blitz"), _("Standard"), _("Lightning"), _("Crazyhouse"), _("Wild"), _("Status"), "tooltip", hide=[0,6,7,9], pix=[1]) self.tv.set_tooltip_column(9,) self.tv.get_column(0).set_sort_column_id(0) self.tv.get_model().set_sort_func(0, self.pixCompareFunction, 1) try: self.tv.set_search_position_func(self.lowLeftSearchPosFunc) except AttributeError: # Unknow signal name is raised by gtk < 2.10 pass connection.players.connect("FICSPlayerEntered", self.onPlayerAdded) connection.players.connect("FICSPlayerExited", self.onPlayerRemoved) widgets["private_chat_button"].connect("clicked", self.onPrivateChatClicked) widgets["private_chat_button"].set_sensitive(False) widgets["observe_button"].connect("clicked", self.onObserveClicked) widgets["observe_button"].set_sensitive(False) self.tv.get_selection().connect_after("changed", self.onSelectionChanged) self.onSelectionChanged(None) @classmethod def getPlayerTooltipText (cls, player): text = "%s" % player.name text += "%s" % player.display_titles(long=True) if player.blitz: text += "\n%s: %s" % (_("Blitz"), player.blitz) if player.standard: text += "\n%s: %s" % (_("Standard"), player.standard) if player.lightning: text += "\n%s: %s" % (_("Lightning"), player.lightning) if player.crazyhouse: text += "\n%s: %s" % (_("Crazyhouse"), player.crazyhouse) if player.wild: text += "\n%s: %s" % (_("Wild"), player.wild) text += "\n%s" % player.display_status return text @glock.glocked def onPlayerAdded (self, players, player): if player in self.players: return ti = self.store.append([player, player.getIcon(), player.name + player.display_titles(), player.blitz, player.standard, player.lightning, player.crazyhouse, player.wild, player.display_status, self.getPlayerTooltipText(player)]) self.players[player] = { "ti": ti } self.players[player]["status"] = player.connect( "notify::status", self.status_changed) self.players[player]["game"] = player.connect( "notify::game", self.status_changed) self.players[player]["titles"] = player.connect( "notify::titles", self.titles_changed) if player.game: self.players[player]["private"] = player.game.connect( "notify::private", self.private_changed, player) for rt in (TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_CRAZYHOUSE, TYPE_WILD): self.players[player][rt] = player.ratings[rt].connect( "notify::elo", self.elo_changed, player) count = len(self.players) self.widgets["playersOnlineLabel"].set_text(_("Players: %d") % count) @glock.glocked def onPlayerRemoved (self, players, player): if player not in self.players: return if self.store.iter_is_valid(self.players[player]["ti"]): ti = self.players[player]["ti"] self.store.remove(ti) for key in ("status", "game", "titles"): if player.handler_is_connected(self.players[player][key]): player.disconnect(self.players[player][key]) if player.game and "private" in self.players[player] and \ player.game.handler_is_connected( self.players[player]["private"]): player.game.disconnect(self.players[player]["private"]) for rt in (TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_CRAZYHOUSE, TYPE_WILD): if player.ratings[rt].handler_is_connected( self.players[player][rt]): player.ratings[rt].disconnect(self.players[player][rt]) del self.players[player] count = len(self.players) self.widgets["playersOnlineLabel"].set_text(_("Players: %d") % count) @glock.glocked def status_changed (self, player, property): if player not in self.players: return if self.store.iter_is_valid(self.players[player]["ti"]): self.store.set(self.players[player]["ti"], 8, player.display_status) self.store.set(self.players[player]["ti"], 9, self.getPlayerTooltipText(player)) if player.status == IC_STATUS_PLAYING and player.game and \ "private" not in self.players[player]: self.players[player]["private"] = player.game.connect( "notify::private", self.private_changed, player) elif player.status != IC_STATUS_PLAYING and \ "private" in self.players[player]: game = player.game if game and game.handler_is_connected(self.players[player]["private"]): game.disconnect(self.players[player]["private"]) del self.players[player]["private"] if player == self.getSelectedPlayer(): self.onSelectionChanged(None) return False @glock.glocked def titles_changed (self, player, property): if player not in self.players: return if not self.store.iter_is_valid(self.players[player]["ti"]): return self.store.set(self.players[player]["ti"], 1, player.getIcon()) self.store.set(self.players[player]["ti"], 2, player.name + player.display_titles()) self.store.set(self.players[player]["ti"], 9, self.getPlayerTooltipText(player)) return False def private_changed (self, game, property, player): self.status_changed(player, property) self.onSelectionChanged(self.tv.get_selection()) return False @glock.glocked def elo_changed (self, rating, prop, player): if player not in self.players: return if not self.store.iter_is_valid(self.players[player]["ti"]): return ti = self.players[player]["ti"] self.store.set(ti, 1, player.getIcon()) self.store.set(self.players[player]["ti"], 9, self.getPlayerTooltipText(player)) if rating.type == TYPE_BLITZ: self.store.set(ti, 3, player.blitz) elif rating.type == TYPE_STANDARD: self.store.set(ti, 4, player.standard) elif rating.type == TYPE_LIGHTNING: self.store.set(ti, 5, player.lightning) elif rating.type == TYPE_CRAZYHOUSE: self.store.set(ti, 6, player.crazyhouse) elif rating.type == TYPE_WILD: self.store.set(ti, 7, player.wild) return False @classmethod def getSelectedPlayer (cls): model, iter = cls.widgets["playertreeview"].get_selection().get_selected() if iter == None: return None return model.get_value(iter, 0) def onPrivateChatClicked (self, button): player = self.getSelectedPlayer() if player is None: return for section in sections: if isinstance(section, ChatWindow): section.openChatWithPlayer(player.name) #TODO: isadmin og type def onObserveClicked (self, button): player = self.getSelectedPlayer() if player is not None and player.game is not None: self.connection.bm.observe(player.game) @glock.glocked def onSelectionChanged (self, selection): '''When the player selects a player from the player list, update the clickability of our buttons.''' player = self.getSelectedPlayer() user_name = self.connection.getUsername() self.widgets["private_chat_button"].set_sensitive(player is not None) self.widgets["observe_button"].set_sensitive( player is not None and player.isObservable()\ and user_name not in (player.game.wplayer.name, player.game.bplayer.name)) self.widgets["challengeButton"].set_sensitive( player is not None and player.isAvailableForGame() and player.name!=user_name) ######################################################################## # Initialize Games List # ######################################################################## class GameTabSection (ParrentListSection): def __init__ (self, widgets, connection): ParrentListSection.__init__(self) self.widgets = widgets self.connection = connection self.games = {} self.recpix = load_icon(16, "media-record") self.clearpix = pixbuf_new_from_file(addDataPrefix("glade/board.png")) self.tv = self.widgets["gametreeview"] self.store = gtk.ListStore(FICSGame, gtk.gdk.Pixbuf, str, int, str, int, str, int) self.tv.set_model(gtk.TreeModelSort(self.store)) self.tv.get_selection().set_mode(gtk.SELECTION_MULTIPLE) self.addColumns ( self.tv, "FICSGame", "", _("White Player"), _("Rating"), _("Black Player"), _("Rating"), _("Game Type"), "Time", hide=[0,7], pix=[1] ) self.tv.get_column(0).set_sort_column_id(0) self.tv.get_model().set_sort_func(0, self.pixCompareFunction, 1) self.selection = self.tv.get_selection() self.selection.connect("changed", self.onSelectionChanged) self.onSelectionChanged(self.selection) def typeCompareFunction (treemodel, iter0, iter1): return cmp (treemodel.get_value(iter0, 7), treemodel.get_value(iter1, 7)) self.tv.get_model().set_sort_func(6, typeCompareFunction) try: self.tv.set_search_position_func(self.lowLeftSearchPosFunc) except AttributeError: # Unknow signal name is raised by gtk < 2.10 pass def searchCallback (model, column, key, iter): if model.get_value(iter, 2).lower().startswith(key) or \ model.get_value(iter, 4).lower().startswith(key): return False return True self.tv.set_search_equal_func (searchCallback) self.connection.games.connect("FICSGameCreated", lambda games, game: self.listPublisher.put((self.onGameAdd, game)) ) self.connection.games.connect("FICSGameEnded", lambda games, game: self.listPublisher.put((self.onGameRemove, game)) ) self.widgets["observeButton"].connect ("clicked", self.onObserveClicked) self.tv.connect("row-activated", self.onObserveClicked) self.connection.bm.connect("obsGameCreated", lambda bm, game: self.listPublisher.put((self.onGameObserved, game)) ) self.connection.bm.connect("obsGameUnobserved", lambda bm, game: self.listPublisher.put((self.onGameUnobserved, game)) ) def onSelectionChanged (self, selection): model, paths = selection.get_selected_rows() a_selected_game_is_observable = False for path in paths: rowiter = model.get_iter(path) game = model.get_value(rowiter, 0) if not game.private and game.supported: a_selected_game_is_observable = True break self.widgets["observeButton"].set_sensitive(a_selected_game_is_observable) def _update_gamesrunning_label (self): count = len(self.games) self.widgets["gamesRunningLabel"].set_text(_("Games running: %d") % count) def onGameAdd (self, game): # log.debug("GameTabSection.onGameAdd: %s\n" % repr(game)) if game.min != None: length = game.min*60 + game.inc*40 elif game.game_type.rating_type == TYPE_LIGHTNING: length = 100 elif game.game_type.rating_type == TYPE_BLITZ: length = 9*60 elif game.game_type.rating_type == TYPE_STANDARD: length = 15*60 else: length = 0 ti = self.store.append ([game, self.clearpix, game.wplayer.name + game.wplayer.display_titles(), game.wplayer.getRatingForCurrentGame() or 0, game.bplayer.name + game.bplayer.display_titles(), game.bplayer.getRatingForCurrentGame() or 0, game.display_text, length]) self.games[game] = { "ti": ti } self.games[game]["private_cid"] = game.connect("notify::private", self.private_changed) self._update_gamesrunning_label() @glock.glocked def private_changed (self, game, property): if game in self.games and \ self.store.iter_is_valid(self.games[game]["ti"]): self.store.set(self.games[game]["ti"], 6, game.display_text) self.onSelectionChanged(self.tv.get_selection()) return False def onGameRemove (self, game): if game not in self.games: return if self.store.iter_is_valid(self.games[game]["ti"]): self.store.remove(self.games[game]["ti"]) if game.handler_is_connected(self.games[game]["private_cid"]): game.disconnect(self.games[game]["private_cid"]) del self.games[game] self._update_gamesrunning_label() def onObserveClicked (self, widget, *args): model, paths = self.tv.get_selection().get_selected_rows() for path in paths: rowiter = model.get_iter(path) game = model.get_value(rowiter, 0) self.connection.bm.observe(game) def onGameObserved (self, game): if game in self.games: treeiter = self.games[game]["ti"] self.store.set_value(treeiter, 1, self.recpix) def onGameUnobserved (self, game): if game in self.games: treeiter = self.games[game]["ti"] self.store.set_value(treeiter, 1, self.clearpix) ######################################################################## # Initialize Adjourned List # ######################################################################## class AdjournedTabSection (ParrentListSection): def __init__ (self, widgets, connection, infobar): ParrentListSection.__init__(self) self.connection = connection self.widgets = widgets self.infobar = infobar self.games = {} self.messages = {} self.wpix = pixbuf_new_from_file(addDataPrefix("glade/white.png")) self.bpix = pixbuf_new_from_file(addDataPrefix("glade/black.png")) self.tv = widgets["adjournedtreeview"] self.store = gtk.ListStore(FICSAdjournedGame, gtk.gdk.Pixbuf, str, str, str, str, str) self.tv.set_model(gtk.TreeModelSort(self.store)) self.addColumns (self.tv, "FICSAdjournedGame", _("Your Color"), _("Opponent"), _("Is Online"), _("Time Control"), _("Game Type"), _("Date/Time"), hide=[0], pix=[1]) self.selection = self.tv.get_selection() self.selection.connect("changed", self.onSelectionChanged) self.onSelectionChanged(self.selection) self.connection.adm.connect("adjournedGameAdded", lambda adm, game: self.listPublisher.put((self.onAdjournedGameAdded, game)) ) self.connection.games.connect("FICSAdjournedGameRemoved", lambda games, game: self.listPublisher.put((self.onAdjournedGameRemoved, game)) ) widgets["resignButton"].connect("clicked", self.onResignButtonClicked) widgets["abortButton"].connect("clicked", self.onAbortButtonClicked) widgets["drawButton"].connect("clicked", self.onDrawButtonClicked) widgets["resumeButton"].connect("clicked", self.onResumeButtonClicked) widgets["previewButton"].connect("clicked", self.onPreviewButtonClicked) self.tv.connect("row-activated", lambda *args: self.onPreviewButtonClicked(None)) self.connection.adm.connect("adjournedGamePreview", lambda adm, game: self.listPublisher.put((self.onGamePreview, game))) self.connection.bm.connect("playGameCreated", self.onPlayGameCreated) def onSelectionChanged (self, selection): model, iter = selection.get_selected() a_row_is_selected = False if iter != None: a_row_is_selected = True for button in ("resignButton", "abortButton", "drawButton", "resumeButton", "previewButton"): self.widgets[button].set_sensitive(a_row_is_selected) @glock.glocked def onPlayGameCreated (self, bm, board): for message in self.messages.values(): message.dismiss() self.messages = {} return False def _update_infobarmessagebutton_sensitivity (self, message, player): button = message.buttons[0] if player.isAvailableForGame(): button.sensitive = True button.tooltip = "" else: button.sensitive = False button.tooltip = _("%(player)s is %(status)s") % \ {"player": player.name, "status": player.display_status.lower()} def _infobar_adjourned_message (self, game, player): if player not in self.messages: text = _(" with whom you have an adjourned %(timecontrol)s %(gametype)s " + \ "game is online.") % \ {"timecontrol": game.display_timecontrol, "gametype": game.game_type.display_text} content = self.get_infobarmessage_content(player, text, gametype=game.game_type) def callback (infobar, response): if response == gtk.RESPONSE_ACCEPT: self.connection.client.run_command("match %s" % player.name) elif response == gtk.RESPONSE_HELP: self.connection.adm.queryMoves(game) del self.messages[player] message = InfoBarMessage(gtk.MESSAGE_QUESTION, content, callback) message.add_button(InfoBarMessageButton(_("Request Continuation"), gtk.RESPONSE_ACCEPT)) message.add_button(InfoBarMessageButton(_("Examine Adjourned Game"), gtk.RESPONSE_HELP)) message.add_button(InfoBarMessageButton(_("Do Nothing"), gtk.RESPONSE_NO)) self._update_infobarmessagebutton_sensitivity(message, player) self.messages[player] = message self.infobar.push_message(message) @glock.glocked def online_changed (self, player, property, game): log.debug("AdjournedTabSection.online_changed: %s %s\n" % \ (repr(player), repr(game))) if game in self.games and \ self.store.iter_is_valid(self.games[game]["ti"]): self.store.set(self.games[game]["ti"], 3, player.display_online) if player.online and player.adjournment: self._infobar_adjourned_message(game, player) elif not player.online and player in self.messages: self.messages[player].dismiss() # calling message.dismiss() might cause it to be removed from # self.messages in another callback, so we re-check if player in self.messages: del self.messages[player] return False @glock.glocked def status_changed (self, player, property, game): log.debug("AdjournedTabSection.status_changed: %s %s\n" % \ (repr(player), repr(game))) try: message = self.messages[player] except KeyError: return False self._update_infobarmessagebutton_sensitivity(message, player) return False def onAdjournedGameAdded (self, game): if game not in self.games: pix = (self.wpix, self.bpix)[game.our_color] ti = self.store.append([game, pix, game.opponent.name, game.opponent.display_online, game.display_timecontrol, game.game_type.display_text, game.display_time]) self.games[game] = {} self.games[game]["ti"] = ti self.games[game]["online_cid"] = game.opponent.connect( "notify::online", self.online_changed, game) self.games[game]["status_cid"] = game.opponent.connect( "notify::status", self.status_changed, game) if game.opponent.online: self._infobar_adjourned_message(game, game.opponent) return False def onAdjournedGameRemoved (self, game): if game in self.games: if self.store.iter_is_valid(self.games[game]["ti"]): self.store.remove(self.games[game]["ti"]) if game.opponent.handler_is_connected(self.games[game]["online_cid"]): game.opponent.disconnect(self.games[game]["online_cid"]) if game.opponent.handler_is_connected(self.games[game]["status_cid"]): game.opponent.disconnect(self.games[game]["status_cid"]) if game.opponent in self.messages: self.messages[game.opponent].dismiss() if game.opponent in self.messages: del self.messages[game.opponent] del self.games[game] return False def onResignButtonClicked (self, button): model, iter = self.tv.get_selection().get_selected() if iter == None: return game = model.get_value(iter, 0) self.connection.adm.resign(game) def onDrawButtonClicked (self, button): model, iter = self.tv.get_selection().get_selected() if iter == None: return game = model.get_value(iter, 0) self.connection.adm.draw(game) def onAbortButtonClicked (self, button): model, iter = self.tv.get_selection().get_selected() if iter == None: return game = model.get_value(iter, 0) self.connection.adm.abort(game) def onResumeButtonClicked (self, button): model, iter = self.tv.get_selection().get_selected() if iter == None: return game = model.get_value(iter, 0) self.connection.adm.resume(game) def onPreviewButtonClicked (self, button): model, iter = self.tv.get_selection().get_selected() if iter == None: return game = model.get_value(iter, 0) self.connection.adm.queryMoves(game) def onGamePreview (self, ficsgame): log.debug("ICLounge.onGamePreview: %s\n" % ficsgame) if ficsgame.board.wms == 0 and ficsgame.board.bms == 0: timemodel = None else: timemodel = TimeModel(ficsgame.board.wms/1000., ficsgame.inc, bsecs=ficsgame.board.bms/1000., minutes=ficsgame.min) gamemodel = ICGameModel(self.connection, ficsgame, timemodel) # The players need to start listening for moves IN this method if they # want to be noticed of all moves the FICS server sends us from now on. # Hence the lazy loading is skipped. wplayer, bplayer = ficsgame.wplayer, ficsgame.bplayer player0 = ICPlayer(gamemodel, wplayer.name, -1, WHITE, wplayer.long_name(game_type=ficsgame.game_type), icrating=wplayer.getRating(ficsgame.game_type.rating_type).elo) player1 = ICPlayer(gamemodel, bplayer.name, -1, BLACK, bplayer.long_name(game_type=ficsgame.game_type), icrating=bplayer.getRating(ficsgame.game_type.rating_type).elo) player0tup = (REMOTE, lambda:player0, (), wplayer.long_name()) player1tup = (REMOTE, lambda:player1, (), bplayer.long_name()) ionest.generalStart(gamemodel, player0tup, player1tup, (StringIO(ficsgame.board.pgn), pgn, 0, -1)) gamemodel.connect("game_started", lambda gamemodel: gamemodel.end(ADJOURNED, ficsgame.reason)) ############################################################################ # Initialize "Create Seek" and "Challenge" panels, and "Edit Seek:" dialog # ############################################################################ RATING_SLIDER_STEP = 25 class SeekChallengeSection (ParrentListSection): seekEditorWidgets = ( "untimedCheck", "minutesSpin", "gainSpin", "strengthCheck", "chainAlignment", "ratingCenterSlider", "toleranceSlider", "toleranceHBox", "nocolorRadio", "whitecolorRadio", "blackcolorRadio", # variantCombo has to come before other variant widgets so that # when the widget is loaded, variantRadio isn't selected by the callback, # overwriting the user's saved value for the variant radio buttons "variantCombo", "noVariantRadio", "variantRadio", "ratedGameCheck", "manualAcceptCheck" ) seekEditorWidgetDefaults = { "untimedCheck": [False, False, False], "minutesSpin": [15, 5, 2], "gainSpin": [10, 0, 1], "strengthCheck": [False, True, False], "chainAlignment": [True, True, True], "ratingCenterSlider": [40, 40, 40], "toleranceSlider": [8, 8, 8], "toleranceHBox": [False, False, False], "variantCombo": [RANDOMCHESS, FISCHERRANDOMCHESS, LOSERSCHESS], "noVariantRadio": [True, False, True], "variantRadio": [False, True, False], "nocolorRadio": [True, True, True], "whitecolorRadio": [False, False, False], "blackcolorRadio": [False, False, False], "ratedGameCheck": [False, True, True], "manualAcceptCheck": [False, False, False], } seekEditorWidgetGettersSetters = {} def __init__ (self, widgets, connection): ParrentListSection.__init__(self) self.widgets = widgets self.connection = connection self.finger = None conf.set("numberOfFingers", 0) glock.glock_connect(self.connection.fm, "fingeringFinished", lambda fm, finger: self.onFinger(fm, finger)) self.connection.fm.finger(self.connection.getUsername()) self.widgets["untimedCheck"].connect("toggled", self.onUntimedCheckToggled) self.widgets["minutesSpin"].connect("value-changed", self.onTimeSpinChanged) self.widgets["gainSpin"].connect("value-changed", self.onTimeSpinChanged) self.onTimeSpinChanged(self.widgets["minutesSpin"]) self.widgets["nocolorRadio"].connect("toggled", self.onColorRadioChanged) self.widgets["whitecolorRadio"].connect("toggled", self.onColorRadioChanged) self.widgets["blackcolorRadio"].connect("toggled", self.onColorRadioChanged) self.onColorRadioChanged(self.widgets["nocolorRadio"]) self.widgets["noVariantRadio"].connect("toggled", self.onVariantRadioChanged) self.widgets["variantRadio"].connect("toggled", self.onVariantRadioChanged) variantComboGetter, variantComboSetter = self.__initVariantCombo(self.widgets["variantCombo"]) self.seekEditorWidgetGettersSetters["variantCombo"] = (variantComboGetter, variantComboSetter) self.widgets["variantCombo"].connect("changed", self.onVariantComboChanged) self.widgets["editSeekDialog"].connect("delete_event", lambda *a: True) glock.glock_connect(self.connection, "disconnected", lambda c: self.widgets and self.widgets["editSeekDialog"].response(gtk.RESPONSE_CANCEL)) glock.glock_connect(self.connection, "disconnected", lambda c: self.widgets and self.widgets["challengeDialog"].response(gtk.RESPONSE_CANCEL)) self.widgets["strengthCheck"].connect("toggled", self.onStrengthCheckToggled) self.onStrengthCheckToggled(self.widgets["strengthCheck"]) self.widgets["ratingCenterSlider"].connect("value-changed", self.onRatingCenterSliderChanged) self.onRatingCenterSliderChanged(self.widgets["ratingCenterSlider"]) self.widgets["toleranceSlider"].connect("value-changed", self.onToleranceSliderChanged) self.onToleranceSliderChanged(self.widgets["toleranceSlider"]) self.widgets["toleranceButton"].connect("clicked", self.onToleranceButtonClicked) def toleranceHBoxGetter (widget): return self.widgets["toleranceHBox"].get_property("visible") def toleranceHBoxSetter (widget, visible): assert type(visible) is bool if visible: self.widgets["toleranceHBox"].show() else: self.widgets["toleranceHBox"].hide() self.seekEditorWidgetGettersSetters["toleranceHBox"] = (toleranceHBoxGetter, toleranceHBoxSetter) self.chainbox = ChainVBox() self.widgets["chainAlignment"].add(self.chainbox) def chainboxGetter (widget): return self.chainbox.active def chainboxSetter (widget, is_active): self.chainbox.active = is_active self.seekEditorWidgetGettersSetters["chainAlignment"] = (chainboxGetter, chainboxSetter) self.challengee = None self.in_challenge_mode = False self.seeknumber = 1 self.widgets["seekButton"].connect("clicked", self.onSeekButtonClicked) self.widgets["challengeButton"].connect("clicked", self.onChallengeButtonClicked) self.widgets["challengeDialog"].connect("delete-event", self.onChallengeDialogResponse) self.widgets["challengeDialog"].connect("response", self.onChallengeDialogResponse) self.widgets["editSeekDialog"].connect("response", self.onEditSeekDialogResponse) seekSelection = self.widgets["seektreeview"].get_selection() seekSelection.connect_after("changed", self.onSeekSelectionChanged) for widget in ("seek1Radio", "seek2Radio", "seek3Radio", "challenge1Radio", "challenge2Radio", "challenge3Radio"): uistuff.keep(self.widgets[widget], widget) self.lastdifference = 0 self.loading_seek_editor = False self.savedSeekRadioTexts = [ GAME_TYPES["blitz"].display_text ] * 3 for i in range(1,4): self.__loadSeekEditor(i) self.__writeSavedSeeks(i) self.widgets["seek%sRadioConfigButton" % i].connect( "clicked", self.onSeekRadioConfigButtonClicked, i) self.widgets["challenge%sRadioConfigButton" % i].connect( "clicked", self.onChallengeRadioConfigButtonClicked, i) if not self.connection.isRegistred(): self.chainbox.active = False self.widgets["chainAlignment"].set_sensitive(False) self.widgets["chainAlignment"].set_tooltip_text(_("The chain button is disabled because you are logged in as a guest. Guests can't establish ratings, and the chain button's state has no effect when there is no rating to which to tie \"Opponent Strength\" to")) def onSeekButtonClicked (self, button): if self.widgets["seek3Radio"].get_active(): self.__loadSeekEditor(3) elif self.widgets["seek2Radio"].get_active(): self.__loadSeekEditor(2) else: self.__loadSeekEditor(1) min, incr, gametype, ratingrange, color, rated, manual = self.__getSeekEditorDialogValues() self.connection.glm.seek(min, incr, gametype, rated, ratingrange, color, manual) def onChallengeButtonClicked (self, button): player = PlayerTabSection.getSelectedPlayer() if player is None: return self.challengee = player self.in_challenge_mode = True for i in range(1,4): self.__loadSeekEditor(i) self.__writeSavedSeeks(i) self.__updateRatedGameCheck() if self.widgets["seek3Radio"].get_active(): seeknumber = 3 elif self.widgets["seek2Radio"].get_active(): seeknumber = 2 else: seeknumber = 1 self.__updateSeekEditor(seeknumber, challengemode=True) self.widgets["challengeeNameLabel"].set_markup(player.getMarkup()) self.widgets["challengeeImage"].set_from_pixbuf(player.getIcon(size=32)) title = _("Challenge: ") + player.name self.widgets["challengeDialog"].set_title(title) self.widgets["challengeDialog"].present() def onChallengeDialogResponse (self, dialog, response): self.widgets["challengeDialog"].hide() if response is not 5: return True if self.widgets["challenge3Radio"].get_active(): self.__loadSeekEditor(3) elif self.widgets["challenge2Radio"].get_active(): self.__loadSeekEditor(2) else: self.__loadSeekEditor(1) min, incr, gametype, ratingrange, color, rated, manual = self.__getSeekEditorDialogValues() self.connection.om.challenge(self.challengee.name, gametype, min, incr, rated, color) def onSeekRadioConfigButtonClicked (self, configimage, seeknumber): self.__showSeekEditor(seeknumber) def onChallengeRadioConfigButtonClicked (self, configimage, seeknumber): self.__showSeekEditor(seeknumber, challengemode=True) def onEditSeekDialogResponse (self, dialog, response): self.widgets["editSeekDialog"].hide() if response != gtk.RESPONSE_OK: return self.__saveSeekEditor(self.seeknumber) self.__writeSavedSeeks(self.seeknumber) def __updateSeekEditor (self, seeknumber, challengemode=False): self.in_challenge_mode = challengemode self.seeknumber = seeknumber if not challengemode: self.widgets["strengthFrame"].set_sensitive(True) self.widgets["strengthFrame"].set_tooltip_text("") self.widgets["manualAcceptCheck"].set_sensitive(True) self.widgets["manualAcceptCheck"].set_tooltip_text("") else: self.widgets["strengthFrame"].set_sensitive(False) self.widgets["strengthFrame"].set_tooltip_text( _("This option is not applicable because you're challenging a player")) self.widgets["manualAcceptCheck"].set_sensitive(False) self.widgets["manualAcceptCheck"].set_tooltip_text( _("This option is not applicable because you're challenging a player")) self.widgets["chainAlignment"].show_all() self.__loadSeekEditor(seeknumber) self.widgets["seek%dRadio" % seeknumber].set_active(True) self.widgets["challenge%dRadio" % seeknumber].set_active(True) self.__updateYourRatingHBox() self.__updateRatingCenterInfoBox() self.__updateToleranceButton() self.__updateRatedGameCheck() self.onUntimedCheckToggled(self.widgets["untimedCheck"]) title = _("Edit Seek: ") + self.widgets["seek%dRadio" % seeknumber].get_label()[:-1] self.widgets["editSeekDialog"].set_title(title) def __showSeekEditor (self, seeknumber, challengemode=False): self.__updateSeekEditor(seeknumber, challengemode) self.widgets["editSeekDialog"].present() def onSeekSelectionChanged (self, selection): model, iter = selection.get_selected() a_seek_is_selected = False selection_is_challenge = False if iter != None: a_seek_is_selected = True gameno = model.get_value(iter, 0) if gameno.startswith("C"): selection_is_challenge = True self.widgets["acceptButton"].set_sensitive(a_seek_is_selected) self.widgets["declineButton"].set_sensitive(selection_is_challenge) #-------------------------------------------------------- Seek Editor @staticmethod def getRatingRangeDisplayText (rmin=0, rmax=9999): assert type(rmin) is type(int()) and rmin >= 0 and rmin <= 9999, rmin assert type(rmax) is type(int()) and rmax >= 0 and rmax <= 9999, rmax if rmin > 0: text = "%d" % rmin if rmax == 9999: text += "↑" else: text += "-%d" % rmax elif rmax != 9999: text = "%d↓" % rmax else: text = None return text def __writeSavedSeeks (self, seeknumber): """ Writes saved seek strings for both the Seek Panel and the Challenge Panel """ min, gain, gametype, ratingrange, color, rated, manual = \ self.__getSeekEditorDialogValues() self.savedSeekRadioTexts[seeknumber-1] = \ time_control_to_gametype(min, gain).display_text self.__writeSeekRadioLabels() seek = {} if gametype == GAME_TYPES["untimed"]: seek["time"] = gametype.display_text elif gain > 0: seek["time"] = _("%(minutes)d min + %(gain)d sec/move") % \ {'minutes' : min, 'gain' : gain} else: seek["time"] = _("%d min") % min if isinstance(gametype, VariantGameType): seek["variant"] = "%s" % gametype.display_text rrtext = self.getRatingRangeDisplayText(ratingrange[0], ratingrange[1]) if rrtext: seek["rating"] = rrtext if color == WHITE: seek["color"] = _("White") elif color == BLACK: seek["color"] = _("Black") if rated and gametype != GAME_TYPES["untimed"]: seek["rated"] = _("Rated") if manual: seek["manual"] = _("Manual") seek_ = [] challenge = [] challengee_is_guest = self.challengee and self.challengee.isGuest() for key in ("time", "variant", "rating", "color", "rated", "manual"): if key in seek: seek_.append(seek[key]) if key in ("time", "variant", "color") or \ (key == "rated" and not challengee_is_guest): challenge.append(seek[key]) seektext = ", ".join(seek_) challengetext = ", ".join(challenge) if seeknumber == 1: self.widgets["seek1RadioLabel"].set_text(seektext) self.widgets["challenge1RadioLabel"].set_text(challengetext) elif seeknumber == 2: self.widgets["seek2RadioLabel"].set_text(seektext) self.widgets["challenge2RadioLabel"].set_text(challengetext) else: self.widgets["seek3RadioLabel"].set_text(seektext) self.widgets["challenge3RadioLabel"].set_text(challengetext) def __loadSeekEditor (self, seeknumber): self.loading_seek_editor = True for widget in self.seekEditorWidgets: if widget in self.seekEditorWidgetGettersSetters: uistuff.loadDialogWidget(self.widgets[widget], widget, seeknumber, get_value_=self.seekEditorWidgetGettersSetters[widget][0], set_value_=self.seekEditorWidgetGettersSetters[widget][1], first_value=self.seekEditorWidgetDefaults[widget][seeknumber-1]) elif widget in self.seekEditorWidgetDefaults: uistuff.loadDialogWidget(self.widgets[widget], widget, seeknumber, first_value=self.seekEditorWidgetDefaults[widget][seeknumber-1]) else: uistuff.loadDialogWidget(self.widgets[widget], widget, seeknumber) self.lastdifference = conf.get("lastdifference-%d" % seeknumber, -1) self.loading_seek_editor = False def __saveSeekEditor (self, seeknumber): for widget in self.seekEditorWidgets: if widget in self.seekEditorWidgetGettersSetters: uistuff.saveDialogWidget(self.widgets[widget], widget, seeknumber, get_value_=self.seekEditorWidgetGettersSetters[widget][0]) else: uistuff.saveDialogWidget(self.widgets[widget], widget, seeknumber) conf.set("lastdifference-%d" % seeknumber, self.lastdifference) def __getSeekEditorDialogValues (self): if self.widgets["untimedCheck"].get_active(): min = 0 incr = 0 else: min = int(self.widgets["minutesSpin"].get_value()) incr = int(self.widgets["gainSpin"].get_value()) if self.widgets["strengthCheck"].get_active(): ratingrange = [0, 9999] else: center = int(self.widgets["ratingCenterSlider"].get_value()) * RATING_SLIDER_STEP tolerance = int(self.widgets["toleranceSlider"].get_value()) * RATING_SLIDER_STEP minrating = center - tolerance minrating = minrating > 0 and minrating or 0 maxrating = center + tolerance maxrating = maxrating >= 3000 and 9999 or maxrating ratingrange = [minrating, maxrating] if self.widgets["nocolorRadio"].get_active(): color = None elif self.widgets["whitecolorRadio"].get_active(): color = WHITE else: color = BLACK if self.widgets["noVariantRadio"].get_active() or \ self.widgets["untimedCheck"].get_active(): gametype = time_control_to_gametype(min, incr) else: variant_combo_getter = self.seekEditorWidgetGettersSetters["variantCombo"][0] variant = variant_combo_getter(self.widgets["variantCombo"]) gametype = VARIANT_GAME_TYPES[variant] rated = self.widgets["ratedGameCheck"].get_active() and \ not self.widgets["untimedCheck"].get_active() manual = self.widgets["manualAcceptCheck"].get_active() return min, incr, gametype, ratingrange, color, rated, manual def __writeSeekRadioLabels (self): gameTypes = { _("Untimed"): [0, 1], _("Standard"): [0, 1], _("Blitz"): [0, 1], _("Lightning"): [0, 1] } for i in range(3): gameTypes[self.savedSeekRadioTexts[i]][0] += 1 for i in range(3): if gameTypes[self.savedSeekRadioTexts[i]][0] > 1: labelText = "%s #%d:" % \ (self.savedSeekRadioTexts[i], gameTypes[self.savedSeekRadioTexts[i]][1]) self.widgets["seek%dRadio" % (i+1)].set_label(labelText) self.widgets["challenge%dRadio" % (i+1)].set_label(labelText) gameTypes[self.savedSeekRadioTexts[i]][1] += 1 else: self.widgets["seek%dRadio" % (i+1)].set_label(self.savedSeekRadioTexts[i]+":") self.widgets["challenge%dRadio" % (i+1)].set_label(self.savedSeekRadioTexts[i]+":") def __updateRatingRangeBox (self): center = int(self.widgets["ratingCenterSlider"].get_value()) * RATING_SLIDER_STEP tolerance = int(self.widgets["toleranceSlider"].get_value()) * RATING_SLIDER_STEP minRating = center - tolerance minRating = minRating > 0 and minRating or 0 maxRating = center + tolerance maxRating = maxRating >= 3000 and 9999 or maxRating self.widgets["ratingRangeMinLabel"].set_label("%d" % minRating) self.widgets["ratingRangeMaxLabel"].set_label("%d" % maxRating) for widgetName, rating in (("ratingRangeMinImage", minRating), ("ratingRangeMaxImage", maxRating)): pixbuf = FICSPlayer.getIconByRating(rating) self.widgets[widgetName].set_from_pixbuf(pixbuf) self.widgets["ratingRangeMinImage"].show() self.widgets["ratingRangeMinLabel"].show() self.widgets["dashLabel"].show() self.widgets["ratingRangeMaxImage"].show() self.widgets["ratingRangeMaxLabel"].show() if minRating == 0: self.widgets["ratingRangeMinImage"].hide() self.widgets["ratingRangeMinLabel"].hide() self.widgets["dashLabel"].hide() self.widgets["ratingRangeMaxLabel"].set_label("%d↓" % maxRating) if maxRating == 9999: self.widgets["ratingRangeMaxImage"].hide() self.widgets["ratingRangeMaxLabel"].hide() self.widgets["dashLabel"].hide() self.widgets["ratingRangeMinLabel"].set_label("%d↑" % minRating) if minRating == 0 and maxRating == 9999: self.widgets["ratingRangeMinLabel"].set_label(_("Any strength")) self.widgets["ratingRangeMinLabel"].show() def __getGameType (self): if self.widgets["untimedCheck"].get_active(): gametype = GAME_TYPES["untimed"] elif self.widgets["noVariantRadio"].get_active(): min = int(self.widgets["minutesSpin"].get_value()) gain = int(self.widgets["gainSpin"].get_value()) gametype = time_control_to_gametype(min, gain) else: variant_combo_getter = self.seekEditorWidgetGettersSetters["variantCombo"][0] variant = variant_combo_getter(self.widgets["variantCombo"]) gametype = VARIANT_GAME_TYPES[variant] return gametype def __updateYourRatingHBox (self): gametype = self.__getGameType() self.widgets["yourRatingNameLabel"].set_label("(" + gametype.display_text + ")") rating = self.__getRating(gametype.rating_type) if rating is None: self.widgets["yourRatingImage"].clear() self.widgets["yourRatingLabel"].set_label(_("Unrated")) return pixbuf = FICSPlayer.getIconByRating(rating) self.widgets["yourRatingImage"].set_from_pixbuf(pixbuf) self.widgets["yourRatingLabel"].set_label(str(rating)) center = int(self.widgets["ratingCenterSlider"].get_value()) * RATING_SLIDER_STEP rating = self.__clamp(rating) difference = rating - center if self.loading_seek_editor is False and self.chainbox.active and \ difference is not self.lastdifference: newcenter = rating - self.lastdifference self.widgets["ratingCenterSlider"].set_value(newcenter / RATING_SLIDER_STEP) else: self.lastdifference = difference def __clamp (self, rating): assert type(rating) is int mod = rating % RATING_SLIDER_STEP if mod > RATING_SLIDER_STEP / 2: return rating - mod + RATING_SLIDER_STEP else: return rating - mod def __updateRatedGameCheck (self): # on FICS, untimed games can't be rated, nor can games against a guest if not self.connection.isRegistred(): self.widgets["ratedGameCheck"].set_active(False) sensitive = False self.widgets["ratedGameCheck"].set_tooltip_text( _("You can't play rated games because you are logged in as a guest")) elif self.widgets["untimedCheck"].get_active() : sensitive = False self.widgets["ratedGameCheck"].set_tooltip_text( _("You can't play rated games because \"Untimed\" is checked, ") + _("and on FICS, untimed games can't be rated")) elif self.in_challenge_mode and self.challengee.isGuest(): sensitive = False self.widgets["ratedGameCheck"].set_tooltip_text( _("This option is not available because you're challenging a guest, ") + _("and guests can't play rated games")) else: sensitive = True self.widgets["ratedGameCheck"].set_tooltip_text("") self.widgets["ratedGameCheck"].set_sensitive(sensitive) def __initVariantCombo (self, combo): model = gtk.TreeStore(str) cellRenderer = gtk.CellRendererText() combo.clear() combo.pack_start(cellRenderer, True) combo.add_attribute(cellRenderer, 'text', 0) combo.set_model(model) groupNames = {VARIANTS_SHUFFLE: _("Shuffle"), VARIANTS_OTHER: _("Other")} ficsvariants = [v for k, v in variants.iteritems() if k in VARIANT_GAME_TYPES and v.board.variant not in UNSUPPORTED] groups = groupby(ficsvariants, attrgetter("variant_group")) pathToVariant = {} variantToPath = {} for i, (id, group) in enumerate(groups): iter = model.append(None, (groupNames[id],)) for variant in group: subiter = model.append(iter, (variant.name,)) path = model.get_path(subiter) pathToVariant[path] = variant.board.variant variantToPath[variant.board.variant] = path # this stops group names (eg "Shuffle") from being displayed in submenus def cellFunc (combo, cell, model, iter, data): isChildNode = not model.iter_has_child(iter) cell.set_property("sensitive", isChildNode) combo.set_cell_data_func(cellRenderer, cellFunc, None) def comboGetter (combo): path = model.get_path(combo.get_active_iter()) return pathToVariant[path] def comboSetter (combo, variant): assert variant in VARIANT_GAME_TYPES, \ "not a supported FICS variant: \"%s\"" % str(variant) combo.set_active_iter(model.get_iter(variantToPath[variant])) return comboGetter, comboSetter def __getRating (self, gametype): if self.finger is None: return None try: ratingobj = self.finger.getRating(type=gametype) rating = int(ratingobj.elo) except KeyError: # the user doesn't have a rating for this game type rating = None return rating def onFinger (self, fm, finger): if not finger.getName() == self.connection.getUsername(): return self.finger = finger numfingers = conf.get("numberOfFingers", 0) + 1 conf.set("numberOfFingers", numfingers) if conf.get("numberOfTimesLoggedInAsRegisteredUser", 0) is 1 and numfingers is 1: standard = self.__getRating(TYPE_STANDARD) blitz = self.__getRating(TYPE_BLITZ) lightning = self.__getRating(TYPE_LIGHTNING) if standard is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][0] = standard / RATING_SLIDER_STEP elif blitz is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][0] = blitz / RATING_SLIDER_STEP if blitz is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][1] = blitz / RATING_SLIDER_STEP if lightning is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][2] = lightning / RATING_SLIDER_STEP elif blitz is not None: self.seekEditorWidgetDefaults["ratingCenterSlider"][2] = blitz / RATING_SLIDER_STEP for i in range(1,4): self.__loadSeekEditor(i) self.__updateSeekEditor(i) self.__saveSeekEditor(i) self.__writeSavedSeeks(i) self.__updateYourRatingHBox() def onTimeSpinChanged (self, spin): minutes = self.widgets["minutesSpin"].get_value_as_int() gain = self.widgets["gainSpin"].get_value_as_int() name = time_control_to_gametype(minutes, gain).display_text self.widgets["timeControlNameLabel"].set_label("%s" % name) self.__updateYourRatingHBox() def onUntimedCheckToggled (self, check): is_untimed_game = check.get_active() self.widgets["timeControlConfigVBox"].set_sensitive(not is_untimed_game) # on FICS, untimed games can't be rated and can't be a chess variant self.widgets["variantFrame"].set_sensitive(not is_untimed_game) if is_untimed_game: self.widgets["variantFrame"].set_tooltip_text( _("You can't select a variant because \"Untimed\" is checked, ") + _("and on FICS, untimed games have to be normal chess rules")) else: self.widgets["variantFrame"].set_tooltip_text("") self.__updateRatedGameCheck() # sets sensitivity of widgets["ratedGameCheck"] self.__updateYourRatingHBox() def onStrengthCheckToggled (self, check): strengthsensitive = not check.get_active() self.widgets["strengthConfigVBox"].set_sensitive(strengthsensitive) def onRatingCenterSliderChanged (self, slider): center = int(self.widgets["ratingCenterSlider"].get_value()) * RATING_SLIDER_STEP pixbuf = FICSPlayer.getIconByRating(center) self.widgets["ratingCenterLabel"].set_label("%d" % (center)) self.widgets["ratingCenterImage"].set_from_pixbuf(pixbuf) self.__updateRatingRangeBox() rating = self.__getRating(self.__getGameType().rating_type) if rating is None: return rating = self.__clamp(rating) self.lastdifference = rating - center def __updateRatingCenterInfoBox (self): if self.widgets["toleranceHBox"].get_property("visible") == True: self.widgets["ratingCenterAlignment"].set_property("top-padding", 4) self.widgets["ratingCenterInfoHBox"].show() else: self.widgets["ratingCenterAlignment"].set_property("top-padding", 0) self.widgets["ratingCenterInfoHBox"].hide() def __updateToleranceButton (self): if self.widgets["toleranceHBox"].get_property("visible") == True: self.widgets["toleranceButton"].set_property("label", _("Hide")) else: self.widgets["toleranceButton"].set_property("label", _("Change Tolerance")) def onToleranceButtonClicked (self, button): if self.widgets["toleranceHBox"].get_property("visible") == True: self.widgets["toleranceHBox"].hide() else: self.widgets["toleranceHBox"].show() self.__updateToleranceButton() self.__updateRatingCenterInfoBox() def onToleranceSliderChanged (self, slider): tolerance = int(self.widgets["toleranceSlider"].get_value()) * RATING_SLIDER_STEP self.widgets["toleranceLabel"].set_label("±%d" % tolerance) self.__updateRatingRangeBox() def onColorRadioChanged (self, radio): if self.widgets["nocolorRadio"].get_active(): self.widgets["colorImage"].set_from_file(addDataPrefix("glade/piece-unknown.png")) self.widgets["colorImage"].set_sensitive(False) elif self.widgets["whitecolorRadio"].get_active(): self.widgets["colorImage"].set_from_file(addDataPrefix("glade/piece-white.png")) self.widgets["colorImage"].set_sensitive(True) elif self.widgets["blackcolorRadio"].get_active(): self.widgets["colorImage"].set_from_file(addDataPrefix("glade/piece-black.png")) self.widgets["colorImage"].set_sensitive(True) def onVariantRadioChanged (self, radio): self.__updateYourRatingHBox() def onVariantComboChanged (self, combo): self.widgets["variantRadio"].set_active(True) self.__updateYourRatingHBox() min, gain, gametype, ratingrange, color, rated, manual = \ self.__getSeekEditorDialogValues() self.widgets["variantCombo"].set_tooltip_text( variants[gametype.variant_type].__desc__) ############################################################################ # Relay server messages which aren't part of a game to the user # ############################################################################ class Messages (Section): def __init__ (self, widgets, connection, infobar): self.connection = connection self.infobar = infobar self.messages = [] self.connection.bm.connect("tooManySeeks", self.tooManySeeks) self.connection.bm.connect("matchDeclined", self.matchDeclined) self.connection.bm.connect("playGameCreated", self.onPlayGameCreated) @glock.glocked def tooManySeeks (self, bm): label = gtk.Label(_("You may only have 3 outstanding seeks at the same time. If you want to add a new seek you must clear your currently active seeks. Clear your seeks?")) label.set_width_chars(70) label.set_line_wrap(True) def response_cb (infobar, response): if response == gtk.RESPONSE_YES: self.connection.client.run_command("unseek") message = InfoBarMessage(gtk.MESSAGE_QUESTION, label, response_cb) message.add_button(InfoBarMessageButton(gtk.STOCK_YES, gtk.RESPONSE_YES)) message.add_button(InfoBarMessageButton(gtk.STOCK_NO, gtk.RESPONSE_NO)) self.messages.append(message) self.infobar.push_message(message) @glock.glocked def onPlayGameCreated (self, bm, board): for message in self.messages: message.dismiss() self.messages = [] return False @glock.glocked def matchDeclined (self, bm, player): text = _(" has declined your offer for a match.") content = self.get_infobarmessage_content(player, text) message = InfoBarMessage(gtk.MESSAGE_INFO, content, None) message.add_button(InfoBarMessageButton(gtk.STOCK_CLOSE, gtk.RESPONSE_CANCEL)) self.messages.append(message) self.infobar.push_message(message) ############################################################################ # Initialize connects for createBoard and createObsBoard # ############################################################################ class CreatedBoards (Section): def __init__ (self, widgets, connection): self.connection = connection self.connection.bm.connect("playGameCreated", self.onPlayGameCreated) self.connection.bm.connect("obsGameCreated", self.onObserveGameCreated) def onPlayGameCreated (self, bm, ficsgame): log.debug("ICLounge.onPlayGameCreated: %s\n" % ficsgame) if ficsgame.board.wms == 0 and ficsgame.board.bms == 0: timemodel = None else: timemodel = TimeModel (ficsgame.board.wms/1000., ficsgame.inc, bsecs=ficsgame.board.bms/1000., minutes=ficsgame.min) gamemodel = ICGameModel (self.connection, ficsgame, timemodel) gamemodel.connect("game_started", lambda gamemodel: self.connection.bm.onGameModelStarted(ficsgame.gameno)) wplayer, bplayer = ficsgame.wplayer, ficsgame.bplayer # We start if wplayer.name.lower() == self.connection.getUsername().lower(): player0tup = (LOCAL, Human, (WHITE, wplayer.long_name(), wplayer.name, wplayer.getRatingForCurrentGame()), wplayer.long_name()) player1tup = (REMOTE, ICPlayer, (gamemodel, bplayer.name, ficsgame.gameno, BLACK, bplayer.long_name(), bplayer.getRatingForCurrentGame()), bplayer.long_name()) # She starts else: player1tup = (LOCAL, Human, (BLACK, bplayer.long_name(), bplayer.name, bplayer.getRatingForCurrentGame()), bplayer.long_name()) # If the remote player is WHITE, we need to init her right now, so # we can catch fast made moves. Sorry lazy loading. player0 = ICPlayer(gamemodel, wplayer.name, ficsgame.gameno, WHITE, wplayer.long_name(), wplayer.getRatingForCurrentGame()) player0tup = (REMOTE, lambda:player0, (), wplayer.long_name()) if not ficsgame.board.fen: ionest.generalStart(gamemodel, player0tup, player1tup) else: ionest.generalStart(gamemodel, player0tup, player1tup, (StringIO(ficsgame.board.fen), fen, 0, -1)) def onObserveGameCreated (self, bm, ficsgame): log.debug("ICLounge.onObserveGameCreated: %s\n" % ficsgame) if ficsgame.board.wms == 0 and ficsgame.board.bms == 0: timemodel = None else: timemodel = TimeModel (ficsgame.board.wms/1000., ficsgame.inc, bsecs=ficsgame.board.bms/1000., minutes=ficsgame.min) gamemodel = ICGameModel (self.connection, ficsgame, timemodel) gamemodel.connect("game_started", lambda gamemodel: self.connection.bm.onGameModelStarted(ficsgame.gameno)) # The players need to start listening for moves IN this method if they # want to be noticed of all moves the FICS server sends us from now on wplayer, bplayer = ficsgame.wplayer, ficsgame.bplayer player0 = ICPlayer(gamemodel, wplayer.name, ficsgame.gameno, WHITE, wplayer.long_name(), wplayer.getRatingForCurrentGame()) player1 = ICPlayer(gamemodel, bplayer.name, ficsgame.gameno, BLACK, bplayer.long_name(), bplayer.getRatingForCurrentGame()) player0tup = (REMOTE, lambda:player0, (), wplayer.long_name()) player1tup = (REMOTE, lambda:player1, (), bplayer.long_name()) ionest.generalStart(gamemodel, player0tup, player1tup, (StringIO(ficsgame.board.pgn), pgn, 0, -1)) pychess-0.12beta3/lib/pychess/ic/TimeSeal.py0000755000175000017470000001305212161415524017770 0ustar tamasusersimport errno import socket import telnetlib import re import random import time import platform import getpass from pychess.System.Log import log ENCODE = [ord(i) for i in "Timestamp (FICS) v1.0 - programmed by Henrik Gram."] ENCODELEN = len(ENCODE) G_RESPONSE = '\x029' FILLER = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" IAC_WONT_ECHO = ''.join([telnetlib.IAC, telnetlib.WONT, telnetlib.ECHO]) class TimeSeal: BUFFER_SIZE = 4096 sensitive = False def __init__(self): self.name = "" def open (self, host, port): if hasattr(self, "closed") and self.closed: return self.port = port self.host = host self.name = host self.FatICS = False self.connected = False self.closed = False self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.stateinfo = None self.sock.settimeout(10) try: self.sock.connect((host, port)) except socket.error, e: if e.errno != errno.EINPROGRESS: raise self.sock.settimeout(None) self.buf = '' self.writebuf = '' print >> self, self.get_init_string() self.cook_some() def close (self): self.closed = True if hasattr(self, "sock"): self.sock.close() def encode(self, inbuf, timestamp = None): assert inbuf == "" or inbuf[-1] != "\n" if not timestamp: timestamp = int(time.time()*1000 % 1e7) enc = inbuf + '\x18%d\x19' % timestamp padding = 12 - len(enc)%12 filler = random.sample(FILLER, padding) enc += "".join(filler) buf = [ord(i) for i in enc] for i in range(0, len(buf), 12): buf[i + 11], buf[i] = buf[i], buf[i + 11] buf[i + 9], buf[i + 2] = buf[i + 2], buf[i + 9] buf[i + 7], buf[i + 4] = buf[i + 4], buf[i + 7] encode_offset = random.randrange(ENCODELEN) for i in xrange(len(buf)): buf[i] |= 0x80 j = (i+encode_offset) % ENCODELEN buf[i] = chr((buf[i] ^ ENCODE[j]) - 32) buf.append( chr(0x80 | encode_offset)) return ''.join(buf) def get_init_string(self): """ timeseal header: TIMESTAMP|bruce|Linux gruber 2.6.15-gentoo-r1 #9 PREEMPT Thu Feb 9 20:09:47 GMT 2006 i686 Intel(R) Celeron(R) CPU 2.00GHz GenuineIntel GNU/Linux| 93049 """ user = getpass.getuser() uname = ' '.join(list(platform.uname())) return "TIMESTAMP|%(user)s|%(uname)s|" % locals() def decode(self, buf, stateinfo = None): expected_table = "[G]\n\r" if not self.FatICS else "[G]\r\n" final_state = len(expected_table) g_count = 0 result = [] if stateinfo: state, lookahead = stateinfo else: state, lookahead = 0, [] lenb = len(buf) idx = 0 while idx < lenb: ch = buf[idx] expected = expected_table[state] if ch == expected: state += 1 if state == final_state: g_count += 1 lookahead = [] state = 0 else: lookahead.append(ch) idx += 1 elif state == 0: result.append(ch) idx += 1 else: result.extend(lookahead) lookahead = [] state = 0 return ''.join(result), g_count, (state, lookahead) def write(self, str): self.writebuf += str if "\n" not in self.writebuf: return if self.closed: return i = self.writebuf.rfind("\n") str = self.writebuf[:i] self.writebuf = self.writebuf[i+1:] logstr = "*"*len(str) if self.sensitive else str log.info(logstr+"\n", (self.name, "raw")) str = self.encode(str) self.sock.send(str+"\n") def readline(self): return self.readuntil("\n") def readuntil(self, until): while True: i = self.buf.find(until) if i >= 0: stuff = self.buf[:i+len(until)] self.buf = self.buf[i+len(until):] return stuff self.cook_some() def cook_some (self): recv = self.sock.recv(self.BUFFER_SIZE) if len(recv) == 0: return if not self.connected: log.debug(recv, (self.name, "raw")) self.buf += recv if "FatICS" in self.buf: self.FatICS = True elif "Starting FICS session" in self.buf: self.connected = True self.buf = self.buf.replace(IAC_WONT_ECHO, '') else: recv, g_count, self.stateinfo = self.decode(recv, self.stateinfo) recv = recv.replace("\r","") log.debug(recv, (self.name, "raw")) for i in range(g_count): print >> self, G_RESPONSE self.buf += recv def read_until (self, *untils): while True: for i, until in enumerate(untils): start = self.buf.find(until) if start >= 0: self.buf = self.buf[:start] return i self.cook_some() pychess-0.12beta3/lib/pychess/ic/FICSConnection.py0000755000175000017470000002657412174557661021063 0ustar tamasusersimport re import socket import time import threading from gobject import GObject, SIGNAL_RUN_FIRST import pychess from pychess.System.Log import log from pychess.System.ThreadPool import PooledThread from pychess.Utils.const import * from managers.SeekManager import SeekManager from managers.FingerManager import FingerManager from managers.NewsManager import NewsManager from managers.BoardManager import BoardManager from managers.OfferManager import OfferManager from managers.ChatManager import ChatManager from managers.ConsoleManager import ConsoleManager from managers.HelperManager import HelperManager from managers.ListAndVarManager import ListAndVarManager from managers.AutoLogOutManager import AutoLogOutManager from managers.ErrorManager import ErrorManager from managers.AdjournManager import AdjournManager from FICSObjects import FICSPlayers, FICSGames from TimeSeal import TimeSeal from VerboseTelnet import LinePrediction from VerboseTelnet import ManyLinesPrediction from VerboseTelnet import FromPlusPrediction from VerboseTelnet import FromToPrediction from VerboseTelnet import PredictionsTelnet from VerboseTelnet import NLinesPrediction class LogOnError (StandardError): pass class Connection (GObject, PooledThread): __gsignals__ = { 'connecting': (SIGNAL_RUN_FIRST, None, ()), 'connectingMsg': (SIGNAL_RUN_FIRST, None, (str,)), 'connected': (SIGNAL_RUN_FIRST, None, ()), 'disconnected': (SIGNAL_RUN_FIRST, None, ()), 'error': (SIGNAL_RUN_FIRST, None, (object,)), } def __init__ (self, host, ports, username, password): GObject.__init__(self) self.host = host self.ports = ports self.username = username self.password = password self.connected = False self.connecting = False self.predictions = set() self.predictionsDict = {} self.reply_cmd_dict = {} # Are we connected to FatICS ? self.FatICS = False def expect (self, prediction): self.predictions.add(prediction) self.predictionsDict[prediction.callback] = prediction if hasattr(prediction.callback, "BLKCMD"): self.reply_cmd_dict[prediction.callback.BLKCMD] = prediction def unexpect (self, callback): self.predictions.remove(self.predictionsDict.pop(callback)) if hasattr(callback, "BLKCMD"): self.reply_cmd_dict.pop(callback.BLKCMD) def expect_line (self, callback, regexp): self.expect(LinePrediction(callback, regexp)) def expect_many_lines (self, callback, regexp): self.expect(ManyLinesPrediction(callback, regexp)) def expect_n_lines (self, callback, *regexps): self.expect(NLinesPrediction(callback, *regexps)) def expect_fromplus (self, callback, regexp0, regexp1): self.expect(FromPlusPrediction(callback, regexp0, regexp1)) def expect_fromto (self, callback, regexp0, regexp1): self.expect(FromToPrediction(callback, regexp0, regexp1)) def cancel (self): raise NotImplementedError() def close (self): raise NotImplementedError() def getUsername (self): return self.username def isRegistred (self): return self.password def isConnected (self): return self.connected def isConnecting (self): return self.connecting EOF = _("The connection was broken - got \"end of file\" message") NOTREG = _("'%s' is not a registered name") BADPAS = _("The entered password was invalid.\n" + \ "If you have forgot your password, go to http://www.freechess.org/cgi-bin/Utilities/requestPassword.cgi to request a new one over email.") class FICSConnection (Connection): def __init__ (self, host, ports, username="guest", password="", conn=None): Connection.__init__(self, host, ports, username, password) self.conn = conn self.registred = None if self.conn is None: self.players = FICSPlayers(self) self.games = FICSGames(self) def _connect (self): self.connecting = True self.emit("connecting") try: self.client = TimeSeal() self.emit('connectingMsg', _("Connecting to server")) for i, port in enumerate(self.ports): log.debug("Trying port %d\n" % port, (self.host, "raw")) try: self.client.open(self.host, port) except socket.error, e: log.debug("Failed to open port %d %s\n" % (port, e), (self.host, "raw")) if i+1 == len(self.ports): raise else: continue else: break self.client.read_until("login: ") self.emit('connectingMsg', _("Logging on to server")) if self.username and self.username != "guest": print >> self.client, self.username got = self.client.read_until("password:", "enter the server as", "Try again.") if got == 0: self.client.sensitive = True print >> self.client, self.password self.client.sensitive = False self.registred = True # No such name elif got == 1: raise LogOnError, NOTREG % self.username # Bad name elif got == 2: raise LogOnError, NOTREG % self.username else: print >> self.client, "guest" self.client.read_until("Press return") print >> self.client self.registred = False while True: line = self.client.readline() if "Invalid password" in line: raise LogOnError, BADPAS match = re.search("\*\*\*\* Starting FICS session as "+ "([A-Za-z]+)(?:\([A-Z*]+\))* \*\*\*\*", line) if match: self.username = match.groups()[0] break self.FatICS = self.client.FatICS self.client.name = self.username self.client.readuntil("ics%") self.emit('connectingMsg', _("Setting up environment")) self.client = PredictionsTelnet(self.client, self.predictions, self.reply_cmd_dict) self.client.setLinePrefix("fics%") self.client.run_command("iset block 1") self.client.setBlockModeOn() self.client.run_command("iset defprompt 1") # The helper just wants only player and game notifications if self.conn: # set open 1 is a requirement for availinfo notifications self.client.run_command("set open 1") self.client.run_command("set shout 0") self.client.run_command("set cshout 0") self.client.run_command("set seek 0") self.client.run_command("set tell 0") self.client.run_command("set chanoff 1") self.client.run_command("set gin 1") self.client.run_command("set availinfo 1") self.client.run_command("iset allresults 1") # New ivar pin # http://www.freechess.org/Help/HelpFiles/new_features.html self.client.run_command("iset pin 1") self.hm = HelperManager(self, self.conn) else: # Important: As the other managers use ListAndVarManager, we need it # to be instantiated first. We might decide that the purpose of this # manager is different - used by different parts of the code - so it # should be implemented into the FICSConnection somehow. self.lvm = ListAndVarManager(self) while not self.lvm.isReady(): self.client.handleSomeText() self.lvm.setVariable("interface", NAME+" "+pychess.VERSION) # FIXME: Some managers use each other to avoid regexp collapse. To # avoid having to init the in a specific order, connect calls should # be moved to a "start" function, so all managers would be in # the connection object when they are called self.em = ErrorManager(self) self.glm = SeekManager(self) self.bm = BoardManager(self) self.fm = FingerManager(self) self.nm = NewsManager(self) self.om = OfferManager(self) self.cm = ChatManager(self) self.alm = AutoLogOutManager(self) self.adm = AdjournManager(self) self.com = ConsoleManager(self) self.bm.start() self.players.start() self.games.start() # disable setting iveriables from console self.lvm.setVariable("lock", 1) self.connecting = False self.connected = True if self.conn is None: self.emit("connected") def keep_alive(): while(True): self.client.run_command("date") time.sleep(59*60) keep_alive_thread = threading.Thread(target = keep_alive) keep_alive_thread.daemon = True keep_alive_thread.start() finally: self.connecting = False def run (self): try: try: if not self.isConnected(): self._connect() while self.isConnected(): self.client.handleSomeText() except Exception, e: if self.connected: self.connected = False for errortype in (IOError, LogOnError, EOFError, socket.error, socket.gaierror, socket.herror): if isinstance(e, errortype): self.emit("error", e) break else: raise finally: self.emit("disconnected") def close (self): if self.isConnected(): if self.conn is None: self.lvm.stop() try: self.client.run_command("quit") except Exception, e: for errortype in (IOError, LogOnError, EOFError, socket.error, socket.gaierror, socket.herror): if isinstance(e, errortype): break else: raise e self.connected = False self.client.close() def isRegistred (self): assert self.registred != None return self.registred def getUsername (self): '''Return the username of the logged in player. Useful for determining if player is the logged in player.''' assert self.username != None return self.username pychess-0.12beta3/lib/pychess/ic/ICLogon.py0000755000175000017470000001725412174775065017604 0ustar tamasusersfrom FICSConnection import FICSConnection, LogOnError from ICLounge import ICLounge from pychess.System import glock, uistuff from pychess.Utils.const import * import gtk import gobject import re import socket import webbrowser host = None port = None dialog = None def run(): global dialog if not dialog: dialog = ICLogon() dialog.show() elif dialog.lounge: dialog.lounge.present() else: dialog.present() class AutoLogoutException (Exception): pass class ICLogon: def __init__ (self): self.widgets = uistuff.GladeWidgets("fics_logon.glade") uistuff.keepWindowSize("fics_logon", self.widgets["fics_logon"], defaultPosition=uistuff.POSITION_GOLDEN) self.widgets["fics_logon"].connect('key-press-event', lambda w, e: e.keyval == gtk.keysyms.Escape and w.hide()) def on_logOnAsGuest_toggled (check): self.widgets["nameLabel"].set_sensitive(not check.get_active()) self.widgets["nameEntry"].set_sensitive(not check.get_active()) self.widgets["passwordLabel"].set_sensitive(not check.get_active()) self.widgets["passEntry"].set_sensitive(not check.get_active()) self.widgets["logOnAsGuest"].connect("toggled", on_logOnAsGuest_toggled) uistuff.keep(self.widgets["logOnAsGuest"], "logOnAsGuest") uistuff.keep(self.widgets["nameEntry"], "usernameEntry") uistuff.keep(self.widgets["passEntry"], "passwordEntry") self.infobar = gtk.InfoBar() self.infobar.set_message_type(gtk.MESSAGE_WARNING) self.widgets["messagePanelHBox"].pack_start(self.infobar, expand=False, fill=False) self.widgets["cancelButton"].connect("clicked", self.onCancel, True) self.widgets["stopButton"].connect("clicked", self.onCancel, False) self.widgets["fics_logon"].connect("delete-event", self.onClose) self.widgets["createNewButton"].connect("clicked", self.onCreateNew) self.widgets["connectButton"].connect("clicked", self.onConnectClicked) self.connection = None self.lounge = None def show (self): self.widgets["fics_logon"].show() def present (self): self.widgets["fics_logon"].present() def hide (self): self.widgets["fics_logon"].hide() def showConnecting (self): self.widgets["progressbarBox"].show() self.widgets["mainbox"].set_sensitive(False) self.widgets["connectButton"].hide() self.widgets["stopButton"].show() def pulse (): self.widgets["progressbar"].pulse() return not self.connection.isConnected() self.pulser = gobject.timeout_add(30, pulse) def showNormal (self): self.widgets["mainbox"].set_sensitive(True) self.widgets["connectButton"].show() self.widgets["fics_logon"].set_default(self.widgets["connectButton"]) self.widgets["stopButton"].hide() self.widgets["progressbarBox"].hide() self.widgets["progressbar"].set_text("") gobject.source_remove(self.pulser) def showMessage (self, connection, message): self.widgets["progressbar"].set_text(message) def onCancel (self, widget, hide): if self.connection and self.connection.isConnecting(): self.connection.close() self.connection = None self.showNormal() if hide: self.widgets["fics_logon"].hide() return True def onClose (self, widget, event): self.onCancel(widget, True) return True def onCreateNew (self, button): webbrowser.open("http://www.freechess.org/Register/index.html") def showError (self, connection, error): # Don't bring up errors, if we have pressed "stop" if self.connection != connection: return True text = str(error) if isinstance (error, IOError): title = _("Connection Error") elif isinstance (error, LogOnError): title =_("Log on Error") elif isinstance (error, EOFError): title = _("Connection was closed") elif isinstance (error, socket.error): title = _("Connection Error") text = ", ".join(map(str,error.args)) elif isinstance (error, socket.gaierror) or \ isinstance (error, socket.herror): title = _("Address Error") text = ", ".join(map(str,error.args)) elif isinstance (error, AutoLogoutException): title = _("Auto-logout") text = _("You have been logged out because you were idle more than 60 minutes") else: title = str(error.__class__) self.showNormal() content_area = self.infobar.get_content_area() for widget in content_area: content_area.remove(widget) content = gtk.HBox() image = gtk.Image() image.set_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_DIALOG) content.pack_start(image, expand=False, fill=False) vbox = gtk.VBox() label = gtk.Label() label.props.xalign = 0 label.props.justify = gtk.JUSTIFY_LEFT label.set_markup("%s" % title) vbox.pack_start(label, expand=True, fill=False) for line in str(text).split("\n"): label = gtk.Label() label.set_size_request(476, -1) label.props.selectable = True label.props.wrap = True label.props.xalign = 0 label.props.justify = gtk.JUSTIFY_LEFT label.set_text(line) vbox.pack_start(label, expand=True, fill=False) content.pack_start(vbox, expand=False, fill=False, padding=7) content_area.add(content) self.widgets["messagePanel"].show_all() def onConnected (self, connection): self.lounge = ICLounge(connection, self.helperconn, self.host) self.hide() self.lounge.show() self.lounge.connect("logout", lambda iclounge: self.onDisconnected(None)) glock.glock_connect(self.lounge, "autoLogout", lambda iclounge: self.onAutologout(None)) self.showNormal() self.widgets["messagePanel"].hide() def onDisconnected (self, connection): global dialog dialog = None def onAutologout (self, alm): self.show() self.lounge = None self.connection = None self.showError(None, AutoLogoutException()) def onConnectClicked (self, button): if self.widgets["logOnAsGuest"].get_active(): username = "guest" password = "" else: username = self.widgets["nameEntry"].get_text() password = self.widgets["passEntry"].get_text() if port: ports = (port,) else: ports = self.widgets["portsEntry"].get_text() ports = map(int, re.findall("\d+", ports)) if not 5000 in ports: ports.append(5000) if not 23 in ports: ports.append(23) self.showConnecting() self.host = host if host is not None else "freechess.org" self.connection = FICSConnection(self.host, ports, username, password) self.helperconn = FICSConnection(self.host, ports, "guest", "", conn=self.connection) self.helperconn.start() glock.glock_connect(self.connection, "connected", self.onConnected) glock.glock_connect(self.connection, "error", self.showError) glock.glock_connect(self.connection, "connectingMsg", self.showMessage) self.connection.start() pychess-0.12beta3/lib/pychess/ic/block_codes.py0000644000175000017470000001037712161415524020540 0ustar tamasusers# -*- coding: utf-8 -*- """ Internal command codes used in FICS block mode (see "help block_codes" and "help iv_block"). Used mostly by internal library functions. BLOCK_ variables are message boundary markers. BLKCMD_ variables are command codes. """ BLOCK_START = chr(21) # \U BLOCK_SEPARATOR = chr(22) # \V BLOCK_END = chr(23) # \W BLOCK_POSE_START = chr(24) # \X BLOCK_POSE_END = chr(25) # \Y BLKCMD_NULL = 0 BLKCMD_GAME_MOVE = 1 BLKCMD_ABORT = 10 BLKCMD_ACCEPT = 11 BLKCMD_ADDLIST = 12 BLKCMD_ADJOURN = 13 BLKCMD_ALLOBSERVERS = 14 BLKCMD_ASSESS = 15 BLKCMD_BACKWARD = 16 BLKCMD_BELL = 17 BLKCMD_BEST = 18 BLKCMD_BNAME = 19 BLKCMD_BOARDS = 20 BLKCMD_BSETUP = 21 BLKCMD_BUGWHO = 22 BLKCMD_CBEST = 23 BLKCMD_CLEARMESSAGES = 24 BLKCMD_CLRSQUARE = 25 BLKCMD_CONVERT_BCF = 26 BLKCMD_CONVERT_ELO = 27 BLKCMD_CONVERT_USCF = 28 BLKCMD_COPYGAME = 29 BLKCMD_CRANK = 30 BLKCMD_CSHOUT = 31 BLKCMD_DATE = 32 BLKCMD_DECLINE = 33 BLKCMD_DRAW = 34 BLKCMD_ECO = 35 BLKCMD_EXAMINE = 36 BLKCMD_FINGER = 37 BLKCMD_FLAG = 38 BLKCMD_FLIP = 39 BLKCMD_FMESSAGE = 40 BLKCMD_FOLLOW = 41 BLKCMD_FORWARD = 42 BLKCMD_GAMES = 43 BLKCMD_GETGI = 44 BLKCMD_GETPI = 45 BLKCMD_GINFO = 46 BLKCMD_GOBOARD = 47 BLKCMD_HANDLES = 48 BLKCMD_HBEST = 49 BLKCMD_HELP = 50 BLKCMD_HISTORY = 51 BLKCMD_HRANK = 52 BLKCMD_INCHANNEL = 53 BLKCMD_INDEX = 54 BLKCMD_INFO = 55 BLKCMD_ISET = 56 BLKCMD_IT = 57 BLKCMD_IVARIABLES = 58 BLKCMD_JKILL = 59 BLKCMD_JOURNAL = 60 BLKCMD_JSAVE = 61 BLKCMD_KIBITZ = 62 BLKCMD_LIMITS = 63 BLKCMD_LINE = 64 # Not on FICS BLKCMD_LLOGONS = 65 BLKCMD_LOGONS = 66 BLKCMD_MAILHELP = 67 BLKCMD_MAILMESS = 68 BLKCMD_MAILMOVES = 69 BLKCMD_MAILOLDMOVES = 70 BLKCMD_MAILSOURCE = 71 BLKCMD_MAILSTORED = 72 BLKCMD_MATCH = 73 BLKCMD_MESSAGES = 74 BLKCMD_MEXAMINE = 75 BLKCMD_MORETIME = 76 BLKCMD_MOVES = 77 BLKCMD_NEWS = 78 BLKCMD_NEXT = 79 BLKCMD_OBSERVE = 80 BLKCMD_OLDMOVES = 81 BLKCMD_OLDSTORED = 82 BLKCMD_OPEN = 83 BLKCMD_PARTNER = 84 BLKCMD_PASSWORD = 85 BLKCMD_PAUSE = 86 BLKCMD_PENDING = 87 BLKCMD_PFOLLOW = 88 BLKCMD_POBSERVE = 89 BLKCMD_PREFRESH = 90 BLKCMD_PRIMARY = 91 BLKCMD_PROMOTE = 92 BLKCMD_PSTAT = 93 BLKCMD_PTELL = 94 BLKCMD_PTIME = 95 BLKCMD_QTELL = 96 BLKCMD_QUIT = 97 BLKCMD_RANK = 98 BLKCMD_RCOPYGAME = 99 BLKCMD_RFOLLOW = 100 BLKCMD_REFRESH = 101 BLKCMD_REMATCH = 102 BLKCMD_RESIGN = 103 BLKCMD_RESUME = 104 BLKCMD_REVERT = 105 BLKCMD_ROBSERVE = 106 BLKCMD_SAY = 107 BLKCMD_SERVERS = 108 BLKCMD_SET = 109 BLKCMD_SHOUT = 110 BLKCMD_SHOWLIST = 111 BLKCMD_SIMABORT = 112 BLKCMD_SIMALLABORT = 113 BLKCMD_SIMADJOURN = 114 BLKCMD_SIMALLADJOURN = 115 BLKCMD_SIMGAMES = 116 BLKCMD_SIMMATCH = 117 BLKCMD_SIMNEXT = 118 BLKCMD_SIMOBSERVE = 119 BLKCMD_SIMOPEN = 120 BLKCMD_SIMPASS = 121 BLKCMD_SIMPREV = 122 BLKCMD_SMOVES = 123 BLKCMD_SMPOSITION = 124 BLKCMD_SPOSITION = 125 BLKCMD_STATISTICS = 126 BLKCMD_STORED = 127 BLKCMD_STYLE = 128 BLKCMD_SWITCH = 130 BLKCMD_TAKEBACK = 131 BLKCMD_TELL = 132 BLKCMD_TIME = 133 BLKCMD_TOMOVE = 134 BLKCMD_TOURNSET = 135 BLKCMD_UNALIAS = 136 BLKCMD_UNEXAMINE = 137 BLKCMD_UNOBSERVE = 138 BLKCMD_UNPAUSE = 139 BLKCMD_UPTIME = 140 BLKCMD_USCF = 141 BLKCMD_USTAT = 142 BLKCMD_VARIABLES = 143 BLKCMD_WHENSHUT = 144 BLKCMD_WHISPER = 145 BLKCMD_WHO = 146 BLKCMD_WITHDRAW = 147 BLKCMD_WNAME = 148 BLKCMD_XKIBITZ = 149 BLKCMD_XTELL = 150 BLKCMD_XWHISPER = 151 BLKCMD_ZNOTIFY = 152 BLKCMD_REPLY = 153 # Not on FICS BLKCMD_SUMMON = 154 BLKCMD_SEEK = 155 BLKCMD_UNSEEK = 156 BLKCMD_SOUGHT = 157 BLKCMD_PLAY = 158 BLKCMD_ALIAS = 159 BLKCMD_NEWBIES = 160 BLKCMD_SR = 161 BLKCMD_CA = 162 BLKCMD_TM = 163 BLKCMD_GETGAME = 164 BLKCMD_CCNEWSE = 165 BLKCMD_CCNEWSF = 166 BLKCMD_CCNEWSI = 167 BLKCMD_CCNEWSP = 168 BLKCMD_CCNEWST = 169 BLKCMD_CSNEWSE = 170 BLKCMD_CSNEWSF = 171 BLKCMD_CSNEWSI = 172 BLKCMD_CSNEWSP = 173 BLKCMD_CSNEWST = 174 BLKCMD_CTNEWSE = 175 BLKCMD_CTNEWSF = 176 BLKCMD_CTNEWSI = 177 BLKCMD_CTNEWSP = 178 BLKCMD_CTNEWST = 179 BLKCMD_CNEWS = 180 BLKCMD_SNEWS = 181 BLKCMD_TNEWS = 182 BLKCMD_RMATCH = 183 BLKCMD_RSTAT = 184 BLKCMD_CRSTAT = 185 BLKCMD_HRSTAT = 186 BLKCMD_GSTAT = 187 # Note admin codes start from 300. BLKCMD_ERROR_BADCOMMAND = 512 BLKCMD_ERROR_BADPARAMS = 513 BLKCMD_ERROR_AMBIGUOUS = 514 BLKCMD_ERROR_RIGHTS = 515 BLKCMD_ERROR_OBSOLETE = 516 BLKCMD_ERROR_REMOVED = 517 BLKCMD_ERROR_NOTPLAYING = 518 BLKCMD_ERROR_NOSEQUENCE = 519 BLKCMD_ERROR_LENGTH = 520 LIMIT_BLKCMD_ERRORS=500 pychess-0.12beta3/lib/pychess/ic/__init__.py0000755000175000017470000001633512175204734020037 0ustar tamasusersfrom pychess import Variants from pychess.Utils.const import * # RatingType TYPE_BLITZ, TYPE_STANDARD, TYPE_LIGHTNING, TYPE_WILD, \ TYPE_BUGHOUSE, TYPE_CRAZYHOUSE, TYPE_SUICIDE, TYPE_LOSERS, TYPE_ATOMIC, \ TYPE_UNTIMED, TYPE_EXAMINED, TYPE_OTHER = range(12) class GameType (object): def __init__ (self, fics_name, short_fics_name, rating_type, display_text=None, variant_type=NORMALCHESS): self.fics_name = fics_name self.short_fics_name = short_fics_name self.rating_type = rating_type if display_text: self.display_text=display_text self.variant_type = variant_type @property def variant (self): return Variants.variants[self.variant_type] def __repr__ (self): s = "= 0 and gain >= 0 gainminutes = gain > 0 and (gain*60)-1 or 0 if minutes is 0: return GAME_TYPES["untimed"] elif (minutes*60) + gainminutes >= (15*60): return GAME_TYPES["standard"] elif (minutes*60) + gainminutes >= (3*60): return GAME_TYPES["blitz"] else: return GAME_TYPES["lightning"] TYPE_ADMINISTRATOR, TYPE_BLINDFOLD, TYPE_COMPUTER, \ TYPE_TEAM, TYPE_UNREGISTERED, TYPE_CHESS_ADVISOR, \ TYPE_SERVICE_REPRESENTATIVE, TYPE_TOURNAMENT_DIRECTOR, TYPE_MAMER_MANAGER, \ TYPE_GRAND_MASTER, TYPE_INTERNATIONAL_MASTER, TYPE_FIDE_MASTER, \ TYPE_WOMAN_GRAND_MASTER, TYPE_WOMAN_INTERNATIONAL_MASTER, TYPE_WOMAN_FIDE_MASTER,\ TYPE_DUMMY_ACCOUNT = range(16) TITLE_TYPE_DISPLAY_TEXTS = ( _("Administrator"), _("Blindfold Account"), _("Computer Account"), _("Team Account"), _("Unregistered User"), _("Chess Advisor"), _("Service Representative"), _("Tournament Director"), _("Mamer Manager"), _("Grand Master"), _("International Master"), _("FIDE Master"), _("Woman Grand Master"), _("Woman International Master"), _("Woman FIDE Master"), _("Dummy Account"), ) TITLE_TYPE_DISPLAY_TEXTS_SHORT = ( _("*"), _("B"), _("C"), _("T"), _("U"), _("CA"), _("SR"), _("TD"), _("TM"), _("GM"), _("IM"), _("FM"), _("WGM"), _("WIM"), _("WFM"), _("D") ) TITLES = { # From FICS 'help who' "*": TYPE_ADMINISTRATOR, "B": TYPE_BLINDFOLD, "C": TYPE_COMPUTER, "T": TYPE_TEAM, "U": TYPE_UNREGISTERED, "CA": TYPE_CHESS_ADVISOR, "SR": TYPE_SERVICE_REPRESENTATIVE, "TD": TYPE_TOURNAMENT_DIRECTOR, "TM": TYPE_MAMER_MANAGER, "GM": TYPE_GRAND_MASTER, "IM": TYPE_INTERNATIONAL_MASTER, "FM": TYPE_FIDE_MASTER, "WFM": TYPE_WOMAN_FIDE_MASTER, "WIM": TYPE_WOMAN_INTERNATIONAL_MASTER, "WGM": TYPE_WOMAN_GRAND_MASTER, "D": TYPE_DUMMY_ACCOUNT, } HEX_TO_TITLE = { 0x1 : TYPE_UNREGISTERED, 0x2 : TYPE_COMPUTER, 0x4 : TYPE_GRAND_MASTER, 0x8 : TYPE_INTERNATIONAL_MASTER, 0x10 : TYPE_FIDE_MASTER, 0x20 : TYPE_WOMAN_GRAND_MASTER, 0x40 : TYPE_WOMAN_INTERNATIONAL_MASTER, 0x80 : TYPE_WOMAN_FIDE_MASTER, } pychess-0.12beta3/lib/pychess/ic/managers/0000755000175000017470000000000012176727272017520 5ustar tamasuserspychess-0.12beta3/lib/pychess/ic/managers/ChatManager.py0000755000175000017470000003046712173202156022243 0ustar tamasusersfrom gobject import * import threading import re from math import ceil import time from pychess.System.Log import log titles = "(?:\([A-Z*]+\))*" names = "([A-Za-z]+)"+titles titlesC = re.compile(titles) namesC = re.compile(names) CHANNEL_SHOUT = "shout" CHANNEL_CSHOUT = "cshout" class ChatManager (GObject): __gsignals__ = { 'channelMessage' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, bool, bool, str, str)), 'kibitzMessage' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, str)), 'privateMessage' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, str, bool, str)), 'bughouseMessage' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, str)), 'announcement' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)), 'channelAdd' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)), 'channelRemove' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)), 'channelJoinError': (SIGNAL_RUN_FIRST, TYPE_NONE, (str, str)), 'channelLog' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, int, str, str)), 'toldChannel' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, int)), 'recievedChannels' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, object)), 'recievedNames' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, object)), } def __init__ (self, connection): GObject.__init__(self) self.connection = connection self.connection.expect_line (self.onPrivateMessage, "%s(\*)? (?:tells you|says): (.*)" % names) self.connection.expect_line (self.onAnnouncement, "\s*\*\*ANNOUNCEMENT\*\* (.*)") self.connection.expect_line (self.onChannelMessage, "%s(\*)?\((\d+)\): (.*)" % names) self.connection.expect_line (self.onShoutMessage, "%s(\*)? (c-)?shouts: (.*)" % names) self.connection.expect_line (self.onShoutMessage, "--> %s(\*)?:? (.*)" % names) self.connection.expect_fromto (self.onChannelList, "channels only for their designated topics.", "SPECIAL NOTE") self.connection.expect_line (lambda m: self.emit('channelAdd', m.groups()[0]), "\[(\d+)\] added to your channel list.") self.connection.expect_line (lambda m: self.emit('channelRemove', m.groups()[0]), "\[(\d+)\] removed to your channel list.") self.connection.expect_line (lambda m: self.emit('channelJoinError', *m.groups()), "Only (.+?) may join channel (\d+)\.") self.connection.expect_line (self.getNoChannelPlayers, "Channel (\d+) is empty\.") self.connection.expect_fromto (self.getChannelPlayers, "Channel (\d+)(?: \"(\w+)\")?: (.+)", "(\d+) player(?: is|s are) in channel \d+\.") self.connection.expect_fromto (self.gotPlayerChannels, "%s is in the following channels:" % names, "(?!(?:\d+\s+)+)") #self.connection.expect_line (self.toldChannel, # '\(told (\d+) players in channel (\d+) ".+"\)') #(told Chronatog) #Only chess advisers and admins may join channel 63. #Only (.+?) may sey send tells to channel (\d+). #Only admins may send tells to channel 0. #Only registered users may send tells to channels other than 4, 7 and 53. self.currentLogChannel = None self.connection.expect_line (self.onChannelLogStart, ":Channel (\d+|shout|c-shout) log for the last \d+ minutes:$") self.connection.expect_line (self.onChannelLogLine, ":\[(\d+):(\d+):(\d+)\] (?:(?:--> )?%s(?: shouts)?)\S* (.+)$" % names) self.connection.expect_line (self.onChannelLogBreak, ":Use \"tell chLog Next\" to print more.$") #TODO handling of this case is nessesary for console: #fics% tell 1 hi #You are not in channel 1, auto-adding you if possible. # Setting 'Lang' is a workaround for # http://code.google.com/p/pychess/issues/detail?id=376 # and can be removed when conversion to FICS block mode is done self.connection.lvm.setVariable("Lang", "English") self.connection.lvm.setVariable("kibitz", 0) self.connection.lvm.setVariable("ctell", 1) self.connection.lvm.setVariable("tell", 1) self.connection.lvm.setVariable("height", 240) self.connection.client.run_command("inchannel %s" % self.connection.username) self.connection.client.run_command("help channel_list") self.getChannelsLock = threading.Semaphore() self.getChannelsLock.acquire() self.channels = {} def getChannels(self): self.getChannelsLock.acquire() self.getChannelsLock.release() return self.channels def getJoinedChannels(self): channels = self.connection.lvm.getList("channel") if self.connection.lvm.getVariable("shout"): channels.add(CHANNEL_SHOUT) if self.connection.lvm.getVariable("cshout"): channels.add(CHANNEL_CSHOUT) return channels channelListItem = re.compile("((?:\d+,?)+)\s*(.*)") def onChannelList(self, matchlist): self.channels = [(CHANNEL_SHOUT, _("Shout")), (CHANNEL_CSHOUT, _("Chess Shout"))] numbers = set(range(256)) #TODO: Use limits->Server->Channels for line in matchlist[1:-1]: match = self.channelListItem.match(line) if not match: continue ids, desc = match.groups() for id in ids.split(","): numbers.remove(int(id)) self.channels.append((id, desc)) for i in numbers: self.channels.append((str(i), _("Unofficial channel %d" % i))) self.getChannelsLock.release() def getNoChannelPlayers (self, match): channel = match.groups()[0] self.emit('recievedNames', channel, []) def getChannelPlayers(self, matchlist): channel, name, people = matchlist[0].groups() people += " " + " ".join(matchlist[1:-1]) people = namesC.findall(titlesC.sub("",people)) self.emit('recievedNames', channel, people) def gotPlayerChannels(self, matchlist): name = matchlist[0].groups() list = [] for line in matchlist[1:-1]: list += line.split() def onPrivateMessage (self, match): name, isadmin, text = match.groups() text = self.entityDecode(text) self.emit("privateMessage", name, "title", isadmin, text) def onAnnouncement (self, match): text = match.groups()[0] text = self.entityDecode(text) self.emit("announcement", text) def onChannelMessage (self, match): name, isadmin, channel, text = match.groups() text = self.entityDecode(text) isme = name.lower() == self.connection.username.lower() self.emit("channelMessage", name, isadmin, isme, channel, text) def onShoutMessage (self, match): if len(match.groups()) == 4: name, isadmin, type, text = match.groups() elif len(match.groups()) == 3: name, isadmin, text = match.groups() type = "" text = self.entityDecode(text) isme = name.lower() == self.connection.username.lower() # c-shout should be used ONLY for chess-related messages, such as # questions about chess or announcing being open for certain kinds of # chess matches. Use "shout" for non-chess messages. # t-shout is used to invite to tournaments if type == "c-": self.emit("channelMessage", name, isadmin, isme, CHANNEL_CSHOUT, text) else: self.emit("channelMessage", name, isadmin, isme, CHANNEL_SHOUT, text) def toldChannel (self, match): amount, channel = match.groups() self.emit("toldChannel", channel, int(amount)) def onChannelLogStart (self, match): channel, = match.groups() self.currentLogChannel = channel def onChannelLogLine (self, match): if not self.currentLogChannel: log.warn("Recieved log line before channel was set") return h, m, s, handle, text = match.groups() time = self.convTime(int(h), int(m), int(s)) text = self.entityDecode(text) self.emit("channelLog", self.currentLogChannel, time, handle, text) def onChannelLogBreak (self, match): self.connection.client.run_command("xtell chlog Next") def convTime (self, h, m, s): # Convert to timestamp tlist = [u for u in time.localtime()] tstamp = time.mktime(tlist[0:3]+[h, m, s, 0, 0, 0]) # Difference to now in hours dif = (tstamp-time.time())/60./60. # As we know there is maximum 30 minutes in difference, we can guess when the # message was sent, without knowing the sending time zone return tstamp - ceil(dif)*60*60 entityExpr = re.compile("&#x([a-f0-9]+);") def entityDecode (self, text): return self.entityExpr.sub(lambda m: unichr(int(m.groups()[0],16)), text) def entityEncode (self, text): buf = [] for c in text: if not 32 <= ord(c) <= 127: c = "&#" + hex(ord(c))[1:] + ";" buf.append(c) return "".join(buf) def getChannelLog (self, channel, minutes=30): """ Channel can be channel_id, shout or c-shout """ assert 1 <= minutes <= 120 # Using the chlog bot self.connection.client.run_command("xtell chlog show %s -t %d" % (channel,minutes)) def getPlayersChannels (self, player): self.connection.client.run_command("inchannel %s" % player) def getPeopleInChannel (self, channel): if channel in (CHANNEL_SHOUT, CHANNEL_CSHOUT): people = self.connection.players.get_online_playernames() self.emit('recievedNames', channel, people) self.connection.client.run_command("inchannel %s" % channel) def joinChannel (self, channel): if channel in (CHANNEL_SHOUT, CHANNEL_CSHOUT): self.connection.lvm.setVariable(channel, 1) self.connection.client.run_command("+channel %s" % channel) def removeChannel (self, channel): if channel in (CHANNEL_SHOUT, CHANNEL_CSHOUT): self.connection.lvm.setVariable(channel, 0) self.connection.client.run_command("-channel %s" % channel) def mayTellChannel (self, channel): if self.connection.isRegistred() or channel in ("4", "7", "53"): return True return False def tellPlayer (self, player, message): message = self.entityEncode(message) self.connection.client.run_command("tell %s %s" % (player, message)) def tellChannel (self, channel, message): message = self.entityEncode(message) if channel == CHANNEL_SHOUT: self.connection.client.run_command("shout %s" % message) elif channel == CHANNEL_CSHOUT: self.connection.client.run_command("cshout %s" % message) else: self.connection.client.run_command("tell %s %s" % (channel, message)) def tellAll (self, message): message = self.entityEncode(message) self.connection.client.run_command("shout %s" % message) def tellGame (self, gameno, message): message = self.entityEncode(message) self.connection.client.run_command("xkibitz %s %s" % (gameno, message)) def tellOpponent (self, message): message = self.entityEncode(message) self.connection.client.run_command("say %s" % message) def tellBughousePartner (self, message): message = self.stripChars(message) self.connection.client.run_command("ptell %s" % message) def tellUser (self, player, message): IS_TD = False if IS_TD: MAX_COM_SIZE = 1024 #TODO: Get from limits for i in xrange(0,len(message),MAX_COM_SIZE): chunk = message[i:i+MAX_COM_SIZE] chunk = chunk.replace("\n", "\\n") chunk = self.entityEncode(chunk) self.connection.client.run_command("qell %s %s" % (player, chunk)) else: for line in message.strip().split("\n"): self.tellPlayer(player, line) pychess-0.12beta3/lib/pychess/ic/managers/HelperManager.py0000755000175000017470000002226212175451041022576 0ustar tamasusersfrom gobject import GObject, SIGNAL_RUN_FIRST, TYPE_NONE import re from pychess.Utils.const import * from pychess.ic import * from pychess.ic.block_codes import BLKCMD_GAMES, BLKCMD_WHO from pychess.ic.FICSObjects import * from pychess.ic.managers.BoardManager import parse_reason from pychess.System.Log import log rated = "(rated|unrated)" colors = "(?:\[(white|black)\]\s?)?" ratings = "([\d\+\- ]{1,4})" titleslist = "(?:GM|IM|FM|WGM|WIM|WFM|TM|SR|TD|CA|C|U|D|B|T|\*)" titleslist_re = re.compile(titleslist) titles = "((?:\(%s\))+)?" % titleslist names = "([a-zA-Z]+)%s" % titles mf = "(?:([mf]{1,2})\s?)?" whomatch = "(?:(?:([-0-9+]{1,4})([\^~:\#. &])%s))" % names whomatch_re = re.compile(whomatch) DEVIATION = {"E": DEVIATION_ESTIMATED, "P": DEVIATION_PROVISIONAL, " ": DEVIATION_NONE, "" : DEVIATION_NONE, } STATUS = {"^": IC_STATUS_PLAYING, " ": IC_STATUS_AVAILABLE, ".": IC_STATUS_IDLE, "#": IC_STATUS_EXAMINING, ":": IC_STATUS_NOT_AVAILABLE, "~": IC_STATUS_RUNNING_SIMUL_MATCH, "&": IC_STATUS_IN_TOURNAMENT, } class HelperManager (GObject): def __init__ (self, helperconn, connection): GObject.__init__(self) self.helperconn = helperconn self.connection = connection self.helperconn.expect_line (self.on_game_list, "(\d+) %s (\w+)\s+%s (\w+)\s+\[(p| )(%s)(u|r)\s*(\d+)\s+(\d+)\]\s*(\d:)?(\d+):(\d+)\s*-\s*(\d:)?(\d+):(\d+) \(\s*(\d+)-\s*(\d+)\) (W|B):\s*(\d+)" % (ratings, ratings, "|".join(GAME_TYPES_BY_SHORT_FICS_NAME.keys()))) # New ivar pin # http://www.freechess.org/Help/HelpFiles/new_features.html self.helperconn.expect_line (self.on_player_whoI, "([A-Za-z]+)([\^~:\#. &])(\\d{2})" + "(\d{1,4})([P E])" * 5 + "(\d{1,4})([PE]?)") self.helperconn.expect_line (self.on_player_who, "%s(?:\s{2,}%s)+" % (whomatch, whomatch)) self.helperconn.expect_line (self.on_game_add, "\{Game (\d+) \(([A-Za-z]+) vs\. ([A-Za-z]+)\) (?:Creating|Continuing) (u?n?rated) ([^ ]+) match\.\}$") self.helperconn.expect_line (self.on_game_remove, "\{Game (\d+) \(([A-Za-z]+) vs\. ([A-Za-z]+)\) ([A-Za-z']+) (.+)\} (\*|1/2-1/2|1-0|0-1)$") self.helperconn.expect_line (self.on_player_connect, " ([A-Za-z]+)([\^~:\#. &])(\\d{2})" + "(\d{1,4})([P E])" * 5 + "(\d{1,4})([PE]?)") self.helperconn.expect_line (self.on_player_disconnect, " ([A-Za-z]+)") self.helperconn.expect_line (self.on_player_unavailable, "%s is no longer available for matches." % names) self.helperconn.expect_fromto (self.on_player_available, "%s Blitz \(%s\), Std \(%s\), Wild \(%s\), Light\(%s\), Bug\(%s\)" % (names, ratings, ratings, ratings, ratings, ratings), "is now available for matches.") def on_game_list (self, match): gameno, wrating, wname, brating, bname, private, shorttype, rated, min, \ inc, whour, wmin, wsec, bhour, bmin, bsec, wmat, bmat, color, movno = match.groups() try: gametype = GAME_TYPES_BY_SHORT_FICS_NAME[shorttype] except KeyError: return wplayer = self.connection.players.get(FICSPlayer(wname)) bplayer = self.connection.players.get(FICSPlayer(bname)) game = FICSGame(wplayer, bplayer, gameno=int(gameno), rated=(rated == "r"), private=(private == "p"), min=int(min), inc=int(inc), game_type=gametype) for player, rating in ((wplayer, wrating), (bplayer, brating)): if player.status != IC_STATUS_PLAYING: player.status = IC_STATUS_PLAYING if player.game != game: player.game = game rating = self.parseRating(rating) if player.ratings[gametype.rating_type].elo != rating: player.ratings[gametype.rating_type].elo = rating self.connection.games.get(game) on_game_list.BLKCMD = BLKCMD_GAMES def on_game_add (self, match): gameno, wname, bname, rated, game_type = match.groups() if game_type not in GAME_TYPES: return wplayer = self.connection.players.get(FICSPlayer(wname)) bplayer = self.connection.players.get(FICSPlayer(bname)) game = FICSGame(wplayer, bplayer, gameno=int(gameno), rated=(rated == "rated"), game_type=GAME_TYPES[game_type]) for player in (wplayer, bplayer): if player.status != IC_STATUS_PLAYING: player.status = IC_STATUS_PLAYING if player.game != game: player.game = game self.connection.games.get(game) def on_game_remove (self, match): gameno, wname, bname, person, comment, result = match.groups() result, reason = parse_reason(reprResult.index(result), comment, wname=wname) wplayer = FICSPlayer(wname) try: wplayer = self.connection.players.get(wplayer, create=False) wplayer.restore_previous_status() # no status update will be sent by # FICS if the player doesn't become available, so we restore # previous status first (not necessarily true, but the best guess) except KeyError: pass bplayer = FICSPlayer(bname) try: bplayer = self.connection.players.get(bplayer, create=False) bplayer.restore_previous_status() except KeyError: pass game = FICSGame(wplayer, bplayer, gameno=int(gameno), result=result, reason=reason) game = self.connection.games.get(game, emit=False) self.connection.games.game_ended(game) # Do this last to give anybody connected to the game's signals a chance # to disconnect from them first wplayer.game = None bplayer.game = None @staticmethod def parseRating (rating): return int(rating) if rating.isdigit() else 0 def __parseTitleHex (self, titlehex): titles = set() for hex in HEX_TO_TITLE: if int(titlehex, 16) & hex: titles.add(HEX_TO_TITLE[hex]) return titles def __parseTitles (self, titles): _titles = set() if titles: for title in titleslist_re.findall(titles): if title in TITLES: _titles.add(TITLES[title]) return _titles def on_player_connect (self, match): name, status, titlehex, blitz, blitzdev, std, stddev, light, lightdev, \ wild, wilddev, crazyhouse, crazyhousedev, losers, losersdev = match.groups() player = self.connection.players.get(FICSPlayer(name)) copy = player.copy() copy.online = True copy.status = STATUS[status] copy.titles |= self.__parseTitleHex(titlehex) for ratingtype, elo, dev in \ ((TYPE_BLITZ, blitz, blitzdev), (TYPE_STANDARD, std, stddev), (TYPE_LIGHTNING, light, lightdev), (TYPE_WILD, wild, wilddev), (TYPE_CRAZYHOUSE, crazyhouse, crazyhousedev), (TYPE_LOSERS, losers, losersdev)): copy.ratings[ratingtype].elo = self.parseRating(elo) copy.ratings[ratingtype].deviation = DEVIATION[dev] player.update(copy) def on_player_disconnect (self, match): name = match.groups()[0] self.connection.players.player_disconnected(FICSPlayer(name)) def on_player_whoI (self, match): self.on_player_connect(match) on_player_whoI.BLKCMD = BLKCMD_WHO def on_player_who (self, match): for blitz, status, name, titles in whomatch_re.findall(match.string): player = self.connection.players.get(FICSPlayer(name)) copy = player.copy() copy.online = True copy.status = STATUS[status] copy.titles |= self.__parseTitles(titles) copy.ratings[TYPE_BLITZ].elo = self.parseRating(blitz) player.update(copy) def on_player_unavailable (self, match): name, titles = match.groups() player = self.connection.players.get(FICSPlayer(name)) copy = player.copy() copy.titles |= self.__parseTitles(titles) # we get here after players start a game, so we make sure that we don't # overwrite IC_STATUS_PLAYING if copy.game is None and copy.status != IC_STATUS_PLAYING: copy.status = IC_STATUS_NOT_AVAILABLE player.update(copy) def on_player_available (self, matches): name, titles, blitz, std, wild, light, bug = matches[0].groups() player = self.connection.players.get(FICSPlayer(name)) copy = player.copy() copy.online = True copy.status = IC_STATUS_AVAILABLE copy.titles |= self.__parseTitles(titles) copy.ratings[TYPE_BLITZ].elo = self.parseRating(blitz) copy.ratings[TYPE_STANDARD].elo = self.parseRating(std) copy.ratings[TYPE_LIGHTNING].elo = self.parseRating(light) copy.ratings[TYPE_WILD].elo = self.parseRating(wild) player.update(copy) pychess-0.12beta3/lib/pychess/ic/managers/NewsManager.py0000755000175000017470000000365512161415524022301 0ustar tamasusersimport re from gobject import * from pychess.ic.block_codes import BLKCMD_NEWS days = "(Mon|Tue|Wed|Thu|Fri|Sat|Sun)" months = "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)" AMOUNT_OF_NEWSITEMS = 5 FICS_SENDS = 10 class NewsManager (GObject): __gsignals__ = { 'readingNews' : (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), 'readNews' : (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), } def __init__ (self, connection): GObject.__init__(self) self.connection = connection self.news = {} self.connection.expect_line (self.onNewsItem, "(\d+) \(%s, %s +(\d+)\) (.+)" % (days, months)) self.connection.client.run_command("news") def onNewsItem (self, match): no, weekday, month, day, title = match.groups() line = match.group() self.news[no] = [_(weekday), _(month), day, title, ""] self.emit("readingNews", self.news[no]) if len(self.news) <= AMOUNT_OF_NEWSITEMS: # the "news" command, gives us the latest 10 news items from the # oldest to the newest. # We only want the 5 newest, so we skip the first 5 entries. return elif len(self.news) == FICS_SENDS: # No need to check the expression any more self.connection.unexpect (self.onNewsItem) def onFullNewsItem (matchlist): self.connection.unexpect(onFullNewsItem) details = "" for line in matchlist[1:-1]: if line.startswith("\\"): line = " "+line[1:].strip() details += line.replace(" ", " ") self.news[no][4] = details self.emit("readNews", self.news[no]) self.connection.expect_fromto (onFullNewsItem, re.escape(line), "Posted by.*") self.connection.client.run_command("news %s" % no) onNewsItem.BLKCMD = BLKCMD_NEWS pychess-0.12beta3/lib/pychess/ic/managers/__init__.py0000755000175000017470000000000012161415524021606 0ustar tamasuserspychess-0.12beta3/lib/pychess/ic/managers/ConsoleManager.py0000644000175000017470000000100112161415524022743 0ustar tamasusersfrom gobject import * from pychess.ic.VerboseTelnet import ConsoleHandler class ConsoleManager (GObject): __gsignals__ = { 'consoleMessage' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, str)), } def __init__ (self, connection): GObject.__init__(self) self.connection = connection self.connection.client.consolehandler = ConsoleHandler(self.onConsoleMessage) def onConsoleMessage (self, line, block_code): self.emit("consoleMessage", line, block_code) pychess-0.12beta3/lib/pychess/ic/managers/AdjournManager.py0000755000175000017470000001632712161415524022767 0ustar tamasusersimport re import datetime from gobject import * from BoardManager import BoardManager, moveListHeader1Str, names, months, dates from pychess.ic import * from pychess.ic.block_codes import BLKCMD_SMOVES from pychess.ic.FICSObjects import FICSAdjournedGame, FICSPlayer from pychess.Utils.const import * from pychess.System.Log import log class AdjournManager (GObject): __gsignals__ = { 'adjournedGameAdded' : (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), 'onAdjournmentsList' : (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), 'adjournedGamePreview' : (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), } def __init__ (self, connection): GObject.__init__(self) self.connection = connection self.connection.expect_line (self.__onStoredResponseNO, "%s has no adjourned games\." % self.connection.username) self.connection.expect_fromto (self.__onSmovesResponse, moveListHeader1Str, # "\s*{((?:Game courtesyadjourned by (Black|White))|(?:Still in progress)|(?:Game adjourned by mutual agreement)|(?:(White|Black) lost connection; game adjourned)|(?:Game adjourned by ((?:server shutdown)|(?:adjudication)|(?:simul holder))))} \*") "\s*{.*(?:(?:[Gg]ame.*adjourned)|(?:Still in progress)|(?:Game drawn.*)|(?:White.*)|(?:Black.*)).*}\s*(?:(?:1/2-1/2)|(?:1-0)|(?:0-1))?\s*") self.connection.expect_fromplus(self.__onStoredResponseYES, "\s*C Opponent\s+On Type\s+Str\s+M\s+ECO\s+Date", "\s*\d+: (B|W) %s\s+(Y|N) \[([a-z ]{3})\s+(\d+)\s+(\d+)\]\s+(\d+)-(\d+)\s+(W|B)(\d+)\s+(---|\?\?\?|[A-Z]\d+)\s+%s" % (names, dates)) self.connection.expect_line (self.__onAdjournedGameResigned, "You have resigned the game\.") self.connection.bm.connect("curGameEnded", self.__onCurGameEnded) self.queryAdjournments() #TODO: Connect to {Game 67 (MAd vs. Sandstrom) Game adjourned by mutual agreement} * #TODO: Connect to adjourned game as adjudicated def __onStoredResponseYES (self, matchlist): #Stored games of User: # C Opponent On Type Str M ECO Date # 1: W TheDane N [ br 2 12] 0-0 B2 ??? Sun Nov 23, 6:14 CST 1997 # 2: W PyChess Y [psu 2 12] 39-39 W3 C20 Sun Jan 11, 17:40 ??? 2009 # 3: B cjavad N [ wr 2 2] 31-31 W18 --- Wed Dec 23, 06:58 PST 2009 adjournments = [] for match in matchlist[1:]: our_color = match.groups()[0] opponent_name, opponent_online = match.groups()[1:3] game_type = match.groups()[3] minutes, gain = match.groups()[4:6] str_white, str_black = match.groups()[6:8] next_color = match.groups()[8] move_num = match.groups()[9] eco = match.groups()[10] week, month, day, hour, minute, timezone, year = match.groups()[11:18] gametime = datetime.datetime(int(year), months.index(month)+1, int(day), int(hour), int(minute)) private = game_type[0] == "p" rated = game_type[2] == "r" gametype = GAME_TYPES_BY_SHORT_FICS_NAME[game_type[1]] our_color = our_color == "B" and BLACK or WHITE minutes = int(minutes) gain = int(gain) length = (int(move_num)-1)*2 if next_color == "B": length += 1 user = self.connection.players.get( FICSPlayer(self.connection.getUsername())) opponent = self.connection.players.get(FICSPlayer(opponent_name)) wplayer, bplayer = (user, opponent) if our_color == WHITE \ else (opponent, user) game = FICSAdjournedGame(wplayer, bplayer, game_type=gametype, rated=rated, our_color=our_color, length=length, time=gametime, min=minutes, inc=gain, private=private) if game.opponent.adjournment != True: game.opponent.adjournment = True if game not in self.connection.games: game = self.connection.games.get(game, emit=False) self.emit("adjournedGameAdded", game) adjournments.append(game) self.emit("onAdjournmentsList", adjournments) def __onStoredResponseNO (self, match): self.emit("onAdjournmentsList", []) def __onSmovesResponse (self, matchlist): game = self.connection.bm.parseGame(matchlist, FICSAdjournedGame, in_progress=False) if game is None: return self.emit("adjournedGamePreview", game) __onSmovesResponse.BLKCMD = BLKCMD_SMOVES def __onAdjournedGameResigned (self, match): self.queryAdjournments() def __onCurGameEnded (self, bm, game): if game.result == ADJOURNED: self.queryAdjournments() def queryAdjournments (self): self.connection.client.run_command("stored") def queryMoves (self, game): self.connection.client.run_command("smoves %s" % game.opponent.name) def challenge (self, playerName): self.connection.client.run_command("match %s" % playerName) def resign (self, game): """ This is (and draw and abort) are possible even when one's opponent is not logged on """ if not game.opponent.adjournment: log.warn("AdjournManager.resign: no adjourned game vs %s\n" % game.opponent) return log.info("AdjournManager.resign: resigning adjourned game=%s\n" % game) self.connection.client.run_command("resign %s" % game.opponent.name) def draw (self, game): if not game.opponent.adjournment: log.warn("AdjournManager.draw: no adjourned game vs %s\n" % game.opponent) return log.info("AdjournManager.draw: offering sdraw for adjourned game=%s\n" % game) self.connection.client.run_command("sdraw %s" % game.opponent.name) def abort (self, game): if not game.opponent.adjournment: log.warn("AdjournManager.abort: no adjourned game vs %s\n" % game.opponent) return log.info("AdjournManager.abort: offering sabort for adjourned game=%s\n" % game) self.connection.client.run_command("sabort %s" % game.opponent.name) def resume (self, game): if not game.opponent.adjournment: log.warn("AdjournManager.resume: no adjourned game vs %s\n" % game.opponent) return log.info("AdjournManager.resume: offering resume for adjourned game=%s\n" % game) self.connection.client.run_command("match %s" % game.opponent.name) #(a) Users who have more than 15 stored games are restricted from starting new #games. If this situation happens to you, review your stored games and see #which ones might be eligible for adjudication (see "help adjudication"). pychess-0.12beta3/lib/pychess/ic/managers/OfferManager.py0000755000175000017470000002367012175445254022435 0ustar tamasusersimport re from gobject import GObject, SIGNAL_RUN_FIRST from pychess.Utils.const import * from pychess.Utils.Offer import Offer from pychess.System.Log import log from pychess.ic import * names = "\w+(?:\([A-Z\*]+\))*" rated = "(rated|unrated)" colors = "(?:\[(white|black)\])?" ratings = "\(([0-9\ \-\+]{1,4}[E P]?)\)" loaded_from = "(?: Loaded from (wild.*))?" adjourned = "(?: (\(adjourned\)))?" matchreUntimed = re.compile ("(\w+) %s %s ?(\w+) %s %s (untimed)\s*" % \ (ratings, colors, ratings, rated) ) matchre = re.compile( "(\w+) %s %s ?(\w+) %s %s (\w+) (\d+) (\d+)%s%s" % \ (ratings, colors, ratings, rated, loaded_from, adjourned)) # 39 w=GuestDVXV t=match p=GuestDVXV (----) [black] GuestNXMP (----) unrated blitz 2 12 # 16 w=GuestDVXV t=match p=GuestDVXV (----) GuestNXMP (----) unrated wild 2 12 Loaded from wild/fr # 39 w=GuestDVXV t=match p=GuestDVXV (----) GuestNXMP (----) unrated blitz 2 12 (adjourned) # 45 w=GuestGYXR t=match p=GuestGYXR (----) Lobais (----) unrated losers 2 12 # 45 w=GuestYDDR t=match p=GuestYDDR (----) mgatto (1358) unrated untimed # 71 w=joseph t=match p=joseph (1632) mgatto (1742) rated wild 5 1 Loaded from wild/fr (adjourned) # # Known offers: abort accept adjourn draw match pause unpause switch takeback # strToOfferType = { "draw": DRAW_OFFER, "abort": ABORT_OFFER, "adjourn": ADJOURN_OFFER, "takeback": TAKEBACK_OFFER, "pause": PAUSE_OFFER, "unpause": RESUME_OFFER, "switch": SWITCH_OFFER, "resign": RESIGNATION, "flag": FLAG_CALL, "match": MATCH_OFFER } offerTypeToStr = {} for k,v in strToOfferType.iteritems(): offerTypeToStr[v] = k class OfferManager (GObject): __gsignals__ = { 'onOfferAdd' : (SIGNAL_RUN_FIRST, None, (object,)), 'onOfferRemove' : (SIGNAL_RUN_FIRST, None, (object,)), 'onOfferDeclined' : (SIGNAL_RUN_FIRST, None, (object,)), 'onChallengeAdd' : (SIGNAL_RUN_FIRST, None, (str, object)), 'onChallengeRemove' : (SIGNAL_RUN_FIRST, None, (str,)), 'onActionError' : (SIGNAL_RUN_FIRST, None, (object, int)), } def __init__ (self, connection): GObject.__init__(self) self.connection = connection self.connection.expect_line (self.onOfferAdd, " (\d+) w=%s t=(\w+) p=(.+)" % names) self.connection.expect_line (self.onOfferRemove, " (\d+)") for ficsstring, offer, error in ( ("You cannot switch sides once a game is underway.", Offer(SWITCH_OFFER), ACTION_ERROR_SWITCH_UNDERWAY), ("Opponent is not out of time.", Offer(FLAG_CALL), ACTION_ERROR_NOT_OUT_OF_TIME), ("The clock is not ticking yet.", Offer(PAUSE_OFFER), ACTION_ERROR_CLOCK_NOT_STARTED), ("The clock is not ticking.", Offer(FLAG_CALL), ACTION_ERROR_CLOCK_NOT_STARTED), ("The clock is not paused.", Offer(RESUME_OFFER), ACTION_ERROR_CLOCK_NOT_PAUSED)): self.connection.expect_line ( lambda match: self.emit("onActionError", offer, error), ficsstring) self.connection.expect_line (self.notEnoughMovesToUndo, "There are (?:(no)|only (\d+) half) moves in your game\.") self.connection.expect_line (self.noOffersToAccept, "There are no ([^ ]+) offers to (accept).") self.connection.expect_line (self.onOfferDeclined, "\w+ declines the (draw|takeback|pause|unpause|abort|adjourn) request\.") self.lastPly = 0 self.offers = {} self.connection.lvm.setVariable("pendinfo", 1) def onOfferDeclined (self, match): log.debug("OfferManager.onOfferDeclined: match.string=%s\n" % match.string) type = match.groups()[0] offer = Offer(strToOfferType[type]) self.emit("onOfferDeclined", offer) def noOffersToAccept (self, match): offertype, request = match.groups() if request == "accept": error = ACTION_ERROR_NONE_TO_ACCEPT elif request == "withdraw": error = ACTION_ERROR_NONE_TO_WITHDRAW elif request == "decline": error = ACTION_ERROR_NONE_TO_DECLINE offer = Offer(strToOfferType[offertype]) self.emit("onActionError", offer, error) def notEnoughMovesToUndo (self, match): ply = match.groups()[0] or match.groups()[1] if ply == "no": ply = 0 else: ply = int(ply) offer = Offer(TAKEBACK_OFFER, param=self.lastPly-ply) self.emit("onActionError", offer, ACTION_ERROR_TOO_LARGE_UNDO) def onOfferAdd (self, match): log.debug("OfferManager.onOfferAdd: match.string=%s\n" % match.string) tofrom, index, offertype, parameters = match.groups() if tofrom == "t": # ICGameModel keeps track of the offers we've sent ourselves, so we # don't need this return if offertype not in strToOfferType: log.warn("OfferManager.onOfferAdd: Declining unknown offer type: " + \ "offertype=%s parameters=%s index=%s\n" % (offertype, parameters, index)) self.connection.client.run_command("decline %s" % index) offertype = strToOfferType[offertype] if offertype == TAKEBACK_OFFER: offer = Offer(offertype, param=int(parameters), index=int(index)) else: offer = Offer(offertype, index=int(index)) self.offers[offer.index] = offer if offer.type == MATCH_OFFER: is_adjourned = False if matchreUntimed.match(parameters) != None: fname, frating, col, tname, trating, rated, type = \ matchreUntimed.match(parameters).groups() mins = "0" incr = "0" gametype = GAME_TYPES["untimed"] else: fname, frating, col, tname, trating, rated, gametype, mins, \ incr, wildtype, adjourned = matchre.match(parameters).groups() if (wildtype and "adjourned" in wildtype) or \ (adjourned and "adjourned" in adjourned): is_adjourned = True if wildtype and "wild" in wildtype: gametype = wildtype try: gametype = GAME_TYPES[gametype] except KeyError: log.warn("OfferManager.onOfferAdd: auto-declining " + \ "unknown offer type: '%s'\n" % gametype) self.decline(offer) del self.offers[offer.index] return # TODO: get the ficsplayer and update their rating to this one # rather than emitting it in match rating = frating.strip() rating = rating.isdigit() and rating or "0" rated = rated == "unrated" and "u" or "r" match = {"gametype": gametype, "w": fname, "rt": rating, "r": rated, "t": mins, "i": incr, "is_adjourned": is_adjourned} self.emit("onChallengeAdd", index, match) else: log.debug("OfferManager.onOfferAdd: emitting onOfferAdd: %s\n" % offer) self.emit("onOfferAdd", offer) def onOfferRemove (self, match): log.debug("OfferManager.onOfferRemove: match.string=%s\n" % match.string) index = int(match.groups()[0]) if not index in self.offers: return if self.offers[index].type == MATCH_OFFER: self.emit("onChallengeRemove", index) else: self.emit("onOfferRemove", self.offers[index]) del self.offers[index] ### def challenge (self, playerName, game_type, startmin, incsec, rated, color=None): log.debug("OfferManager.challenge: %s %s %s %s %s %s\n" % \ (playerName, game_type, startmin, incsec, rated, color)) rchar = rated and "r" or "u" if color != None: cchar = color == WHITE and "w" or "b" else: cchar = "" s = "match %s %d %d %s %s" % \ (playerName, startmin, incsec, rchar, cchar) if isinstance(game_type, VariantGameType): s += " " + game_type.seek_text self.connection.client.run_command(s) def offer (self, offer, curply): log.debug("OfferManager.offer: curply=%s %s\n" % (curply, offer)) self.lastPly = curply s = offerTypeToStr[offer.type] if offer.type == TAKEBACK_OFFER: s += " " + str(curply - offer.param) self.connection.client.run_command(s) ### def withdraw (self, offer): log.debug("OfferManager.withdraw: %s\n" % offer) self.connection.client.run_command("withdraw t %s" % offerTypeToStr[offer.type]) def accept (self, offer): log.debug("OfferManager.accept: %s\n" % offer) if offer.index != None: self.acceptIndex(offer.index) else: self.connection.client.run_command("accept t %s" % offerTypeToStr[offer.type]) def decline (self, offer): log.debug("OfferManager.decline: %s\n" % offer) if offer.index != None: self.declineIndex(offer.index) else: self.connection.client.run_command("decline t %s" % offerTypeToStr[offer.type]) def acceptIndex (self, index): log.debug("OfferManager.acceptIndex: index=%s\n" % index) self.connection.client.run_command("accept %s" % index) def declineIndex (self, index): log.debug("OfferManager.declineIndex: index=%s\n" % index) self.connection.client.run_command("decline %s" % index) def playIndex (self, index): log.debug("OfferManager.playIndex: index=%s\n" % index) self.connection.client.run_command("play %s" % index) pychess-0.12beta3/lib/pychess/ic/managers/ErrorManager.py0000755000175000017470000000177012161415524022452 0ustar tamasusersfrom gobject import * sanmove = "([a-hx@OoPKQRBN0-8+#=-]{2,7})" class ErrorManager (GObject): __gsignals__ = { 'onCommandNotFound' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)), 'onAmbiguousMove' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)), 'onIllegalMove' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)), } def __init__ (self, connection): GObject.__init__(self) connection.expect_line (self.onError, "(.*?): Command not found\.") connection.expect_line (self.onAmbiguousMove, "Ambiguous move \((%s)\)\." % sanmove) connection.expect_line (self.onIllegalMove, "Illegal move \((%s)\)\." % sanmove) def onError (self, match): command = match.groups()[0] self.emit("onCommandNotFound", command) def onAmbiguousMove (self, match): move = match.groups()[0] self.emit("onAmbiguousMove", move) def onIllegalMove (self, match): move = match.groups()[0] self.emit("onIllegalMove", move) pychess-0.12beta3/lib/pychess/ic/managers/SeekManager.py0000755000175000017470000001255312175447453022264 0ustar tamasusersfrom gobject import GObject, SIGNAL_RUN_FIRST, TYPE_NONE import re from pychess.Utils.const import * from pychess.ic import * from pychess.ic.block_codes import BLKCMD_SEEK, BLKCMD_UNSEEK from pychess.ic.FICSObjects import * from pychess.ic.managers.BoardManager import parse_reason from pychess.System.Log import log rated = "(rated|unrated)" colors = "(?:\[(white|black)\]\s?)?" ratings = "([\d\+\- ]{1,4})" titleslist = "(?:GM|IM|FM|WGM|WIM|WFM|TM|SR|TD|CA|C|U|D|B|T|\*)" titleslist_re = re.compile(titleslist) titles = "((?:\(%s\))+)?" % titleslist names = "([a-zA-Z]+)%s" % titles mf = "(?:([mf]{1,2})\s?)?" whomatch = "(?:(?:([-0-9+]{1,4})([\^~:\#. &])%s))" % names whomatch_re = re.compile(whomatch) rating_re = re.compile("[0-9]{2,}") deviation_estimated_re = re.compile("E") deviation_provisional_re = re.compile("P") class SeekManager (GObject): __gsignals__ = { 'addSeek' : (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), 'removeSeek' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)), 'clearSeeks' : (SIGNAL_RUN_FIRST, TYPE_NONE, ()), } def __init__ (self, connection): GObject.__init__(self) self.connection = connection self.connection.expect_line (self.on_seek_clear, "") self.connection.expect_line (self.on_seek_add, " (.+)") self.connection.expect_line (self.on_seek_remove, " ([\d ]+)") self.connection.lvm.setVariable("seekinfo", 1) self.connection.lvm.setVariable("seekremove", 1) self.connection.lvm.setVariable("showownseek", 1) def seek (self, startmin, incsec, game_type, rated, ratings=(0, 9999), color=None, manual=False): log.debug("SeekManager.seek: %s %s %s %s %s %s %s\n" % \ (startmin, incsec, game_type, rated, str(ratings), color, manual)) rchar = "r" if rated else "u" if color != None: cchar = color == WHITE and "w" or "b" else: cchar = "" manual = "m" if manual else "" s = "seek %d %d %s %s %s" % (startmin, incsec, rchar, cchar, manual) if isinstance(game_type, VariantGameType): s += " " + game_type.seek_text if not self.connection.FatICS: s += " %d-%d" % (ratings[0], ratings[1]) #print s self.connection.client.run_command(s) ### def on_seek_add (self, match): parts = match.groups()[0].split(" ") # The message looks like: # index w=name_from ti=titles rt=rating t=time i=increment # r=rated('r')/unrated('u') tp=type("wild/fr", "wild/4","blitz") # c=color rr=rating_range(lower-upper) a=automatic?('t'/'f') # f=formula_checked('t'/f') seek = {"gameno": parts[0]} for key, value in [p.split("=") for p in parts[1:] if p]: if key in ('w', 'r', 't', 'i'): seek[key] = value if key == "tp": try: seek["gametype"] = GAME_TYPES[value] if GAME_TYPES[value].variant_type in UNSUPPORTED: return except KeyError: if self.connection.FatICS and value == "chess": # TODO: remove when fixed in FatICS expected_time = int(seek["t"]) + int(seek["i"])*2/3 if expected_time == 0: value = "untimed" elif expected_time < 3: value = "lightning" elif expected_time < 15: value = "blitz" else: value = "standard" seek["gametype"] = GAME_TYPES[value] else: return if key == "rr": seek["rmin"], seek["rmax"] = value.split("-") seek["rmin"] = int(seek["rmin"]) seek["rmax"] = int(seek["rmax"]) elif key == "ti": seek["cp"] = bool(int(value) & 2) # 0x2 - computer title = "" for hex in HEX_TO_TITLE.keys(): if int(value, 16) & hex: title += "(" + \ TITLE_TYPE_DISPLAY_TEXTS_SHORT[HEX_TO_TITLE[hex]] + ")" seek["title"] = title elif key == "rt": if value[-1] in (" ", "P", "E"): seek[key] = value[:-1] else: seek[key] = value elif key == "a": seek["manual"] = value == "f" # Must be accepted manually self.emit("addSeek", seek) on_seek_add.BLKCMD = BLKCMD_SEEK def on_seek_clear (self, *args): self.emit("clearSeeks") def on_seek_remove (self, match): for key in match.groups()[0].split(" "): if not key: continue self.emit("removeSeek", key) on_seek_remove.BLKCMD = BLKCMD_UNSEEK def refresh_seeks (self): self.connection.lvm.setVariable("seekinfo", 1) if __name__ == "__main__": assert type_to_display_text("Loaded from eco/a00") == type_to_display_text("eco/a00") == "Eco A00" assert type_to_display_text("wild/fr") == Variants.variants[FISCHERRANDOMCHESS].name assert type_to_display_text("blitz") == GAME_TYPES["blitz"].display_text pychess-0.12beta3/lib/pychess/ic/managers/AutoLogOutManager.py0000755000175000017470000000122712161415524023420 0ustar tamasusersfrom gobject import * class AutoLogOutManager (GObject): __gsignals__ = { 'logOut': (SIGNAL_RUN_FIRST, None, ()) } def __init__ (self, connection): GObject.__init__(self) self.connection = connection self.connection.expect_line (self.onLogOut, "\*\*\*\* Auto-logout because you were idle more than \d+ minutes\. \*\*\*\*") self.connection.expect_line (self.onLogOut, "Logging you out\.") self.connection.expect_line (self.onLogOut, "\*\*\*\* .+? has arrived - you can't both be logged in\. \*\*\*\*") def onLogOut (self, match): self.emit("logOut") pychess-0.12beta3/lib/pychess/ic/managers/FingerManager.py0000755000175000017470000003025112161415524022567 0ustar tamasusersfrom threading import RLock from gobject import * import re from time import time from pychess.ic import * from pychess.ic.block_codes import BLKCMD_FINGER from pychess.Utils.const import * from pychess.Utils.Rating import Rating from pychess.System.Log import log types = "(?:blitz|standard|lightning|wild|bughouse|crazyhouse|suicide|losers|atomic)" rated = "(rated|unrated)" colors = "(?:\[(white|black)\]\s?)?" ratings = "([\d\+\-]{1,4})" titleslist = "(?:GM|IM|FM|WGM|WIM|WFM|TM|SR|TD|SR|CA|C|U|D|B|T|\*)" titles = "((?:\(%s\))+)?" % titleslist names = "(\w+)%s" % titles mf = "(?:([mf]{1,2})\s?)?" # FIXME: Needs support for day, hour, min, sec times = "[, ]*".join("(?:(\d+) %s)?" % s for s in ("days", "hrs", "mins", "secs")) # "73 days, 5 hrs, 55 mins" # ('73', '5', '55', None) class FingerObject: def __init__ (self, name = ""): self.__fingerTime = time() self.__name = name self.__status = None self.__upTime = 0 self.__idleTime = 0 self.__busyMessage = "" self.__lastSeen = 0 self.__totalTimeOnline = 0 self.__created = 0 # Since field from % of life online self.__email = "" self.__sanctions = "" self.__adminLevel = "" self.__timeseal = False self.__notes = [""]*10 self.__gameno = "" self.__color = WHITE self.__opponent = "" self.__silence = False self.__titles = None self.__rating = {} def getName (self): """ Returns the name of the user, without any title sufixes """ return self.__name def getStatus (self): """ Returns the current user-status as a STATUS constant """ return self.__status def getUpTime(self): """ Returns the when the user logged on Not set when status == STATUS_OFFLINE """ return self.__upTime + time() - self.__fingerTime def getIdleTime(self): """ Returns the when the last time the user did something active Not set when status == STATUS_OFFLINE """ return self.__idleTime + time() - self.__fingerTime def getBusyMessage(self): """ Returns the userset idle message This is set when status == STATUS_BUSY or sometimes when status == STATUS_PLAYING """ return self.__busyMessage def getLastSeen(self): """ Returns when the user logged off This is only set when status == STATUS_OFFLINE This is not set, if the user has never logged on """ return self.__lastSeen def getTotalTimeOnline(self): """ Returns how many seconds the user has been on FICS since the account was created. This is not set, if the user has never logged on """ return self.__totalTimeOnline + time() - self.__fingerTime def getCreated(self): """ Returns when the account was created """ return self.__created def getEmail(self): """ Returns the email adress of the user. This will probably only be set for the logged in user """ return self.__email def getSanctions(self): """ Returns any sanctions the user has against them. This is usually an empty string """ return self.__sanctions def getAdminLevel(self): """ Returns the admin level as a string Only set for admins. """ return self.__adminLevel def getTimeseal(self): """ Returns True if the user is using timeseal for fics connection """ return self.__timeseal def getNotes(self): """ Returns a list of the ten finger notes """ return self.__notes def getGameno(self): """ Returns the gameno of the game in which user is currently playing This is only set when status == STATUS_PLAYING """ return self.__gameno def getColor(self): """ If status == STATUS_PLAYING getColor returns the color witch the player has got in the game. Otherwise always WHITE is returned """ return self.__color def getOpponent(self): """ Returns the opponent of the user in his current game This is only set when status == STATUS_PLAYING """ return self.__opponent def getSilence(self): """ Return True if the user is playing in silence This is only set when status == STATUS_PLAYING """ return self.__silence def getRating(self, type=None): if type == None: return self.__rating return self.__rating[type] def getTitles(self): return self.__titles def setName(self, value): self.__name = value def setStatus(self, value): self.__status = value def setUpTime(self, value): """ Use relative seconds """ self.__upTime = value def setIdleTime(self, value): """ Use relative seconds """ self.__idleTime = value def setBusyMessage(self, value): """ Use relative seconds """ self.__busyMessage = value def setLastSeen(self, value): """ Use relative seconds """ self.__lastSeen = value def setTotalTimeOnline(self, value): """ Use relative seconds """ self.__totalTimeOnline = value def setCreated(self, value): """ Use relative seconds """ self.__created = value def setEmail(self, value): self.__email = value def setSanctions(self, value): self.__sanctions = value def setAdminLevel(self, value): self.__adminLevel = value def setTimeseal(self, value): self.__timeseal = value def setNote(self, index, note): self.__notes[index] = note def setGameno(self, value): self.__gameno = value def setColor(self, value): self.__color = value def setOpponent(self, value): self.__opponent = value def setSilence(self, value): self.__silence = value def setRating(self, type, rating): self.__rating[type] = rating def setTitles(self, titles): self.__titles = titles class FingerManager (GObject): __gsignals__ = { 'fingeringFinished' : (SIGNAL_RUN_FIRST, None, (object,)), 'ratingAdjusted' : (SIGNAL_RUN_FIRST, None, (str, str)), } def __init__ (self, connection): GObject.__init__(self) self.connection = connection fingerLines = ( "(?P%s has never connected\.)" % names, "Last disconnected: (?P.+)", "On for: (?P.+?) +Idle: (?P.+)", "%s is in (?Psilence) mode\." % names, "\(playing game (?P\d+): (?P\S+?)%s vs. (?P\S+?)%s\)" % (titles,titles), "\(%s (?P.+?)\)" % names, "%s has not played any rated games\." % names, "rating +RD +win +loss +draw +total +best", "(?P%s) +(?P.+)" % types, "Email *: (?P.+)", "Sanctions *: (?P.+)", "Total time online: (?P.+)", "% of life online: [\d\.]+ \(since (?P.+?)\)", "Timeseal [ \\d] : (?POff|On)", "Admin Level: (?P.+)", "(?P\d+): *(?P.*)", "$" ) self.connection.expect_fromplus (self.onFinger, "Finger of %s:" % names, "$|".join(fingerLines)) self.connection.lvm.setVariable("nowrap", 1) # We don't use this. Rather we use BoardManagers "gameEnded", after # which we do a refinger. This is to ensure not only rating, but also # wins/looses/draws are updated #self.connection.expect(self.onRatingAdjust, # "%s rating adjustment: (\d+) --> (\d+)" % types # Notice if you uncomment this: The expression has to be compiled with # re.IGNORECASE, or the first letter of 'type' must be capital def parseDate (self, date): # Tue Mar 11, 10:56 PDT 2008 return 1 def parseShortDate (self, date): # 24-Oct-2007 return 1 def parseTime (self, time): # 3 days, 2 hrs, 53 mins return 1 def onFinger (self, matchlist): finger = FingerObject() name = matchlist[0].groups()[0] finger.setName(name) if matchlist[0].groups()[1]: titles = re.findall(titleslist, matchlist[0].groups()[1]) finger.setTitles(titles) for match in matchlist[1:]: if not match.group(): continue groupdict = match.groupdict() if groupdict["never"] != None: finger.setStatus(IC_STATUS_OFFLINE) elif groupdict["last"] != None: finger.setStatus(IC_STATUS_OFFLINE) finger.setLastSeen(self.parseDate(groupdict["last"])) elif groupdict["uptime"] != None: finger.setStatus(IC_STATUS_ACTIVE) finger.setUpTime(self.parseTime(groupdict["uptime"])) finger.setIdleTime(self.parseTime(groupdict["idletime"])) elif groupdict["silence"] != None: finger.setSilence(True) elif groupdict["gameno"] != None: finger.setStatus(IC_STATUS_PLAYING) finger.setGameno(groupdict["gameno"]) if groupdict["p1"].lower() == self.connection.getUsername().lower(): finger.setColor(WHITE) finger.setOpponent(groupdict["p2"]) else: finger.setColor(BLACK) finger.setOpponent(groupdict["p1"]) elif groupdict["busymessage"] != None: finger.setStatus(IC_STATUS_BUSY) finger.setBusyMessage(groupdict["busymessage"]) elif groupdict["gametype"] != None: gametype = GAME_TYPES_BY_FICS_NAME[groupdict["gametype"].lower()] ratings = groupdict["ratings"].split() del ratings[5] # We don't need the totals field ratings[1] = float(ratings[1]) if len(ratings) == 5: args = map(int, ratings) rating = Rating(gametype.rating_type, *args) else: bestTime = self.parseShortDate(ratings[6][1:-1]) args = map(int,ratings[:6]) + [bestTime] rating = Rating(gametype.rating_type, *args) finger.setRating(gametype.rating_type, rating) elif groupdict["email"] != None: finger.setEmail(groupdict["email"]) elif groupdict["sanctions"] != None: finger.setSanctions(groupdict["sanctions"]) elif groupdict["tto"] != None: finger.setTotalTimeOnline(self.parseTime(groupdict["tto"])) elif groupdict["created"] != None: finger.setTotalTimeOnline(self.parseDate(groupdict["created"])) elif groupdict["timeseal"] != None: finger.setTimeseal(groupdict["timeseal"] == "On") elif groupdict["adminlevel"] != None: finger.setAdminLevel(groupdict["adminlevel"]) elif groupdict["noteno"] != None: finger.setNote(int(groupdict["noteno"])-1, groupdict["note"]) else: log.debug("Ignored fingerline: %s\n" % repr(match.group())) self.emit ("fingeringFinished", finger) onFinger.BLKCMD = BLKCMD_FINGER def onRatingAdjust (self, match): # Notice: This is only recived for us, not for other persons we finger type, old, new = match.groups() self.emit("ratingAdjusted", type, new) def finger (self, user): self.connection.client.run_command("finger %s" % user) def setFingerNote (self, note, message): assert 1 <= note <= 10 self.connection.client.run_command("set %d %s" % (note, message)) def setBusyMessage (self, message): """ Like set busy is really busy right now. """ self.connection.lvm.setVariable("busy", message) pychess-0.12beta3/lib/pychess/ic/managers/BoardManager.py0000755000175000017470000007623012176724572022427 0ustar tamasusersimport re from gobject import * import threading from pychess.System.Log import log from pychess.Savers.pgn import msToClockTimeTag from pychess.Utils.const import * from pychess.ic import * from pychess.ic.block_codes import BLKCMD_UNOBSERVE, BLKCMD_MOVES from pychess.ic.VerboseTelnet import * from pychess.ic.FICSObjects import * names = "(\w+)" titles = "((?:\((?:GM|IM|FM|WGM|WIM|WFM|TM|SR|TD|SR|CA|C|U|D|B|T|\*)\))+)?" ratedexp = "(rated|unrated)" ratings = "\(\s*([0-9\ \-\+]{1,4}[P E]?|UNR)\)" weekdays = ("Mon","Tue","Wed","Thu","Fri","Sat","Sun") months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"] # "Thu Oct 14, 20:36 PDT 2010" dates = "(%s)\s+(%s)\s+(\d+),\s+(\d+):(\d+)\s+([A-Z\?]+)\s+(\d{4})" % \ ("|".join(weekdays), "|".join(months)) # "2010-10-14 20:36 UTC" datesFatICS = "(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2})\s+(UTC)" moveListHeader1Str = "%s %s vs. %s %s --- (?:%s|%s)" % (names, ratings, names, ratings, dates, datesFatICS) moveListHeader1 = re.compile(moveListHeader1Str) moveListHeader2Str = "%s ([^ ]+) match, initial time: (\d+) minutes, increment: (\d+) seconds\." % \ ratedexp moveListHeader2 = re.compile(moveListHeader2Str, re.IGNORECASE) sanmove = "([a-hx@OoPKQRBN0-8+#=-]{2,7})" movetime = "\((\d+):(\d\d)(?:\.(\d\d\d))?\)" moveListMoves = re.compile("(\d+)\. +(?:%s|\.\.\.) +%s *(?:%s +%s)?" % \ (sanmove, movetime, sanmove, movetime)) fileToEpcord = (("a3","b3","c3","d3","e3","f3","g3","h3"), ("a6","b6","c6","d6","e6","f6","g6","h6")) relations = { "-4": IC_POS_INITIAL, "-3": IC_POS_ISOLATED, "-2": IC_POS_OBSERVING_EXAMINATION, "2": IC_POS_EXAMINATING, "-1": IC_POS_OP_TO_MOVE, "1": IC_POS_ME_TO_MOVE, "0": IC_POS_OBSERVING } def parse_reason (result, reason, wname=None): """ Parse the result value and reason line string for the reason and return the result and reason the game ended. result -- The result of the game, if known. It can be "None", but if it is "DRAW", then wname must be supplied """ if result in (WHITEWON, BLACKWON): if "resigns" in reason: reason = WON_RESIGN elif "disconnection" in reason: reason = WON_DISCONNECTION elif "time" in reason: reason = WON_CALLFLAG elif "checkmated" in reason: reason = WON_MATE elif "adjudication" in reason: reason = WON_ADJUDICATION else: reason = UNKNOWN_REASON elif result == DRAW: assert wname is not None if "repetition" in reason: reason = DRAW_REPITITION elif "material" in reason and "time" in reason: if (wname + " ran out of time").lower() in reason: reason = DRAW_BLACKINSUFFICIENTANDWHITETIME else: reason = DRAW_WHITEINSUFFICIENTANDBLACKTIME elif "material" in reason: reason = DRAW_INSUFFICIENT elif "time" in reason: reason = DRAW_CALLFLAG elif "agreement" in reason: reason = DRAW_AGREE elif "stalemate" in reason: reason = DRAW_STALEMATE elif "50" in reason: reason = DRAW_50MOVES elif "length" in reason: # FICS has a max game length on 800 moves reason = DRAW_LENGTH elif "adjudication" in reason: reason = DRAW_ADJUDICATION else: reason = UNKNOWN_REASON elif result == ADJOURNED or "adjourned" in reason: result = ADJOURNED if "courtesy" in reason: if "white" in reason: reason = ADJOURNED_COURTESY_WHITE else: reason = ADJOURNED_COURTESY_BLACK elif "agreement" in reason: reason = ADJOURNED_AGREEMENT elif "connection" in reason: if "white" in reason: reason = ADJOURNED_LOST_CONNECTION_WHITE elif "black" in reason: reason = ADJOURNED_LOST_CONNECTION_BLACK else: reason = ADJOURNED_LOST_CONNECTION elif "server" in reason: reason = ADJOURNED_SERVER_SHUTDOWN else: reason = UNKNOWN_REASON elif "aborted" in reason: result = ABORTED if "agreement" in reason: reason = ABORTED_AGREEMENT elif "moves" in reason: # lost connection and too few moves; game aborted * reason = ABORTED_EARLY elif "move" in reason: # Game aborted on move 1 * reason = ABORTED_EARLY elif "shutdown" in reason: reason = ABORTED_SERVER_SHUTDOWN elif "adjudication" in reason: reason = ABORTED_ADJUDICATION else: reason = UNKNOWN_REASON elif "courtesyadjourned" in reason: result = ADJOURNED reason = ADJOURNED_COURTESY elif "courtesyaborted" in reason: result = ABORTED reason = ABORTED_COURTESY else: result = UNKNOWN_STATE reason = UNKNOWN_REASON return result, reason class BoardManager (GObject): __gsignals__ = { 'playGameCreated' : (SIGNAL_RUN_FIRST, None, (object,)), 'obsGameCreated' : (SIGNAL_RUN_FIRST, None, (object,)), 'boardUpdate' : (SIGNAL_RUN_FIRST, None, (int, int, int, str, str, str, str, int, int)), 'obsGameEnded' : (SIGNAL_RUN_FIRST, None, (object,)), 'curGameEnded' : (SIGNAL_RUN_FIRST, None, (object,)), 'obsGameUnobserved' : (SIGNAL_RUN_FIRST, None, (object,)), 'gamePaused' : (SIGNAL_RUN_FIRST, None, (int, bool)), 'tooManySeeks' : (SIGNAL_RUN_FIRST, None, ()), 'matchDeclined' : (SIGNAL_RUN_FIRST, None, (object,)), } castleSigns = {} queuedStyle12s = {} def __init__ (self, connection): GObject.__init__(self) self.connection = connection self.connection.expect_line (self.onStyle12, "<12> (.+)") self.connection.expect_line (self.onWasPrivate, "Sorry, game (\d+) is a private game\.") self.connection.expect_line (self.tooManySeeks, "You can only have 3 active seeks.") self.connection.expect_line (self.matchDeclined, "%s declines the match offer." % names) self.connection.expect_n_lines (self.onPlayGameCreated, "Creating: %s %s %s %s %s ([^ ]+) (\d+) (\d+)(?: \(adjourned\))?" % (names, ratings, names, ratings, ratedexp), "{Game (\d+) \(%s vs\. %s\) (?:Creating|Continuing) %s ([^ ]+) match\." % (names, names, ratedexp), "", "<12> (.+)") self.connection.expect_fromto (self.onObserveGameCreated, "Movelist for game (\d+):", "{Still in progress} \*") self.connection.expect_line (self.onGamePause, "Game (\d+): Game clock (paused|resumed)\.") self.connection.expect_line (self.onUnobserveGame, "Removing game (\d+) from observation list\.") self.queuedEmits = {} self.gamemodelStartedEvents = {} self.theGameImPlaying = None self.gamesImObserving = {} # The ms ivar makes the remaining second fields in style12 use ms self.connection.lvm.setVariable("ms", 1) # Style12 is a must, when you don't want to parse visualoptimized stuff self.connection.lvm.setVariable("style", "12") # When we observe fischer games, this puts a startpos in the movelist self.connection.lvm.setVariable("startpos", 1) # movecase ensures that bc3 will never be a bishop move self.connection.lvm.setVariable("movecase", 1) # don't unobserve games when we start a new game self.connection.lvm.setVariable("unobserve", 3) self.connection.lvm.autoFlagNotify() # gameinfo doesn't really have any interesting info, at least not # until we implement crasyhouse and stuff # self.connection.lvm.setVariable("gameinfo", 1) # We don't use deltamoves as fisc won't send them with variants #self.connection.lvm.setVariable("compressmove", 1) def start (self): self.connection.games.connect("FICSGameEnded", self.onGameEnd) @classmethod def parseStyle12 (cls, line, castleSigns=None): fields = line.split() curcol = fields[8] == "B" and BLACK or WHITE gameno = int(fields[15]) relation = relations[fields[18]] ply = int(fields[25])*2 - (curcol == WHITE and 2 or 1) lastmove = fields[28] != "none" and fields[28] or None wname = fields[16] bname = fields[17] wms = int(fields[23]) bms = int(fields[24]) gain = int(fields[20]) # Board data fenrows = [] for row in fields[:8]: fenrow = [] spaceCounter = 0 for c in row: if c == "-": spaceCounter += 1 else: if spaceCounter: fenrow.append(str(spaceCounter)) spaceCounter = 0 fenrow.append(c) if spaceCounter: fenrow.append(str(spaceCounter)) fenrows.append("".join(fenrow)) fen = "/".join(fenrows) fen += " " # Current color fen += fields[8].lower() fen += " " # Castling if fields[10:14] == ["0","0","0","0"]: fen += "-" else: if fields[10] == "1": fen += castleSigns[0].upper() if fields[11] == "1": fen += castleSigns[1].upper() if fields[12] == "1": fen += castleSigns[0].lower() if fields[13] == "1": fen += castleSigns[1].lower() fen += " " # 1 0 1 1 when short castling k1 last possibility # En passant if fields[9] == "-1": fen += "-" else: fen += fileToEpcord [1-curcol] [int(fields[9])] fen += " " # Half move clock fen += str(max(int(fields[14]),0)) fen += " " # Standard chess numbering fen += fields[25] return gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen def __createGame(self, gameno, wname, bname, wms, bms, fen): wplayer = self.connection.players.get(FICSPlayer(wname)) bplayer = self.connection.players.get(FICSPlayer(bname)) game = FICSGame(wplayer, bplayer, gameno=gameno, board=FICSBoard(wms, bms, fen=fen)) game = self.connection.games.get(game, emit=False) return game def onStyle12 (self, match): style12 = match.groups()[0] gameno = int(style12.split()[15]) if gameno in self.queuedStyle12s: self.queuedStyle12s[gameno].append(style12) return if self.gamemodelStartedEvents.has_key(gameno): self.gamemodelStartedEvents[gameno].wait() if gameno in self.castleSigns: castleSigns = self.castleSigns[gameno] else: castleSigns = ("k","q") gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen = \ self.parseStyle12(style12, castleSigns) if gameno not in self.gamemodelStartedEvents: game = self.connection.games.get_game_by_gameno(gameno) # observe, follow from console if game is not None and game.supported: self.observe(game) else: if relation == IC_POS_OBSERVING: game = self.__createGame(gameno, wname, bname, wms, bms, fen) if game.supported: self.observe(game) self.emit("boardUpdate", gameno, ply, curcol, lastmove, fen, wname, bname, wms, bms) def onGameModelStarted (self, gameno): self.gamemodelStartedEvents[gameno].set() def onWasPrivate (self, match): # When observable games were added to the list later than the latest # full send, private information will not be known. gameno = int(match.groups()[0]) try: game = self.connection.games.get_game_by_gameno(gameno) except KeyError: return game.private = True def tooManySeeks (self, match): self.emit("tooManySeeks") def matchDeclined (self, match): decliner, = match.groups() decliner = self.connection.players.get(FICSPlayer(decliner), create=False) self.emit("matchDeclined", decliner) @classmethod def generateCastleSigns (cls, style12, game_type): if game_type.variant_type == FISCHERRANDOMCHESS: backrow = style12.split()[0] leftside = backrow.find("r") rightside = backrow.find("r", leftside+1) return (reprFile[rightside], reprFile[leftside]) else: return ("k", "q") @staticmethod def parseRating (rating): return int(rating) if rating.isdigit() else 0 def onPlayGameCreated (self, matchlist): log.debug("BM.onPlayGameCreated: %s\n%s\n" % (matchlist[0].string, matchlist[1].string)) wname, wrating, bname, brating, rated, type, min, inc = matchlist[0].groups() gameno, wname, bname, rated, type = matchlist[1].groups() style12 = matchlist[-1].groups()[0] gameno = int(gameno) wrating = self.parseRating(wrating) brating = self.parseRating(brating) rated = rated == "rated" game_type = GAME_TYPES[type] castleSigns = self.generateCastleSigns(style12, game_type) self.castleSigns[gameno] = castleSigns gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen = \ self.parseStyle12(style12, castleSigns) wplayer = self.connection.players.get(FICSPlayer(wname)) bplayer = self.connection.players.get(FICSPlayer(bname)) for player, rating in ((wplayer, wrating), (bplayer, brating)): if game_type.rating_type in player.ratings and \ player.ratings[game_type.rating_type].elo != rating: player.ratings[game_type.rating_type].elo = rating game = FICSGame(wplayer, bplayer, gameno=gameno, rated=rated, game_type=game_type, min=int(min), inc=int(inc), board=FICSBoard(wms, bms, fen=fen)) game = self.connection.games.get(game) for player in (wplayer, bplayer): if player.status != IC_STATUS_PLAYING: player.status = IC_STATUS_PLAYING if player.game != game: player.game = game self.theGameImPlaying = game self.gamemodelStartedEvents[gameno] = threading.Event() self.emit("playGameCreated", game) def parseGame (self, matchlist, gameclass, in_progress=False): """ Parses the header and movelist for an observed or stored game from its matchlist (an re.match object) into a gameclass (FICSGame or subclass of) object. in_progress - should be True for an observed game matchlist, and False for stored/adjourned games """ ################# observed game movelist example: # Movelist for game 64: # # Ajido (2281) vs. IMgooeyjim (2068) --- Thu Oct 14, 20:36 PDT 2010 # Rated standard match, initial time: 15 minutes, increment: 3 seconds. # # Move Ajido IMgooeyjim # ---- --------------------- --------------------- # 1. d4 (0:00.000) Nf6 (0:00.000) # 2. c4 (0:04.061) g6 (0:00.969) # 3. Nc3 (0:13.280) Bg7 (0:06.422) # {Still in progress} * # ################## stored game example: # BwanaSlei (1137) vs. mgatto (1336) --- Wed Nov 5, 20:56 PST 2008 # Rated blitz match, initial time: 5 minutes, increment: 0 seconds. # # Move BwanaSlei mgatto # ---- --------------------- --------------------- # 1. e4 (0:00.000) c5 (0:00.000) # 2. d4 (0:05.750) cxd4 (0:03.020) # ... # 23. Qxf3 (1:05.500) # {White lost connection; game adjourned} * # ################## stored wild/3 game with style12: # kurushi (1626) vs. mgatto (1627) --- Thu Nov 4, 10:33 PDT 2010 # Rated wild/3 match, initial time: 3 minutes, increment: 0 seconds. # # <12> nqbrknrn pppppppp -------- -------- -------- -------- PPPPPPPP NQBRKNRN W -1 0 0 0 0 0 17 kurushi mgatto -4 3 0 39 39 169403 45227 1 none (0:00.000) none 0 1 0 # # Move kurushi mgatto # ---- --------------------- --------------------- # 1. Nb3 (0:00.000) d5 (0:00.000) # 2. Nhg3 (0:00.386) e5 (0:03.672) # ... # 28. Rxd5 (0:00.412) # {Black lost connection; game adjourned} * # ################## stored game movelist following stored game(s): # Stored games for mgatto: # C Opponent On Type Str M ECO Date # 1: W BabyLurking Y [ br 5 0] 29-13 W27 D37 Fri Nov 5, 04:41 PDT 2010 # 2: W gbtami N [ wr 5 0] 32-34 W14 --- Thu Oct 21, 00:14 PDT 2010 # # mgatto (1233) vs. BabyLurking (1455) --- Fri Nov 5, 04:33 PDT 2010 # Rated blitz match, initial time: 5 minutes, increment: 0 seconds. # # Move mgatto BabyLurking # ---- ---------------- ---------------- # 1. Nf3 (0:00) d5 (0:00) # 2. d4 (0:03) Nf6 (0:00) # 3. c4 (0:03) e6 (0:00) # {White lost connection; game adjourned} * # ################### stored game movelist following stored game(s): ### Note: A wild stored game in this format won't be parseable into a board because ### it doesn't come with a style12 that has the start position, so we warn and return ################### # Stored games for mgatto: # C Opponent On Type Str M ECO Date # 1: W gbtami N [ wr 5 0] 32-34 W14 --- Thu Oct 21, 00:14 PDT 2010 # # mgatto (1627) vs. gbtami (1881) --- Thu Oct 21, 00:10 PDT 2010 # Rated wild/fr match, initial time: 5 minutes, increment: 0 seconds. # # Move mgatto gbtami # ---- ---------------- ---------------- # 1. d4 (0:00) b6 (0:00) # 2. b3 (0:06) d5 (0:03) # 3. c4 (0:08) e6 (0:03) # 4. e3 (0:04) dxc4 (0:02) # 5. bxc4 (0:02) g6 (0:09) # 6. Nd3 (0:12) Bg7 (0:02) # 7. Nc3 (0:10) Ne7 (0:03) # 8. Be2 (0:08) c5 (0:05) # 9. a4 (0:07) cxd4 (0:38) # 10. exd4 (0:06) Bxd4 (0:03) # 11. O-O (0:10) Qc6 (0:06) # 12. Bf3 (0:16) Qxc4 (0:04) # 13. Bxa8 (0:03) Rxa8 (0:14) # {White lost connection; game adjourned} * # ################## other reasons the game could be stored/adjourned: # Game courtesyadjourned by (Black|White) # Still in progress # This one must be a FICS bug # Game adjourned by mutual agreement # (White|Black) lost connection; game adjourned # Game adjourned by ((server shutdown)|(adjudication)|(simul holder)) index = 0 if in_progress: gameno = int(matchlist[index].groups()[0]) index += 2 header1 = matchlist[index] if isinstance(matchlist[index], str) \ else matchlist[index].group() matches = moveListHeader1.match(header1).groups() wname, wrating, bname, brating = matches[:4] if self.connection.FatICS: year, month, day, hour, minute, timezone = matches[11:] else: weekday, month, day, hour, minute, timezone, year = matches[4:11] month = months.index(month)+1 wrating = self.parseRating(wrating) brating = self.parseRating(brating) rated, game_type, minutes, increment = \ moveListHeader2.match(matchlist[index+1]).groups() minutes = int(minutes) increment = int(increment) game_type = GAME_TYPES[game_type] reason = matchlist[-1].group().lower() result = None if in_progress else ADJOURNED result, reason = parse_reason(result, reason) index += 3 if matchlist[index].startswith("<12>"): style12 = matchlist[index][5:] castleSigns = self.generateCastleSigns(style12, game_type) gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, \ fen = self.parseStyle12(style12, castleSigns) initialfen = fen movesstart = index + 4 else: if game_type.rating_type == TYPE_WILD: # we need a style12 start position to correctly parse a wild/* board log.error("BoardManager.parseGame: no style12 for %s board.\n" % game_type.fics_name) return None castleSigns = ("k", "q") initialfen = None movesstart = index + 2 if in_progress: self.castleSigns[gameno] = castleSigns moves = {} wms = bms = minutes * 60 * 1000 for line in matchlist[movesstart:-1]: if not moveListMoves.match(line): log.error("BoardManager.parseGame: unmatched line: \"%s\"\n" % \ repr(line)) raise moveno, wmove, wmin, wsec, wmsec, bmove, bmin, bsec, bmsec = \ moveListMoves.match(line).groups() ply = int(moveno)*2-2 # TODO: add {[%emt 3.889]} move time PGN tags to each move if wmove: moves[ply] = wmove wms -= (int(wmin) * 60 * 1000) + (int(wsec) * 1000) if wmsec is not None: wms -= int(wmsec) if int(moveno) > 1 and increment > 0: wms += (increment * 1000) if bmove: moves[ply+1] = bmove bms -= (int(bmin) * 60 * 1000) + (int(bsec) * 1000) if bmsec is not None: bms -= int(bmsec) if int(moveno) > 1 and increment > 0: bms += (increment * 1000) if in_progress: # Apply queued board updates for style12 in self.queuedStyle12s[gameno]: gameno, relation, curcol, ply, wname, bname, wms, bms, gain, lastmove, fen = \ self.parseStyle12(style12, castleSigns) if lastmove == None: continue moves[ply-1] = lastmove # Updated the queuedMoves in case there has been a takeback for moveply in moves.keys(): if moveply > ply-1: del moves[moveply] del self.queuedStyle12s[gameno] pgnHead = [ ("Event", "FICS %s %s game" % (rated.lower(), game_type.fics_name)), ("Site", "FICS"), ("White", wname), ("Black", bname), ("TimeControl", "%d+%d" % (minutes * 60, increment)), ("Result", "*"), ("WhiteClock", msToClockTimeTag(wms)), ("BlackClock", msToClockTimeTag(bms)), ] if wrating != 0: pgnHead += [ ("WhiteElo", wrating) ] if brating != 0: pgnHead += [ ("BlackElo", brating) ] if year and month and day and hour and minute: pgnHead += [ ("Year", int(year)), ("Month", int(month)), ("Day", int(day)), ("Time", "%02d:%02d:00" % (int(hour), int(minute))), ] if initialfen: pgnHead += [ ("SetUp", "1"), ("FEN", initialfen) ] if game_type.variant_type == FISCHERRANDOMCHESS: pgnHead += [ ("Variant", "Fischerandom") ] # FR is the only variant used in this tag by the PGN generator @ # ficsgames.org. They put all the other wild/* stuff only in the # "Event" header. elif game_type.variant_type == CRAZYHOUSECHESS: pgnHead += [ ("Variant", "Crazyhouse") ] elif game_type.variant_type in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): pgnHead += [ ("Variant", "Wildcastle") ] pgn = "\n".join(['[%s "%s"]' % line for line in pgnHead]) + "\n" moves = moves.items() moves.sort() for ply, move in moves: if ply % 2 == 0: pgn += "%d. " % (ply/2+1) pgn += move + " " pgn += "*\n" wplayer = self.connection.players.get(FICSPlayer(wname)) bplayer = self.connection.players.get(FICSPlayer(bname)) for player, rating in ((wplayer, wrating), (bplayer, brating)): if game_type.rating_type in player.ratings and \ player.ratings[game_type.rating_type].elo != rating and \ player.ratings[game_type.rating_type].elo == 0: player.ratings[game_type.rating_type].elo = rating game = gameclass(wplayer, bplayer, game_type=game_type, rated=(rated.lower() == "rated"), min=minutes, inc=increment, board=FICSBoard(wms, bms, pgn=pgn)) if in_progress: game.gameno = gameno else: game.reason = reason game = self.connection.games.get(game, emit=False) return game def onObserveGameCreated (self, matchlist): game = self.parseGame(matchlist, FICSGame, in_progress=True) self.gamesImObserving[game] = None self.emit ("obsGameCreated", game) if game.gameno in self.gamemodelStartedEvents: self.gamemodelStartedEvents[game.gameno].wait() for emit in self.queuedEmits[game.gameno]: emit() del self.queuedEmits[game.gameno] onObserveGameCreated.BLKCMD = BLKCMD_MOVES def onGameEnd (self, games, game): log.debug("BM.onGameEnd: %s\n" % game) if game == self.theGameImPlaying: if game.gameno in self.gamemodelStartedEvents: self.gamemodelStartedEvents[game.gameno].wait() self.emit("curGameEnded", game) self.theGameImPlaying = None del self.gamemodelStartedEvents[game.gameno] elif game in self.gamesImObserving: log.debug("BM.onGameEnd: %s: gamesImObserving\n" % game) if game.gameno in self.queuedEmits: log.debug("BM.onGameEnd: %s: queuedEmits\n" % game) self.queuedEmits[game.gameno].append( lambda:self.emit("obsGameEnded", game)) else: try: event = self.gamemodelStartedEvents[game.gameno] except KeyError: pass else: log.debug("BM.onGameEnd: %s: event.wait()\n" % game) event.wait() del self.gamesImObserving[game] self.emit("obsGameEnded", game) def onGamePause (self, match): gameno, state = match.groups() gameno = int(gameno) if gameno in self.queuedEmits: self.queuedEmits[gameno].append( lambda:self.emit("gamePaused",gameno, state=="paused")) else: if gameno in self.gamemodelStartedEvents: self.gamemodelStartedEvents[gameno].wait() self.emit("gamePaused", gameno, state=="paused") def onUnobserveGame (self, match): gameno = int(match.groups()[0]) log.debug("BM.onUnobserveGame: gameno: %s\n" % gameno) try: del self.gamemodelStartedEvents[gameno] game = self.connection.games.get_game_by_gameno(gameno) except KeyError: return self.emit("obsGameUnobserved", game) # TODO: delete self.castleSigns[gameno] ? onUnobserveGame.BLKCMD = BLKCMD_UNOBSERVE ############################################################################ # Interacting # ############################################################################ def isPlaying (self): return self.theGameImPlaying is not None def sendMove (self, move): self.connection.client.run_command(move) def resign (self): self.connection.client.run_command("resign") def callflag (self): self.connection.client.run_command("flag") def observe (self, game): if not game.gameno in self.gamemodelStartedEvents: self.queuedStyle12s[game.gameno] = [] self.queuedEmits[game.gameno] = [] self.gamemodelStartedEvents[game.gameno] = threading.Event() self.connection.client.run_command("observe %d" % game.gameno) self.connection.client.run_command("moves %d" % game.gameno) def unobserve (self, game): if game.gameno is not None: self.connection.client.run_command("unobserve %d" % game.gameno) def play (self, seekno): self.connection.client.run_command("play %s" % seekno) def accept (self, offerno): self.connection.client.run_command("accept %s" % offerno) def decline (self, offerno): self.connection.client.run_command("decline %s" % offerno) if __name__ == "__main__": from pychess.ic.FICSConnection import Connection con = Connection("","","","") bm = BoardManager(con) print bm._BoardManager__parseStyle12("rkbrnqnb pppppppp -------- -------- -------- -------- PPPPPPPP RKBRNQNB W -1 1 1 1 1 0 161 GuestNPFS GuestMZZK -1 2 12 39 39 120 120 1 none (0:00) none 1 0 0", ("d","a")) print bm._BoardManager__parseStyle12("rnbqkbnr pppp-ppp -------- ----p--- ----PP-- -------- PPPP--PP RNBQKBNR B 5 1 1 1 1 0 241 GuestGFFC GuestNXMP -4 2 12 39 39 120000 120000 1 none (0:00.000) none 0 0 0", ("k","q")) pychess-0.12beta3/lib/pychess/ic/managers/ListAndVarManager.py0000755000175000017470000001555712173551105023377 0ustar tamasusersimport atexit from threading import Semaphore from pychess.ic.block_codes import BLKCMD_VARIABLES, BLKCMD_IVARIABLES from pychess.System import conf class ListAndVarManager: def __init__ (self, connection): self.connection = connection # Lists self.publicLists = {} self.personalLists = {} self.personalBackup = {} self.listLock = Semaphore(0) self.connection.expect_fromplus (self.onUpdateLists, "Lists:", "(?:\w+\s+is (?:PUBLIC|PERSONAL))|$") self.connection.expect_line (self.onUpdateEmptyListitems, "-- (\w+) list: 0 \w+ --") self.connection.expect_fromplus (self.onUpdateListitems, "-- (\w+) list: ([1-9]\d*) \w+ --", "(?:\w+ *)+$") self.connection.client.run_command("showlist") # Variables self.variablesBackup = {} self.variables = {} self.ivariables = {} self.varLock = Semaphore(0) self.connection.expect_fromplus (self.onIVariables, "(Interface variable settings of \w+):", "(?:\w+=(?:\w+|\?) *)*$") self.connection.expect_fromplus (self.onVariables, "(Variable settings of \w+):", "(?:\w+=(?:\w+|\?) *)*$") # The order of next two is important to FatICS ! self.connection.client.run_command("ivariables") self.connection.client.run_command("variables") # Auto flag conf.notify_add('autoCallFlag', self.autoFlagNotify) atexit.register(self.stop) def isReady (self): # FatICS showlist output is not well formed yet if self.connection.FatICS: return self.varLock._Semaphore__value else: return self.listLock._Semaphore__value and self.varLock._Semaphore__value def stop (self): if not self.isReady(): return # Restore personal lists for listName in self.personalLists.keys(): backup = self.personalBackup[listName] inuse = self.personalLists[listName] # Remove which are in use but not in backup for item in inuse-backup: self.removeFromList(listName, item) # Add which are in backup but not in use: for item in backup-inuse: self.addToList(listName, item) # Restore variables for key, usedvalue in self.variables.iteritems(): if key in self.variablesBackup and usedvalue != self.variablesBackup[key]: self.setVariable(key, self.variablesBackup[key]) # Lists def onUpdateLists (self, matchlist): self.publicLists.clear() self.personalLists.clear() for line in [m.group(0) for m in matchlist[1:] if m.group(0)]: name, _, public_personal = line.split() self.connection.client.run_command("showlist %s" % name) if public_personal == "PUBLIC": self.publicLists[name] = set() else: self.personalLists[name] = set() # TODO: merge 3 regex #onUpdateLists.BLKCMD = BLKCMD_SHOWLIST def onUpdateEmptyListitems (self, match): listName = match.groups()[0] if listName in self.publicLists: self.publicLists[listName] = set() else: self.personalLists[listName] = set() if not listName in self.personalBackup: self.personalBackup[listName] = set() # Unlock if people are waiting of the backup if not self.listLock._Semaphore__value and \ len(self.personalLists) == len(self.personalBackup): self.listLock.release() def onUpdateListitems (self, matchlist): listName, itemCount = matchlist[0].groups() items = set() for match in matchlist[1:]: items.update(match.group().split()) if listName in self.publicLists: self.publicLists[listName] = items else: self.personalLists[listName] = items if not listName in self.personalBackup: self.personalBackup[listName] = items # Unlock if people are waiting of the backup if not self.listLock._Semaphore__value and \ len(self.personalLists) == len(self.personalBackup): self.listLock.release() # Interface variables def onIVariables (self, matchlist): name = matchlist[0] for line in [m.group(0) for m in matchlist[1:] if m.group(0)]: for kv in line.split(): k,v = kv.split("=") self.ivariables[k] = v onIVariables.BLKCMD = BLKCMD_IVARIABLES # Variables def onVariables (self, matchlist): name = matchlist[0] for line in [m.group(0) for m in matchlist[1:] if m.group(0)]: for kv in line.split(): k,v = kv.split("=") self.variables[k] = v if k not in self.variablesBackup: self.variablesBackup[k] = v # Unlock if people are waiting of the backup and we've got the normal # variable backup set. The interface variables automatically reset if not self.varLock._Semaphore__value and self.variablesBackup: self.varLock.release() onVariables.BLKCMD = BLKCMD_VARIABLES def autoFlagNotify(self, *args): self.setVariable('autoflag', int(conf.get('autoCallFlag',False))) #print 'notify flag', conf.get('autoCallFlag',False) # User methods def getList (self, listName): self.listLock.acquire() self.listLock.release() if listName in self.publicLists: return self.publicLists(listName) return self.personalLists[listName] def addToList (self, listName, value): self.listLock.acquire() self.listLock.release() self.connection.client.run_command("+%s %s" % (listName, value)) #self.lists[listName].append(value) def removeFromList (self, listName, value): self.listLock.acquire() self.listLock.release() self.connection.client.run_command("-%s %s" % (listName, value)) #self.lists[listName].append(value) def getVariable (self, name): self.varLock.acquire() self.varLock.release() if name in self.variables: return self.variables[name] return self.ivariables[name] def setVariable (self, name, value): self.varLock.acquire() self.varLock.release() if name in self.ivariables: self.connection.client.run_command("iset %s %s" % (name, value)) self.ivariables[name] = value else: self.connection.client.run_command("set %s %s" % (name, value)) self.variables[name] = value pychess-0.12beta3/lib/pychess/ic/ICGameModel.py0000755000175000017470000002050712174451010020330 0ustar tamasusersfrom pychess.System.Log import log from pychess.Utils.GameModel import GameModel from pychess.Utils.Offer import Offer from pychess.Utils.const import * from pychess.Players.Human import Human from pychess.ic import GAME_TYPES class ICGameModel (GameModel): def __init__ (self, connection, ficsgame, timemodel): assert ficsgame.game_type in GAME_TYPES.values() GameModel.__init__(self, timemodel, ficsgame.game_type.variant) self.connection = connection self.ficsgame = ficsgame connections = self.connections connections[connection.bm].append(connection.bm.connect("boardUpdate", self.onBoardUpdate)) connections[connection.bm].append(connection.bm.connect("obsGameEnded", self.onGameEnded)) connections[connection.bm].append(connection.bm.connect("curGameEnded", self.onGameEnded)) connections[connection.bm].append(connection.bm.connect("gamePaused", self.onGamePaused)) connections[connection.om].append(connection.om.connect("onActionError", self.onActionError)) connections[connection].append(connection.connect("disconnected", self.onDisconnected)) rated = "rated" if ficsgame.rated else "unrated" # This is in the format that ficsgames.org writes these PGN headers self.tags["Event"] = "FICS %s %s game" % (rated, ficsgame.game_type.fics_name) self.tags["Site"] = "FICS" def __repr__ (self): s = GameModel.__repr__(self) s = s.replace(" Actions" works if isinstance(obj, Human): continue for handler_id in self.connections[obj]: if obj.handler_is_connected(handler_id): log.debug("ICGameModel.__disconnect: object=%s handler_id=%s\n" % \ (repr(obj), repr(handler_id))) obj.disconnect(handler_id) self.connections = None def hasGuestPlayers (self): for player in (self.ficsgame.wplayer, self.ficsgame.bplayer): if player.isGuest(): return True return False def onBoardUpdate (self, bm, gameno, ply, curcol, lastmove, fen, wname, bname, wms, bms): log.debug(("ICGameModel.onBoardUpdate: id=%s self.ply=%s self.players=%s gameno=%s " + \ "wname=%s bname=%s ply=%s curcol=%s lastmove=%s fen=%s wms=%s bms=%s\n") % \ (str(id(self)), str(self.ply), repr(self.players), str(gameno), str(wname), str(bname), \ str(ply), str(curcol), str(lastmove), str(fen), str(wms), str(bms))) if gameno != self.ficsgame.gameno or len(self.players) < 2 or wname != self.players[0].ichandle \ or bname != self.players[1].ichandle: return log.debug("ICGameModel.onBoardUpdate: id=%d, self.players=%s: updating time and/or ply\n" % \ (id(self), str(self.players))) if self.timemodel: log.debug("ICGameModel.onBoardUpdate: id=%d self.players=%s: updating timemodel\n" % \ (id(self), str(self.players))) self.timemodel.updatePlayer (WHITE, wms/1000.) self.timemodel.updatePlayer (BLACK, bms/1000.) if ply < self.ply: log.debug("ICGameModel.onBoardUpdate: id=%d self.players=%s self.ply=%d ply=%d: TAKEBACK\n" % \ (id(self), str(self.players), self.ply, ply)) offers = self.offers.keys() for offer in offers: if offer.type == TAKEBACK_OFFER: # There can only be 1 outstanding takeback offer for both players on FICS, # (a counter-offer by the offeree for a takeback for a different number of # moves replaces the initial offer) so we can safely remove all of them del self.offers[offer] self.undoMoves(self.ply-ply) def onGameEnded (self, bm, ficsgame): if ficsgame == self.ficsgame and len(self.players) >= 2: log.debug( "ICGameModel.onGameEnded: self.players=%s ficsgame=%s\n" % \ (repr(self.players), repr(ficsgame))) self.end(ficsgame.result, ficsgame.reason) def setPlayers (self, players): GameModel.setPlayers(self, players) if self.players[WHITE].icrating: self.tags["WhiteElo"] = self.players[WHITE].icrating if self.players[BLACK].icrating: self.tags["BlackElo"] = self.players[BLACK].icrating def onGamePaused (self, bm, gameno, paused): if paused: self.pause() else: self.resume() # we have to do this here rather than in acceptRecieved(), because # sometimes FICS pauses/unpauses a game clock without telling us that the # original offer was "accepted"/"received", such as when one player offers # "pause" and the other player responds not with "accept" but "pause" for offer in self.offers.keys(): if offer.type in (PAUSE_OFFER, RESUME_OFFER): del self.offers[offer] def onDisconnected (self, connection): if self.status in (WAITING_TO_START, PAUSED, RUNNING): self.end (KILLED, DISCONNECTED) ############################################################################ # Offer management # ############################################################################ def offerRecieved (self, player, offer): log.debug("ICGameModel.offerRecieved: offerer=%s %s\n" % (repr(player), offer)) if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer.type == CHAT_ACTION: opPlayer.putMessage(offer.param) elif offer.type in (RESIGNATION, FLAG_CALL): self.connection.om.offer(offer, self.ply) elif offer.type in OFFERS: if offer not in self.offers: log.debug("ICGameModel.offerRecieved: %s.offer(%s)\n" % (repr(opPlayer), offer)) self.offers[offer] = player opPlayer.offer(offer) # If the offer was an update to an old one, like a new takebackvalue # we want to remove the old one from self.offers for offer_ in self.offers.keys(): if offer.type == offer_.type and offer != offer_: del self.offers[offer_] def acceptRecieved (self, player, offer): log.debug("ICGameModel.acceptRecieved: accepter=%s %s\n" % (repr(player), offer)) if player.__type__ == LOCAL: if offer not in self.offers or self.offers[offer] == player: player.offerError(offer, ACTION_ERROR_NONE_TO_ACCEPT) else: log.debug("ICGameModel.acceptRecieved: connection.om.accept(%s)\n" % offer) self.connection.om.accept(offer) del self.offers[offer] # We don't handle any ServerPlayer calls here, as the fics server will # know automatically if he/she accepts an offer, and will simply send # us the result. def checkStatus (self): pass def onActionError (self, om, offer, error): self.emit("action_error", offer, error) # # End # def end (self, status, reason): if self.status in UNFINISHED_STATES: self.__disconnect() if self.isObservationGame(): self.connection.bm.unobserve(self.ficsgame) else: self.connection.om.offer(Offer(ABORT_OFFER), -1) self.connection.om.offer(Offer(RESIGNATION), -1) GameModel.end(self, status, reason) pychess-0.12beta3/lib/pychess/ic/VerboseTelnet.py0000755000175000017470000001767612175200136021062 0ustar tamasusersimport re from pychess.System.Log import log from pychess.ic.block_codes import BLOCK_START, BLOCK_SEPARATOR, BLOCK_END class ConsoleHandler(): def __init__ (self, callback): self.callback = callback def handle(self, line, block_code=None): if line: self.callback(line, block_code) class Prediction: def __init__ (self, callback, *regexps): self.callback = callback self.name = callback.__name__ self.regexps = [] self.hash = hash(callback) for regexp in regexps: self.hash ^= hash(regexp) if not hasattr("match", regexp): # FICS being fairly case insensitive, we can compile with IGNORECASE # to easy some expressions self.regexps.append(re.compile(regexp, re.IGNORECASE)) def __hash__ (self): return self.hash def __cmp__ (self, other): return self.callback == other.callback and \ self.regexps == other.regexps RETURN_NO_MATCH, RETURN_MATCH, RETURN_NEED_MORE = range(3) class LinePrediction (Prediction): def __init__ (self, callback, regexp): Prediction.__init__(self, callback, regexp) def handle(self, line): match = self.regexps[0].match(line) if match: self.callback(match) return RETURN_MATCH return RETURN_NO_MATCH class ManyLinesPrediction (Prediction): def __init__ (self, callback, regexp): Prediction.__init__(self, callback, regexp) self.matchlist = [] def handle(self, line): match = self.regexps[0].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE if self.matchlist: self.callback(self.matchlist) return RETURN_NO_MATCH class NLinesPrediction (Prediction): def __init__ (self, callback, *regexps): Prediction.__init__(self, callback, *regexps) self.matchlist = [] def handle(self, line): regexp = self.regexps[len(self.matchlist)] match = regexp.match(line) if match: self.matchlist.append(match) if len(self.matchlist) == len(self.regexps): self.callback(self.matchlist) del self.matchlist[:] return RETURN_MATCH return RETURN_NEED_MORE return RETURN_NO_MATCH class FromPlusPrediction (Prediction): def __init__ (self, callback, regexp0, regexp1): Prediction.__init__(self, callback, regexp0, regexp1) self.matchlist = [] def handle (self, line): if not self.matchlist: match = self.regexps[0].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE else: match = self.regexps[1].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE else: self.callback(self.matchlist) del self.matchlist[:] return RETURN_NO_MATCH return RETURN_NO_MATCH class FromToPrediction (Prediction): def __init__ (self, callback, regexp0, regexp1): Prediction.__init__(self, callback, regexp0, regexp1) self.matchlist = [] def handle (self, line): if not self.matchlist: match = self.regexps[0].match(line) if match: self.matchlist.append(match) return RETURN_NEED_MORE else: match = self.regexps[1].match(line) if match: #print "FromToPrediction %s (to) match: %s" % (self.name, line) self.matchlist.append(match) self.callback(self.matchlist) del self.matchlist[:] return RETURN_MATCH else: self.matchlist.append(line) return RETURN_NEED_MORE return RETURN_NO_MATCH class PredictionsTelnet: def __init__ (self, telnet, predictions, reply_cmd_dict): self.telnet = telnet self.predictions = predictions self.reply_cmd_dict = reply_cmd_dict self.consolehandler = None self.__state = None self.__linePrefix = None self.__block_mode = False self.__command_id = 0 self._inReply = False def getLinePrefix(self): return self.__linePrefix def setLinePrefix(self, value): self.__linePrefix = value def setBlockModeOn(self): self.__block_mode = True def handleSomeText (self): line = self.telnet.readline().strip() if self.__block_mode and self._inReply: id, code, text = self._inReply if line.endswith(BLOCK_END): self._inReply = None line = line[:-1] self.handle_command_reply(id, code, "%s\n%s" % (text, line)) else: self._inReply = (id, code, "%s\n%s" % (text, line)) return if line.startswith(self.getLinePrefix()): line = line[len(self.getLinePrefix())+1:] if self.__block_mode: if line.startswith(BLOCK_START): line = line[1:] parts = line.split(BLOCK_SEPARATOR) if len(parts) == 3: id, code, text = parts elif len(parts) == 4: id, code, error_code, text = parts else: print "Posing not supported yet..." return line = text if text.endswith(BLOCK_END): line = text[:-1] self.handle_command_reply(id, code, line) else: self._inReply = (id, code, line) return self.parseNormalLine(line) def parseNormalLine(self, line, block_code=None): log.debug(line+"\n", (self.telnet.name, "lines")) origLine = line if self.__state: prediction = self.__state answer = self.__state.handle(line) if answer != RETURN_NO_MATCH: log.debug(line+"\n", (self.telnet.name, prediction.name)) if answer in (RETURN_NO_MATCH, RETURN_MATCH): self.__state = None if answer in (RETURN_MATCH, RETURN_NEED_MORE): if self.consolehandler is not None: self.consolehandler.handle(line, block_code) return if not self.__state: preds = (self.reply_cmd_dict[block_code],) if block_code in self.reply_cmd_dict else self.predictions for prediction in preds: answer = prediction.handle(line) if answer != RETURN_NO_MATCH: log.debug(line+"\n", (self.telnet.name, prediction.name)) if answer == RETURN_NEED_MORE: self.__state = prediction if answer in (RETURN_MATCH, RETURN_NEED_MORE): if self.consolehandler is not None: self.consolehandler.handle(line, block_code) break else: if self.consolehandler is not None: self.consolehandler.handle(line) log.debug(origLine+"\n", (self.telnet.name, "nonmatched")) def run_command(self, text): if self.__block_mode: # TODO: reuse id after command reply hadled self.__command_id += 1 text = "%s %s\n" % (self.__command_id, text) return self.telnet.write(text) else: return self.telnet.write("%s\n" % text) def handle_command_reply(self, id, code, text): for line in text.splitlines(): self.parseNormalLine(line, int(code)) log.debug("%s %s %s" % (id, code, text) + "\n", (self.telnet.name, "command_reply")) def close (self): self.telnet.close() pychess-0.12beta3/lib/pychess/System/0000755000175000017470000000000012176727272016614 5ustar tamasuserspychess-0.12beta3/lib/pychess/System/glock.py0000755000175000017470000001117312161415524020257 0ustar tamasusersimport sys, traceback from threading import RLock, currentThread from gtk.gdk import threads_enter, threads_leave import time from pychess.System.prefix import addUserDataPrefix #logfile = open(addUserDataPrefix(time.strftime("%Y-%m-%d_%H-%M-%S") + "-glocks.log"), "w") debug = False debug_stream = sys.stdout gdklocks = {} _rlock = RLock() def has(): me = currentThread() if type(_rlock._RLock__owner) == int: return _rlock._RLock__owner == me._Thread__ident return _rlock._RLock__owner == me def acquire(): me = currentThread() t = time.strftime("%H:%M:%S") if me.ident not in gdklocks: gdklocks[me.ident] = 0 # Ensure we don't deadlock if another thread is waiting on threads_enter # while we wait on _rlock.acquire() if me.getName() == "MainThread" and not has(): if debug: print >> debug_stream, "%s %s: %s: glock.acquire: ---> threads_leave()" % (t, me.ident, me.name) threads_leave() gdklocks[me.ident] -= 1 if debug: print >> debug_stream, "%s %s: %s: glock.acquire: <--- threads_leave()" % (t, me.ident, me.name) # Acquire the lock, if it is not ours, or add one to the recursive counter if debug: print >> debug_stream, "%s %s: %s: glock.acquire: ---> _rlock.acquire()" % (t, me.ident, me.name) _rlock.acquire() if debug: print >> debug_stream, "%s %s: %s: glock.acquire: <--- _rlock.acquire()" % (t, me.ident, me.name) # If it is the first time we lock, we will acquire the gdklock if _rlock._RLock__count == 1: if debug: print >> debug_stream, "%s %s: %s: glock.acquire: ---> threads_enter()" % (t, me.ident, me.name) threads_enter() gdklocks[me.ident] += 1 if debug: print >> debug_stream, "%s %s: %s: glock.acquire: <--- threads_enter()" % (t, me.ident, me.name) def release(): me = currentThread() t = time.strftime("%H:%M:%S") # As it is the natural state for the MainThread to control the gdklock, we # only release it if _rlock has been released so many times that we don't # own it any more if me.getName() == "MainThread": if not has(): if debug: print >> debug_stream, "%s %s: %s: glock.release: ---> threads_leave()" % (t, me.ident, me.name) threads_leave() gdklocks[me.ident] -= 1 if debug: print >> debug_stream, "%s %s: %s: glock.release: <--- threads_leave()" % (t, me.ident, me.name) else: if debug: print >> debug_stream, "%s %s: %s: glock.release: ---> _rlock.release()" % (t, me.ident, me.name) _rlock.release() if debug: print >> debug_stream, "%s %s: %s: glock.release: <--- _rlock.release()" % (t, me.ident, me.name) # If this is the last unlock, we also free the gdklock. elif has(): if _rlock._RLock__count == 1: if debug: print >> debug_stream, "%s %s: %s: glock.release: ---> threads_leave()" % (t, me.ident, me.name) threads_leave() gdklocks[me.ident] -= 1 if debug: print >> debug_stream, "%s %s: %s: glock.release: <--- threads_leave()" % (t, me.ident, me.name) if debug: print >> debug_stream, "%s %s: %s: glock.release: ---> _rlock.release()" % (t, me.ident, me.name) _rlock.release() if debug: print >> debug_stream, "%s %s: %s: glock.release: <--- _rlock.release()" % (t, me.ident, me.name) else: print "%s %s: %s: Warning: Tried to release unowned glock\nTraceback was: %s" % \ (t, me.ident, me.name, traceback.extract_stack()) def glock_connect(emitter, signal, function, *args, **kwargs): def handler(emitter, *extra): acquire() try: function(emitter, *extra) finally: release() return False if "after" in kwargs and kwargs["after"]: return emitter.connect_after(signal, handler, *args) return emitter.connect(signal, handler, *args) def glock_connect_after(emitter, signal, function, *args): return glock_connect(emitter, signal, function, after=True, *args) def glocked(f): def newFunction(*args, **kw): acquire() try: return f(*args, **kw) finally: release() return newFunction if __name__ == "__main__": from threading import Thread def do (): acquire() acquire() release() print _rlock._RLock__owner print currentThread() release() print _rlock._RLock__owner t = Thread(target=do) t.start() t.join() pychess-0.12beta3/lib/pychess/System/gstreamer.py0000755000175000017470000000341012161415524021144 0ustar tamasusersfrom threading import Lock from gobject import GObject, SIGNAL_RUN_FIRST, TYPE_NONE from Log import log try: import pygst pygst.require('0.10') import gst except ImportError, e: log.error("Unable to import gstreamer. All sound will be mute.\n%s" % e) class Player (GObject): __gsignals__ = { 'end': (SIGNAL_RUN_FIRST, TYPE_NONE, ()), 'error': (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)) } def checkSound(self): self.emit("error", None) def play(self, uri): pass else: class Player (GObject): __gsignals__ = { 'end': (SIGNAL_RUN_FIRST, TYPE_NONE, ()), 'error': (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)) } def __init__(self): GObject.__init__(self) self.player = gst.element_factory_make("playbin") self.player.get_bus().add_watch(self.onMessage) def onMessage(self, bus, message): if message.type == gst.MESSAGE_ERROR: # Sound seams sometimes to work, even though errors are dropped. # Therefore we really can't do anything to test. # self.emit("error", message) simpleMessage, advMessage = message.parse_error() log.warn("Gstreamer error '%s': %s" % (simpleMessage, advMessage)) self.__del__() elif message.type == gst.MESSAGE_EOS: self.emit("end") return True def play(self, uri): self.player.set_state(gst.STATE_READY) self.player.set_property("uri", uri) self.player.set_state(gst.STATE_PLAYING) def __del__ (self): self.player.set_state(gst.STATE_NULL) pychess-0.12beta3/lib/pychess/System/uistuff.py0000755000175000017470000004225612161415524020653 0ustar tamasusersimport colorsys import Queue import re import webbrowser import gtk import pango from pychess.System import conf, glock from pychess.System.Log import log from pychess.System.ThreadPool import pool from pychess.System.prefix import addDataPrefix from pychess.widgets.ToggleComboBox import ToggleComboBox def createCombo (combo, data=[]): ls = gtk.ListStore(gtk.gdk.Pixbuf, str) for row in data: ls.append(row) combo.clear() combo.set_model(ls) crp = gtk.CellRendererPixbuf() crp.set_property('xalign',0) crp.set_property('xpad', 2) combo.pack_start(crp, False) combo.add_attribute(crp, 'pixbuf', 0) crt = gtk.CellRendererText() crt.set_property('xalign',0) crt.set_property('xpad', 4) combo.pack_start(crt, True) combo.add_attribute(crt, 'text', 1) #crt.set_property('ellipsize', pango.ELLIPSIZE_MIDDLE) def updateCombo (combo, data): def get_active(combobox): model = combobox.get_model() active = combobox.get_active() if active < 0: return None return model[active][1] last_active = get_active(combo) ls = combo.get_model() ls.clear() new_active = 0 for i, row in enumerate(data): ls.append(row) if last_active == row[1]: new_active = i combo.set_active(new_active) # int.bit_length() new in Python 2.7, so we have to use an equivalent def int_bit_length(i): s = bin(i) # binary representation: bin(-37) --> '-0b100101' s = s.lstrip('-0b') # remove leading zeros and minus sign return len(s) # len('100101') --> 6 def genColor (n, startpoint=0): assert n >= 1 # This splits the 0 - 1 segment in the pizza way h = (2*n-1)/(2.**int_bit_length(n-1))-1 h = (h + startpoint) % 1 # We set saturation based on the amount of green, scaled to the interval # [0.6..0.8]. This ensures a consistent lightness over all colors. rgb = colorsys.hsv_to_rgb(h, 1, 1) rgb = colorsys.hsv_to_rgb(h, 1, (1-rgb[1])*0.2+0.6) # This algorithm ought to balance colors more precisely, but it overrates # the lightness of yellow, and nearly makes it black # yiq = colorsys.rgb_to_yiq(*rgb) # rgb = colorsys.yiq_to_rgb(.125, yiq[1], yiq[2]) return rgb def keepDown (scrolledWindow): def changed (vadjust): if not hasattr(vadjust, "need_scroll") or vadjust.need_scroll: vadjust.set_value(vadjust.upper-vadjust.page_size) vadjust.need_scroll = True scrolledWindow.get_vadjustment().connect("changed", changed) def value_changed (vadjust): vadjust.need_scroll = abs(vadjust.value + vadjust.page_size - \ vadjust.upper) < vadjust.step_increment scrolledWindow.get_vadjustment().connect("value-changed", value_changed) def appendAutowrapColumn (treeview, defwidth, name, **kvargs): cell = gtk.CellRendererText() cell.props.wrap_mode = pango.WRAP_WORD cell.props.wrap_width = defwidth column = gtk.TreeViewColumn(name, cell, **kvargs) treeview.append_column(column) def callback (treeview, allocation, column, cell): otherColumns = (c for c in treeview.get_columns() if c != column) newWidth = allocation.width - sum(c.get_width() for c in otherColumns) newWidth -= treeview.style_get_property("horizontal-separator") * 2 if cell.props.wrap_width == newWidth or newWidth <= 0: return cell.props.wrap_width = newWidth store = treeview.get_model() iter = store.get_iter_first() while iter and store.iter_is_valid(iter): store.row_changed(store.get_path(iter), iter) iter = store.iter_next(iter) treeview.set_size_request(0,-1) treeview.connect_after("size-allocate", callback, column, cell) scroll = treeview.get_parent() if isinstance(scroll, gtk.ScrolledWindow): scroll.set_policy(gtk.POLICY_NEVER, scroll.get_policy()[1]) return cell METHODS = ( # gtk.SpinButton should be listed prior to gtk.Entry, as it is a # subclass, but requires different handling (gtk.SpinButton, ("get_value", "set_value", "value-changed")), (gtk.Entry, ("get_text", "set_text", "changed")), (gtk.Expander, ("get_expanded", "set_expanded", "notify::expanded")), (gtk.ComboBox, ("get_active", "set_active", "changed")), # gtk.ToggleComboBox should be listed prior to gtk.ToggleButton, as it is a # subclass, but requires different handling (ToggleComboBox, ("_get_active", "_set_active", "changed")), (gtk.IconView, ("_get_active", "_set_active", "selection-changed")), (gtk.ToggleButton, ("get_active", "set_active", "toggled")), (gtk.CheckMenuItem, ("get_active", "set_active", "toggled")), (gtk.Range, ("get_value", "set_value", "value-changed"))) def keep (widget, key, get_value_=None, set_value_=None, first_value=None): if widget == None: raise AttributeError, "key '%s' isn't in widgets" % key for class_, methods_ in METHODS: if isinstance(widget, class_): getter, setter, signal = methods_ break else: raise AttributeError, "I don't have any knowledge of type: '%s'" % widget if get_value_: get_value = lambda: get_value_(widget) else: get_value = getattr(widget, getter) if set_value_: set_value = lambda v: set_value_(widget, v) else: set_value = getattr(widget, setter) def setFromConf (): try: v = conf.getStrict(key) except TypeError: log.warn("uistuff.keep.setFromConf: Key '%s' from conf had the wrong type '%s', ignored" % \ (key, type(conf.getStrict(key)))) if first_value != None: conf.set(key, first_value) else: conf.set(key, get_value()) else: set_value(v) def callback(*args): if not conf.hasKey(key) or conf.getStrict(key) != get_value(): conf.set(key, get_value()) widget.connect(signal, callback) conf.notify_add(key, lambda *args: setFromConf()) if conf.hasKey(key): setFromConf() elif first_value != None: conf.set(key, first_value) # loadDialogWidget() and saveDialogWidget() are similar to uistuff.keep() but are needed # for saving widget values for gtk.Dialog instances that are loaded with different # sets of values/configurations and which also aren't instant save like in # uistuff.keep(), but rather are saved later if and when the user clicks # the dialog's OK button def loadDialogWidget (widget, widget_name, config_number, get_value_=None, set_value_=None, first_value=None): key = widget_name + "-" + str(config_number) if widget == None: raise AttributeError, "key '%s' isn't in widgets" % widget_name for class_, methods_ in METHODS: if isinstance(widget, class_): getter, setter, signal = methods_ break else: if set_value_ == None: raise AttributeError, "I don't have any knowledge of type: '%s'" % widget if get_value_: get_value = lambda: get_value_(widget) else: get_value = getattr(widget, getter) if set_value_: set_value = lambda v: set_value_(widget, v) else: set_value = getattr(widget, setter) if conf.hasKey(key): try: v = conf.getStrict(key) except TypeError: log.warn("uistuff.loadDialogWidget: Key '%s' from conf had the wrong type '%s', ignored" % \ (key, type(conf.getStrict(key)))) if first_value != None: conf.set(key, first_value) else: conf.set(key, get_value()) else: set_value(v) elif first_value != None: conf.set(key, first_value) set_value(conf.getStrict(key)) else: log.warn("Didn't load widget \"%s\": no conf value and no first_value arg" % \ widget_name) def saveDialogWidget (widget, widget_name, config_number, get_value_=None): key = widget_name + "-" + str(config_number) if widget == None: raise AttributeError, "key '%s' isn't in widgets" % widget_name for class_, methods_ in METHODS: if isinstance(widget, class_): getter, setter, signal = methods_ break else: if get_value_ == None: raise AttributeError, "I don't have any knowledge of type: '%s'" % widget if get_value_: get_value = lambda: get_value_(widget) else: get_value = getattr(widget, getter) if not conf.hasKey(key) or conf.getStrict(key) != get_value(): conf.set(key, get_value()) POSITION_NONE, POSITION_CENTER, POSITION_GOLDEN = range(3) def keepWindowSize (key, window, defaultSize=None, defaultPosition=POSITION_NONE): """ You should call keepWindowSize before show on your windows """ key = key + "window" def savePosition (window, *event): width = window.get_allocation().width height = window.get_allocation().height x, y = window.get_position() if width <= 0: log.error("Setting width = '%d' for %s to conf" % (width,key)) if height <= 0: log.error("Setting height = '%d' for %s to conf" % (height,key)) conf.set(key+"_width", width) conf.set(key+"_height", height) conf.set(key+"_x", x) conf.set(key+"_y", y) window.connect("delete-event", savePosition, "delete-event") def loadPosition (window): width, height = window.get_size_request() if conf.hasKey(key+"_width") and conf.hasKey(key+"_height"): width = conf.getStrict(key+"_width") height = conf.getStrict(key+"_height") window.resize(width, height) elif defaultSize: width, height = defaultSize window.resize(width, height) if conf.hasKey(key+"_x") and conf.hasKey(key+"_y"): window.move(conf.getStrict(key+"_x"), conf.getStrict(key+"_y")) elif defaultPosition in (POSITION_CENTER, POSITION_GOLDEN): monitor_x, monitor_y, monitor_width, monitor_height = getMonitorBounds() x = int(monitor_width/2-width/2) + monitor_x if defaultPosition == POSITION_CENTER: y = int(monitor_height/2-height/2) + monitor_y else: # Place the window on the upper golden ratio line y = int(monitor_height/2.618-height/2) + monitor_y window.move(x, y) loadPosition(window) # In rare cases, gtk throws some gtk_size_allocation error, which is # probably a race condition. To avoid the window forgets its size in # these cases, we add this extra hook def callback (window): loadPosition(window) onceWhenReady(window, callback) # Some properties can only be set, once the window is sufficiently initialized, # This function lets you queue your request until that has happened. def onceWhenReady(window, func, *args, **kwargs): def cb(window, alloc, func, *args, **kwargs): func(window, *args, **kwargs) window.disconnect(handler_id) handler_id = window.connect_after("size-allocate", cb, func, *args, **kwargs) def getMonitorBounds(): screen = gtk.gdk.screen_get_default() root_window = screen.get_root_window() mouse_x, mouse_y, mouse_mods = root_window.get_pointer() current_monitor_number = screen.get_monitor_at_point(mouse_x,mouse_y) monitor_geometry = screen.get_monitor_geometry(current_monitor_number) return monitor_geometry.x, monitor_geometry.y, monitor_geometry.width, monitor_geometry.height tooltip = gtk.Window(gtk.WINDOW_POPUP) tooltip.set_name('gtk-tooltip') tooltip.ensure_style() tooltipStyle = tooltip.get_style() def makeYellow (box): def on_box_expose_event (box, event): box.style.paint_flat_box (box.window, gtk.STATE_NORMAL, gtk.SHADOW_NONE, None, box, "tooltip", box.allocation.x, box.allocation.y, box.allocation.width, box.allocation.height) def cb (box): box.set_style(tooltipStyle) box.connect("expose-event", on_box_expose_event) onceWhenReady(box, cb) linkre = re.compile("http://(?:www\.)?\w+\.\w{2,4}[^\s]+") emailre = re.compile("[\w\.]+@[\w\.]+\.\w{2,4}") def initTexviewLinks (textview, text): tags = [] textbuffer = textview.get_buffer() while True: linkmatch = linkre.search(text) emailmatch = emailre.search(text) if not linkmatch and not emailmatch: textbuffer.insert (textbuffer.get_end_iter(), text) break if emailmatch and (not linkmatch or \ emailmatch.start() < linkmatch.start()): s = emailmatch.start() e = emailmatch.end() type = "email" else: s = linkmatch.start() e = linkmatch.end() if text[e-1] == ".": e -= 1 type = "link" textbuffer.insert (textbuffer.get_end_iter(), text[:s]) tag = textbuffer.create_tag (None, foreground="blue", underline=pango.UNDERLINE_SINGLE) tags.append([tag, text[s:e], type, textbuffer.get_end_iter()]) textbuffer.insert_with_tags ( textbuffer.get_end_iter(), text[s:e], tag) tags[-1].append(textbuffer.get_end_iter()) text = text[e:] def on_press_in_textview (textview, event): iter = textview.get_iter_at_location (int(event.x), int(event.y)) if not iter: return for tag, link, type, s, e in tags: if iter.has_tag(tag): tag.props.foreground = "red" break def on_release_in_textview (textview, event): iter = textview.get_iter_at_location (int(event.x), int(event.y)) if not iter: return for tag, link, type, s, e in tags: if iter and iter.has_tag(tag) and \ tag.props.foreground_gdk.red == 0xffff: if type == "link": webbrowser.open(link) else: webbrowser.open("mailto:"+link) tag.props.foreground = "blue" stcursor = gtk.gdk.Cursor(gtk.gdk.XTERM) linkcursor = gtk.gdk.Cursor(gtk.gdk.HAND2) def on_motion_in_textview(textview, event): textview.window.get_pointer() iter = textview.get_iter_at_location (int(event.x), int(event.y)) if not iter: return for tag, link, type, s, e in tags: if iter.has_tag(tag): textview.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor ( linkcursor) break else: textview.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(stcursor) textview.connect ("motion-notify-event", on_motion_in_textview) textview.connect ("leave_notify_event", on_motion_in_textview) textview.connect("button_press_event", on_press_in_textview) textview.connect("button_release_event", on_release_in_textview) def LinkLabel (text, url): label = gtk.Label() eventbox = gtk.EventBox() label.set_markup("%s" % text) eventbox.add(label) def released (eventbox, event): webbrowser.open(url) label.set_markup("%s" % text) eventbox.connect("button_release_event", released) def pressed (eventbox, event): label.set_markup("%s" % text) eventbox.connect("button_press_event", pressed) eventbox.connect_after("realize", lambda w: w.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))) return eventbox cachedGlades = {} def cacheGladefile(filename): """ gtk.Builder automatically caches the file, so we only need to use this file once """ if filename not in cachedGlades: cachedGlades[filename] = Queue.Queue() def readit (): builder = gtk.Builder() builder.set_translation_domain("pychess") builder.add_from_file(addDataPrefix("glade/%s" % filename)) cachedGlades[filename].put(builder) pool.start(readit) class GladeWidgets: """ A simple class that wraps a the glade get_widget function into the python __getitem__ version """ def __init__ (self, filename): self.builder = None try: if filename in cachedGlades: self.builder = cachedGlades[filename].get(block=False) except Queue.Empty: pass if not self.builder: glock.acquire() # print "uistuff.py:gladefile = %s" % filename self.builder = gtk.Builder() self.builder.set_translation_domain("pychess") self.builder.add_from_file(addDataPrefix("glade/%s" % filename)) glock.release() self.extras = {} def __getitem__(self, key): if key in self.extras: return self.extras[key] return self.builder.get_object(key) def __setitem__(self, key, widget): self.extras[key] = widget def getGlade (self): return self.builder pychess-0.12beta3/lib/pychess/System/repeat.py0000755000175000017470000000225512161415524020441 0ustar tamasusers# -*- coding: UTF-8 -*- import time from pychess.System.ThreadPool import pool def repeat (func, *args, **kwargs): """ Repeats a function in a new thread until it returns False """ def run (): while func(*args, **kwargs): pass pool.start(run) def repeat_sleep (func, sleeptime, recur=False): """ Runs func in a threadpool, and repeats it approximately each sleeptime [s]. Notice that we sleep first, then run. Not the other way around. If repeat_sleep is called with recur=True, each call will be called with the return value of last call as argument. The argument has to be optional, as it wont be used first time, and it has to be non None. """ def run (): last = time.time() val = None while True: time.sleep(time.time()-last + sleeptime) if not time: # If python has been shutdown while we were sleeping, the # imported modules will be None return last = time.time() if recur and val: val = func(val) else: val = func() if not val: break pool.start(run) pychess-0.12beta3/lib/pychess/System/cairoextras.py0000644000175000017470000000516012161415524021500 0ustar tamasusers# from: http://cairographics.org/freetypepython/ import ctypes import cairo class PycairoContext(ctypes.Structure): _fields_ = [("PyObject_HEAD", ctypes.c_byte * object.__basicsize__), ("ctx", ctypes.c_void_p), ("base", ctypes.c_void_p)] _initialized = False def create_cairo_font_face_for_file (filename, faceindex=0, loadoptions=0): global _initialized global _freetype_so global _cairo_so global _ft_lib global _surface CAIRO_STATUS_SUCCESS = 0 FT_Err_Ok = 0 if not _initialized: # find shared objects _freetype_so = ctypes.CDLL ("libfreetype.so.6") _cairo_so = ctypes.CDLL ("libcairo.so.2") _cairo_so.cairo_ft_font_face_create_for_ft_face.restype = ctypes.c_void_p _cairo_so.cairo_ft_font_face_create_for_ft_face.argtypes = [ ctypes.c_void_p, ctypes.c_int ] _cairo_so.cairo_set_font_face.argtypes = [ ctypes.c_void_p, ctypes.c_void_p ] _cairo_so.cairo_font_face_status.argtypes = [ ctypes.c_void_p ] _cairo_so.cairo_status.argtypes = [ ctypes.c_void_p ] # initialize freetype _ft_lib = ctypes.c_void_p () if FT_Err_Ok != _freetype_so.FT_Init_FreeType (ctypes.byref (_ft_lib)): raise "Error initialising FreeType library." _surface = cairo.ImageSurface (cairo.FORMAT_A8, 0, 0) _initialized = True # create freetype face ft_face = ctypes.c_void_p() cairo_ctx = cairo.Context (_surface) cairo_t = PycairoContext.from_address(id(cairo_ctx)).ctx if FT_Err_Ok != _freetype_so.FT_New_Face (_ft_lib, filename, faceindex, ctypes.byref(ft_face)): raise Exception("Error creating FreeType font face for " + filename) # create cairo font face for freetype face cr_face = _cairo_so.cairo_ft_font_face_create_for_ft_face (ft_face, loadoptions) if CAIRO_STATUS_SUCCESS != _cairo_so.cairo_font_face_status (cr_face): raise Exception("Error creating cairo font face for " + filename) _cairo_so.cairo_set_font_face (cairo_t, cr_face) if CAIRO_STATUS_SUCCESS != _cairo_so.cairo_status (cairo_t): raise Exception("Error creating cairo font face for " + filename) face = cairo_ctx.get_font_face () return face if __name__ == '__main__': face = create_cairo_font_face_for_file ("../../../pieces/ttf/harlequin.ttf", 0) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 200, 128) ctx = cairo.Context(surface) ctx.set_font_face(face) ctx.set_font_size(30) ctx.move_to(0, 44) ctx.show_text("pnbrqk") ctx.move_to(0, 74) ctx.show_text("omvtwl") del ctx surface.write_to_png("0pieces.png") pychess-0.12beta3/lib/pychess/System/debug.py0000644000175000017470000000174612161415524020250 0ustar tamasusersimport sys import time import traceback import threading from pychess.System.glock import gdklocks from pychess.System.Log import log from pychess.System.ThreadPool import pool def start_thread_dump (): def thread_dumper (): def dump_threads (): id2name = {} for thread in threading.enumerate(): id2name[thread.ident] = thread.name stacks = [] for thread_id, frame in sys._current_frames().items(): stack = traceback.format_list(traceback.extract_stack(frame)) if thread_id in gdklocks: stacks.append("Thread GdkLock count: %s" % str(gdklocks[thread_id])) stacks.append("Thread: %s (%d)" % (id2name[thread_id], thread_id)) stacks.append("".join(stack)) log.debug("\n".join(stacks)) while 1: dump_threads() time.sleep(10) pool.start(thread_dumper) pychess-0.12beta3/lib/pychess/System/conf_configParser.py0000755000175000017470000000340712161415524022610 0ustar tamasusersimport os, atexit from pychess.System.Log import log from ConfigParser import SafeConfigParser configParser = SafeConfigParser() from pychess.System.prefix import addUserConfigPrefix section = "General" path = addUserConfigPrefix("config") if os.path.isfile(path): configParser.readfp(open(path)) if not configParser.has_section(section): configParser.add_section(section) if not configParser.has_section(section+"_Types"): configParser.add_section(section+"_Types") atexit.register(lambda: configParser.write(open(path,"w"))) idkeyfuncs = {} conid = 0 typeEncode = { str: repr(str), unicode: repr(unicode), int: repr(int), float: repr(float), bool: repr(bool) } typeDecode = { repr(str): configParser.get, repr(unicode): configParser.get, repr(int): configParser.getint, repr(float): configParser.getfloat, repr(bool): configParser.getboolean, } def notify_add (key, func, args): global conid idkeyfuncs[conid] = (key, func, args) conid += 1 return conid def notify_remove (conid): del idkeyfuncs[conid] def get (key): decoder = typeDecode[configParser.get(section+"_Types", key)] return decoder(section, key) def set (key, value): try: configParser.set (section, key, str(value)) configParser.set (section+"_Types", key, typeEncode[type(value)]) except Exception, e: log.error("Unable to save configuration '%s'='%s' because of error: %s %s"% (repr(key), repr(value), e.__class__.__name__, ", ".join(str(a) for a in e.args))) for key_, func, args in idkeyfuncs.values(): if key_ == key: func (None, *args) def hasKey (key): return configParser.has_option(section, key) and \ configParser.has_option(section+"_Types", key) pychess-0.12beta3/lib/pychess/System/SubProcess.py0000755000175000017470000001653212161415524021254 0ustar tamasusersimport os import sys import signal import errno import time import threading import gtk import gobject from pychess.Utils.const import * from Log import log from which import which from pychess.System.ThreadPool import pool from pychess.System import glock from pychess.System.GtkWorker import EmitPublisher class SubProcessError (Exception): pass class TimeOutError (Exception): pass def searchPath (file, access=os.R_OK, altpath=None): if altpath and os.path.isfile(altpath): if not os.access (altpath, access): log.warn("Not enough permissions on %s\n" % altpath) else: return altpath return which(file, mode=access) subprocesses = [] def finishAllSubprocesses (): for subprocess in subprocesses: if subprocess.subprocExitCode[0] == None: subprocess.gentleKill(0,0.3) for subprocess in subprocesses: subprocess.subprocFinishedEvent.wait() class SubProcess (gobject.GObject): __gsignals__ = { "line": (gobject.SIGNAL_RUN_FIRST, None, (object,)), "died": (gobject.SIGNAL_RUN_FIRST, None, ()) } def __init__(self, path, args=[], warnwords=[], env=None, chdir="."): gobject.GObject.__init__(self) self.path = path self.args = args self.warnwords = warnwords self.env = env or os.environ self.buffer = "" self.linePublisher = EmitPublisher(self, "line", EmitPublisher.SEND_LIST) self.linePublisher.start() self.defname = os.path.split(path)[1] self.defname = self.defname[:1].upper() + self.defname[1:].lower() t = time.time() self.defname = (self.defname, time.strftime("%H:%m:%%.3f",time.localtime(t)) % (t%60)) log.debug(path+"\n", self.defname) argv = [str(u) for u in [self.path]+self.args] self.pid, stdin, stdout, stderr = gobject.spawn_async(argv, working_directory=chdir, child_setup=self.__setup, standard_input=True, standard_output=True, standard_error=True, flags=gobject.SPAWN_DO_NOT_REAP_CHILD|gobject.SPAWN_SEARCH_PATH) self.__channelTags = [] self.inChannel = self._initChannel(stdin, None, None, False) readFlags = gobject.IO_IN|gobject.IO_HUP#|gobject.IO_ERR self.outChannel = self._initChannel(stdout, readFlags, self.__io_cb, False) self.errChannel = self._initChannel(stderr, readFlags, self.__io_cb, True) self.channelsClosed = False self.channelsClosedLock = threading.Lock() gobject.child_watch_add(self.pid, self.__child_watch_callback) self.subprocExitCode = (None, None) self.subprocFinishedEvent = threading.Event() subprocesses.append(self) pool.start(self._wait4exit) def _initChannel (self, filedesc, callbackflag, callback, isstderr): channel = gobject.IOChannel(filedesc) if sys.platform != "win32": channel.set_flags(gobject.IO_FLAG_NONBLOCK) if callback: tag = channel.add_watch(callbackflag, callback, isstderr) self.__channelTags.append(tag) return channel def _closeChannels (self): self.channelsClosedLock.acquire() try: if self.channelsClosed == True: return self.channelsClosed = True finally: self.channelsClosedLock.release() for tag in self.__channelTags: gobject.source_remove(tag) for channel in (self.inChannel, self.outChannel, self.errChannel): try: channel.close() except gobject.GError, error: pass def __setup (self): os.nice(15) def __child_watch_callback (self, pid, code): # Kill the engine on any signal but 'Resource temporarily unavailable' if code != errno.EWOULDBLOCK: if type(code) == str: log.error(code+"\n", self.defname) else: log.error(os.strerror(code)+"\n", self.defname) self.emit("died") self.gentleKill() def __io_cb (self, channel, condition, isstderr): while True: try: line = channel.next()#readline() except StopIteration: self._wait4exit() self.__child_watch_callback(*self.subprocExitCode) break if not line: return True if isstderr: log.error(line, self.defname) else: for word in self.warnwords: if word in line: log.warn(line, self.defname) break else: log.debug(line, self.defname) self.linePublisher.put(line) def write (self, data): if self.channelsClosed: log.warn("Chan closed for %r" % data, self.defname) return log.info(data, self.defname) self.inChannel.write(data) if data.endswith("\n"): try: self.inChannel.flush() except gobject.GError, e: log.error(str(e)+". Last line wasn't sent.\n", self.defname) def _wait4exit (self): try: pid, code = os.waitpid(self.pid, 0) except OSError, error: if error.errno == errno.ECHILD: pid, code = self.pid, error.errno else: raise self.subprocExitCode = (code, os.strerror(code)) def sendSignal (self, sign): try: if sys.platform != "win32": os.kill(self.pid, signal.SIGCONT) os.kill(self.pid, sign) except OSError, error: if error.errno == errno.ESRCH: #No such process pass else: raise OSError, error def gentleKill (self, first=1, second=1): if pool is not None: pool.start(self.__gentleKill_inner, first, second) def __gentleKill_inner (self, first, second): self.resume() self._closeChannels() time.sleep(first) code, string = self.subprocExitCode if code == None: self.sigterm() time.sleep(second) code, string = self.subprocExitCode if code == None: self.sigkill() self.subprocFinishedEvent.set() return self.subprocExitCode[0] self.subprocFinishedEvent.set() return code self.subprocFinishedEvent.set() return code def pause (self): self.sendSignal(signal.SIGSTOP) def resume (self): if sys.platform != "win32": self.sendSignal(signal.SIGCONT) def sigkill (self): self.sendSignal(signal.SIGKILL) def sigterm (self): self.sendSignal(signal.SIGTERM) def sigint (self): self.sendSignal(signal.SIGINT) if __name__ == "__main__": loop = gobject.MainLoop() paths = ("igang.dk", "google.com", "google.dk", "myspace.com", "yahoo.com") maxlen = max(len(p) for p in paths) def callback (subp, line, path): print "\t", path.ljust(maxlen), line.rstrip("\n") for path in paths: subp = SubProcess("/bin/ping", [path]) subp.connect("line", callback, path) loop.run() pychess-0.12beta3/lib/pychess/System/GtkWorker.py0000755000175000017470000002657312161415524021111 0ustar tamasusersfrom threading import Thread import Queue from gobject import GObject, SIGNAL_RUN_FIRST from ThreadPool import PooledThread import glock # # IDEA: We could implement gdk prioritizing by using a global PriorityQueue # class Publisher (PooledThread): """ Publisher can be used when a thread is often spitting out results, and you want to process these results in gtk as soon as possible. While waiting for gdk access, results will be stored, and depending on the send policy, either the entire list, or only the last item will be sent as an argument to the function specified in the __init__ """ SEND_LIST, SEND_LAST = range(2) def __init__ (self, func, sendPolicy): self.queue = Queue.Queue() self.func = func self.sendPolicy = sendPolicy def run (self): while True: v = self.queue.get() if v == self.StopNow: break glock.acquire() try: l = [v] while True: try: v = self.queue.get_nowait() except Queue.Empty: break else: if v == self.StopNow: break l.append(v) if self.sendPolicy == self.SEND_LIST: self.func(l) elif self.sendPolicy == self.SEND_LAST: self.func(l[-1]) finally: glock.release() def put (self, task): self.queue.put(task) def __del__ (self): self.queue.put(self.StopNow) class StopNow(Exception): pass class EmitPublisher (Publisher): """ EmitPublisher is a version of Publisher made for the common task of emitting a signal after waiting for the gdklock """ def __init__ (self, parrent, signal, sendPolicy): Publisher.__init__(self, lambda v: parrent.emit(signal, v), sendPolicy) class GtkWorker (GObject, Thread): __gsignals__ = { #"progressed": (SIGNAL_RUN_FIRST, None, (float,)), "published": (SIGNAL_RUN_FIRST, None, (object,)), "done": (SIGNAL_RUN_FIRST, None, (object,)) } def __init__ (self, func): """ Initialize a new GtkWorker around a specific function """ GObject.__init__(self) Thread.__init__(self) # By some reason we cannot access __gsignals__, so we have to do a # little double work here #self.connections = {"progressed": 0, "published": 0, "done": 0} self.connections = {"published": 0, "done": 0} self.handler_ids = {} self.name = func.__name__ self.func = func self.cancelled = False self.done = False #self.progress = 0 ######################################################################## # Publish and progress queues # ######################################################################## self.publisher = EmitPublisher (self, "published", Publisher.SEND_LIST) self.publisher.start() #self.progressor = EmitPublisher (self, "progressed", Publisher.SEND_LAST) #self.progressor.start() ############################################################################ # We override the connect/disconnect methods in order to count the number # # of clients connected to each signal. # # This is done for performance reasons, as some work can be skipped, if no # # clients are connected anyways # ############################################################################ def _mul_connect (self, method, signal, handler, *args): self.connections[signal] += 1 handler_id = method (self, signal, handler, *args) self.handler_ids[handler_id] = signal return handler_id def connect (self, detailed_signal, handler, *args): return self._mul_connect (GObject.connect, detailed_signal, handler, *args) def connect_after (self, detailed_signal, handler, *args): return self._mul_connect (GObject.connect_after, detailed_signal, handler, *args) def connect_object (self, detailed_signal, handler, gobject, *args): return self._mul_connect (GObject.connect_object, detailed_signal, handler, gobject, *args) def connect_object_after (self, detailed_signal, handler, gobject, *args): return self._mul_connect (GObject.connect, detailed_signal, handler, gobject, *args) def disconnect (self, handler_id): self.connections[self.handler_ids[handler_id]] -= 1 del self.handler_ids[handler_id] return GObject.disconnect(self, handler_id) handler_disconnect = disconnect ############################################################################ # The following methods (besides run()) are used to interact with the # # worker # ############################################################################ def get (self, timeout=None): """ 'get' will block until the processed function returns, timeout happens, or the work is cancelled. You can test if you were cancelled by the isCancelled() method afterwards. If you call the isAlive() method afterwards and it returns True, then you must have hit the timeout. Notice, cancelling will not make 'get' unblock, even if you build isCancelled() calls into your function. Warning: the get function assumes that if you are the MainThread you have the gdklock and if you are not the MainThread you don't have the gdklock. If this is not true, and the work is not done, calling get will result in a deadlock. If you haven't used the gtk.gdk.threads_enter nor gtk.gdk.threads_leave function, everything should be fine.""" if not self.isDone(): glock.release() self.join(timeout) glock.acquire() if self.isAlive(): return None # if self.done != True by now, the worker thread must have exited abnormally assert self.isDone() return self.result def execute (self): """ Start the worker """ if not self.isDone(): self.start() def run (self): self.result = self.func(self) self.done = True if self.connections["done"] >= 1: glock.acquire() try: # In python 2.5 we can use self.publishQueue.join() to wait for # all publish items to have been processed. self.emit("done", self.result) finally: glock.release() def cancel (self): """ Cancel work. As python has no way of trying to interupt a thread, we don't try to do so. The cancelled attribute is simply set to true, which means that no more signals are emitted. You can build 'isCancelled' calls into your function, to help it exit when it doesn't need to run anymore. while not worker.isCancelled(): ... """ self.cancelled = True self.publisher.__del__() #self.progressor.__del__() ############################################################################ # Get stuf # ############################################################################ def isCancelled (self): return self.cancelled def isDone (self): return self.done #def getProgress (self): #return self.progress ############################################################################ # These methods are used by the function to indicate progress and publish # # process # ############################################################################ #def setProgress (self, progress): #""" setProgress should be called from inside the processed function. #When the gdklock gets ready, it will emit the "progressed" signal, #with the value of the latest setProgress call """ #if self.isCancelled(): #return #if self.progress != progress: #self.progress = progress #self.progressor.put(progress) def publish (self, val): """ Publish should be called from inside the processed function. It will queue up the latest results, and when we get access to the gdklock, it will emit the "published" signal. """ if self.connections["published"] < 1 or self.isCancelled(): return self.publisher.put(val) ############################################################################ # Other # ############################################################################ def __del__ (self): self.cancel() ################################################################################ # Demo usage # ################################################################################ if __name__ == "__main__": def findPrimes (worker): limit = 10**4. primes = [] for n in xrange(2, int(limit)+1): for p in primes: if worker.isCancelled(): return primes if p > n**2: break if n % p == 0: break else: primes.append(n) worker.publish(n) #worker.setProgress(n/limit) return primes import gtk w = gtk.Window() vbox = gtk.VBox() w.add(vbox) worker = GtkWorker(findPrimes) sbut = gtk.Button("Start") def callback (button, *args): sbut.set_sensitive(False) worker.execute() sbut.connect("clicked", callback) vbox.add(sbut) cbut = gtk.Button("Cancel") def callback (button, *args): cbut.set_sensitive(False) worker.cancel() cbut.connect("clicked", callback) vbox.add(cbut) gbut = gtk.Button("Get") def callback (button, *args): gbut.set_sensitive(False) print "Found:", worker.get() gbut.connect("clicked", callback) vbox.add(gbut) #prog = gtk.ProgressBar() #def callback (worker, progress): #prog.set_fraction(progress) #worker.connect("progressed", callback) #vbox.add(prog) field = gtk.Entry() def process (worker, primes): field.set_text(str(primes[-1])) worker.connect("published", process) vbox.add(field) def done (worker, result): print "Finished, Cancelled:", worker.isCancelled() worker.connect("done", done) w.connect("destroy", gtk.main_quit) w.show_all() gtk.gdk.threads_init() gtk.main() pychess-0.12beta3/lib/pychess/System/which.py0000644000175000017470000002604612161415524020264 0ustar tamasusers#!/usr/bin/env python ### # Generators are not thread safe, so reduced which_files() to return the first match only !!! ### """ Which - locate a command * adapted from proposal__ by Erik Demaine and patch__ by Brian Curtin, which adds this feature__ to shutil __ http://bugs.python.org/file8185/find_in_path.py __ http://bugs.python.org/file15381/shutil_which.patch __ http://bugs.python.org/issue444582 * which_files() returns generator, which() returns first match, or raises IOError(errno.ENOENT) * searches current directory before ``PATH`` on Windows, but not before an explicitly passed path * accepts both string or iterable for an explicitly passed path, or pathext * accepts an explicitly passed empty path, or pathext (either '' or []) * does not search ``PATH`` for files that have a path specified in their name already * uses ``PATHEXT`` on Windows, providing a default value for different Windows versions .. function:: which_files(file [, mode=os.F_OK | os.X_OK[, path=None[, pathext=None]]]) Generate full paths, where the *file* is accesible under *mode* and is located in the directory passed as a part of the *file* name, or in any directory on *path* if a base *file* name is passed. The *mode* matches an existing executable file by default. The *path* defaults to the ``PATH`` environment variable, or to :const:`os.defpath` if the ``PATH`` variable is not set. On Windows, a current directory is searched before directories in the ``PATH`` variable, but not before directories in an explicitly passed *path* string or iterable. The *pathext* is used to match files with any of the extensions appended to *file*. On Windows, it defaults to the ``PATHEXT`` environment variable. If the ``PATHEXT`` variable is not set, then the default *pathext* value is hardcoded for different Windows versions, to match the actual search performed on command execution. On Windows <= 4.x, ie. NT and older, it defaults to '.COM;.EXE;.BAT;.CMD'. On Windows 5.x, ie. 2k/XP/2003, the extensions '.VBS;.VBE;.JS;.JSE;.WSF;.WSH' are appended, On Windows >= 6.x, ie. Vista/2008/7, the extension '.MSC' is further appended. The actual search on command execution may differ under Wine_, which may use a `different default value`__, that is `not treated specially here`__. In each directory, the *file* is first searched without any additional extension, even when a *pathext* string or iterable is explicitly passed. .. _Wine: http://www.winehq.org/ __ http://source.winehq.org/source/programs/cmd/wcmdmain.c#L1019 __ http://wiki.winehq.org/DeveloperFaq#detect-wine .. function:: which(file [, mode=os.F_OK | os.X_OK[, path=None[, pathext=None]]]) Return the first full path matched by :func:`which_files`, or raise :exc:`IOError` (:const:`errno.ENOENT`). """ __docformat__ = 'restructuredtext en' __all__ = 'which which_files'.split() import sys, os, os.path _windows = sys.platform.startswith('win') if _windows: def _getwinpathext(*winver): """ Return the default PATHEXT value for a particular Windows version. On Windows <= 4.x, ie. NT and older, it defaults to '.COM;.EXE;.BAT;.CMD'. On Windows 5.x, ie. 2k/XP/2003, the extensions '.VBS;.VBE;.JS;.JSE;.WSF;.WSH' are appended, On Windows >= 6.x, ie. Vista/2008/7, the extension '.MSC' is further appended. Availability: Windows >>> def test(extensions, *winver): ... result = _getwinpathext(*winver) ... expected = os.pathsep.join(['.%s' % ext.upper() for ext in extensions.split()]) ... assert result == expected, 'getwinpathext: %s != %s' % (result, expected) >>> test('com exe bat cmd', 3) >>> test('com exe bat cmd', 4) >>> test('com exe bat cmd vbs vbe js jse wsf wsh', 5) >>> test('com exe bat cmd vbs vbe js jse wsf wsh msc', 6) >>> test('com exe bat cmd vbs vbe js jse wsf wsh msc', 7) """ if not winver: winver = sys.getwindowsversion() return os.pathsep.join('.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC'.split(';')[:( winver[0] < 5 and 4 or winver[0] < 6 and -1 or None )]) def which_files(file, mode=os.F_OK | os.X_OK, path=None, pathext=None): """ Generate full paths, where the file*is accesible under mode and is located in the directory passed as a part of the file name, or in any directory on path if a base file name is passed. The mode matches an existing executable file by default. The path defaults to the PATH environment variable, or to os.defpath if the PATH variable is not set. On Windows, a current directory is searched before directories in the PATH variable, but not before directories in an explicitly passed path string or iterable. The pathext is used to match files with any of the extensions appended to file. On Windows, it defaults to the ``PATHEXT`` environment variable. If the PATHEXT variable is not set, then the default pathext value is hardcoded for different Windows versions, to match the actual search performed on command execution. On Windows <= 4.x, ie. NT and older, it defaults to '.COM;.EXE;.BAT;.CMD'. On Windows 5.x, ie. 2k/XP/2003, the extensions '.VBS;.VBE;.JS;.JSE;.WSF;.WSH' are appended, On Windows >= 6.x, ie. Vista/2008/7, the extension '.MSC' is further appended. The actual search on command execution may differ under Wine, which may use a different default value, that is not treated specially here. In each directory, the file is first searched without any additional extension, even when a pathext string or iterable is explicitly passed. >>> def test(expected, *args, **argd): ... result = list(which_files(*args, **argd)) ... assert result == expected, 'which_files: %s != %s' % (result, expected) ... ... try: ... result = [ which(*args, **argd) ] ... except IOError: ... result = [] ... assert result[:1] == expected[:1], 'which: %s != %s' % (result[:1], expected[:1]) >>> ### Set up >>> import stat, tempfile >>> dir = tempfile.mkdtemp(prefix='test-') >>> ext = '.ext' >>> tmp = tempfile.NamedTemporaryFile(prefix='command-', suffix=ext, dir=dir) >>> name = tmp.name >>> file = os.path.basename(name) >>> here = os.path.join(os.curdir, file) >>> nonexistent = '%s-nonexistent' % name >>> path = os.pathsep.join([ nonexistent, name, dir, dir ]) ... # Test also that duplicates are removed, and non-existent objects ... # or non-directories in path do not trigger any exceptions. >>> ### Test permissions >>> test(_windows and [name] or [], file, path=path) >>> test(_windows and [name] or [], file, mode=os.X_OK, path=path) ... # executable flag is not needed on Windows >>> test([name], file, mode=os.F_OK, path=path) >>> test([name], file, mode=os.R_OK, path=path) >>> test([name], file, mode=os.W_OK, path=path) >>> test([name], file, mode=os.R_OK|os.W_OK, path=path) >>> os.chmod(name, stat.S_IRWXU) >>> test([name], file, mode=os.R_OK|os.W_OK|os.X_OK, path=path) >>> ### Test paths >>> _save_path = os.environ.get('PATH', '') >>> cwd = os.getcwd() >>> test([], file, path='') >>> test([], file, path=nonexistent) >>> test([], nonexistent, path=path) >>> test([name], file, path=path) >>> test([name], name, path=path) >>> test([name], name, path='') >>> test([name], name, path=nonexistent) >>> os.chdir(dir) >>> test([name], file, path=path) >>> test([here], file, path=os.curdir) >>> test([name], name, path=os.curdir) >>> test([], file, path='') >>> test([], file, path=nonexistent) >>> os.environ['PATH'] = path >>> test(_windows and [here] or [name], file) ... # current directory is always searched first on Windows >>> os.environ['PATH'] = os.curdir >>> test([here], file) >>> test([name], name) >>> os.environ['PATH'] = '' >>> test(_windows and [here] or [], file) >>> os.environ['PATH'] = nonexistent >>> test(_windows and [here] or [], file) >>> os.chdir(cwd) >>> os.environ['PATH'] = path >>> test([name], file) >>> os.environ['PATH'] = _save_path >>> ### Test extensions >>> test([], file[:-4], path=path, pathext='') >>> test([], file[:-4], path=path, pathext=nonexistent) >>> test([name], file[:-4], path=path, pathext=ext) >>> test([name], file, path=path, pathext=ext) >>> test([name], file, path=path, pathext='') >>> test([name], file, path=path, pathext=nonexistent) >>> ### Tear down >>> tmp.close() >>> os.rmdir(dir) """ filepath, file = os.path.split(file) if filepath: path = (filepath,) elif path is None: path = os.environ.get('PATH', os.defpath).split(os.pathsep) if _windows and not os.curdir in path: path.insert(0, os.curdir) # current directory is always searched first on Windows elif isinstance(path, basestring): path = path.split(os.pathsep) if pathext is None: pathext = [''] if _windows: pathext += (os.environ.get('PATHEXT', '') or _getwinpathext()).lower().split(os.pathsep) elif isinstance(pathext, basestring): pathext = pathext.split(os.pathsep) if not '' in pathext: pathext.insert(0, '') # always check command without extension, even for an explicitly passed pathext seen = set() for dir in path: if dir: # only non-empty directories are searched id = os.path.normcase(os.path.abspath(dir)) if not id in seen: # each directory is searched only once seen.add(id) woex = os.path.join(dir, file) for ext in pathext: name = woex + ext if os.path.exists(name) and os.access(name, mode): return name # yield name return None def which(file, mode=os.F_OK | os.X_OK, path=None, pathext=None): """ Return the first full path matched by which_files(), or raise IOError(errno.ENOENT). >>> # See which_files() for a doctest. """ return which_files(file, mode, path, pathext) # try: # return iter(which_files(file, mode, path, pathext)).next() # except StopIteration: # try: # from errno import ENOENT # except ImportError: # ENOENT = 2 # raise IOError(ENOENT, '%s not found' % (mode & os.X_OK and 'command' or 'file'), file) if __name__ == '__main__': import doctest doctest.testmod() pychess-0.12beta3/lib/pychess/System/prefix.py0000755000175000017470000000551212161415524020455 0ustar tamasusers""" This module provides some basic functions for accessing pychess datefiles in system or user space """ import os import sys from os import makedirs from os.path import isdir, join, dirname, abspath ################################################################################ # Locate files in system space # ################################################################################ # Test if we are installed on the system, or are being run from tar/svn if sys.prefix in __file__: for sub in ("share", "games", "share/games", "local/share", "local/games", "local/share/games"): _prefix = join (sys.prefix, sub, "pychess") if isdir(_prefix): _installed = True break else: raise Exception("can't find the pychess data directory") else: _prefix = abspath (join (dirname (__file__), "../../..")) _installed = False def addDataPrefix (subpath): return abspath (join (_prefix, subpath)) def getDataPrefix (): return _prefix def isInstalled (): return _installed ################################################################################ # Locate files in user space # ################################################################################ # The glib.get_user_*_dir() XDG functions below require pygobject >= 2.18 try: from glib import get_user_data_dir, get_user_config_dir, get_user_cache_dir except ImportError: def __get_user_dir (xdg_env_var, fallback_dir_path): try: directory = os.environ[xdg_env_var] except KeyError: directory = join(os.environ["HOME"], fallback_dir_path) return directory def get_user_data_dir (): return __get_user_dir("XDG_DATA_HOME", ".local/share") def get_user_config_dir (): return __get_user_dir("XDG_CONFIG_HOME", ".config") def get_user_cache_dir (): return __get_user_dir("XDG_CACHE_HOME", ".cache") pychess = "pychess" def getUserDataPrefix (): return join(get_user_data_dir(), pychess) def addUserDataPrefix (subpath): return join(getUserDataPrefix(), subpath) def getEngineDataPrefix (): return join(getUserDataPrefix(), "engines") def addEngineDataPrefix (subpath): return join(getEngineDataPrefix(), subpath) def getUserConfigPrefix (): return join(get_user_config_dir(), pychess) def addUserConfigPrefix (subpath): return join(getUserConfigPrefix(), subpath) def getUserCachePrefix (): return join(get_user_cache_dir(), pychess) def addUserCachePrefix (subpath): return join(getUserCachePrefix(), subpath) for directory in (getUserDataPrefix(), getEngineDataPrefix(), getUserConfigPrefix(), getUserCachePrefix()): if not isdir(directory): makedirs(directory, mode=0700) pychess-0.12beta3/lib/pychess/System/WinRsvg.py0000755000175000017470000000235412161415524020560 0ustar tamasusersfrom ctypes import * l=CDLL('librsvg-2-2.dll') g=CDLL('libgobject-2.0-0.dll') g.g_type_init() class Props(): def __init__(self, dimension): self.width, self.height = dimension class rsvgHandle(): class RsvgDimensionData(Structure): _fields_ = [("width", c_int), ("height", c_int), ("em",c_double), ("ex",c_double)] class PycairoContext(Structure): _fields_ = [("PyObject_HEAD", c_byte * object.__basicsize__), ("ctx", c_void_p), ("base", c_void_p)] def __init__(self, path): self.path = path error = '' self.handle = l.rsvg_handle_new_from_file(self.path,error) self.props = Props(self.get_dimension_data()) def get_dimension_data(self): svgDim = self.RsvgDimensionData() l.rsvg_handle_get_dimensions(self.handle,byref(svgDim)) return (svgDim.width,svgDim.height) def render_cairo(self, ctx): ctx.save() z = self.PycairoContext.from_address(id(ctx)) l.rsvg_handle_render_cairo(self.handle, z.ctx) ctx.restore() class rsvgClass(): def Handle(self,file): return rsvgHandle(file) rsvg = rsvgClass() pychess-0.12beta3/lib/pychess/System/__init__.py0000755000175000017470000000000012161415524020702 0ustar tamasuserspychess-0.12beta3/lib/pychess/System/TaskQueue.py0000755000175000017470000000420212161415524021062 0ustar tamasusers# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/475160 # Was accepted into Python 2.5, but earlier versions still have # to do stuff manually import threading from Queue import Queue def TaskQueue (): if hasattr(Queue, "task_done"): return Queue() return _TaskQueue() class _TaskQueue(Queue): def __init__(self): Queue.__init__(self) self.all_tasks_done = threading.Condition(self.mutex) self.unfinished_tasks = 0 def _put(self, item): Queue._put(self, item) self.unfinished_tasks += 1 def task_done(self): """Indicate that a formerly enqueued task is complete. Used by Queue consumer threads. For each get() used to fetch a task, a subsequent call to task_done() tells the queue that the processing on the task is complete. If a join() is currently blocking, it will resume when all items have been processed (meaning that a task_done() call was received for every item that had been put() into the queue). Raises a ValueError if called more times than there were items placed in the queue. """ self.all_tasks_done.acquire() try: unfinished = self.unfinished_tasks - 1 if unfinished <= 0: if unfinished < 0: raise ValueError('task_done() called too many times') self.all_tasks_done.notifyAll() self.unfinished_tasks = unfinished finally: self.all_tasks_done.release() def join(self): """Blocks until all items in the Queue have been gotten and processed. The count of unfinished tasks goes up whenever an item is added to the queue. The count goes down whenever a consumer thread calls task_done() to indicate the item was retrieved and all work on it is complete. When the count of unfinished tasks drops to zero, join() unblocks. """ self.all_tasks_done.acquire() try: while self.unfinished_tasks: self.all_tasks_done.wait() finally: self.all_tasks_done.release() pychess-0.12beta3/lib/pychess/System/ping.py0000755000175000017470000000536112161415524020117 0ustar tamasusers# -*- coding: UTF-8 -*- from gobject import GObject, SIGNAL_RUN_FIRST from pychess.System.Log import log from pychess.System.SubProcess import SubProcess, searchPath import re class Pinger (GObject): """ The recieved signal contains the time it took to get response from the server in millisecconds. -1 means that some error occurred """ __gsignals__ = { "recieved": (SIGNAL_RUN_FIRST, None, (float,)), "error": (SIGNAL_RUN_FIRST, None, (str,)) } def __init__ (self, host): GObject.__init__(self) self.host = host self.subproc = None self.expression = re.compile("time=([\d\.]+) (m?s)") # We need untranslated error messages in regexp search # below, so have to use deferred translation here def _(msg): return msg error = _("Destination Host Unreachable") self.errorExprs = ( re.compile("(%s)" % error), ) del _ self.restartsOnDead = 3 self.deadCount = 0 def start (self): assert not self.subproc self.subproc = SubProcess(searchPath("ping"), [self.host], env={"LANG":"en"}) self.conid1 = self.subproc.connect("line", self.__handleLines) self.conid2 = self.subproc.connect("died", self.__handleDead) def __handleLines (self, subprocess, lines): for line in lines: self.__handleLine(line) def __handleLine (self, line): match = self.expression.search(line) if match: time, unit = match.groups() time = float(time) if unit == "s": time *= 1000 self.emit("recieved", time) else: for expr in self.errorExprs: match = expr.search(line) if match: msg = match.groups()[0] self.emit("error", _(msg)) def __handleDead (self, subprocess): if self.deadCount < self.restartsOnDead: log.warn("Pinger died and restarted (%d/%d)\n" % (self.deadCount+1, self.restartsOnDead), self.subproc.defname) self.stop() self.start() self.deadCount += 1 else: self.emit("error", _("Died")) self.stop() def stop (self): assert self.subproc exitCode = self.subproc.gentleKill() self.subproc.disconnect(self.conid1) self.subproc.disconnect(self.conid2) self.subproc = None if __name__ == "__main__": pinger = Pinger("google.com") def callback(pinger, time): print time pinger.connect("recieved", callback) pinger.start() import time time.sleep(5) pinger.stop() time.sleep(3) pychess-0.12beta3/lib/pychess/System/ThreadPool.py0000755000175000017470000001263612161415524021226 0ustar tamasusers""" This is a pool for reusing threads """ from threading import Thread, Condition, Lock import Queue import inspect import os import sys import threading import traceback import cStringIO import atexit if not hasattr(Thread, "_Thread__bootstrap_inner"): class SafeThread (Thread): def encaps(self): try: self._Thread__bootstrap_inner() except: if self.__daemonic and (sys is None or sys.__doc__ is None): return raise setattr(SafeThread, "_Thread__bootstrap_inner", SafeThread._Thread__bootstrap) setattr(SafeThread, "_Thread__bootstrap", SafeThread.encaps) threading.Thread = SafeThread maxThreads = sys.maxint class ThreadPool: def __init__ (self): self.queue = Queue.Queue() self.lock = Lock() self.threads = 0 def start (self, func, *args, **kw): self.lock.acquire() try: a = self.queue.get_nowait() except Queue.Empty: if self.threads < maxThreads: self.threads += 1 a = self.Worker(self.queue) a.setDaemon(True) a.start() else: a = self.queue.get(timeout=5) from pychess.System.Log import log log.warn("Couldn't get a thread after 5s") a = self.queue.get() a.func = lambda: func(*args, **kw) a.name = self._getThreadName(a, func) a.wcond.acquire() a.wcond.notify() a.wcond.release() self.lock.release() def _getThreadName (self, thread, func): try: framerecord = inspect.stack()[2] except TypeError: return "" # d = os.path.basename(os.path.dirname(framerecord[1])) f = os.path.basename(framerecord[1]) # f = os.sep.join((d, f)) caller = ":".join([str(v) for v in (f,) + framerecord[2:4]]) module = inspect.getmodule(func) lineno = inspect.getsourcelines(func)[1] callee = ":".join((module.__name__, str(lineno), func.__name__)) import GtkWorker if module is GtkWorker or "repeat" in str(module): framerecord = inspect.stack()[3] # d = os.path.basename(os.path.dirname(framerecord[1])) f = os.path.basename(framerecord[1]) # f = os.sep.join((d, f)) callee += " -- " + ":".join([str(v) for v in (f,) + framerecord[2:4]]) framerecord = inspect.stack()[4] f = os.path.basename(framerecord[1]) callee += " -- " + ":".join([str(v) for v in (f,) + framerecord[2:4]]) s = caller + " -- " + callee for repl in ("pychess.", "System.", "Players."): s = s.replace(repl, "") return s class Worker (threading.Thread): def __init__ (self, queue): Thread.__init__(self) self.func = None self.wcond = Condition() self.queue = queue self.running = True atexit.register(self.__del__) # We catch the trace from the thread, that created the worker stringio = cStringIO.StringIO() traceback.print_stack(file=stringio) self.tracestack = traceback.extract_stack() def run (self): try: while True: if self.func: try: self.func() except Exception, e: #try: # if glock._rlock._RLock__owner == self: # # As a service we take care of releasing the gdk # # lock when a thread breaks to avoid freezes # for i in xrange(glock._rlock._RLock__count): # glock.release() #except AssertionError, e: # print e # pass _, _, exc_traceback = sys.exc_info() list = self.tracestack[:-2] + \ traceback.extract_tb(exc_traceback)[2:] error = "".join(traceback.format_list(list)) print error.rstrip() print str(e.__class__), e self.func = None self.queue.put(self) self.wcond.acquire() self.wcond.wait() self.wcond.release() except: #self.threads -= 1 if self.running: raise def __del__ (self): self.running = False pool = ThreadPool() class PooledThread (object): def start (self): pool.start(self.run) def run (self): pass def join (self, timeout=None): raise NotImplementedError def setName (self, name): raise NotImplementedError def getName (self): raise NotImplementedError def isAlive (self): raise NotImplementedError def isDaemon (self): return True def setDaemon (self): raise NotImplementedError pychess-0.12beta3/lib/pychess/System/MultiArray.py0000755000175000017470000000052412161415524021247 0ustar tamasusersfrom array import array class MultiArray: def __init__ (self, oneLineData, *lengths): self.lengths = lengths self.data = oneLineData def get (self, *indexes): index = 0 for depth, i in enumerate(indexes[::-1]): index += i*self.lengths[depth]**depth return self.data[index] pychess-0.12beta3/lib/pychess/System/accordion.py0000644000175000017470000000370712161415524021122 0ustar tamasusersimport gtk class Accordion(gtk.TreeView): def __init__(self, model): gtk.TreeView.__init__(self, model) self.set_headers_visible(False) self.set_property("show-expanders", False) self.set_property("level-indentation", 10) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn('Column', renderer) def top_level(column, cell, store, iter): cell.set_property("text", store[iter][0]) if store.iter_depth(iter) == 0: cell.set_property('foreground', "black") cell.set_property('background', "gray") else: cell.set_property('foreground', "black") cell.set_property('background', "white") column.set_cell_data_func(renderer, top_level) self.append_column(column) selection = self.get_selection() selection.set_mode(gtk.SELECTION_SINGLE) selection.connect('changed', self.on_selection_changed) self.current = None def on_selection_changed(self, selection, data=None): model, iter = selection.get_selected() if model.iter_depth(iter) == 0 and iter != self.current: self.collapse_all() self.expand_row(model.get_path(iter), True) self.current = iter selected_item = model.get_value(iter, 0) print selected_item if __name__ == "__main__": window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_title("Accordion example") window.set_size_request(200, 200) window.connect("delete_event", gtk.main_quit) treestore = gtk.TreeStore(str) for parent in range(4): piter = treestore.append(None, ['parent %i' % parent]) for child in range(3): treestore.append(piter, ['child %i of parent %i' % (child, parent)]) accordion = Accordion(treestore) window.add(accordion) window.show_all() gtk.main() pychess-0.12beta3/lib/pychess/System/Log.py0000755000175000017470000000766012161415524017707 0ustar tamasusersimport os import sys import time from pychess.Utils.const import LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR, STANDARD_LOGGING if STANDARD_LOGGING: import logging as log log.messages = [] log.connect = lambda log, messages: None else: import gobject from GtkWorker import EmitPublisher, Publisher from prefix import getUserDataPrefix, addUserDataPrefix MAXFILES = 10 DEBUG = True labels = {LOG_DEBUG: "Debug", LOG_INFO: "Info", LOG_WARNING: "Warning", LOG_ERROR: "Error"} class Log (gobject.GObject): __gsignals__ = { "logged": (gobject.SIGNAL_RUN_FIRST, None, (object,)) } # list of (str, float, str, int) def __init__ (self, logpath): gobject.GObject.__init__(self) self.file = open(logpath, "w") self.printTime = True # We store everything in this list, so that the LogDialog, which is # imported a little later, will have all data ever given to Log. # When Dialog inits, it will set this list to None, and we will stop # appending data to it. Ugly? Somewhat I guess. self.messages = [] self.publisher = EmitPublisher (self, "logged", Publisher.SEND_LIST) self.publisher.start() def _format (self, task, message, type): t = time.strftime ("%H:%M:%S") return "%s %s %s: %s" % (t, task, labels[type], message) def _log (self, task, message, type): if not message: return if self.messages != None: self.messages.append((task, time.time(), message, type)) self.publisher.put((task, time.time(), message, type)) if self.printTime: message = self._format(task, message, type) self.printTime = message.endswith("\n") try: self.file.write(message) self.file.flush() except IOError, e: if not type == LOG_ERROR: self.error("Unable to write '%s' to log file because of error: %s" % \ (message, ", ".join(str(a) for a in e.args))) if type in (LOG_ERROR, LOG_WARNING) and task != "stdout": print message def debug (self, message, task="Default"): if DEBUG: self._log (task, message, LOG_DEBUG) def info (self, message, task="Default"): self._log (task, message, LOG_INFO) def warn (self, message, task="Default"): self._log (task, message, LOG_WARNING) def error (self, message, task="Default"): self._log (task, message, LOG_ERROR) oldlogs = [l for l in os.listdir(getUserDataPrefix()) if l.endswith(".log")] if len(oldlogs) >= MAXFILES: oldlogs.sort() try: os.remove(addUserDataPrefix(oldlogs[0])) except OSError, e: pass newName = time.strftime("%Y-%m-%d_%H-%M-%S") + ".log" log = Log(addUserDataPrefix(newName)) class LogPipe: def __init__ (self, to, flag=""): self.to = to self.flag = flag def write (self, data): try: self.to.write(data) except IOError: if self.flag == "stdout": # Certainly hope we never end up here pass else: log.error("Could not write data '%s' to pipe '%s'" % (data, repr(self.to))) if log: log.debug (data, self.flag) #self.flush() def flush (self): self.to.flush() #log.debug (".flush()", self.flag) def fileno (self): return self.to.fileno() sys.stdout = LogPipe(sys.stdout, "stdout") sys.stderr = LogPipe(sys.stderr, "stdout") pychess-0.12beta3/lib/pychess/System/conf.py0000755000175000017470000000240712161415524020105 0ustar tamasusers""" The task of this module is to provide easy saving/loading of configurations It also supports gconf like connection, so you get notices when a property has changed. """ import conf_configParser as confmodule """Module for using gconf without having to care about types""" def notify_add (key, func, *args): """The signature for func must be self, client, *args, **kwargs""" assert isinstance(key, str) return confmodule.notify_add(key, func, args) def notify_remove (conid): confmodule.notify_remove(conid) def getStrict (key): assert hasKey (key) return confmodule.get(key) def get (key, alternative): if hasKey (key): return confmodule.get(key) if callable(alternative): alternative = alternative() return alternative def set (key, value): confmodule.set(key, value) def hasKey (key): return confmodule.hasKey(key) import sys, os if sys.platform == "win32": username = os.environ["USERNAME"] del sys, os else: from os import getuid from pwd import getpwuid userdata = getpwuid(getuid()) realname = userdata.pw_gecos.split(",")[0] if realname: username = realname else: username = userdata.pw_name del getuid, getpwuid del sys, os del userdata, realname pychess-0.12beta3/lib/pychess/System/protoopen.py0000755000175000017470000000232312163644726021214 0ustar tamasusersimport urllib, os def splitUri (uri): uri = urllib.url2pathname(uri) # escape special chars uri = uri.strip('\r\n\x00') # remove \r\n and NULL return uri.split("://") def protoopen (uri): """ Function for opening many things """ try: return open(uri, "rU") except (IOError, OSError): pass try: return urllib.urlopen(uri) except (IOError, OSError): pass raise IOError, "Protocol isn't supported by pychess" def protosave (uri, append=False): """ Function for saving many things """ splitted = splitUri(uri) if splitted[0] == "file": if append: return file(splitted[1], "a") return file(splitted[1], "w") elif len(splitted) == 1: if append: return file(splitted[0], "a") return file(splitted[0], "w") raise IOError, "PyChess doesn't support writing to protocol" def isWriteable (uri): """ Returns true if protoopen can open a write pipe to the uri """ splitted = splitUri(uri) if splitted[0] == "file": return os.access (splitted[1], os.W_OK) elif len(splitted) == 1: return os.access (splitted[0], os.W_OK) return False pychess-0.12beta3/lib/pychess/System/command.py0000644000175000017470000000344112161415524020572 0ustar tamasusers#! /usr/bin/env python import threading import subprocess import traceback import shlex class Command(object): """ Enables to run subprocess commands in a different thread with TIMEOUT option. Based on jcollado's solution: http://stackoverflow.com/questions/1191374/subprocess-with-timeout/4825933#4825933 """ command = None inputstr = None process = None status = None output, error = '', '' def __init__(self, command, inputstr): if isinstance(command, basestring): command = shlex.split(command) self.command = command self.inputstr = inputstr def run(self, timeout=None, **kwargs): """ Run a command then return: (status, output, error). """ def target(**kwargs): try: self.process = subprocess.Popen(self.command, **kwargs) self.output, self.error = self.process.communicate(input=self.inputstr) self.status = self.process.returncode except: self.error = traceback.format_exc() self.status = -1 # default stdin, stdout and stderr if 'stdin' not in kwargs: kwargs['stdin'] = subprocess.PIPE if 'stdout' not in kwargs: kwargs['stdout'] = subprocess.PIPE if 'stderr' not in kwargs: kwargs['stderr'] = subprocess.PIPE # thread thread = threading.Thread(target=target, kwargs=kwargs) thread.start() thread.join(timeout) if thread.is_alive(): self.process.terminate() thread.join() return self.status, self.output, self.error if __name__ == "__main__": command = Command("DC", "xboard\nprotover 2\n") command = Command("DC", "uci\n") print command.run(timeout=3) pychess-0.12beta3/lib/pychess/gfx/0000755000175000017470000000000012176727272016114 5ustar tamasuserspychess-0.12beta3/lib/pychess/gfx/__init__.py0000755000175000017470000000000012161415524020202 0ustar tamasuserspychess-0.12beta3/lib/pychess/gfx/Pieces.py0000644000175000017470000010163212161415524017665 0ustar tamasusersimport re import time import math import cairo import rsvg from pychess.Utils.const import * from pychess.System import conf from pychess.System.prefix import addDataPrefix from pychess.System.cairoextras import create_cairo_font_face_for_file elemExpr = re.compile(r"([a-zA-Z])\s*([0-9\.,\s]*)\s+|[z]\s+") spaceExpr = re.compile(r"[\s,]+") l = [] def parse(n, psize): yield "def f(c):" s = psize/size for cmd, points in n: pstr = ",".join(str(p*s) for p in points) if cmd == "M": yield "c.rel_move_to(%s)" % pstr elif cmd == "L": yield "c.rel_line_to(%s)" % pstr else: yield "c.rel_curve_to(%s)" % pstr # This has double speed at drawing, but when generating new functions, it # takes about ten times longer. def drawPiece1 (piece, cc, x, y, psize, allWhite=False): cc.save() cc.move_to(x,y) if not psize in parsedPieces[piece.color][piece.sign]: exec("\n ".join(parse(parsedPieces[piece.color][piece.sign][size],psize))) parsedPieces[piece.color][piece.sign][psize] = f cc.fill() cc.restore() def drawPieceReal (piece, cc, psize, allWhite=False): color = WHITE if allWhite else piece.color # Do the actual drawing to the Cairo context for cmd, points in parsedPieces[color][piece.sign][psize]: if cmd == 'M': cc.rel_move_to(*points) elif cmd == 'L': cc.rel_line_to(*points) elif cmd == 'C': cc.rel_curve_to(*points) else: cc.set_source_rgb(1,1,1) cc.fill_preserve() cc.set_source_rgb(0,0,0) def drawPiece2 (piece, cc, x, y, psize, allWhite=False): """Rendering pieces with draw each time method""" cc.save() cc.move_to(x,y) if not psize in parsedPieces[piece.color][piece.sign]: list = [(cmd, [(p*psize/size) for p in points]) for cmd, points in parsedPieces[piece.color][piece.sign][size]] parsedPieces[piece.color][piece.sign][psize] = list drawPieceReal (piece, cc, psize, allWhite) cc.fill() cc.restore() piece_ord = {KING: 0, QUEEN: 1, ROOK: 2, BISHOP: 3, KNIGHT: 4, PAWN: 5} pnames = ('Pawn','Knight','Bishop','Rook','Queen','King') def drawPiece3(piece, context, x, y, psize, allWhite=False): """Rendering pieces using .svg chess figurines""" color = WHITE if allWhite else piece.color if all_in_one: image = svg_pieces w, h = image.props.width/6, image.props.height/2 offset_x = piece_ord[piece.sign]*psize offset_y = 0 if color == BLACK else psize else: image = svg_pieces[color][piece.sign] w, h = image.props.width, image.props.height offset_x = 0 offset_y = 0 context.save() context.rectangle(x, y, psize, psize) context.clip() context.translate(x-offset_x, y-offset_y) context.scale(1.0*psize/w, 1.0*psize/h) context.push_group() if all_in_one: pieceid = '#%s%s' % ('White' if color==0 else 'Black', pnames[piece.sign-1]) image.render_cairo(context, id=pieceid) else: image.render_cairo(context) context.pop_group_to_source() context.paint_with_alpha(piece.opacity) context.restore() def drawPiece4(piece, context, x, y, psize, allWhite=False): """Rendering pieces using .ttf chessfont figurines""" color = WHITE if allWhite else piece.color context.set_font_face(chess_font_face) context.set_font_size(psize) context.move_to(x, y+psize) context.text_path(piece2char[color][piece.sign]) close_path = False for cmd, points in context.copy_path(): if cmd == 0: context.move_to(*points) if close_path: context.set_source_rgb(1,1,1) context.fill_preserve() context.set_source_rgb(0,0,0) close_path = False elif cmd == 1: context.line_to(*points) elif cmd == 2: context.curve_to(*points) else: close_path = True context.fill() # This version has proven itself nearly three times as slow as the "draw each time" method. # At least when drawing one path only. Might be useful when drawing svg def drawPiece5 (piece, cc, x, y, psize, allWhite=False): """Rendering pieces from cache instead of draw each time""" if not piece in surfaceCache: s = cc.get_target().create_similar(cairo.CONTENT_COLOR_ALPHA, int(size), int(size)) ctx = cairo.Context(s) ctx.move_to(0,0) drawPieceReal (piece, ctx, size) ctx.set_source_rgb(0,0,0) ctx.fill() surfaceCache[piece] = s cc.save() cc.set_source_rgb(0,0,0) cc.scale(psize/size, psize/size) cc.translate(x*size/psize, y*size/psize) cc.rectangle (0, 0, int(size), int(size)) # TODO: DOes this give any performance boost? # From cairo thread: # Or paint() instead of fill(). fill() needs a path, so you should do a # rectangle() first. cc.set_source_surface(surfaceCache[piece], 0, 0) cc.fill() cc.restore() surfaceCache = {} size = 800.0 pieces = { BLACK: { KING: "M 653.57940,730.65870 L 671.57940,613.65870 C 725.57940,577.65870 797.57940,514.65870 797.57940,397.65870 C 797.57940,325.65870 734.57940,280.65870 662.57940,280.65870 C 590.57940,280.65870 509.57940,334.65870 509.57940,334.65870 C 509.57940,334.65870 554.57940,190.65870 428.57940,154.65870 L 428.57940,118.65870 L 482.57940,118.65870 L 482.57940,64.658690 L 428.57940,64.658690 L 428.57940,10.658690 L 374.57940,10.658690 L 374.57940,64.658690 L 320.57940,64.658690 L 320.57940,118.65870 L 374.57940,118.65870 L 374.57940,154.65870 C 248.57940,190.65870 293.57940,334.65870 293.57940,334.65870 C 293.57940,334.65870 212.57940,280.65870 140.57940,280.65870 C 68.579380,280.65870 5.5793840,325.65870 5.5793840,397.65870 C 5.5793840,514.65870 77.579380,577.65870 131.57940,613.65870 L 149.57940,730.65870 C 158.57940,757.65870 221.57940,793.65870 401.57940,793.65870 C 581.57940,793.65870 644.57940,757.65870 653.57940,730.65870 z M 374.57940,541.65870 C 329.57940,541.65870 212.57940,550.65870 167.57940,568.65870 C 113.57940,541.65870 59.579380,496.65870 59.579380,406.65870 C 59.579380,352.65870 86.579380,334.65870 149.57940,334.65870 C 212.57940,334.65870 356.57940,397.65870 374.57940,541.65870 z M 428.57940,541.65870 C 446.57940,397.65870 590.57940,334.65870 662.57940,334.65870 C 716.57940,334.65870 743.57940,352.65870 743.57940,406.65870 C 743.57940,496.65870 689.57940,541.65870 635.57940,568.65870 C 590.57940,550.65870 473.57940,541.65870 428.57940,541.65870 z M 617.57940,667.65870 L 608.57940,705.90870 C 437.57940,678.90870 365.57940,678.90870 194.57940,705.90870 L 185.57940,667.65870 C 365.57940,640.65870 437.57940,640.65870 617.57940,667.65870 z M 464.57940,514.65870 C 527.57940,514.65870 581.57940,523.65870 635.57940,541.65870 C 707.57940,487.65870 716.57940,442.65870 716.57940,406.65870 C 716.57940,379.65870 698.57940,361.65870 662.57940,361.65870 C 554.57940,361.65670 473.57940,451.65870 464.57940,514.65870 z M 338.57940,514.65870 C 329.57940,451.65870 239.57940,361.65670 140.57940,361.65870 C 104.57940,361.65870 86.579380,388.65870 86.579380,415.65870 C 86.579380,442.65870 95.579380,487.65870 167.57940,541.65870 C 221.57940,523.65870 275.57940,514.65870 338.57940,514.65870 z ", QUEEN: "M 617.12310,626.00950 C 617.12310,599.00950 627.77310,557.68550 671.12310,536.00950 C 689.12310,527.00950 689.12310,509.00950 689.12310,500.00950 C 689.12310,471.54950 743.12310,203.00950 743.12310,203.00950 C 779.62510,198.74750 796.96610,170.47750 796.96610,144.34650 C 796.96610,112.98940 772.26810,85.907430 738.52810,85.907430 C 710.73310,85.907430 680.56310,109.18740 679.85110,143.63450 C 679.66510,152.63250 681.03910,169.05250 697.43010,186.15650 L 590.12310,392.00950 L 590.12310,158.00950 C 619.03410,151.95050 636.85210,127.48250 636.85210,99.687430 C 636.85210,69.517430 610.72110,42.199430 577.93710,42.199430 C 544.44210,42.199430 519.27910,70.470430 519.73610,102.06340 C 519.97310,118.45540 527.57510,136.03450 545.12410,149.00950 L 464.12410,383.00950 L 428.12410,131.00950 C 452.74310,117.03040 459.86810,97.075430 459.86810,80.208430 C 459.86810,41.011430 428.74910,20.581430 401.19210,20.818430 C 371.26010,21.076430 342.75310,46.950430 342.75310,77.120430 C 342.75310,107.05240 359.14410,122.73150 374.12410,131.00950 L 338.12410,383.00950 L 257.12410,149.00950 C 275.75910,134.13450 282.17310,119.64340 282.17310,98.976430 C 282.17310,77.833430 264.35910,42.199430 223.25910,42.199430 C 190.47610,42.199430 165.29410,70.944430 165.29410,99.926430 C 165.29410,134.84850 190.23910,153.37750 212.12410,158.01050 L 212.12410,392.01050 L 104.12410,185.01050 C 117.78210,170.95350 120.15710,154.06050 120.15710,145.06050 C 120.15710,114.41440 97.114060,85.807430 59.124060,86.010430 C 33.925060,86.146430 3.4010650,109.06240 3.0420650,145.06050 C 2.8040650,168.81650 20.858060,200.88650 59.124060,203.01050 C 59.124060,203.01050 113.12410,473.01050 113.12410,500.01050 C 113.12410,509.01150 113.12410,527.01050 131.12410,536.01050 C 167.12410,554.01150 185.12410,599.01050 185.12410,626.01050 C 185.12410,662.01150 158.12410,698.01150 158.12410,707.01150 C 158.12410,752.01050 320.12410,779.01150 401.12410,778.99150 C 473.12410,778.97350 644.12410,752.01050 644.12410,707.01050 C 644.12410,698.01050 617.12410,671.01050 617.12410,626.01050 L 617.12310,626.00950 z M 594.55210,537.12950 C 583.21810,553.12950 581.21810,558.46250 576.55210,575.12950 C 487.21810,553.79650 327.21810,547.79650 225.88510,575.79650 C 221.21710,557.79650 219.21710,550.46250 208.55110,537.12950 C 325.21710,508.46250 479.21710,506.46250 594.55110,537.12950 L 594.55210,537.12950 z M 570.55210,663.79650 C 555.88510,674.46250 551.21810,682.46250 542.55210,693.79650 C 434.55210,677.12950 363.88410,674.46250 255.21810,693.12950 C 246.55210,679.79650 241.88610,673.12950 229.21810,663.79650 C 341.88610,634.46250 457.88610,644.46250 570.55210,663.79650 L 570.55210,663.79650 z ", ROOK: "M 232.94440,519.29360 L 124.94440,627.29360 L 124.94440,762.29360 L 682.94440,762.29360 L 682.94440,627.29360 L 574.94440,519.29360 L 574.94440,303.29360 L 682.94440,231.29360 L 682.94440,51.293580 L 520.94440,51.293580 L 520.94440,123.29360 L 484.94440,123.29360 L 484.94440,51.293580 L 322.94440,51.293580 L 322.94440,123.29360 L 286.94440,123.29360 L 286.94440,51.293580 L 124.94440,51.293580 L 124.94440,231.29360 L 232.94440,303.29360 L 232.94440,519.29360 z M 268.94440,321.29360 L 268.94440,285.29360 L 538.94440,285.29360 L 538.94440,321.29360 L 268.94440,321.29360 z M 268.94440,537.29360 L 268.94440,501.29360 L 538.94440,501.29360 L 538.94440,537.29360 L 268.94440,537.29360 z ", BISHOP: "M 491.69440,453.44430 L 500.69440,482.69430 C 464.69440,455.69430 338.69440,455.69430 302.69440,482.69430 L 311.69440,453.44430 C 332.69440,432.44430 470.69440,432.44430 491.69440,453.44430 z M 509.69440,518.69430 L 518.69440,545.69430 C 470.69440,521.69430 332.69440,521.69430 284.69440,545.69430 L 293.69440,518.69430 C 338.69440,491.69430 464.69440,491.69430 509.69440,518.69430 z M 797.69440,653.69430 C 797.69440,653.69430 752.69440,635.69430 689.69440,626.69430 C 652.95940,621.44630 599.69440,635.69430 554.69440,626.69430 C 518.69440,617.69430 482.69440,599.69430 482.69440,599.69430 L 572.69440,554.69430 L 545.69440,473.69430 C 545.69440,473.69430 608.69440,446.69430 608.69440,365.69430 C 608.69440,302.69430 563.69440,230.69430 500.69440,194.69430 C 455.13040,168.65830 446.69440,149.69430 446.69440,149.69430 C 446.69440,149.69430 482.69440,131.69430 482.69440,86.694330 C 482.69440,50.694330 455.69440,5.6943260 401.69440,5.6943260 C 347.69440,5.6943260 320.69440,50.694330 320.69440,86.694330 C 320.69440,131.69430 356.69440,149.69430 356.69440,149.69430 C 356.69440,149.69430 348.25840,168.65830 302.69440,194.69430 C 239.69440,230.69430 194.69440,302.69430 194.69440,365.69430 C 194.69440,446.69430 257.69440,473.69430 257.69440,473.69430 L 230.69440,554.69430 L 320.69440,599.69430 C 320.69440,599.69430 284.69440,617.69430 248.69440,626.69430 C 204.17340,637.82430 146.99540,621.93730 113.69440,626.69430 C 50.694360,635.69430 5.6943640,653.69430 5.6943640,653.69430 L 50.694360,797.69430 C 113.69440,779.69430 122.69440,779.69430 176.69440,770.69430 C 209.78640,765.17930 291.51040,774.42230 329.69440,761.69430 C 383.69440,743.69430 401.69440,716.69430 401.69440,716.69430 C 401.69440,716.69430 419.69440,743.69430 473.69440,761.69430 C 511.87840,774.42230 598.40740,767.15830 626.69440,770.69430 C 681.01640,777.48430 752.69440,797.69430 752.69440,797.69430 L 797.69440,653.69430 L 797.69440,653.69430 z M 428.69440,392.69430 L 374.69440,392.69430 L 374.69440,356.69430 L 338.69440,356.69430 L 338.69440,302.69430 L 374.69440,302.69430 L 374.69440,266.69430 L 428.69440,266.69430 L 428.69440,302.69430 L 464.69440,302.69430 L 464.69440,356.69430 L 428.69440,356.69430 L 428.69440,392.69430 z ", KNIGHT: "M 84.310370,730.48460 L 564.28850,729.48460 C 563.97550,600.58860 477.97550,556.58860 485.00550,477.74860 L 587.06050,552.58860 C 611.11150,581.44960 637.05150,594.72560 657.36750,594.91660 C 671.53450,595.04960 633.37050,547.08060 627.37050,536.08060 C 653.37050,535.08060 689.37050,585.08060 718.38750,574.11560 C 739.54850,566.12160 754.01750,540.22060 753.06850,502.24260 C 751.70850,447.81260 690.47450,367.52960 667.34250,266.83660 C 641.48850,160.69960 611.91250,147.09260 595.58450,141.64850 L 595.22350,64.085560 L 513.57950,123.95850 L 467.31450,43.675570 L 421.04950,138.92750 C 260.48350,91.300560 89.752370,428.40260 84.309370,730.48460 L 84.310370,730.48460 z M 125.87840,697.92560 C 125.87840,436.61260 289.76850,168.92760 381.72850,167.10560 C 399.37150,167.41260 415.37150,173.41260 415.32750,179.85360 C 415.24050,192.63260 399.02750,197.15260 379.90750,197.15260 C 307.97850,199.88460 158.65640,453.00260 156.83540,695.19560 C 156.83540,713.40460 127.70040,712.49460 125.87940,697.92560 L 125.87840,697.92560 z M 678.74350,471.34160 C 684.09050,477.57960 689.68150,486.16560 689.86350,492.19160 C 690.09450,499.83660 684.07150,505.86160 678.28050,503.54360 C 672.48850,501.22760 665.53850,488.25260 660.90550,485.70560 C 656.27250,483.15660 642.14050,481.30360 642.37250,474.81660 C 642.60450,468.32960 652.10250,462.53760 657.66250,462.76960 C 663.22250,463.00160 675.96450,468.09760 678.74450,471.34160 L 678.74350,471.34160 z M 520.98750,218.08460 C 534.62350,223.81160 559.71450,235.26460 577.44150,255.99260 C 594.62350,278.90060 595.98650,304.80860 596.53150,323.35560 C 566.80450,326.90060 541.87450,318.25160 529.44150,290.90060 C 521.25950,272.90060 520.98650,239.62960 520.98650,218.08460 L 520.98750,218.08460 z ", PAWN: "M 688.02380,750.97630 L 688.02380,624.97630 C 688.02380,579.97630 661.62380,452.47630 553.02380,408.97630 C 598.02380,354.97630 607.02380,255.97630 517.02380,192.97630 C 544.02380,156.97630 517.02380,30.976220 409.02380,30.976220 C 301.02380,30.976220 274.02380,156.97630 301.02380,192.97630 C 211.02380,255.97630 220.02380,354.97630 265.02380,408.97630 C 157.02380,453.97630 130.02380,579.97630 130.02380,624.97630 L 130.02380,750.97630 L 688.02380,750.97630 z " }, WHITE: { KING: "M 648.50000,730.65870 L 666.50000,613.65870 C 720.50000,577.65870 792.50000,514.65870 792.50000,397.65870 C 792.50000,325.65870 729.50000,280.65870 657.50000,280.65870 C 585.50000,280.65870 504.50000,334.65870 504.50000,334.65870 C 504.50000,334.65870 549.50000,190.65870 423.50000,154.65870 L 423.50000,118.65870 L 477.50000,118.65870 L 477.50000,64.658690 L 423.50000,64.658690 L 423.50000,10.658690 L 369.50000,10.658690 L 369.50000,64.658690 L 315.50000,64.658690 L 315.50000,118.65870 L 369.50000,118.65870 L 369.50000,154.65870 C 243.50000,190.65870 288.50000,334.65870 288.50000,334.65870 C 288.50000,334.65870 207.50000,280.65870 135.50000,280.65870 C 63.500000,280.65870 0.50000000,325.65870 0.50000000,397.65870 C 0.50000000,514.65870 72.500000,577.65870 126.50000,613.65870 L 144.50000,730.65870 C 153.50000,757.65870 216.50000,793.65870 396.50000,793.65870 C 576.50000,793.65870 639.50000,757.65870 648.50000,730.65870 z M 396.50000,451.65870 C 396.50000,451.65870 333.50000,343.65870 333.50000,280.65870 C 333.50000,217.65870 369.50000,208.65870 396.50000,208.65870 C 423.50000,208.65870 459.50000,226.65870 459.50000,280.65870 C 459.50000,334.65870 396.50000,451.65870 396.50000,451.65870 z M 369.50000,541.65870 C 324.50000,541.65870 207.50000,550.65870 162.50000,568.65870 C 108.50000,541.65870 54.500000,496.65870 54.500000,406.65870 C 54.500000,352.65870 81.500000,334.65870 144.50000,334.65870 C 207.50000,334.65870 351.50000,397.65870 369.50000,541.65870 z M 423.50000,541.65870 C 441.50000,397.65870 585.50000,334.65870 657.50000,334.65870 C 711.50000,334.65870 738.50000,352.65870 738.50000,406.65870 C 738.50000,496.65870 684.50000,541.65870 630.50000,568.65870 C 585.50000,550.65870 468.50000,541.65870 423.50000,541.65870 z M 612.50000,613.65870 L 603.50000,685.65870 C 432.50000,658.65870 360.50000,658.65870 189.50000,685.65870 L 180.50000,613.65870 C 360.50000,586.65870 432.50000,586.65870 612.50000,613.65870 z M 549.50000,730.65870 C 468.50000,748.65870 441.50000,748.65870 396.50000,748.65870 C 351.50000,748.65870 324.50000,748.65870 243.50000,730.65870 C 324.50000,712.65870 342.50000,712.65870 396.50000,712.65870 C 450.50000,712.65870 468.50000,712.65870 549.50000,730.65870 z ", QUEEN: "M 764.60380,143.65350 C 764.80680,155.66150 755.91880,166.72550 742.61880,166.56350 C 727.46980,166.37750 719.85480,154.92450 719.70980,144.57750 C 719.52480,131.46050 729.68780,121.66950 742.24980,121.66950 C 754.99780,121.66950 764.41980,132.75350 764.60380,143.65350 L 764.60380,143.65350 z M 619.66280,626.00950 C 619.66280,599.00950 630.31280,557.68550 673.66280,536.00950 C 691.66280,527.00950 691.66280,509.00950 691.66280,500.00950 C 691.66280,471.54950 745.66280,203.00950 745.66280,203.00950 C 782.16480,198.74750 799.50580,170.47750 799.50580,144.34650 C 799.50580,112.98950 774.80780,85.907570 741.06780,85.907570 C 713.27280,85.907570 683.10280,109.18750 682.39080,143.63450 C 682.20480,152.63250 683.57880,169.05250 699.96980,186.15650 L 592.66280,392.00950 L 592.66280,158.00950 C 621.57380,151.95050 639.39180,127.48250 639.39180,99.687540 C 639.39180,69.517570 613.26080,42.199570 580.47680,42.199570 C 546.98180,42.199570 521.81880,70.470570 522.27580,102.06350 C 522.51280,118.45550 530.11480,136.03450 547.66380,149.00950 L 466.66380,383.00950 L 430.66380,131.00950 C 455.28280,117.03050 462.40880,97.075540 462.40880,80.208570 C 462.40880,41.011570 431.28880,20.581570 403.73180,20.818570 C 373.79980,21.076570 345.29380,46.950570 345.29380,77.120570 C 345.29380,107.05250 361.68480,122.73150 376.66380,131.00950 L 340.66380,383.00950 L 259.66380,149.00950 C 278.29980,134.13450 284.71380,119.64350 284.71380,98.976540 C 284.71380,77.833570 266.89880,42.199570 225.79980,42.199570 C 193.01680,42.199570 167.83480,70.944570 167.83480,99.926540 C 167.83480,134.84850 192.77880,153.37750 214.66380,158.01050 L 214.66380,392.01050 L 106.66380,185.01050 C 120.32180,170.95350 122.69780,154.06050 122.69780,145.06050 C 122.69780,114.41450 99.654770,85.807570 61.663770,86.010570 C 36.464770,86.146570 5.9407760,109.06250 5.5817760,145.06050 C 5.3447760,168.81650 23.398770,200.88650 61.663770,203.01050 C 61.663770,203.01050 115.66380,473.01050 115.66380,500.01050 C 115.66380,509.01150 115.66380,527.01050 133.66380,536.01050 C 169.66380,554.01150 187.66380,599.01050 187.66380,626.01050 C 187.66380,662.01150 160.66380,698.01150 160.66380,707.01150 C 160.66380,752.01050 322.66380,779.01150 403.66380,778.99150 C 475.66380,778.97350 646.66380,752.01050 646.66380,707.01050 C 646.66380,698.01050 619.66380,671.01050 619.66380,626.01050 L 619.66280,626.00950 z M 87.606770,144.04950 C 87.809770,156.05650 78.921770,167.12050 65.621770,166.95850 C 50.472770,166.77350 42.857770,155.31950 42.712770,144.97350 C 42.527770,131.85650 52.690770,122.06450 65.252770,122.06450 C 78.000770,122.06450 87.422770,133.14950 87.606770,144.04950 z M 603.61080,99.656540 C 603.81380,111.66350 594.92580,122.72750 581.62580,122.56550 C 566.47680,122.38050 558.86180,110.92650 558.71680,100.58050 C 558.53180,87.463540 568.69480,77.671570 581.25680,77.671570 C 594.00480,77.671570 603.42680,88.756540 603.61080,99.656540 L 603.61080,99.656540 z M 426.61880,78.157570 C 426.82180,90.165540 417.93380,101.22950 404.63380,101.06750 C 389.48480,100.88150 381.86980,89.428540 381.72480,79.081570 C 381.53980,65.964570 391.70280,56.173570 404.26480,56.173570 C 417.01280,56.173570 426.43480,67.257570 426.61880,78.157570 z M 249.12780,100.65650 C 249.33080,112.66350 240.44280,123.72750 227.14280,123.56550 C 211.99380,123.38050 204.37880,111.92650 204.23380,101.58050 C 204.04880,88.463540 214.21180,78.671570 226.77380,78.671570 C 239.52180,78.671570 248.94380,89.756540 249.12780,100.65650 z M 578.63980,575.93450 C 569.63980,591.93450 563.63980,630.93450 573.63980,663.93450 C 467.97280,643.60050 338.63980,637.93450 231.63980,663.93450 C 238.63980,638.93450 240.63980,613.93450 227.63980,575.93450 C 320.63980,544.93450 515.63980,553.93450 578.63980,575.93450 L 578.63980,575.93450 z M 537.63980,707.93450 C 489.97280,725.93450 429.97280,726.26850 399.97280,726.26850 C 369.97280,726.26850 308.97280,723.93450 264.63980,708.93450 C 317.63980,697.93450 362.30680,695.60050 397.30680,695.60050 C 432.30680,695.60050 497.97280,700.26850 537.63980,707.93450 z M 210.32980,536.94050 C 210.32980,536.94050 205.66280,530.27350 200.99580,524.94050 C 210.32980,522.27350 232.99580,509.60650 244.32980,494.94050 C 291.66280,508.94050 316.32980,498.94050 350.99580,476.27350 C 384.32980,494.94050 417.66280,494.27350 458.99580,474.94050 C 486.32980,498.27350 515.66280,504.27350 559.66280,495.60650 C 576.32980,512.94050 586.99580,518.94050 604.32980,525.60650 L 596.32980,536.94050 C 454.32980,506.94050 358.99580,506.27350 210.32980,536.94050 L 210.32980,536.94050 z M 691.30580,290.55250 L 654.25080,486.80250 C 626.80380,493.20650 606.21880,481.76950 593.40980,465.30150 L 691.30580,290.55250 z M 553.20180,247.31050 L 550.98680,445.24750 C 523.09080,454.98950 508.03480,450.56150 487.66580,434.17750 L 553.20180,247.31050 z M 401.76580,233.14150 L 433.64780,429.30650 C 416.82180,441.26250 388.48180,443.47650 369.44080,428.74850 L 401.76580,233.14150 z M 252.98380,254.39550 L 318.96280,441.26250 C 304.35080,457.64650 279.55280,464.28750 255.64180,452.77550 L 252.98480,254.39550 L 252.98380,254.39550 z M 116.63980,294.93450 L 212.13980,463.43450 C 201.63980,481.43450 175.13980,492.43450 151.13980,485.43450 L 116.63980,294.93450 z ", ROOK: "M 227.86510,504.05560 L 119.86510,612.05560 L 119.86510,747.05560 L 677.86510,747.05560 L 677.86510,612.05560 L 569.86510,504.05560 L 569.86510,288.05560 L 677.86510,216.05560 L 677.86510,36.055570 L 515.86510,36.055570 L 515.86510,108.05560 L 479.86510,108.05560 L 479.86510,36.055570 L 317.86510,36.055570 L 317.86510,108.05560 L 281.86510,108.05560 L 281.86510,36.055570 L 119.86510,36.055570 L 119.86510,216.05560 L 227.86510,288.05560 L 227.86510,504.05560 z M 623.86510,90.055570 L 623.86510,180.05560 L 515.86510,252.05560 L 281.86510,252.05560 L 173.86510,180.05560 L 173.86510,90.055570 L 227.86510,90.055570 L 227.86510,162.05560 L 371.86510,162.05560 L 371.86510,90.055570 L 425.86510,90.055570 L 425.86510,162.05560 L 569.86510,162.05560 L 569.86510,90.055570 L 623.86510,90.055570 z M 515.86510,315.05560 L 515.86510,468.05560 L 281.86510,468.05560 L 281.86510,315.05560 L 515.86510,315.05560 z M 623.86510,657.05560 L 623.86510,693.05560 L 173.86510,693.05560 L 173.86510,657.05560 L 623.86510,657.05560 z M 515.86510,531.05560 L 596.86510,603.05560 L 200.86510,603.05560 L 281.86510,531.05560 L 515.86510,531.05560 z ", BISHOP: "M 404.23410,59.693330 C 422.23410,59.693330 431.23410,68.693330 431.23410,86.693330 C 431.23410,104.69330 422.23410,113.69330 404.23410,113.69330 C 386.23410,113.69330 377.23410,104.69330 377.23410,86.693330 C 377.23410,68.693330 386.23410,59.693330 404.23410,59.693330 z M 404.23410,167.69330 C 440.23410,221.69330 458.23410,221.69330 503.23410,257.69330 C 548.23410,293.69330 557.23410,338.69330 557.23410,374.69430 C 557.23410,410.69330 536.23410,432.29530 512.23410,446.69430 C 512.23410,446.69430 476.23410,428.69430 404.23410,428.69430 C 332.23410,428.69430 296.23410,446.69430 296.23410,446.69430 C 296.23410,446.69430 251.23410,410.69330 251.23410,374.69430 C 251.23410,338.69330 260.23410,293.69330 305.23410,257.69330 C 350.23410,221.69330 368.23410,221.69330 404.23410,167.69330 z M 503.23410,482.69430 L 512.23410,509.69430 C 467.23410,491.69430 341.23410,491.69430 296.23410,509.69430 L 305.23410,482.69430 C 341.23410,464.69430 467.23410,464.69430 503.23410,482.69430 z M 404.23410,536.69430 C 440.23410,536.69530 494.23410,545.69430 494.23410,545.69430 C 494.23410,545.69430 440.23410,554.69430 404.23410,554.69430 C 368.23410,554.69430 314.23410,545.69530 314.23410,545.69530 C 314.23410,545.69530 368.23410,536.69330 404.23410,536.69430 z M 440.23410,635.69430 C 494.23410,671.69430 503.59610,666.60330 539.23410,671.69430 C 602.23410,680.69430 628.16110,676.01530 656.23410,680.69430 C 710.23410,689.69430 737.23410,698.69430 737.23410,698.69430 L 719.23410,743.69430 C 719.23410,743.69430 710.66410,732.18430 665.23410,725.69430 C 602.23410,716.69430 548.23410,716.69430 503.23410,707.69430 C 458.23410,698.69430 422.23410,680.69430 404.23410,662.69430 C 386.84810,680.08030 350.23410,698.69430 305.23410,707.69430 C 260.23410,716.69430 207.48310,712.84430 143.23410,725.69430 C 98.234040,734.69430 89.234040,743.69430 89.234040,743.69430 L 71.234040,698.69430 C 71.234040,698.69430 98.234040,689.69430 152.23410,680.69430 C 176.77810,676.60330 206.23410,680.69430 269.23410,671.69430 C 305.96910,666.44630 314.23410,671.69430 368.23410,635.69430 L 440.23410,635.69430 z M 431.23410,266.69430 L 377.23410,266.69430 L 377.23410,302.69430 L 341.23410,302.69430 L 341.23410,356.69430 L 377.23410,356.69430 L 377.23410,392.69430 L 431.23410,392.69430 L 431.23410,356.69430 L 467.23410,356.69430 L 467.23410,302.69430 L 431.23410,302.69430 L 431.23410,266.69430 z M 800.23410,653.69430 C 800.23410,653.69430 755.23410,635.69430 692.23410,626.69430 C 655.49910,621.44630 602.23410,635.69430 557.23410,626.69430 C 521.23410,617.69430 485.23410,599.69430 485.23410,599.69430 L 575.23410,554.69430 L 548.23410,473.69430 C 548.23410,473.69430 611.23410,446.69430 611.23410,365.69430 C 611.23410,302.69430 566.23410,230.69430 503.23410,194.69430 C 457.67010,168.65830 449.23410,149.69430 449.23410,149.69430 C 449.23410,149.69430 485.23410,131.69430 485.23410,86.694330 C 485.23410,50.694330 458.23410,5.6943260 404.23410,5.6943260 C 350.23410,5.6943260 323.23410,50.694330 323.23410,86.694330 C 323.23410,131.69430 359.23410,149.69430 359.23410,149.69430 C 359.23410,149.69430 350.79810,168.65830 305.23410,194.69430 C 242.23410,230.69430 197.23410,302.69430 197.23410,365.69430 C 197.23410,446.69430 260.23410,473.69430 260.23410,473.69430 L 233.23410,554.69430 L 323.23410,599.69430 C 323.23410,599.69430 287.23410,617.69430 251.23410,626.69430 C 206.71310,637.82430 149.53510,621.93730 116.23410,626.69430 C 53.234040,635.69430 8.2340370,653.69430 8.2340370,653.69430 L 53.234040,797.69430 C 116.23410,779.69430 125.23410,779.69430 179.23410,770.69430 C 212.32610,765.17930 294.05010,774.42230 332.23410,761.69430 C 386.23410,743.69430 404.23410,716.69430 404.23410,716.69430 C 404.23410,716.69430 422.23410,743.69430 476.23410,761.69430 C 514.41810,774.42230 600.94710,767.15830 629.23410,770.69430 C 683.55610,777.48430 755.23410,797.69430 755.23410,797.69430 L 800.23410,653.69430 L 800.23410,653.69430 z ", KNIGHT: "M 76.688770,727.94590 L 556.66680,726.94590 C 556.35380,598.04990 470.35380,554.04990 477.38380,475.20990 L 579.43880,550.04990 C 620.25980,599.03590 666.52580,603.11790 681.49380,574.54390 C 715.51280,581.34690 746.80780,554.13390 745.44780,499.70390 C 744.08780,445.27390 682.85280,364.99090 659.72080,264.29690 C 633.86680,158.15990 604.29080,144.55290 587.96280,139.10890 L 587.60180,61.545870 L 505.95780,121.41890 L 459.69280,41.135870 L 413.42780,136.38790 C 252.86280,88.761870 82.131770,425.86390 76.688770,727.94590 z M 505.95780,677.95990 L 126.31380,677.95990 C 205.68580,187.71690 362.68580,154.71690 437.92180,193.53890 L 462.41480,144.55290 L 481.46480,178.57090 L 567.19080,198.98090 L 576.71580,189.45790 C 597.12680,205.78590 608.14980,284.03590 634.35280,350.71790 C 662.29280,421.82190 697.90980,477.31990 697.82080,496.98190 C 697.68580,526.71790 689.01880,532.71790 671.96680,525.55790 C 663.68580,512.04990 655.01880,500.71790 639.30980,499.70390 C 632.35280,500.04990 621.14380,503.00890 631.68580,509.71790 C 646.35280,519.04990 642.75180,540.16490 642.75180,540.16490 C 616.01880,518.71790 515.25280,437.01890 459.69280,401.73090 C 442.35180,390.71690 426.68480,380.71690 414.68480,350.21690 C 390.82180,377.37090 416.35180,430.71690 431.68480,444.04890 C 408.35180,536.04890 484.35180,618.71690 505.95680,677.95890 L 505.95780,677.95990 z M 682.04780,490.00990 C 682.04780,485.18590 675.98380,472.91790 669.91880,467.95690 C 663.85480,462.99390 654.48180,460.23590 648.96880,460.37490 C 643.45580,460.51390 634.49680,465.74990 634.90980,472.36690 C 635.32280,478.98190 647.17680,480.77490 651.86280,482.56590 C 656.54880,484.35690 662.88880,496.62590 669.50480,500.75990 C 676.12080,504.89390 682.04780,496.67790 682.04780,490.00990 L 682.04780,490.00990 z M 588.45680,320.97290 C 588.11380,280.48690 578.16380,263.67390 566.49780,249.26390 C 554.83180,234.85190 512.97280,215.29490 512.97280,215.29490 C 512.97280,215.29490 508.16880,266.41790 525.66780,296.26990 C 543.16680,326.11990 570.61480,321.31690 588.45680,320.97290 L 588.45680,320.97290 z ", PAWN: "M 688.02380,753.51590 L 688.02380,627.51590 C 688.02380,582.51590 661.62380,455.01590 553.02380,411.51590 C 598.02380,357.51590 607.02380,258.51590 517.02380,195.51590 C 544.02380,159.51590 517.02380,33.515900 409.02380,33.515900 C 301.02380,33.515900 274.02380,159.51590 301.02380,195.51590 C 211.02380,258.51590 220.02380,357.51590 265.02380,411.51590 C 157.02380,456.51590 130.02380,582.51590 130.02380,627.51590 L 130.02380,753.51590 L 688.02380,753.51590 z M 409.02380,87.515900 C 490.02380,87.515900 490.02380,177.51590 454.02380,213.51590 C 562.02380,258.51590 535.02380,375.51590 481.02380,429.51590 C 571.02380,456.51590 634.02380,546.51590 634.02380,609.51590 L 634.02380,699.51590 L 184.02380,699.51590 L 184.02380,609.51590 C 184.02380,546.51590 247.02380,456.51590 337.02380,429.51590 C 283.02380,375.51590 256.02380,258.51590 364.02380,213.51590 C 328.02380,177.51590 328.02380,87.515900 409.02380,87.515900 z " } } parsedPieces = [[[], [], [], [], [], [], []], \ [[], [], [], [], [], [], []]] for color in (WHITE, BLACK): for piece in range(PAWN, KING+1): list = [] thep = [0,0] for g1, g2 in elemExpr.findall(pieces[color][piece]): if g2: points = [float(s) for s in spaceExpr.split(g2)] list += [(g1, [f-thep[i%2] for i,f in enumerate(points)])] thep = points[-2:] elif g1 == 'z': list += [('z', (0,0))] else: continue parsedPieces[color][piece] = {size:list} pieces = (PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING) def get_svg_pieces(svgdir): """Load figurines from .svg files""" if all_in_one: rsvg_handles = rsvg.Handle(addDataPrefix("pieces/%s/%s.svg" % (svgdir, svgdir))) else: rsvg_handles = [[None]*7, [None]*7] for c, color in ((WHITE, 'white'), (BLACK, 'black')): for p in pieces: rsvg_handles[c][p] = rsvg.Handle(addDataPrefix("pieces/%s/%s%s.svg" % (svgdir, color[0], reprSign[p].lower()))) return rsvg_handles def get_chess_font_face(name): """Set chess font and char mapping for a chess .ttf""" name = name[4:] if name in ('alpha', 'berlin', 'cheq'): char_map = ('phbrqk', 'ojntwl') else: char_map = ('pnbrqk', 'omvtwl') piece_chars = [[None]*7, [None]*7] for color in (WHITE, BLACK): for piece, char in zip(pieces, char_map[color]): piece_chars[color][piece] = char face = create_cairo_font_face_for_file(addDataPrefix("pieces/ttf/%s.ttf" % name)) return face, piece_chars all_in_one = None drawPiece = None svg_pieces = None chess_font_face = None piece2char = None def set_piece_theme(piece_set): global all_in_one global drawPiece global svg_pieces global chess_font_face global piece2char piece_set = piece_set.lower() if piece_set == 'pychess': drawPiece = drawPiece2 elif piece_set.startswith("ttf-"): drawPiece = drawPiece4 try: chess_font_face, piece2char = get_chess_font_face(piece_set) except: drawPiece = drawPiece2 elif piece_set in ('celtic','eyes', 'fantasy', 'fantasy_alt', 'freak', 'prmi', 'skulls', 'spatial'): all_in_one = True drawPiece = drawPiece3 svg_pieces = get_svg_pieces(piece_set) else: all_in_one = False drawPiece = drawPiece3 try: svg_pieces = get_svg_pieces(piece_set) except: drawPiece = drawPiece2 set_piece_theme(conf.get("pieceTheme", "pychess")) pychess-0.12beta3/lib/pychess/__init__.py0000755000175000017470000000006112176707651017440 0ustar tamasusersVERSION = "0.12beta3" VERSION_NAME = "Anderssen" pychess-0.12beta3/lib/pychess/widgets/0000755000175000017470000000000012176727272016776 5ustar tamasuserspychess-0.12beta3/lib/pychess/widgets/ToggleComboBox.py0000644000175000017470000001145112161415524022210 0ustar tamasusersimport pygtk pygtk.require("2.0") import gtk from gobject import * from pychess.System.Log import log from pychess.Utils.IconLoader import load_icon class ToggleComboBox (gtk.ToggleButton): __gsignals__ = {'changed' : (SIGNAL_RUN_FIRST, TYPE_NONE, (TYPE_INT,))} def __init__ (self): gtk.ToggleButton.__init__(self) self.set_relief(gtk.RELIEF_NONE) self.label = label = gtk.Label() label.set_alignment(0, 0.5) self.hbox = hbox = gtk.HBox() self.image = gtk.Image() hbox.pack_start(self.image, False, False) hbox.pack_start(label) arrow = gtk.Arrow (gtk.ARROW_DOWN, gtk.SHADOW_OUT); hbox.pack_start(arrow, False, False) self.add(hbox) self.show_all() self.connect("button_press_event", self.button_press) self.connect("key_press_event", self.key_press) self.connect("scroll_event", self.scroll_event) self.menu = menu = gtk.Menu() deactivate = lambda w: self.set_active(False) menu.connect("deactivate", deactivate) menu.attach_to_widget(self, None) self.markup = "", "" self._active = -1 self._items = [] def _get_active(self): return self._active def _set_active(self, active): if type(active) != int: raise TypeError if active == self._active: return if active >= len(self._items): log.warn("Tried to set combobox to %d, but it has only got %d items" % (active, len(self._items))) return oldactive = self._active # take care the case when last used engine was uninstalled self._active = (active < len(self._items) and [active] or [1])[0] self.emit("changed", oldactive) text, icon = self._items[self._active] self.label.set_markup (self.markup[0] + text + self.markup[1]) if icon != None: self.hbox.set_spacing(6) self.image.set_from_pixbuf(icon) else: self.hbox.set_spacing(0) self.image.clear() active = property(_get_active, _set_active) def setMarkup(self, start, end): self.markup = (start, end) text = self._items[self.active][0] self.label.set_markup (self.markup[0] + text + self.markup[1]) def getMarkup(self): return self.markup def addItem (self, text, stock=None): if stock == None: item = gtk.MenuItem(text) else: item = gtk.MenuItem() label = gtk.Label(text) label.props.xalign = 0 if type(stock) == str: stock = load_icon(12, stock) image = gtk.Image() image.set_from_pixbuf(stock) hbox = gtk.HBox() hbox.set_spacing(6) hbox.pack_start(image, expand=False, fill=False) hbox.add(label) item.add(hbox) hbox.show_all() item.connect("activate", self.menu_item_activate, len(self._items)) self.menu.append(item) self._items += [(text, stock)] item.show() if self.active < 0: self.active = 0 def update(self, data): last_active = self._items[self.active][0] if self.active >= 0 else None new_active = -1 self._items = [] for i in self.menu.get_children(): self.menu.remove(i) for i, row in enumerate(data): self.addItem(row[1], row[0]) if last_active == row[1]: new_active = i self.active = new_active def menuPos (self, menu): x, y = self.window.get_origin() x += self.get_allocation().x y += self.get_allocation().y + self.get_allocation().height return (x,y,False) def scroll_event (self, widget, event): if event.direction == gtk.gdk.SCROLL_UP: if self.active > 0: self.active -= 1 else: if self.active < len(self._items)-1: self.active += 1 def button_press (self, widget, event): width = self.allocation.width self.menu.set_size_request(-1,-1) ownWidth = self.menu.size_request()[0] self.menu.set_size_request(max(width,ownWidth),-1) self.set_active(True) self.menu.popup(None,None, self.menuPos, 1, event.time) from gtk.gdk import keyval_from_name keys = map(keyval_from_name,("space", "KP_Space", "Return", "KP_Enter")) def key_press (self, widget, event): if not event.keyval in self.keys: return self.set_active(True) self.menu.popup(None,None, self.menuPos, 1, event.time) return True def menu_item_activate (self, widget, index): self.active = index pychess-0.12beta3/lib/pychess/widgets/pydock/0000755000175000017470000000000012176727272020267 5ustar tamasuserspychess-0.12beta3/lib/pychess/widgets/pydock/PyDockTop.py0000755000175000017470000001657712161415524022524 0ustar tamasusersimport os from xml.dom import minidom import gtk import gobject from pychess.System.prefix import addDataPrefix from PyDockLeaf import PyDockLeaf from PyDockComposite import PyDockComposite from ArrowButton import ArrowButton from HighlightArea import HighlightArea from __init__ import TopDock, DockLeaf, DockComponent, DockComposite from __init__ import NORTH, EAST, SOUTH, WEST, CENTER class PyDockTop (TopDock): def __init__ (self, id): TopDock.__init__(self, id) self.set_no_show_all(True) self.highlightArea = HighlightArea(self) self.buttons = (ArrowButton(self, addDataPrefix("glade/dock_top.svg"), NORTH), ArrowButton(self, addDataPrefix("glade/dock_right.svg"), EAST), ArrowButton(self, addDataPrefix("glade/dock_bottom.svg"), SOUTH), ArrowButton(self, addDataPrefix("glade/dock_left.svg"), WEST)) for button in self.buttons: button.connect("dropped", self.__onDrop) button.connect("hovered", self.__onHover) button.connect("left", self.__onLeave) def __del__ (self): TopDock.__del__(self) #=========================================================================== # Component stuff #=========================================================================== def addComponent (self, widget): self.add(widget) widget.show() def changeComponent (self, old, new): self.removeComponent(old) self.addComponent(new) def removeComponent (self, widget): self.remove(widget) def getComponents (self): if isinstance(self.child, DockComponent): return [self.child] return [] def dock (self, widget, position, title, id): if not self.getComponents(): leaf = PyDockLeaf(widget, title, id) self.addComponent(leaf) return leaf else: return self.child.dock(widget, position, title, id) def clear (self): self.remove(self.child) #=========================================================================== # Signals #=========================================================================== def showArrows (self): for button in self.buttons: button._calcSize() button.show() def hideArrows (self): for button in self.buttons: button.hide() self.highlightArea.hide() def __onDrop (self, arrowButton, sender): self.highlightArea.hide() child = sender.get_nth_page(sender.get_current_page()) title, id = sender.get_parent().undock(child) self.dock(child, arrowButton.myposition, title, id) def __onHover (self, arrowButton, widget): self.highlightArea.showAt(arrowButton.myposition) arrowButton.window.raise_() def __onLeave (self, arrowButton): self.highlightArea.hide() #=========================================================================== # XML #=========================================================================== def saveToXML (self, xmlpath): dockElem = None if os.path.isfile(xmlpath): doc = minidom.parse(xmlpath) for elem in doc.getElementsByTagName("dock"): if elem.getAttribute("id") == self.id: for node in elem.childNodes: elem.removeChild(node) dockElem = elem break if not dockElem: doc = minidom.getDOMImplementation().createDocument(None, "docks", None) dockElem = doc.createElement("dock") dockElem.setAttribute("id", self.id) doc.documentElement.appendChild(dockElem) if self.child: self.__addToXML(self.child, dockElem, doc) f = file(xmlpath, "w") doc.writexml(f) f.close() doc.unlink() def __addToXML (self, component, parentElement, document): if isinstance(component, DockComposite): pos = component.paned.get_position() if component.getPosition() in (NORTH, SOUTH): childElement = document.createElement("v") size = float(component.get_allocation().height) else: childElement = document.createElement("h") size = float(component.get_allocation().width) childElement.setAttribute("pos", str(pos/max(size,pos))) self.__addToXML(component.getComponents()[0], childElement, document) self.__addToXML(component.getComponents()[1], childElement, document) elif isinstance(component, DockLeaf): childElement = document.createElement("leaf") childElement.setAttribute("current", component.getCurrentPanel()) childElement.setAttribute("dockable", str(component.isDockable())) for panel, title, id in component.getPanels(): e = document.createElement("panel") e.setAttribute("id", id) childElement.appendChild(e) parentElement.appendChild(childElement) def loadFromXML (self, xmlpath, idToWidget): doc = minidom.parse(xmlpath) for elem in doc.getElementsByTagName("dock"): if elem.getAttribute("id") == self.id: break else: raise AttributeError, \ "XML file contains no elements with id '%s'" % self.id child = [n for n in elem.childNodes if isinstance(n, minidom.Element)] if child: self.addComponent(self.__createWidgetFromXML(child[0], idToWidget)) def __createWidgetFromXML (self, parentElement, idToWidget): children = [n for n in parentElement.childNodes if isinstance(n, minidom.Element)] if parentElement.tagName in ("h", "v"): child1, child2 = children if parentElement.tagName == "h": new = PyDockComposite(EAST) else: new = PyDockComposite(SOUTH) new.initChildren(self.__createWidgetFromXML(child1, idToWidget), self.__createWidgetFromXML(child2, idToWidget)) def cb (widget, event, pos): allocation = widget.get_allocation() if parentElement.tagName == "h": widget.set_position(int(allocation.width * pos)) else: widget.set_position(int(allocation.height * pos)) widget.disconnect(conid) conid = new.paned.connect("expose-event", cb, float(parentElement.getAttribute("pos"))) return new elif parentElement.tagName == "leaf": id = children[0].getAttribute("id") title, widget = idToWidget[id] leaf = PyDockLeaf(widget, title, id) for panelElement in children[1:]: id = panelElement.getAttribute("id") title, widget = idToWidget[id] leaf.dock(widget, CENTER, title, id) leaf.setCurrentPanel(parentElement.getAttribute("current")) if parentElement.getAttribute("dockable").lower() == "false": leaf.setDockable(False) return leaf pychess-0.12beta3/lib/pychess/widgets/pydock/HighlightArea.py0000755000175000017470000000374412161415524023340 0ustar tamasusersimport gtk, cairo from math import ceil as fceil ceil = lambda f: int(fceil(f)) from __init__ import NORTH, EAST, SOUTH, WEST, CENTER from OverlayWindow import OverlayWindow class HighlightArea (OverlayWindow): """ An entirely blue widget """ def __init__ (self, parent): OverlayWindow.__init__(self, parent) self.myparent = parent self.connect_after("expose-event", self.__onExpose) def showAt (self, position): alloc = self.myparent.get_allocation() if position == NORTH: x, y = 0, 0 width, height = alloc.width, alloc.height*0.381966011 elif position == EAST: x, y = alloc.width*0.618033989, 0 width, height = alloc.width*0.381966011, alloc.height elif position == SOUTH: x, y = 0, alloc.height*0.618033989 width, height = alloc.width, alloc.height*0.381966011 elif position == WEST: x, y = 0, 0 width, height = alloc.width*0.381966011, alloc.height elif position == CENTER: x, y = 0, 0 width, height = alloc.width, alloc.height x, y = self.translateCoords(int(x), int(y)) self.move(x, y) self.resize(ceil(width), ceil(height)) self.show() def __onExpose (self, self_, event): context = self.window.cairo_create() context.rectangle(event.area) if self.is_composited(): color = self.get_style().light[gtk.STATE_SELECTED] context.set_operator(cairo.OPERATOR_CLEAR) context.set_source_rgba(0,0,0,0.0) context.fill_preserve () context.set_operator(cairo.OPERATOR_OVER) context.set_source_rgba(color.red/65535., color.green/65535., color.blue/65535., 0.5) context.fill() else: context.set_source_color(self.get_style().light[gtk.STATE_SELECTED]) context.set_operator(cairo.OPERATOR_OVER) context.fill() pychess-0.12beta3/lib/pychess/widgets/pydock/ArrowButton.py0000755000175000017470000000760312161415524023124 0ustar tamasusersimport gtk, cairo import gobject from OverlayWindow import OverlayWindow from __init__ import NORTH, EAST, SOUTH, WEST class ArrowButton (OverlayWindow): """ Leafs will connect to the drag-drop signal """ __gsignals__ = { 'dropped' : (gobject.SIGNAL_RUN_FIRST, None, (object,)), 'hovered' : (gobject.SIGNAL_RUN_FIRST, None, (object,)), 'left' : (gobject.SIGNAL_RUN_FIRST, None, ()), } def __init__ (self, parent, svgPath, position): OverlayWindow.__init__(self, parent) self.myparent = parent self.myposition = position self.svgPath = svgPath self.connect_after("expose-event", self.__onExposeEvent) targets = [("GTK_NOTEBOOK_TAB", gtk.TARGET_SAME_APP, 0xbadbeef)] self.drag_dest_set(gtk.DEST_DEFAULT_DROP | gtk.DEST_DEFAULT_MOTION, targets, gtk.gdk.ACTION_MOVE) self.drag_dest_set_track_motion(True) self.connect("drag-motion", self.__onDragMotion) self.connect("drag-leave", self.__onDragLeave) self.connect("drag-drop", self.__onDragDrop) self.hovered = False self.myparentAlloc = None self.myparentPos = None self.hasHole = False def _calcSize (self): parentAlloc = self.myparent.get_allocation() width, height = self.getSizeOfSvg(self.svgPath) if self.myparentAlloc == None: self.resize(width, height) if self.window and not self.hasHole: self.hasHole = True self.digAHole(self.svgPath, width, height) if self.myposition == NORTH: x, y = parentAlloc.width/2.-width/2., 0 elif self.myposition == EAST: x, y = parentAlloc.width-width, parentAlloc.height/2.-height/2. elif self.myposition == SOUTH: x, y = parentAlloc.width/2.-width/2., parentAlloc.height-height elif self.myposition == WEST: x, y = 0, parentAlloc.height/2.-height/2. x, y = self.translateCoords(int(x), int(y)) if (x,y) != self.get_position(): self.move(x, y) self.myparentAlloc = parentAlloc self.myparentPos = self.myparent.window.get_position() def __onExposeEvent (self, self_, event): self._calcSize() context = self.window.cairo_create() width, height = self.getSizeOfSvg(self.svgPath) surface = self.getSurfaceFromSvg(self.svgPath, width, height) if self.is_composited(): context.set_operator(cairo.OPERATOR_CLEAR) context.set_source_rgba(0.0,0.0,0.0,0.0) context.paint() context.set_operator(cairo.OPERATOR_OVER) mask = gtk.gdk.Pixmap(None, width, height, 1) mcontext = mask.cairo_create() mcontext.set_source_surface(surface, 0, 0) mcontext.paint() self.window.shape_combine_mask(mask, 0, 0) context.set_source_surface(surface, 0, 0) context.paint() def __containsPoint (self, x, y): alloc = self.get_allocation() return 0 <= x < alloc.width and 0 <= y < alloc.height def __onDragMotion (self, arrow, context, x, y, timestamp): if not self.hovered and self.__containsPoint(x,y): self.hovered = True self.emit("hovered", context.get_source_widget()) elif self.hovered and not self.__containsPoint(x,y): self.hovered = False self.emit("left") def __onDragLeave (self, arrow, context, timestamp): if self.hovered: self.hovered = False self.emit("left") def __onDragDrop (self, arrow, context, x, y, timestamp): if self.__containsPoint(x,y): self.emit("dropped", context.get_source_widget()) context.finish(True, True, timestamp) return True pychess-0.12beta3/lib/pychess/widgets/pydock/PyDockComposite.py0000755000175000017470000000576212161415524023716 0ustar tamasusersimport sys import gtk from __init__ import DockComposite from __init__ import NORTH, EAST, SOUTH, WEST, CENTER class PyDockComposite (gtk.Alignment, DockComposite): def __init__ (self, position): gtk.Alignment.__init__(self, xscale=1, yscale=1) if position == NORTH or position == SOUTH: paned = gtk.VPaned() elif position == EAST or position == WEST: paned = gtk.HPaned() self.position = position self.paned = paned self.add(self.paned) self.paned.show() def dock (self, widget, position, title, id): assert position != CENTER, "POSITION_CENTER only makes sense for leaves" parent = self.get_parent() while not isinstance(parent, DockComposite): parent = parent.get_parent() from PyDockLeaf import PyDockLeaf leaf = PyDockLeaf(widget, title, id) new = PyDockComposite(position) parent.changeComponent(self, new) new.initChildren(self, leaf) return leaf def changeComponent (self, old, new): if old == self.paned.get_child1(): self.paned.remove(old) self.paned.pack1(new, resize=False, shrink=False) else: self.paned.remove(old) self.paned.pack2(new, resize=False, shrink=False) new.show() def removeComponent (self, component): if component == self.paned.get_child1(): new = self.paned.get_child2() else: new = self.paned.get_child1() self.paned.remove(new) parent = self.get_parent() while not isinstance(parent, DockComposite): parent = parent.get_parent() parent.changeComponent(self, new) component.__del__() # TODO: is this necessary? new.show() def getComponents (self): return self.paned.get_children() def initChildren (self, old, new): if self.position == NORTH or self.position == WEST: self.paned.pack1(new, resize=False, shrink=False) self.paned.pack2(old, resize=False, shrink=False) elif self.position == SOUTH or self.position == EAST: self.paned.pack1(old, resize=False, shrink=False) self.paned.pack2(new, resize=False, shrink=False) old.show() new.show() def cb (widget, allocation): if allocation.height != 1: if self.position == NORTH: pos = 0.381966011 * allocation.height elif self.position == SOUTH: pos = 0.618033989 * allocation.height elif self.position == WEST: pos = 0.381966011 * allocation.width elif self.position == EAST: pos = 0.618033989 * allocation.width widget.set_position(int(pos+.5)) widget.disconnect(conid) conid = self.paned.connect("size-allocate", cb) def getPosition (self): return self.position pychess-0.12beta3/lib/pychess/widgets/pydock/__init__.py0000755000175000017470000000765612161415524022405 0ustar tamasusersimport gtk #=============================================================================== # Composite Constants #=============================================================================== POSITIONS_COUNT = 5 NORTH, EAST, SOUTH, WEST, CENTER = range(POSITIONS_COUNT) #=============================================================================== # Composite Interfaces #=============================================================================== class DockComponent (object): def dock (self, widget, position, title, id): raise NotImplementedError class TabReceiver (gtk.Alignment): __instances = [] def __init__ (self): gtk.Alignment.__init__(self,1,1,1,1) self.__instances.append(self) def __del__ (self): try: index = TabReceiver.__instances.index(self) except ValueError: return del TabReceiver.__instances[index] def getInstances (self): return iter(self.__instances) def showArrows (self): raise NotImplementedError def hideArrows (self): raise NotImplementedError class DockComposite (DockComponent): def __del__ (self): for component in self.getComponents(): component.__del__() def changeComponent (self, old, new): raise NotImplementedError def removeComponent (self, component): raise NotImplementedError def getComponents (self): raise NotImplementedError def getPosition (self): """ Returns NORTH or SOUTH if the children are packed vertically. Returns WEST or EAST if the children are packed horizontally. Returns CENTER if there is only one child """ raise NotImplementedError class DockLeaf (DockComponent, TabReceiver): def __del__ (self): TabReceiver.__del__(self) def undock (self, widget): """ Removes the widget from the leaf, and if it is the only widget, it removes the leaf as well. Returns (title, id) of the widget """ raise NotImplementedError def getPanels (self): """ Returns a list of (widget, title, id) tuples """ raise NotImplementedError def getCurrentPanel (self): """ Returns the panel id currently shown """ raise NotImplementedError def setCurrentPanel (self, id): raise NotImplementedError def setDockable (self, dockable): """ If the leaf is not dockable it won't be moveable and won't accept new panels """ raise NotImplementedError def isDockable (self): raise NotImplementedError class TopDock (DockComposite, TabReceiver): def __init__ (self, id): TabReceiver.__init__(self) self.__id = id def __del__ (self): TabReceiver.__del__(self) DockComposite.__del__(self) def getPosition (self): return CENTER def saveToXML (self, xmlpath): """ """ raise NotImplementedError def loadFromXML (self, xmlpath, idToWidget): """ idTowidget is a dictionary {id: (widget,title)} asserts that self.id is in the xmlfile """ raise NotImplementedError def getId(self): return self.__id id = property(getId, None, None, None) pychess-0.12beta3/lib/pychess/widgets/pydock/StarArrowButton.py0000755000175000017470000001672112161415524023757 0ustar tamasusersfrom math import ceil as float_ceil ceil = lambda f: int(float_ceil(f)) import gtk, cairo import gobject from OverlayWindow import OverlayWindow POSITIONS_COUNT = 5 NORTH, EAST, SOUTH, WEST, CENTER = range(POSITIONS_COUNT) DX_DY = ((0,-1), (1,0), (0,1), (-1,0), (0,0)) PADDING_X = 0.2 # Amount of button width PADDING_Y = 0.4 # Amount of button height class StarArrowButton (OverlayWindow): __gsignals__ = { 'dropped' : (gobject.SIGNAL_RUN_FIRST, None, (int, object)), 'hovered' : (gobject.SIGNAL_RUN_FIRST, None, (int, object)), 'left' : (gobject.SIGNAL_RUN_FIRST, None, ()), } def __init__ (self, parent, northSvg, eastSvg, southSvg, westSvg, centerSvg, bgSvg): OverlayWindow.__init__(self, parent) self.myparent = parent self.svgs = (northSvg, eastSvg, southSvg, westSvg, centerSvg) self.bgSvg = bgSvg self.size = () self.connect_after("expose-event", self.__onExposeEvent) self.currentHovered = -1 targets = [("GTK_NOTEBOOK_TAB", gtk.TARGET_SAME_APP, 0xbadbeef)] self.drag_dest_set(gtk.DEST_DEFAULT_DROP | gtk.DEST_DEFAULT_MOTION, targets, gtk.gdk.ACTION_MOVE) self.drag_dest_set_track_motion(True) self.connect("drag-motion", self.__onDragMotion) self.connect("drag-leave", self.__onDragLeave) self.connect("drag-drop", self.__onDragDrop) self.myparentAlloc = None self.myparentPos = None self.hasHole = False self.size = () def _calcSize (self): parentAlloc = self.myparent.get_allocation() if self.myparentAlloc == None or \ parentAlloc.width != self.myparentAlloc.width or \ parentAlloc.height != self.myparentAlloc.height: starWidth, starHeight = self.getSizeOfSvg(self.bgSvg) scale = min(1, parentAlloc.width / float(starWidth), parentAlloc.height / float(starHeight)) self.size = map(int, (starWidth*scale, starHeight*scale)) self.resize(self.size[0], self.size[1]) if self.window: self.hasHole = True self.digAHole(self.bgSvg, self.size[0], self.size[1]) elif not self.hasHole: self.hasHole = True self.digAHole(self.bgSvg, self.size[0], self.size[1]) if self.myparent.window: x, y = self.translateCoords(int(parentAlloc.width/2. - self.size[0]/2.), int(parentAlloc.height/2. - self.size[1]/2.)) if (x,y) != self.get_position(): self.move(x, y) self.myparentPos = self.myparent.window.get_position() self.myparentAlloc = parentAlloc def __onExposeEvent (self, self_, event): self._calcSize() context = self.window.cairo_create() self.paintTransparent(context) surface = self.getSurfaceFromSvg(self.bgSvg, self.size[0], self.size[1]) context.set_source_surface(surface, 0, 0) context.paint() for position in range(POSITIONS_COUNT): rect = self.__getButtonRectangle(position) context = self.window.cairo_create() surface = self.getSurfaceFromSvg(self.svgs[position], rect.width, rect.height) context.set_source_surface(surface, rect.x, rect.y) context.paint() def __getButtonRectangle (self, position): starWidth, starHeight = self.getSizeOfSvg(self.bgSvg) buttonWidth, buttonHeight = self.getSizeOfSvg(self.svgs[position]) buttonWidth = buttonWidth * self.size[0]/float(starWidth) buttonHeight = buttonHeight * self.size[1]/float(starHeight) dx, dy = DX_DY[position] x = ceil(dx*(1+PADDING_X)*buttonWidth - buttonWidth/2. + self.size[0]/2.) y = ceil(dy*(1+PADDING_Y)*buttonHeight - buttonHeight/2. + self.size[1]/2.) return gtk.gdk.Rectangle(x, y, ceil(buttonWidth), ceil(buttonHeight)) def __getButtonAtPoint (self, x, y): for position in xrange(POSITIONS_COUNT): region = gtk.gdk.region_rectangle(self.__getButtonRectangle(position)) if region.point_in(x, y): return position return -1 def __onDragMotion (self, arrow, context, x, y, timestamp): position = self.__getButtonAtPoint(x, y) if self.currentHovered != position: self.currentHovered = position if position > -1: self.emit("hovered", position, context.get_source_widget()) else: self.emit("left") if position > -1: context.drag_status (gtk.gdk.ACTION_MOVE, timestamp) return True context.drag_status (gtk.gdk.ACTION_DEFAULT, timestamp) def __onDragLeave (self, arrow, context, timestamp): if self.currentHovered != -1: self.currentHovered = -1 self.emit("left") def __onDragDrop (self, arrow, context, x, y, timestamp): position = self.__getButtonAtPoint(x, y) if position > -1: self.emit("dropped", position, context.get_source_widget()) context.finish(True, True, timestamp) return True if __name__ == "__main__": w = gtk.Window() w.connect("delete-event", gtk.main_quit) sab = StarArrowButton(w, "/home/thomas/Programmering/workspace/pychess/glade/dock_top.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_right.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_bottom.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_left.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_center.svg", "/home/thomas/Programmering/workspace/pychess/glade/dock_star.svg") def on_expose (widget, event): cr = widget.window.cairo_create() cx = cy = 100 r = 50 cr.arc(cx, cy, r-1, 0, 2*math.pi) cr.set_source_rgba(1.0, 0.0, 0.0, 1.0) cr.set_operator(cairo.OPERATOR_OVER) cr.fill() #w.connect("e) w.show_all() sab.show_all() gtk.main() #if __name__ != "__main__": # w = gtk.Window() # w.connect("delete-event", gtk.main_quit) # hbox = gtk.HBox() # # l = gtk.Layout() # l.set_size_request(200,200) # sab = StarArrowButton("/home/thomas/Programmering/workspace/pychess/glade/dock_top.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_right.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_bottom.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_left.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_center.svg", # "/home/thomas/Programmering/workspace/pychess/glade/dock_star.svg") # sab.set_size_request(200,200) # l.put(sab, 0, 0) # hbox.add(l) # def handle (*args): # sab.showAt(l, CENTER) # l.connect("button-press-event", handle) # # nb = gtk.Notebook() # label = gtk.Label("hi") # nb.append_page(label) # nb.set_tab_detachable(label, True) # hbox.add(nb) # w.add(hbox) # w.show_all() # gtk.main() pychess-0.12beta3/lib/pychess/widgets/pydock/OverlayWindow.py0000755000175000017470000001133612161415524023445 0ustar tamasusersimport os import re import sys import gtk import cairo if sys.platform == 'win32': from pychess.System.WinRsvg import rsvg else: import rsvg class OverlayWindow (gtk.Window): """ This class knows about being an overlaywindow and some svg stuff """ cache = {} # Class global self.cache for svgPath:rsvg and (svgPath,w,h):surface def __init__ (self, parent): gtk.Window.__init__(self, gtk.WINDOW_POPUP) colormap = self.get_screen().get_rgba_colormap() if colormap: self.set_colormap(colormap) self.myparent = parent #=========================================================================== # The overlay stuff #=========================================================================== def paintTransparent (self, cairoContext): if self.is_composited(): cairoContext.set_operator(cairo.OPERATOR_CLEAR) cairoContext.set_source_rgba(0,0,0,0) cairoContext.paint() cairoContext.set_operator(cairo.OPERATOR_OVER) def digAHole (self, svgShape, width, height): # Create a bitmap and clear it mask = gtk.gdk.Pixmap(None, width, height, 1) mcontext = mask.cairo_create() mcontext.set_source_rgb(0, 0, 0) mcontext.set_operator(cairo.OPERATOR_DEST_OUT) mcontext.paint() # Paint our shape surface = self.getSurfaceFromSvg(svgShape, width, height) mcontext.set_operator(cairo.OPERATOR_OVER) mcontext.set_source_surface(surface, 0, 0) mcontext.paint() # Apply it only if aren't composited, in which case we only need input # masking if self.is_composited(): self.window.input_shape_combine_mask(mask, 0, 0) else: self.window.shape_combine_mask(mask, 0, 0) def translateCoords (self, x, y): x1, y1 = self.myparent.window.get_position() x += x1 + self.myparent.get_allocation().x y += y1 + self.myparent.get_allocation().y return x, y #=========================================================================== # The SVG stuff #=========================================================================== def getSurfaceFromSvg (self, svgPath, width, height): path = os.path.abspath(svgPath) if (path, width, height) in self.cache: return self.cache[(path, width, height)] else: if path in self.cache: svg = self.cache[path] else: svg = self.__loadNativeColoredSvg(path) self.cache[path] = svg surface = self.__svgToSurface(svg, width, height) self.cache[(path, width, height)] = surface return surface def getSizeOfSvg (self, svgPath): path = os.path.abspath(svgPath) if not path in self.cache: svg = self.__loadNativeColoredSvg(path) self.cache[path] = svg svg = self.cache[path] return (svg.props.width, svg.props.height) def __loadNativeColoredSvg (self, svgPath): def colorToHex (color, state): color = getattr(self.myparent.get_style(), color)[state] pixels = (color.red, color.green, color.blue) return "#"+"".join(hex(c/256)[2:].zfill(2) for c in pixels) TEMP_PATH = "/tmp/pychess_theamed.svg" colorDic = {"#18b0ff": colorToHex("light", gtk.STATE_SELECTED), "#575757": colorToHex("text_aa", gtk.STATE_PRELIGHT), "#e3ddd4": colorToHex("bg", gtk.STATE_NORMAL), "#d4cec5": colorToHex("bg", gtk.STATE_INSENSITIVE), "#ffffff": colorToHex("base", gtk.STATE_NORMAL), "#000000": colorToHex("fg", gtk.STATE_NORMAL)} data = file(svgPath).read() data = re.sub("|".join(colorDic.keys()), lambda m: m.group() in colorDic and colorDic[m.group()] or m.group(), data) f = file(TEMP_PATH, "w") f.write(data) f.close() svg = rsvg.Handle(TEMP_PATH) os.remove(TEMP_PATH) return svg def __svgToSurface (self, svg, width, height): assert type(width) == int surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) context = cairo.Context(surface) context.set_operator(cairo.OPERATOR_SOURCE) if svg.props.width != width or svg.props.height != height: context.scale(width/float(svg.props.width), height/float(svg.props.height)) svg.render_cairo(context) return surface def __onStyleSet (self, self_, oldstyle): self.cache.clear() pychess-0.12beta3/lib/pychess/widgets/pydock/PyDockLeaf.py0000755000175000017470000001647612161415524022627 0ustar tamasusersimport gtk import gobject from pychess.System.prefix import addDataPrefix from __init__ import CENTER from __init__ import DockComposite, DockLeaf, TopDock from PyDockComposite import PyDockComposite from StarArrowButton import StarArrowButton from HighlightArea import HighlightArea class PyDockLeaf (DockLeaf): def __init__ (self, widget, title, id): DockLeaf.__init__(self) self.set_no_show_all(True) self.book = gtk.Notebook() self.book.connect("drag-begin", self.__onDragBegin) self.book.connect("drag-end", self.__onDragEnd) self.book.connect_after("switch-page", self.__onPageSwitched) self.add(self.book) self.book.show() self.book.props.tab_vborder = 0 self.book.props.tab_hborder = 1 self.highlightArea = HighlightArea(self) #self.put(self.highlightArea, 0, 0) self.starButton = StarArrowButton(self, addDataPrefix("glade/dock_top.svg"), addDataPrefix("glade/dock_right.svg"), addDataPrefix("glade/dock_bottom.svg"), addDataPrefix("glade/dock_left.svg"), addDataPrefix("glade/dock_center.svg"), addDataPrefix("glade/dock_star.svg")) #self.put(self.starButton, 0, 0) self.starButton.connect("dropped", self.__onDrop) self.starButton.connect("hovered", self.__onHover) self.starButton.connect("left", self.__onLeave) self.dockable = True self.panels = [] self.zoomPointer = gtk.Label() self.realtop = None self.zoomed = False #assert isinstance(widget, gtk.Notebook) self.__add(widget, title, id) def __repr__ (self): s = DockLeaf.__repr__(self) panels = [] for widget, title, id in self.getPanels(): panels.append(id) return s + " (" + ", ".join(panels) + ")" def __add (self, widget, title, id): #widget = BorderBox(widget, top=True) self.panels.append((widget, title, id)) self.book.append_page(widget, title) self.book.set_tab_label_packing(widget, True, True, gtk.PACK_START) self.book.set_tab_detachable(widget, True) self.book.set_tab_reorderable(widget, True) widget.show_all() def dock (self, widget, position, title, id): """ if position == CENTER: Add a new widget to the leaf-notebook if position != CENTER: Fork this leaf into two """ if position == CENTER: self.__add(widget, title, id) return self else: parent = self.get_parent() while not isinstance(parent, DockComposite): parent = parent.get_parent() leaf = PyDockLeaf(widget, title, id) new = PyDockComposite(position) parent.changeComponent(self, new) new.initChildren(self, leaf) new.show_all() return leaf def undock (self, widget): """ remove the widget from the leaf-notebook if this was the only widget, remove this leaf from its owner """ for i, (widget_, title, id) in enumerate(self.panels): if widget_ == widget: break else: raise KeyError, "No %s in %s" % (widget, self) del self.panels[i] self.book.remove_page(self.book.page_num(widget)) if self.book.get_n_pages() == 0: def cb (): parent = self.get_parent() while not isinstance(parent, DockComposite): parent = parent.get_parent() parent.removeComponent(self) self.__del__() # We need to idle_add this, as the widget won't emit drag-ended, if # it is removed to early gobject.idle_add(cb) return title, id def zoomUp (self): if self.zoomed: return parent = self.get_parent() if not isinstance(parent, TopDock): while not isinstance(parent, DockComposite): parent = parent.get_parent() parent.changeComponent(self, self.zoomPointer) while not isinstance(parent, TopDock): parent = parent.get_parent() self.realtop = parent.getComponents()[0] parent.changeComponent(self.realtop, self) self.zoomed = True self.book.set_show_border(False) def zoomDown (self): if not self.zoomed: return if self.zoomPointer.get_parent(): top_parent = self.get_parent() old_parent = self.zoomPointer.get_parent() while not isinstance(old_parent, DockComposite): old_parent = old_parent.get_parent() top_parent.changeComponent(self, self.realtop) old_parent.changeComponent(self.zoomPointer, self) self.realtop = None self.zoomed = False self.book.set_show_border(True) def getPanels(self): return self.panels def getCurrentPanel (self): for i, (widget, title, id) in enumerate(self.panels): if i == self.book.get_current_page(): return id def setCurrentPanel (self, id): for i, (widget, title, id_) in enumerate(self.panels): if id == id_: self.book.set_current_page(i) break def isDockable (self): return self.dockable def setDockable (self, dockable): self.book.set_show_tabs(dockable) #self.book.set_show_border(dockable) self.dockable = dockable def showArrows (self): if self.dockable: self.starButton._calcSize() self.starButton.show() def hideArrows (self): self.starButton.hide() self.highlightArea.hide() def __onDragBegin (self, widget, context): for instance in self.getInstances(): instance.showArrows() def __onDragEnd (self, widget, context): for instance in self.getInstances(): instance.hideArrows() def __onDrop (self, starButton, position, sender): self.highlightArea.hide() if self.dockable: if sender.get_parent() == self and self.book.get_n_pages() == 1: return child = sender.get_nth_page(sender.get_current_page()) title, id = sender.get_parent().undock(child) self.dock(child, position, title, id) def __onHover (self, starButton, position, widget): if self.dockable: self.highlightArea.showAt(position) starButton.window.raise_() def __onLeave (self, starButton): self.highlightArea.hide() def __onPageSwitched (self, book, page, page_num): # When a tab is dragged over another tab, the page is temporally # switched, and the notebook child is hovered. Thus we need to reraise # our star if self.starButton.window: self.starButton.window.raise_() pychess-0.12beta3/lib/pychess/widgets/enginesDialog.py0000644000175000017470000004445412175035206022117 0ustar tamasusersimport os import gtk import gobject from pychess.System import uistuff from pychess.System.glock import glock_connect_after from pychess.System.prefix import getEngineDataPrefix from pychess.Players.engineNest import discoverer, is_uci, is_cecp from pychess.widgets import newGameDialog firstRun = True def run(widgets): global firstRun if firstRun: EnginesDialog(widgets) def delete_event (widget, *args): widgets["manage_engines_dialog"].hide() return True widgets["manage_engines_dialog"].connect("delete-event", delete_event) widgets["engines_close_button"].connect("clicked", delete_event) widgets["manage_engines_dialog"].connect("key-press-event", lambda w,e: delete_event(w) if e.keyval == gtk.keysyms.Escape else None) firstRun = False widgets["manage_engines_dialog"].show() class EnginesDialog(): def __init__(self, widgets): self.widgets = widgets self.dialog = self.widgets["manage_engines_dialog"] uistuff.keepWindowSize("engineswindow", self.dialog, defaultSize=(600, 500)) # Put engines into tree store allstore = gtk.ListStore(gtk.gdk.Pixbuf, str) self.tv = self.widgets["engines_treeview"] self.tv.set_model(allstore) self.tv.append_column(gtk.TreeViewColumn( "Flag", gtk.CellRendererPixbuf(), pixbuf=0)) self.tv.append_column(gtk.TreeViewColumn( "Name", gtk.CellRendererText(), text=1)) # Add cell renderer to protocol combo column protocol_combo = self.widgets["engine_protocol_combo"] cell = gtk.CellRendererText() protocol_combo.pack_start(cell, True) protocol_combo.add_attribute(cell, "text", 0) # Add columns and cell renderers to options treeview self.options_store = gtk.ListStore(str, gobject.TYPE_PYOBJECT) optv = self.widgets["options_treeview"] optv.set_model(self.options_store) optv.append_column(gtk.TreeViewColumn( "Option", gtk.CellRendererText(), text=0)) optv.append_column(gtk.TreeViewColumn( "Data", KeyValueCellRenderer(self.options_store), data=1)) self.cur_engine = None self.default_workdir = getEngineDataPrefix() def update_options(*args): if self.cur_engine is not None: engines = discoverer.getEngines() names = [engine["name"] for engine in engines] # After deleting an engine we will select first if self.cur_engine not in names: self.cur_engine = engines[0]["name"] engine = discoverer.getEngineByName(self.cur_engine) options = engine.get("options") if options: self.options_store.clear() for option in options: key = option["name"] val = option if option["type"] != "button": val["default"] = option.get("default") val["value"] = option.get("value", val["default"]) self.options_store.append([key, val]) def update_store(*args): allstore.clear() newGameDialog.createPlayerUIGlobals(discoverer) # don't add the very first (Human) player to engine store for item in newGameDialog.playerItems[0][1:]: allstore.append(item) update_options() update_store() ################################################################ # remove button ################################################################ def remove(button): if self.cur_engine is not None: self.widgets['remove_engine_button'].set_sensitive(False) engine = discoverer.getEngineByName(self.cur_engine) discoverer.removeEngine(self.cur_engine) discoverer.save() update_store(discoverer) # Notify playerCombos in NewGameTasker discoverer.emit("all_engines_discovered") ts = self.tv.get_selection() ts.select_path((0,)) self.widgets["remove_engine_button"].connect("clicked", remove) ################################################################ # add button ################################################################ engine_chooser_dialog = gtk.FileChooserDialog(_("Select engine"), None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) filter = gtk.FileFilter() filter.set_name(_("Chess engines")) filter.add_mime_type("application/x-executable") engine_chooser_dialog.add_filter(filter) self.add = False def add(button): self.add = True response = engine_chooser_dialog.run() if response == gtk.RESPONSE_OK: new_engine = engine_chooser_dialog.get_filename() if new_engine: try: uci = is_uci(new_engine) if not uci: if not is_cecp(new_engine): # restore the original engine = discoverer.getEngineByName(self.cur_engine) engine_chooser_dialog.set_filename(engine["command"]) print "Maybe not a chess engine" return path, binname = os.path.split(new_engine) for e in discoverer.getEngines(): if e["name"] == binname: binname = e["name"] + "(1)" break self.widgets["engine_name_entry"].set_text(binname) self.widgets["engine_command_entry"].set_text(new_engine) self.widgets["engine_protocol_combo"].set_active(0 if uci else 1) self.widgets["engine_args_entry"].set_text("") name = self.widgets["engine_name_entry"].get_text().strip() active = self.widgets["engine_protocol_combo"].get_active() protocol = "uci" if active==0 else "xboard" discoverer.addEngine(name, new_engine, protocol) self.cur_engine = name glock_connect_after(discoverer, "engine_discovered", update_store) self.add = False discoverer.start() except: print "There is something wrong with this executable" else: # restore the original engine = discoverer.getEngineByName(self.cur_engine) engine_chooser_dialog.set_filename(engine["command"]) engine_chooser_dialog.hide() self.widgets["add_engine_button"].connect("clicked", add) ################################################################ # engine name ################################################################ def name_changed(widget): if self.cur_engine is not None: new_name = self.widgets["engine_name_entry"].get_text().strip() old_name = self.cur_engine if new_name and new_name != old_name: names = [engine["name"] for engine in discoverer.getEngines()] if new_name not in names: engine = discoverer.getEngineByName(self.cur_engine) engine["name"] = new_name discoverer.save() self.cur_engine = new_name update_store() # Notify playerCombos in NewGameTasker discoverer.emit("all_engines_discovered") else: self.widgets["engine_name_entry"].set_text(old_name) self.widgets["engine_name_entry"].connect("activate", name_changed) ################################################################ # engine args ################################################################ def args_changed(widget): if self.cur_engine is not None: new_args = self.widgets["engine_args_entry"].get_text().strip() engine = discoverer.getEngineByName(self.cur_engine) old_args = engine.get("args") if new_args != old_args: engine["args"] = new_args.split() discoverer.save() self.widgets["engine_args_entry"].connect("activate", args_changed) ################################################################ # engine working directory ################################################################ dir_chooser_dialog = gtk.FileChooserDialog(_("Select working directory"), None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) dir_chooser_button = gtk.FileChooserButton(dir_chooser_dialog) self.widgets["dirChooserDock"].add(dir_chooser_button) dir_chooser_button.show() def select_dir(button): new_directory = dir_chooser_dialog.get_filename() engine = discoverer.getEngineByName(self.cur_engine) old_directory = engine.get("workingDirectory") if new_directory != old_directory and new_directory != self.default_workdir: engine["workingDirectory"] = new_directory discoverer.save() dir_chooser_button.connect("current-folder-changed", select_dir) ################################################################ # engine protocol ################################################################ def protocol_changed(widget): if self.cur_engine is not None and not self.add and not self.selection: active = self.widgets["engine_protocol_combo"].get_active() new_protocol = "uci" if active==0 else "xboard" engine = discoverer.getEngineByName(self.cur_engine) old_protocol = engine["protocol"] if new_protocol != old_protocol: engine_command = engine_chooser_dialog.get_filename() # is the new protocol supported by the engine? if new_protocol == "uci": ok = is_uci(engine_command) else: ok = is_cecp(engine_command) if ok: # discover engine options for new protocol engine["protocol"] = new_protocol engine["recheck"] = True glock_connect_after(discoverer, "engine_discovered", update_options) discoverer.start() else: # restore the original protocol widgets["engine_protocol_combo"].set_active(0 if old_protocol=="uci" else 1) self.widgets["engine_protocol_combo"].connect("changed", protocol_changed) ################################################################ # engine tree ################################################################ self.selection = False def selection_changed(treeselection): store, iter = self.tv.get_selection().get_selected() if iter: self.selection = True row = store.get_path(iter)[0] name = store[row][1] self.cur_engine = name engine = discoverer.getEngineByName(name) self.widgets['copy_engine_button'].set_sensitive(True) if "PyChess.py" in engine["command"]: self.widgets['remove_engine_button'].set_sensitive(False) else: self.widgets['remove_engine_button'].set_sensitive(True) self.widgets["engine_name_entry"].set_text(engine["name"]) self.widgets["engine_command_entry"].set_text(engine["command"]) engine_chooser_dialog.set_filename(engine["command"]) args = [] if engine.get("args") is None else engine.get("args") self.widgets["engine_args_entry"].set_text(' '.join(args)) directory = engine.get("workingDirectory") d = directory if directory is not None else self.default_workdir dir_chooser_dialog.set_current_folder(d) self.widgets["engine_protocol_combo"].set_active(0 if engine["protocol"]=="uci" else 1) update_options() self.selection = False tree_selection = self.tv.get_selection() tree_selection.connect('changed', selection_changed) tree_selection.select_path((0,)) class KeyValueCellRenderer(gtk.GenericCellRenderer): """ Custom renderer providing different renderers in different rows. The model parameter is a gtk.ListStore(str, gobject.TYPE_PYOBJECT) containing key data pairs. Each data is a dictionary with name, type, default, value, min, max (for spin options), choices (list of combo options) The 'type' can be 'check', 'spin', 'text', 'combo', 'button'. Examples: ('Nullmove', {'name': 'Nullmove', 'default': false, 'type': 'check', 'value': True}) ('Selectivity', {'name': 'Selectivity', 'default': 1, 'type': 'spin', 'min': 0, 'max': 4, 'value': 2}) ('Style', {'name': 'Style', 'default': 'Solid', 'type': 'combo', 'choices': ['Solid', 'Normal','Risky'], 'value': 'Normal'}) ('NalimovPath', {'name': 'NalimovPath', 'default': '', 'type': 'text', 'value': '/home/egtb'}) ('Clear Hash', {'name': 'Clear Hash', 'type': 'button'}) """ __gproperties__ = {"data": (gobject.TYPE_PYOBJECT, "Data", "Data", gobject.PARAM_READWRITE)} def __init__(self, model): gtk.GenericCellRenderer.__init__(self) self.data = None self.text_renderer = gtk.CellRendererText() self.text_renderer.set_property("editable", True) self.text_renderer.connect("edited", self.text_edited_cb, model) self.toggle_renderer = gtk.CellRendererToggle() self.toggle_renderer.set_property("activatable", True) self.toggle_renderer.set_property("xalign", 0) self.toggle_renderer.connect("toggled", self.toggled_cb, model) self.spin_renderer = gtk.CellRendererSpin() self.spin_renderer.set_property("editable", True) self.spin_renderer.connect("edited", self.spin_edited_cb, model) self.combo_renderer = gtk.CellRendererCombo() self.combo_renderer.set_property("has_entry", False) self.combo_renderer.set_property("editable", True) self.combo_renderer.set_property("text_column", 0) self.combo_renderer.connect("edited", self.text_edited_cb, model) self.button_renderer = gtk.CellRendererText() self.button_renderer.set_property("editable", False) def text_edited_cb(self, cell, path, new_text, model): model[path][1]["value"] = new_text discoverer.save() return def toggled_cb(self, cell, path, model): model[path][1]["value"] = not model[path][1]["value"] discoverer.save() return def spin_edited_cb(self, cell, path, new_text, model): model[path][1]["value"] = new_text discoverer.save() return def _get_renderer(self): if self.data["type"] == "check": return self.toggle_renderer elif self.data["type"] == "spin": return self.spin_renderer elif self.data["type"] == "text": return self.text_renderer elif self.data["type"] == "combo": return self.combo_renderer elif self.data["type"] == "button": return self.button_renderer renderer = property(_get_renderer) def do_set_property(self, pspec, value): if value["type"] == "check": self.toggle_renderer.set_active(value["value"]) self.set_property("mode", gtk.CELL_RENDERER_MODE_ACTIVATABLE) elif value["type"] == "spin": adjustment = gtk.Adjustment(value=int(value["value"]), lower=value["min"], upper=value["max"], step_incr=1) self.spin_renderer.set_property("adjustment", adjustment) self.spin_renderer.set_property("text", value["value"]) self.set_property("mode", gtk.CELL_RENDERER_MODE_EDITABLE) elif value["type"] == "text": self.text_renderer.set_property("text", value["value"]) self.set_property("mode", gtk.CELL_RENDERER_MODE_EDITABLE) elif value["type"] == "combo": liststore = gtk.ListStore(str) for choice in value["choices"]: liststore.append([choice]) self.combo_renderer.set_property("model", liststore) self.combo_renderer.set_property("text", value["value"]) self.set_property("mode", gtk.CELL_RENDERER_MODE_EDITABLE) elif value["type"] == "button": self.button_renderer.set_property("text", "") setattr(self, pspec.name, value) def do_get_property(self, pspec): return getattr(self, pspec.name) def on_get_size(self, widget, cell_area=None): return self.renderer.get_size(widget, cell_area=cell_area) def on_render(self, window, widget, background_area, cell_area, expose_area, flags): self.renderer.render(window, widget, background_area, cell_area, expose_area, flags) def on_activate(self, event, widget, path, background_area, cell_area, flags): return self.renderer.activate(event, widget, path, background_area, cell_area, flags) def on_start_editing(self, event, widget, path, background_area, cell_area, flags): return self.renderer.start_editing(event, widget, path, background_area, cell_area, flags) gobject.type_register(KeyValueCellRenderer) pychess-0.12beta3/lib/pychess/widgets/LogDialog.py0000755000175000017470000002237212161415524021206 0ustar tamasusers# -*- coding: UTF-8 -*- import os.path import time import codecs import gtk, pango, gobject from pychess.System import glock, uistuff from pychess.System.Log import log from pychess.System.Log import LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR from pychess.System.prefix import addDataPrefix def rawreplace(error): symbols = (ur"\x%02x" % ord(s) for s in error.object[error.start:error.end]) return u"".join(symbols), error.end codecs.register_error("rawreplace", rawreplace) class InformationWindow: @classmethod def _init (cls): cls.tagToIter = {} cls.tagToPage = {} cls.pathToPage = {} cls.tagToTime = {} cls.window = gtk.Window() cls.window.set_title(_("PyChess Information Window")) cls.window.set_border_width(12) cls.window.set_icon_name("pychess") uistuff.keepWindowSize("logdialog", cls.window, (640,480)) mainHBox = gtk.HBox() mainHBox.set_spacing(6) cls.window.add(mainHBox) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) sw.set_shadow_type(gtk.SHADOW_IN) mainHBox.pack_start(sw, expand=False) cls.treeview = gtk.TreeView(gtk.TreeStore(str)) cls.treeview.append_column(gtk.TreeViewColumn("", gtk.CellRendererText(), text=0)) cls.treeview.set_headers_visible(False) cls.treeview.get_selection().set_mode(gtk.SELECTION_BROWSE) sw.add(cls.treeview) cls.pages = gtk.Notebook() cls.pages.set_show_tabs(False) cls.pages.set_show_border(False) mainHBox.pack_start(cls.pages) mainHBox.show_all() def selectionChanged (selection): treestore, iter = selection.get_selected() if iter: child = cls.pathToPage[treestore.get_path(iter)]["child"] cls.pages.set_current_page(cls.pages.page_num(child)) cls.treeview.get_selection().connect("changed", selectionChanged) @classmethod def show (cls): cls.window.show() @classmethod def hide (cls): cls.window.hide() @classmethod def newMessage (cls, tag, timestamp, message, importance): textview = cls._getPageFromTag(tag)["textview"] if not tag in cls.tagToTime or timestamp-cls.tagToTime[tag] >= 1: t = time.strftime("%H:%M:%S", time.localtime(timestamp)) textview.get_buffer().insert_with_tags_by_name( textview.get_buffer().get_end_iter(), "\n%s\n%s\n"%(t,"-"*60), str(LOG_INFO)) cls.tagToTime[tag] = timestamp if type(message) == str: message = unicode(message, "utf-8", 'rawreplace') textview.get_buffer().insert_with_tags_by_name( textview.get_buffer().get_end_iter(), message, str(importance)) @classmethod def _createPage (cls, parrentIter, tag): name = tag[-1] iter = cls.treeview.get_model().append(parrentIter, (name,)) cls.tagToIter[tag] = iter widgets = uistuff.GladeWidgets("findbar.glade") frame = widgets["frame"] frame.unparent() frame.show_all() uistuff.keepDown(widgets["scrolledwindow"]) textview = widgets["textview"] tb = textview.get_buffer() tb.create_tag(str(LOG_DEBUG), family='Monospace') tb.create_tag(str(LOG_INFO), family='Monospace', weight=pango.WEIGHT_BOLD) tb.create_tag(str(LOG_WARNING), family='Monospace', foreground="red") tb.create_tag(str(LOG_ERROR), family='Monospace', weight=pango.WEIGHT_BOLD, foreground="red") findbar = widgets["findbar"] findbar.hide() # Make searchEntry and "out of label" share height with the buttons widgets["prevButton"].connect("size-allocate", lambda w, alloc: widgets["searchEntry"].set_size_request(-1, alloc.height) or widgets["outofLabel"].set_size_request(-1, alloc.height-2)) # Make "out of label" more visually distinct uistuff.makeYellow(widgets["outofLabel"]) widgets["outofLabel"].hide() widgets["closeButton"].connect("clicked", lambda w: widgets["findbar"].hide()) # Connect showing/hiding of the findbar cls.window.connect("key-press-event", cls.onTextviewKeypress, widgets) widgets["findbar"].connect("key-press-event", cls.onFindbarKeypress) widgets["searchEntry"].connect("changed", cls.onSearchChanged, widgets) widgets["prevButton"].connect("clicked", lambda w: cls.searchJump(-1, widgets)) widgets["nextButton"].connect("clicked", lambda w: cls.searchJump(1, widgets)) cls.pages.append_page(frame) page = {"child": frame, "textview":textview} cls.tagToPage[tag] = page cls.pathToPage[cls.treeview.get_model().get_path(iter)] = page cls.treeview.expand_all() @classmethod def _getPageFromTag (cls, tag): if type(tag) == list: tag = tuple(tag) elif type(tag) != tuple: tag = (tag,) if tag in cls.tagToPage: return cls.tagToPage[tag] for i in xrange(len(tag)-1): subtag = tag[:-i-1] if subtag in cls.tagToIter: newtag = subtag+(tag[len(subtag)],) iter = cls.tagToIter[subtag] cls._createPage(iter, newtag) return cls._getPageFromTag(tag) cls._createPage(None, tag[:1]) return cls._getPageFromTag(tag) @classmethod def onSearchChanged (cls, searchEntry, widgets): pattern = searchEntry.get_text().lower() widgets["outofLabel"].props.visible = bool(pattern) if not pattern: return text = widgets["textview"].get_buffer().props.text.lower() widgets["outofLabel"].hits = [] widgets["outofLabel"].searchCurrent = -1 i = -len(pattern) while True: i = text.find(pattern, i+len(pattern)) if i != -1: widgets["outofLabel"].hits.append(i) else: break cls.searchJump(1, widgets) @classmethod def searchJump (cls, count, widgets): if not hasattr(widgets["outofLabel"], "hits"): return amount = len(widgets["outofLabel"].hits) if not amount: widgets["outofLabel"].set_text("0 %s 0" % _("of")) else: widgets["outofLabel"].searchCurrent += count current = widgets["outofLabel"].searchCurrent % amount widgets["outofLabel"].set_text("%d %s %d" % (current+1, _("of"), amount)) goto = widgets["outofLabel"].hits[current] iter0 = widgets["textview"].get_buffer().get_iter_at_offset(goto) length = len(widgets["searchEntry"].get_text()) iter1 = widgets["textview"].get_buffer().get_iter_at_offset(goto+length) widgets["textview"].get_buffer().select_range(iter0, iter1) widgets["textview"].scroll_to_iter(iter0, 0.2) @classmethod def onTextviewKeypress (cls, textview, event, widgets): if event.state & gtk.gdk.CONTROL_MASK: if event.keyval in (ord("f"), ord("F")): widgets["findbar"].props.visible = not widgets["findbar"].props.visible if widgets["findbar"].props.visible: signal = widgets["searchEntry"].connect_after("expose-event", lambda w,e: w.grab_focus() or widgets["searchEntry"].disconnect(signal)) @classmethod def onFindbarKeypress (cls, findbar, event): if gtk.gdk.keyval_name(event.keyval) == "Escape": findbar.props.visible = False uistuff.cacheGladefile("findbar.glade") ################################################################################ # Add early messages and connect for new # ################################################################################ InformationWindow._init() import gobject def addMessages2 (messages): gobject.idle_add(addMessages2, messages) def addMessages (messages): for task, timestamp, message, type in messages: InformationWindow.newMessage (task, timestamp, message, type) glock.acquire() try: addMessages(log.messages) log.messages = None finally: glock.release() log.connect ("logged", lambda log, messages: addMessages(messages)) ################################################################################ # External functions # ################################################################################ destroy_funcs = [] def add_destroy_notify (func): destroy_funcs.append(func) def _destroy_notify (widget, *args): [func() for func in destroy_funcs] return True InformationWindow.window.connect("delete-event", _destroy_notify) def show (): InformationWindow.show() def hide (): InformationWindow.hide() if __name__ == "__main__": show() InformationWindow.window.connect("delete-event", gtk.main_quit) gtk.main() pychess-0.12beta3/lib/pychess/widgets/gameinfoDialog.py0000755000175000017470000000370112164124412022241 0ustar tamasusersimport gamewidget firstRun = True def run(widgets, gameDic): global firstRun if firstRun: initialize(widgets, gameDic) firstRun = False widgets["game_info"].show() def initialize(widgets, gameDic): gamemodel = gameDic[gamewidget.cur_gmwidg()] widgets["event_entry"].set_text(gamemodel.tags["Event"]) widgets["site_entry"].set_text(gamemodel.tags["Site"]) widgets["round_spinbutton"].set_value(float(gamemodel.tags["Round"])) widgets["white_entry"].set_text(gamemodel.tags["White"]) widgets["black_entry"].set_text(gamemodel.tags["Black"]) # Notice: GtkCalender month goes from 0 to 11, but gamemodel goes from # 1 to 12 widgets["game_info_calendar"].clear_marks() widgets["game_info_calendar"].select_month( int(gamemodel.tags["Month"])-1, int(gamemodel.tags["Year"])) widgets["game_info_calendar"].select_day(int(gamemodel.tags["Day"])) def hide_window(button, *args): widgets["game_info"].hide() return True def accept_new_properties(button, *args): gamemodel = gameDic[gamewidget.cur_gmwidg()] gamemodel.tags["Event"] = widgets["event_entry"].get_text() gamemodel.tags["Site"] = widgets["site_entry"].get_text() gamemodel.tags["Round"] = int(widgets["round_spinbutton"].get_value()) gamemodel.tags["White"] = widgets["white_entry"].get_text() gamemodel.tags["Black"] = widgets["black_entry"].get_text() gamemodel.tags["Year"] = widgets["game_info_calendar"].get_date()[0] gamemodel.tags["Month"] = widgets["game_info_calendar"].get_date()[1] + 1 gamemodel.tags["Day"] = widgets["game_info_calendar"].get_date()[2] widgets["game_info"].hide() return True widgets["game_info"].connect("delete-event", hide_window) widgets["game_info_cancel_button"].connect("clicked", hide_window) widgets["game_info_ok_button"].connect("clicked", accept_new_properties) pychess-0.12beta3/lib/pychess/widgets/ChessClock.py0000755000175000017470000001561012166617004021365 0ustar tamasusers# -*- coding: UTF-8 -*- from math import ceil, pi, cos, sin import cairo, gtk, pango from gtk import gdk from pychess.System import glock from pychess.System.repeat import repeat_sleep from pychess.Utils.const import WHITE, BLACK def formatTime(seconds, clk2pgn=False): if not -10 <= seconds <= 10: seconds = ceil(seconds) minus = "-" if seconds < 0 else "" if minus: seconds = -seconds hours, remainder = divmod(seconds, 3600) minutes, seconds = divmod(remainder, 60) if hours or clk2pgn: return minus+"%d:%02d:%02d" % (hours, minutes, seconds) elif not minutes and seconds < 10: return minus+"%.1f" % seconds else: return minus+"%d:%02d" % (minutes, seconds) class ChessClock (gtk.DrawingArea): def __init__(self): gtk.DrawingArea.__init__(self) self.connect("expose_event", self.expose) self.names = [_("White"),_("Black")] self.model = None #self.thread = None def expose(self, widget, event): context = widget.window.cairo_create() context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) context.clip() self.draw(context) return False def draw(self, context): self.dark = self.get_style().dark[gtk.STATE_NORMAL] self.light = self.get_style().light[gtk.STATE_NORMAL] if not self.model: return # Draw graphical Clock. Should this be moved to preferences? drawClock = True rect = self.get_allocation() context.rectangle( rect.width/2. * self.model.movingColor, 0, rect.width/2., rect.height) context.set_source_color(self.dark) context.fill_preserve() context.new_path() time0 = self.names[0], self.formatedCache[WHITE] layout0 = self.create_pango_layout(" %s: %s " % (time0)) layout0.set_font_description(pango.FontDescription("Sans Serif 17")) time1 = self.names[1], self.formatedCache[BLACK] layout1 = self.create_pango_layout(" %s: %s " % (time1)) layout1.set_font_description(pango.FontDescription("Sans Serif 17")) w = max(layout1.get_pixel_size()[0], layout0.get_pixel_size()[0])*2 self.set_size_request(w+rect.height+7, -1) pangoScale = float(pango.SCALE) # Analog clock code. def paintClock (player): cy = rect.height/2. cx = cy + rect.width/2.*player + 1 r = rect.height/2.-3.5 context.arc(cx,cy, r-1, 0, 2*pi) linear = cairo.LinearGradient(cx-r*2, cy-r*2, cx+r*2, cy+r*2) linear.add_color_stop_rgba(0, 1, 1, 1, 0.3) linear.add_color_stop_rgba(1, 0, 0, 0, 0.3) #context.set_source_rgba( 0, 0, 0, .3) context.set_source(linear) context.fill() linear = cairo.LinearGradient(cx-r, cy-r, cx+r, cy+r) linear.add_color_stop_rgba(0, 0, 0, 0, 0.5) linear.add_color_stop_rgba(1, 1, 1, 1, 0.5) context.arc(cx,cy, r, 0, 2*pi) context.set_source(linear) context.set_line_width(2.5) context.stroke() starttime = float(self.model.getInitialTime()) or 1 used = self.model.getPlayerTime(player) / starttime if used > 0: if used > 0: context.arc(cx,cy, r-.8, -(used+0.25)*2*pi, -0.5*pi) context.line_to(cx,cy) context.close_path() elif used == 0: context.arc(cx,cy, r-.8, -0.5*pi, 1.5*pi) context.line_to(cx,cy) radial = cairo.RadialGradient(cx,cy, 3, cx,cy,r) if player == 0: #radial.add_color_stop_rgb(0, .73, .74, .71) radial.add_color_stop_rgb(0, .93, .93, .92) radial.add_color_stop_rgb(1, 1, 1, 1) else: #radial.add_color_stop_rgb(0, .53, .54, .52) radial.add_color_stop_rgb(0, .18, .20, .21) radial.add_color_stop_rgb(1, 0, 0, 0) context.set_source(radial) context.fill() x = cx - cos((used-0.25)*2*pi)*(r-1) y = cy + sin((used-0.25)*2*pi)*(r-1) context.move_to(cx,cy-r+1) context.line_to(cx,cy) context.line_to(x,y) context.set_line_width(0.2) if player == 0: context.set_source_rgb(0,0,0) else: context.set_source_rgb(1,1,1) context.stroke() if drawClock: paintClock (WHITE) if (self.model.movingColor or WHITE) == WHITE: context.set_source_color(self.light) else: context.set_source_color(self.dark) y = rect.height/2. - layout0.get_extents()[0][3]/pangoScale/2 \ - layout0.get_extents()[0][1]/pangoScale context.move_to(rect.height-7,y) context.show_layout(layout0) if drawClock: paintClock (BLACK) if self.model.movingColor == BLACK: context.set_source_color(self.light) else: context.set_source_color(self.dark) y = rect.height/2. - layout1.get_extents()[0][3]/pangoScale/2 \ - layout1.get_extents()[0][1]/pangoScale context.move_to(rect.width/2. + rect.height-7, y) context.show_layout(layout1) def redraw_canvas(self): if self.window: glock.acquire() try: if self.window: a = self.get_allocation() rect = gdk.Rectangle(0, 0, a.width, a.height) self.window.invalidate_rect(rect, True) self.window.process_updates(True) finally: glock.release() def setModel (self, model): self.model = model if model != None: self.model.connect("time_changed", self.time_changed) self.model.connect("player_changed", self.player_changed) self.formatedCache = [formatTime ( self.model.getPlayerTime (self.model.movingColor or WHITE))] * 2 repeat_sleep(self.update, 0.1) else: self.formatedCache = None def time_changed (self, model): self.update() def player_changed (self, model): self.redraw_canvas() def update(self): wt = formatTime (self.model.getPlayerTime(WHITE)) bt = formatTime (self.model.getPlayerTime(BLACK)) if self.formatedCache != [wt, bt]: self.formatedCache = [wt, bt] self.redraw_canvas() return not self.model.ended pychess-0.12beta3/lib/pychess/widgets/BorderBox.py0000755000175000017470000000456112161415524021233 0ustar tamasusersimport gtk class BorderBox (gtk.Alignment): def __init__ (self, widget=None, top=False, right=False, bottom=False, left=False): gtk.Alignment.__init__(self, 0, 0, 1, 1) self.connect("expose-event", self._onExpose) if widget: self.add(widget) self.__top = top self.__right = right self.__bottom = bottom self.__left = left self._updateBorders() def _onExpose(self, area, event): context = self.window.cairo_create() color = self.get_style().dark[gtk.STATE_NORMAL] context.set_source_rgb(color.red/65535., color.green/65535., color.blue/65535.) r = self.get_allocation() x = r.x + .5 y = r.y + .5 width = r.width - 1 height = r.height - 1 if self.top: context.move_to(x, y) context.line_to(x+width, y) if self.right: context.move_to(x+width, y) context.line_to(x+width, y+height) if self.bottom: context.move_to(x+width, y+height) context.line_to(x, y+height) if self.left: context.move_to(x, y+height) context.line_to(x, y) context.set_line_width(1) context.stroke() def _updateBorders (self): self.set_padding(self.top and 1 or 0, self.bottom and 1 or 0, self.right and 1 or 0, self.left and 1 or 0) def isTop(self): return self.__top def isRight(self): return self.__right def isBottom(self): return self.__bottom def isLeft(self): return self.__left def setTop(self, value): self.__top = value self._updateBorders() def setRight(self, value): self.__right = value self._updateBorders() def setBottom(self, value): self.__bottom = value self._updateBorders() def setLeft(self, value): self.__left = value self._updateBorders() top = property(isTop, setTop, None, None) right = property(isRight, setRight, None, None) bottom = property(isBottom, setBottom, None, None) left = property(isLeft, setLeft, None, None) pychess-0.12beta3/lib/pychess/widgets/playerinfoDialog.py0000755000175000017470000000476112161415524022637 0ustar tamasusersimport gtk, gobject import gamewidget firstRun = True def run(widgets): global firstRun if firstRun: initialize(widgets) firstRun = False widgets["player_info"].show_all() def initialize(widgets): def addColumns (treeview, *columns): model = gtk.ListStore(*((str,)*len(columns))) treeview.set_model(model) treeview.get_selection().set_mode(gtk.SELECTION_NONE) for i, name in enumerate(columns): crt = gtk.CellRendererText() column = gtk.TreeViewColumn(name, crt, text=i) treeview.append_column(column) addColumns(widgets["results_view"], "", "Games", "Won", "Drawn", "Lost", "Score") model = widgets["results_view"].get_model() model.append(("White", "67","28","24","15","59%")) model.append(("Black", "66","26","23","17","56%")) model.append(("Total", "133","54","47","32","58%")) addColumns(widgets["rating_view"], "Current", "Initial", "Lowest", "Highest", "Average") model = widgets["rating_view"].get_model() model.append(("1771","1734","1659","1791","1700")) widgets["history_view"].set_model(gtk.ListStore(object)) widgets["history_view"].get_selection().set_mode(gtk.SELECTION_NONE) widgets["history_view"].append_column(gtk.TreeViewColumn( "Player Rating History", HistoryCellRenderer(), data=0)) widgets["history_view"].get_model().append((1,)) def hide_window(button, *args): widgets["player_info"].hide() return True widgets["player_info"].connect("delete-event", hide_window) widgets["player_info_close_button"].connect("clicked", hide_window) class HistoryCellRenderer (gtk.GenericCellRenderer): __gproperties__ = { "data": (gobject.TYPE_PYOBJECT, "Data", "Data", gobject.PARAM_READWRITE), } def __init__(self): self.__gobject_init__() self.data = None def do_set_property(self, pspec, value): setattr(self, pspec.name, value) def do_get_property(self, pspec): return getattr(self, pspec.name) def on_render(self, window, widget, background_area, rect, expose_area, flags): if not self.data: return cairo = window.cairo_create() x,y,w,h = rect.x, rect.y, rect.width, rect.height cairo.rectangle(x+1,y+1,x+w-2,y+h-2) cairo.set_source_rgb(0.45,0.45,0.45) cairo.stroke() def on_get_size(self, widget, cell_area=None): return (0, 0, -1, 130) pychess-0.12beta3/lib/pychess/widgets/tipOfTheDay.py0000755000175000017470000000617412161415524021527 0ustar tamasusersimport os from pychess.System import conf from pychess.System import uistuff from pychess.System.prefix import addDataPrefix from random import randrange uistuff.cacheGladefile("tipoftheday.glade") class TipOfTheDay: @classmethod def _init (cls): cls.widgets = uistuff.GladeWidgets("tipoftheday.glade") uistuff.keepWindowSize("tipoftheday", cls.widgets["window1"], (320,240), uistuff.POSITION_CENTER) cls.widgets["checkbutton1"].set_active(conf.get("show_tip_at_startup", False)) cls.widgets["checkbutton1"].connect("toggled", lambda w: conf.set("show_tip_at_startup", w.get_active())) cls.widgets["close_button"].connect("clicked", lambda w: cls.widgets["window1"].emit("delete-event", None)) cls.widgets["window1"].connect("delete_event", lambda w, a: cls.widgets["window1"].hide()) cls.widgets["back_button"].connect("clicked", lambda w: cls.set_currentIndex(cls.currentIndex-1)) cls.widgets["forward_button"].connect("clicked", lambda w: cls.set_currentIndex(cls.currentIndex+1)) cls.currentIndex = 0 @classmethod def show (cls): if not hasattr(cls, "widgets"): cls._init() cls.set_currentIndex(randrange(len(tips))) cls.widgets["window1"].show() @classmethod def set_currentIndex (cls, value): if len(tips) == 0: return if value < 0: value = len(tips)-1 elif value >= len(tips): value = 0 cls.currentIndex = value cls.widgets["tipfield"].set_markup(tips[value]) tips = ( _("You can start a new game by Game > New Game, in New Game window do you can choose Players, Time Control and Chess Variants."), _("You can choose from 8 different difficulties to play against the computer."), _("Chess Variants are like the pieces of the last line will be placed on the board."), _("To save a game Game > Save Game As, give the filename and choose where you want to be saved. At the bottom choose extension type of the file, and Save."), _("Do you know that you can call flag when the clock is with you, Actions > Call Flag."), _("Pressing Ctrl+Z to offer opponent the possible rollback moves."), _("To play on Fullscreen mode, just type F11. Coming back, F11 again."), _("Hint mode analyzing your game, enable this type Ctrl+H."), _("Spy mode analyzing the oponnent game, enable this type Ctrl+Y."), _("You can play chess listening to the sounds of the game, for that, Settings > Preferences > Sound tab, enable Use sounds in PyChess and choose your preferred sounds."), _("Do you know that you can help translate Pychess in your language, Help > Translate Pychess."), _("Do you know that it is possible to finish a chess game in just 2 turns?"), _("Do you know that the number of possible chess games exceeds the number of atoms in the Universe?"), ) pychess-0.12beta3/lib/pychess/widgets/ionest.py0000755000175000017470000004164012164246004020643 0ustar tamasusers""" The task of this module, is to save, load and init new games """ from gobject import GObject, SIGNAL_RUN_FIRST, TYPE_NONE, TYPE_PYOBJECT from pychess import Savers from pychess.Savers.ChessFile import LoadingError from pychess.Savers import * # This needs an import all not to break autoloading from pychess.System import conf from pychess.System.GtkWorker import GtkWorker from pychess.System.Log import log from pychess.System.protoopen import isWriteable from pychess.System.uistuff import GladeWidgets from pychess.Utils.const import * from pychess.Utils.Offer import Offer from pychess.widgets import gamenanny, gamewidget import gtk import os def generalStart (gamemodel, player0tup, player1tup, loaddata=None): """ The player tuples are: (The type af player in a System.const value, A callable creating the player, A list of arguments for the callable, A preliminary name for the player) If loaddata is specified, it should be a tuple of: (A text uri or fileobj, A Savers.something module with a load function capable of loading it, An int of the game in file you want to load, The position from where to start the game) """ log.debug("ionest.generalStart: %s\n %s\n %s\n" % (gamemodel, player0tup, player1tup)) worker = GtkWorker (lambda w: workfunc(w, gamemodel, player0tup, player1tup, loaddata)) def onPublished (worker, vallist): for val in vallist: # The worker will start by publishing (gmwidg, game) if type(val) == tuple: gmwidg, game = val gamewidget.attachGameWidget(gmwidg) gamenanny.nurseGame(gmwidg, game) handler.emit("gmwidg_created", gmwidg, game) # Then the worker will publish functions setting up widget stuff elif callable(val): val() worker.connect("published", onPublished) def onDone (worker, (gmwidg, game)): gmwidg.connect("close_clicked", closeGame, game) worker.__del__() worker.connect("done", onDone) worker.execute() def workfunc (worker, gamemodel, player0tup, player1tup, loaddata=None): log.debug("ionest.workfunc: %s\n %s\n %s\n" % (gamemodel, player0tup, player1tup)) gmwidg = gamewidget.GameWidget(gamemodel) # We want to show the game quickly, but the players take some time to start gmwidg.setTabText("%s %s %s %s" % (player0tup[3], _("vs"), player1tup[3], gamemodel.display_text)) worker.publish((gmwidg,gamemodel)) # Initing players players = [] for i, playertup in enumerate((player0tup, player1tup)): type, func, args, prename = playertup if type != LOCAL: players.append(func(*args)) #if type == ARTIFICIAL: # def readyformoves (player, color): # gmwidg.setTabText(gmwidg.display_text)) # players[i].connect("readyForMoves", readyformoves, i) else: # Until PyChess has a proper profiles system, as discussed on the # issue tracker, we need to give human players special treatment player = func(gmwidg, *args) players.append(player) # Connect to conf if i == 0 or (i == 1 and player0tup[0] != LOCAL): key = "firstName" alt = _("You") else: key = "secondName" alt = _("Guest") if prename == conf.get(key, alt): conf.notify_add(key, lambda *a:player.setName(conf.get(key,alt))) if player0tup[0] == ARTIFICIAL and player1tup[0] == ARTIFICIAL: def emit_action (action, param): if gmwidg.isInFront(): gamemodel.curplayer.emit("offer", Offer(action, param=param)) gmwidg.board.connect("action", lambda b,action,param: emit_action(action, param)) gamemodel.setPlayers(players) # Starting if loaddata: try: uri, loader, gameno, position = loaddata gamemodel.loadAndStart (uri, loader, gameno, position) except LoadingError, e: d = gtk.MessageDialog (type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK) d.set_markup ("%s" % e.args[0]) d.format_secondary_text (e.args[1] + "\n\n" + _("Correct the move, or start playing with what could be read")) d.connect("response", lambda d,a: d.hide()) worker.publish(d.show) else: if gamemodel.variant.need_initial_board: for player in gamemodel.players: player.setOptionInitialBoard(gamemodel) gamemodel.start() log.debug("ionest.workfunc: returning gmwidg=%s\n gamemodel=%s\n" % \ (gmwidg, gamemodel)) return gmwidg, gamemodel ################################################################################ # Global Load and Save variables # ################################################################################ opendialog = None savedialog = None enddir = {} saveformats = None exportformats = None def getOpenAndSaveDialogs(): global opendialog, savedialog, enddir, savecombo, savers, saveformats, exportformats if not opendialog: savers = [getattr(Savers, s) for s in Savers.__all__] for saver in savers: enddir[saver.__ending__] = saver opendialog = gtk.FileChooserDialog(_("Open Game"), None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT)) savedialog = gtk.FileChooserDialog("", None, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT)) savedialog.set_current_folder(os.environ["HOME"]) saveformats = gtk.ListStore(str, str, TYPE_PYOBJECT) exportformats = gtk.ListStore(str, str, TYPE_PYOBJECT) # All files filter star = gtk.FileFilter() star.set_name(_("All Files")) star.add_pattern("*") opendialog.add_filter(star) auto = _("Detect type automatically") saveformats.append([auto, "", None]) exportformats.append([auto, "", None]) # All chess files filter all = gtk.FileFilter() all.set_name(_("All Chess Files")) opendialog.add_filter(all) opendialog.set_filter(all) # Specific filters and save formats i = default = 0 for saver in savers: label, ending = saver.__label__, saver.__ending__ endstr = "(%s)" % ending f = gtk.FileFilter() f.set_name(label+" "+endstr) if hasattr(enddir[ending], "load"): f.add_pattern("*."+ending) all.add_pattern("*."+ending) opendialog.add_filter(f) saveformats.append([label, endstr, saver]) i += 1 else: exportformats.append([label, endstr, saver]) if "pgn" in endstr: default = i + 1 # Add widgets to the savedialog savecombo = gtk.ComboBox() crt = gtk.CellRendererText() savecombo.pack_start(crt, True) savecombo.add_attribute(crt, 'text', 0) crt = gtk.CellRendererText() savecombo.pack_start(crt, False) savecombo.add_attribute(crt, 'text', 1) savecombo.set_active(default) savedialog.set_extra_widget(savecombo) return opendialog, savedialog, enddir, savecombo, savers ################################################################################ # Saving # ################################################################################ def saveGame (game): if not game.isChanged(): return if game.uri and isWriteable (game.uri): saveGameSimple (game.uri, game) else: return saveGameAs (game) def saveGameSimple (uri, game): ending = os.path.splitext(uri)[1] if not ending: return saver = enddir[ending[1:]] game.save(uri, saver, append=False) def saveGameAs (game, position=None): opendialog, savedialog, enddir, savecombo, savers = getOpenAndSaveDialogs() if position is not None: savecombo.set_model(exportformats) else: savecombo.set_model(saveformats) # Keep running the dialog until the user has canceled it or made an error # free operation title = _("Save Game") if position is None else _("Export position") savedialog.set_title(title) while True: savedialog.set_current_name("%s %s %s" % (game.players[0], _("vs."), game.players[1])) res = savedialog.run() if res != gtk.RESPONSE_ACCEPT: break uri = savedialog.get_filename() ending = os.path.splitext(uri)[1] if ending.startswith("."): ending = ending[1:] append = False if savecombo.get_active() == 0: if not ending in enddir: d = gtk.MessageDialog( type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK) folder, file = os.path.split(uri) d.set_markup( _("Unknown file type '%s'") % ending) d.format_secondary_text(_("Was unable to save '%(uri)s' as PyChess doesn't know the format '%(ending)s'.") % { 'uri': uri, 'ending': ending}) d.run() d.hide() continue else: saver = enddir[ending] else: index = savecombo.get_active() format = saveformats[index] if position is None else exportformats[index] saver = format[2] if not ending in enddir or not saver == enddir[ending]: uri += ".%s" % saver.__ending__ if os.path.isfile(uri) and not os.access (uri, os.W_OK): d = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK) d.set_markup(_("Unable to save file '%s'") % uri) d.format_secondary_text( _("You don't have the necessary rights to save the file.\n\ Please ensure that you have given the right path and try again.")) d.run() d.hide() continue if os.path.isfile(uri): d = gtk.MessageDialog(type=gtk.MESSAGE_QUESTION) d.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, _("_Replace"), gtk.RESPONSE_ACCEPT) if saver.__append__: d.add_buttons(gtk.STOCK_ADD, 1) d.set_title(_("File exists")) folder, file = os.path.split(uri) d.set_markup(_("A file named '%s' already exists. Would you like to replace it?") % file) d.format_secondary_text(_("The file already exists in '%s'. If you replace it, its content will be overwritten.") % folder) replaceRes = d.run() d.hide() if replaceRes == 1: append = True elif replaceRes == gtk.RESPONSE_CANCEL: continue else: print repr(uri) try: game.save(uri, saver, append, position) except IOError, e: d = gtk.MessageDialog(type=gtk.MESSAGE_ERROR) d.add_buttons(gtk.STOCK_OK, gtk.RESPONSE_OK) d.set_title(_("Could not save the file")) d.set_markup(_("PyChess was not able to save the game")) d.format_secondary_text(_("The error was: %s") % ", ".join(str(a) for a in e.args)) os.remove(uri) d.run() d.hide() continue break savedialog.hide() return res ################################################################################ # Closing # ################################################################################ def closeAllGames (pairs): changedPairs = [(gmwidg, game) for gmwidg, game in pairs if game.isChanged()] if len(changedPairs) == 0: response = gtk.RESPONSE_OK #if conf.get("autoSave", False): # Autosave option from preferences? #for gmwidg, game in changedPairs: #game.save(None, Savers.database, append=False) #response = gtk.RESPONSE_OK #else: elif len(changedPairs) == 1: response = closeGame(*changedPairs[0]) else: widgets = GladeWidgets("saveGamesDialog.glade") dialog = widgets["saveGamesDialog"] heading = widgets["saveGamesDialogHeading"] saveLabel = widgets["saveGamesDialogSaveLabel"] treeview = widgets["saveGamesDialogTreeview"] heading.set_markup("" + ngettext("There is %d game with unsaved moves.", "There are %d games with unsaved moves.", len(changedPairs)) % len(changedPairs) + " " + _("Save moves before closing?") + "") liststore = gtk.ListStore(bool, str) treeview.set_model(liststore) renderer = gtk.CellRendererToggle() renderer.props.activatable = True treeview.append_column(gtk.TreeViewColumn("", renderer, active=0)) treeview.append_column(gtk.TreeViewColumn("", gtk.CellRendererText(), text=1)) for gmwidg, game in changedPairs: liststore.append((True, "%s %s %s" % (game.players[0], _("vs."), game.players[1]))) def callback (cell, path): if path: liststore[path][0] = not liststore[path][0] saves = len(tuple(row for row in liststore if row[0])) saveLabel.set_text(ngettext("_Save %d document", "_Save %d documents", saves) % saves) saveLabel.set_use_underline(True) renderer.connect("toggled", callback) callback(None, None) while True: response = dialog.run() if response == gtk.RESPONSE_YES: for i in xrange(len(liststore)-1, -1, -1): checked, name = liststore[i] if checked: gmwidg, game = changedPairs[i] if saveGame(game) == gtk.RESPONSE_ACCEPT: del pairs[i] liststore.remove(liststore.get_iter((i,))) game.end(ABORTED, ABORTED_AGREEMENT) gamewidget.delGameWidget(gmwidg) else: break else: break else: break dialog.destroy() if response not in (gtk.RESPONSE_DELETE_EVENT, gtk.RESPONSE_CANCEL): for gmwidg, game in pairs: game.end(ABORTED, ABORTED_AGREEMENT) game.terminate() return response def closeGame (gmwidg, game): if not game.isChanged(): response = gtk.RESPONSE_OK else: #if conf.get("autoSave", False): # Autosave option from preferences? #game.save(None, Savers.database, append=False) #response = gtk.RESPONSE_OK #else d = gtk.MessageDialog (type = gtk.MESSAGE_WARNING) d.add_button(_("Close _without Saving"), gtk.RESPONSE_OK) d.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) if game.uri: d.add_button(gtk.STOCK_SAVE, gtk.RESPONSE_YES) else: d.add_button(gtk.STOCK_SAVE_AS, gtk.RESPONSE_YES) gmwidg.bringToFront() d.set_markup(_("Save the current game before you close it?")) d.format_secondary_text (_( "It is not possible later to continue the game,\nif you don't save it.")) response = d.run() d.destroy() if response == gtk.RESPONSE_YES: # Test if cancel was pressed in the save-file-dialog if saveGame(game) != gtk.RESPONSE_ACCEPT: response = gtk.RESPONSE_CANCEL if response not in (gtk.RESPONSE_DELETE_EVENT, gtk.RESPONSE_CANCEL): if game.status in UNFINISHED_STATES: game.end(ABORTED, ABORTED_AGREEMENT) game.terminate() gamewidget.delGameWidget (gmwidg) return response ################################################################################ # Signal handler # ################################################################################ class Handler (GObject): """ The goal of this class, is to provide signal handling for the ionest module. Emit objects are gmwidg, gameobject """ __gsignals__ = { 'gmwidg_created': (SIGNAL_RUN_FIRST, TYPE_NONE, (object, object)) } def __init__ (self): GObject.__init__(self) handler = Handler() pychess-0.12beta3/lib/pychess/widgets/MenuItemsDict.py0000644000175000017470000000762712161415524022062 0ustar tamasusersimport gamewidget from pychess.System import conf from pychess.System import glock from pychess.Utils.const import ACTION_MENU_ITEMS ################################################################################ # Main menubar MenuItem classes to keep track of menu widget states # ################################################################################ class GtkMenuItem (object): def __init__ (self, name, gamewidget, sensitive=False, label=None, tooltip=None): assert type(sensitive) is bool assert label is None or type(label) is str self.name = name self.gamewidget = gamewidget self._sensitive = sensitive self._label = label self._tooltip = tooltip @property def sensitive (self): return self._sensitive @sensitive.setter def sensitive (self, sensitive): assert type(sensitive) is bool self._sensitive = sensitive self._set_widget("sensitive", sensitive) @property def label (self): return self._label @label.setter def label (self, label): assert isinstance(label, str) or isinstance(label, unicode) self._label = label self._set_widget("label", label) @property def tooltip (self): return self._tooltip @tooltip.setter def tooltip (self, tooltip): assert isinstance(tooltip, str) or isinstance(tooltip, unicode) self._tooltip = tooltip self._set_widget("tooltip-text", tooltip) def _set_widget (self, prop, value): if not self.gamewidget.isInFront(): return if gamewidget.getWidgets()[self.name].get_property(prop) != value: #print "setting %s property %s to %s.." % (self.name, prop, str(value)), glock.acquire() try: gamewidget.getWidgets()[self.name].set_property(prop, value) finally: glock.release() #print " success (%s = \"%s\")" % \ # (prop, gamewidget.getWidgets()[self.name].get_property(prop)) def update (self): self._set_widget("sensitive", self._sensitive) if self._label is not None: self._set_widget("label", self._label) if self._tooltip is not None: self._set_widget("tooltip-text", self._tooltip) class GtkMenuToggleButton (GtkMenuItem): def __init__ (self, name, gamewidget, sensitive=False, active=False, label=None): assert type(active) is bool GtkMenuItem.__init__(self, name, gamewidget, sensitive, label) self._active = active @property def active (self): return self._active @active.setter def active (self, active): assert type(active) is bool self._active = active self._set_widget("active", active) def update (self): GtkMenuItem.update(self) self._set_widget("active", self._active) class MenuItemsDict (dict): """ Keeps track of menubar menuitem widgets that need to be managed on a game by game basis. Each menuitem writes through its respective widget state to the GUI if we are encapsulated in the gamewidget that's focused/infront """ VIEW_MENU_ITEMS = ("hint_mode", "spy_mode") class ReadOnlyDictException (Exception): pass def __init__ (self, gamewidget): dict.__init__(self) for item in ACTION_MENU_ITEMS: dict.__setitem__(self, item, GtkMenuItem(item, gamewidget)) for item in self.VIEW_MENU_ITEMS: dict.__setitem__(self, item, GtkMenuToggleButton(item, gamewidget, active = conf.get(item, False))) gamewidget.connect("infront", self.on_gamewidget_infront) def __setitem__ (self, item, value): raise self.ReadOnlyDictException() def on_gamewidget_infront (self, gamewidget): for menuitem in self: self[menuitem].update() pychess-0.12beta3/lib/pychess/widgets/TaskerManager.py0000644000175000017470000002422412161415524022064 0ustar tamasusersimport gtk import pango import math import random from gtk.gdk import pixbuf_new_from_file from pychess.Players.Human import Human from pychess.Players.engineNest import discoverer from pychess.System import uistuff, conf from pychess.System.glock import glock_connect_after from pychess.System.prefix import addDataPrefix from pychess.Utils.GameModel import GameModel from pychess.Utils.IconLoader import load_icon from pychess.Utils.TimeModel import TimeModel from pychess.Utils.const import LOCAL, ARTIFICIAL, WHITE, BLACK, NORMALCHESS from pychess.Variants import variants from pychess.ic import ICLogon from pychess.widgets import ionest, newGameDialog from Background import giveBackground from ToggleComboBox import ToggleComboBox class TaskerManager (gtk.Table): def __init__ (self): gtk.Table.__init__(self) self.border = 20 giveBackground(self) self.connect("expose_event", self.expose) #self.set_homogeneous(True) def expose (self, widget, event): cr = widget.window.cairo_create() for widget in self.widgets: x = widget.get_allocation().x y = widget.get_allocation().y width = widget.get_allocation().width height = widget.get_allocation().height cr.move_to (x-self.border, y) cr.curve_to (x-self.border, y-self.border/2., x-self.border/2., y-self.border, x, y-self.border) cr.line_to (x+width, y-self.border) cr.curve_to (x+width+self.border/2., y-self.border, x+width+self.border, y-self.border/2., x+width+self.border, y) cr.line_to (x+width+self.border, y+height) cr.curve_to (x+width+self.border, y+height+self.border/2., x+width+self.border/2., y+height+self.border, x+width, y+height+self.border) cr.line_to (x, y+height+self.border) cr.curve_to (x-self.border/2., y+height+self.border, x-self.border, y+height+self.border/2., x-self.border, y+height) cr.set_source_color(self.get_style().bg[gtk.STATE_NORMAL]) cr.fill() cr.rectangle (x-self.border, y+height-30, width+self.border*2, 30) cr.set_source_color(self.get_style().dark[gtk.STATE_NORMAL]) cr.fill() def calcSpacings (self, n): """ Will yield ranges like ((.50,.50),) ((.66,.33), (.33,.66)) ((.75,.25), (.50,.50), (.25,.75)) ((.80,.20), (.60,.40), (.40,.60), (.20,.80)) Used to create the centering in the table """ first = next = (n)/float(n+1) for i in range(n): yield (next, 1-next) next = first-(1-next) def packTaskers (self, *widgets): self.widgets = widgets for widget in widgets: widget.connect("size-allocate", lambda *a: self.window.invalidate_rect(self.get_allocation(), False)) root = math.sqrt(len(widgets)) # Calculate number of rows rows = int(math.ceil(root)) # Calculate number of filled out rows rrows = int(math.floor(root)) # Calculate number of cols in filled out rows cols = int(math.ceil( len(widgets)/float(rows) )) # Calculate spacings vspac = [s[0] for s in self.calcSpacings(rows)] hspac = [s[0] for s in self.calcSpacings(cols)] # Clear and set up new size for child in self.get_children(): self.remove(child) self.props.n_columns = cols self.props.n_rows = rows # Add filled out rows for row in range(rrows): for col in range(cols): widget = widgets[row*cols + col] alignment = gtk.Alignment(hspac[col], vspac[row]) alignment.add(widget) self.attach(alignment, col, col+1, row, row+1) # Add last row if rows > rrows: lastrow = gtk.HBox() # Calculate number of widgets in last row numw = len(widgets) - cols*rrows hspac = [s[0] for s in self.calcSpacings(numw)] for col, widget in enumerate(widgets[-numw:]): alignment = gtk.Alignment(hspac[col], vspac[-1]) alignment.add(widget) alignment.set_padding(self.border, self.border, self.border, self.border) lastrow.pack_start(alignment) self.attach(lastrow, 0, cols, rrows, rrows+1) class NewGameTasker (gtk.Alignment): def __init__ (self): gtk.Alignment.__init__(self,0,0,0,0) self.widgets = widgets = uistuff.GladeWidgets("taskers.glade") tasker = widgets["newGameTasker"] tasker.unparent() self.add(tasker) combo = ToggleComboBox() combo.addItem(_("White"), pixbuf_new_from_file(addDataPrefix("glade/white.png"))) combo.addItem(_("Black"), pixbuf_new_from_file(addDataPrefix("glade/black.png"))) combo.addItem(_("Random"), pixbuf_new_from_file(addDataPrefix("glade/random.png"))) combo.setMarkup("", "") widgets["colorDock"].add(combo) uistuff.keep(combo, "newgametasker_colorcombo") widgets['yourColorLabel'].set_mnemonic_widget(combo) # We need to wait until after engines have been discovered, to init the # playerCombos. We use connect_after to make sure, that newGameDialog # has also had time to init the constants we share with them. self.playerCombo = ToggleComboBox() widgets["opponentDock"].add(self.playerCombo) glock_connect_after(discoverer, "all_engines_discovered", self.__initPlayerCombo, widgets) widgets['opponentLabel'].set_mnemonic_widget(self.playerCombo) def on_skill_changed (scale): pix = newGameDialog.skillToIconLarge[int(scale.get_value())] widgets["skillImage"].set_from_pixbuf(pix) widgets["skillSlider"].connect("value-changed", on_skill_changed) on_skill_changed(widgets["skillSlider"]) widgets["startButton"].connect("clicked", self.startClicked) self.widgets["opendialog1"].connect("clicked", self.openDialogClicked) def __initPlayerCombo (self, discoverer, widgets): combo = self.playerCombo combo.update(newGameDialog.smallPlayerItems[0]) if combo.active < 0: combo.label.set_ellipsize(pango.ELLIPSIZE_MIDDLE) combo.setMarkup("", "") combo.active = 1 uistuff.keep(self.playerCombo, "newgametasker_playercombo") def on_playerCombobox_changed (widget, event): widgets["skillSlider"].props.visible = widget.active > 0 combo.connect("changed", on_playerCombobox_changed) uistuff.keep(widgets["skillSlider"], "taskerSkillSlider") widgets["skillSlider"].set_no_show_all(True) on_playerCombobox_changed(self.playerCombo, None) def openDialogClicked (self, button): newGameDialog.NewGameMode.run() def startClicked (self, button): color = self.widgets["colorDock"].child.active if color == 2: color = random.choice([WHITE, BLACK]) opponent = self.widgets["opponentDock"].child.active difficulty = int(self.widgets["skillSlider"].get_value()) gamemodel = GameModel(TimeModel(5*60, 0)) name = conf.get("firstName", _("You")) player0tup = (LOCAL, Human, (color, name), name) if opponent == 0: name = conf.get("secondName", _("Guest")) player1tup = (LOCAL, Human, (1-color, name), name) else: engine = discoverer.getEngineN (opponent-1) name = discoverer.getName(engine) player1tup = (ARTIFICIAL, discoverer.initPlayerEngine, (engine, 1-color, difficulty, variants[NORMALCHESS], 5*60, 0), name) if color == WHITE: ionest.generalStart(gamemodel, player0tup, player1tup) else: ionest.generalStart(gamemodel, player1tup, player0tup) big_start = load_icon(48, "stock_init", "gnome-globe", "applications-internet") class InternetGameTasker (gtk.Alignment): def __init__ (self): gtk.Alignment.__init__(self,0,0,0,0) self.widgets = uistuff.GladeWidgets("taskers.glade") tasker = self.widgets["internetGameTasker"] tasker.unparent() self.add(tasker) def asGuestCallback (checkbutton): for widget in (self.widgets["usernameLabel"], self.widgets["usernameEntry"], self.widgets["passwordLabel"], self.widgets["passwordEntry"]): widget.set_sensitive(not checkbutton.get_active()) self.widgets["asGuestCheck"].connect("toggled", asGuestCallback) uistuff.keep(self.widgets["asGuestCheck"], "asGuestCheck") uistuff.keep(self.widgets["usernameEntry"], "usernameEntry") uistuff.keep(self.widgets["passwordEntry"], "passwordEntry") self.widgets["connectButton"].connect("clicked", self.connectClicked) self.widgets["opendialog2"].connect("clicked", self.openDialogClicked) self.widgets["startIcon"].set_from_pixbuf(big_start) def openDialogClicked (self, button): ICLogon.run() def connectClicked (self, button): asGuest = self.widgets["asGuestCheck"].get_active() username = self.widgets["usernameEntry"].get_text() password = self.widgets["passwordEntry"].get_text() ICLogon.run() if not ICLogon.dialog.connection: ICLogon.dialog.widgets["logOnAsGuest"].set_active(asGuest) ICLogon.dialog.widgets["nameEntry"].set_text(username) ICLogon.dialog.widgets["passEntry"].set_text(password) ICLogon.dialog.widgets["connectButton"].clicked() pychess-0.12beta3/lib/pychess/widgets/BoardControl.py0000644000175000017470000007143312175716165021746 0ustar tamasusers# -*- coding: UTF-8 -*- import gtk, gtk.gdk from gobject import * import threading from pychess.System.prefix import addDataPrefix from pychess.System import glock from pychess.System.Log import log from pychess.Utils.Cord import Cord from pychess.Utils.Move import Move, parseAny from pychess.Utils.const import * from pychess.Utils.logic import validate from pychess.Utils.lutils import lmovegen from pychess.Variants.crazyhouse import CrazyhouseChess from PromotionDialog import PromotionDialog from BoardView import BoardView, rect, HOLDING_SHIFT from BoardView import join class BoardControl (gtk.EventBox): __gsignals__ = { 'piece_moved' : (SIGNAL_RUN_FIRST, TYPE_NONE, (object, int)), 'action' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str, object)) } def __init__(self, gamemodel, actionMenuItems): gtk.EventBox.__init__(self) self.promotionDialog = PromotionDialog() self.view = BoardView(gamemodel) self.add(self.view) self.variant = gamemodel.variant self.RANKS = gamemodel.boards[0].RANKS self.FILES = gamemodel.boards[0].FILES self.actionMenuItems = actionMenuItems self.connections = {} for key, menuitem in self.actionMenuItems.iteritems(): if menuitem == None: print key self.connections[menuitem] = menuitem.connect("activate", self.actionActivate, key) self.view.connect("shown_changed", self.shown_changed) gamemodel.connect("moves_undoing", self.moves_undone) self.connect("button_press_event", self.button_press) self.connect("button_release_event", self.button_release) self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK|gtk.gdk.POINTER_MOTION_MASK) self.connect("motion_notify_event", self.motion_notify) self.connect("leave_notify_event", self.leave_notify) self.selected_last = None self.stateLock = threading.Lock() self.normalState = NormalState(self) self.selectedState = SelectedState(self) self.activeState = ActiveState(self) self.lockedNormalState = LockedNormalState(self) self.lockedSelectedState = LockedSelectedState(self) self.lockedActiveState = LockedActiveState(self) self.currentState = self.normalState self.lockedPly = self.view.shown self.possibleBoards = { self.lockedPly : self._genPossibleBoards(self.lockedPly) } self.allowPremove = False def onGameStart (gamemodel): for player in gamemodel.players: if player.__type__ == LOCAL: self.allowPremove = True gamemodel.connect("game_started", onGameStart) self.keybuffer = "" def __del__ (self): for menu, conid in self.connections.iteritems(): menu.disconnect(conid) self.connections = {} def getPromotion(self): color = self.view.model.boards[-1].color promotion = None glock.acquire() try: promotion = self.promotionDialog.runAndHide(color) finally: glock.release() return promotion def emit_move_signal (self, cord0, cord1, promotion=None): color = self.view.model.boards[-1].color board = self.view.model.getBoardAtPly(self.view.shown, self.view.shownVariationIdx) # Ask player for which piece to promote into. If this move does not # include a promotion, QUEEN will be sent as a dummy value, but not used if promotion is None and board[cord0].sign == PAWN and cord1.y in (0, self.RANKS-1): promotion = self.getPromotion() if promotion is None: # Put back pawn moved be d'n'd self.view.runAnimation(redrawMisc = False) return if cord0.x < 0 or cord0.x > self.FILES-1: move = Move(lmovegen.newMove(board[cord0].piece, cord1.cord, DROP)) else: move = Move(cord0, cord1, board, promotion) if self.view.model.curplayer.__type__ == LOCAL and self.view.shownIsMainLine() and \ board.board.next is None and self.view.model.status == RUNNING: self.emit("piece_moved", move, color) else: if board.board.next is None and not self.view.shownIsMainLine(): self.view.model.add_move2variation(board, move, self.view.shownVariationIdx) self.view.shown += 1 else: new_vari = self.view.model.add_variation(board, (move,)) self.view.setShownBoard(new_vari[-1]) def actionActivate (self, widget, key): """ Put actions from a menu or similar """ if key == "call_flag": self.emit("action", FLAG_CALL, None) elif key == "abort": self.emit("action", ABORT_OFFER, None) elif key == "adjourn": self.emit("action", ADJOURN_OFFER, None) elif key == "draw": self.emit("action", DRAW_OFFER, None) elif key == "resign": self.emit("action", RESIGNATION, None) elif key == "ask_to_move": self.emit("action", HURRY_ACTION, None) elif key == "undo1": curColor = self.view.model.variations[0][-1].color curPlayer = self.view.model.players[curColor] if curPlayer.__type__ == LOCAL and self.view.model.ply > 1: self.emit("action", TAKEBACK_OFFER, self.view.model.ply-2) else: self.emit("action", TAKEBACK_OFFER, self.view.model.ply-1) elif key == "pause1": self.emit("action", PAUSE_OFFER, None) elif key == "resume1": self.emit("action", RESUME_OFFER, None) def shown_changed (self, view, shown): self.lockedPly = self.view.shown self.possibleBoards[self.lockedPly] = self._genPossibleBoards(self.lockedPly) if self.view.shown-2 in self.possibleBoards: del self.possibleBoards[self.view.shown-2] def moves_undone (self, gamemodel, moves): self.stateLock.acquire() try: self.view.selected = None self.view.active = None self.view.hover = None self.view.draggedPiece = None self.view.startAnimation() self.currentState = self.lockedNormalState finally: self.stateLock.release() def getBoard (self): return self.view.model.getBoardAtPly(self.view.shown, self.view.shownVariationIdx) def isLastPlayed(self, board): return board == self.view.model.boards[-1] def setLocked (self, locked): self.stateLock.acquire() try: if locked and self.isLastPlayed(self.getBoard()) and self.view.model.status == RUNNING: if self.view.model.status != RUNNING: self.view.selected = None self.view.active = None self.view.hover = None self.view.draggedPiece = None self.view.startAnimation() if self.currentState == self.selectedState: self.currentState = self.lockedSelectedState elif self.currentState == self.activeState: self.currentState = self.lockedActiveState else: self.currentState = self.lockedNormalState else: if self.currentState == self.lockedSelectedState: self.currentState = self.selectedState elif self.currentState == self.lockedActiveState: self.currentState = self.activeState else: self.currentState = self.normalState finally: self.stateLock.release() def setStateSelected (self): self.stateLock.acquire() try: if self.currentState in (self.lockedNormalState, self.lockedSelectedState, self.lockedActiveState): self.currentState = self.lockedSelectedState else: self.view.setPremove(None, None, None, None) self.currentState = self.selectedState finally: self.stateLock.release() def setStateActive (self): self.stateLock.acquire() try: if self.currentState in (self.lockedNormalState, self.lockedSelectedState, self.lockedActiveState): self.currentState = self.lockedActiveState else: self.view.setPremove(None, None, None, None) self.currentState = self.activeState finally: self.stateLock.release() def setStateNormal (self): self.stateLock.acquire() try: if self.currentState in (self.lockedNormalState, self.lockedSelectedState, self.lockedActiveState): self.currentState = self.lockedNormalState else: self.view.setPremove(None, None, None, None) self.currentState = self.normalState finally: self.stateLock.release() def button_press (self, widget, event): return self.currentState.press(event.x, event.y, event.button) def button_release (self, widget, event): return self.currentState.release(event.x, event.y) def motion_notify (self, widget, event): return self.currentState.motion(event.x, event.y) def leave_notify (self, widget, event): return self.currentState.leave(event.x, event.y) def key_pressed (self, keyname): if keyname in "PNBRQKOox12345678abcdefgh": self.keybuffer += keyname elif keyname == "minus": self.keybuffer += "-" elif keyname == "at": self.keybuffer += "@" elif keyname == "Return": color = self.view.model.boards[-1].color board = self.view.model.getBoardAtPly(self.view.shown, self.view.shownVariationIdx) try: move = parseAny(board, self.keybuffer) except: self.keybuffer = "" return if validate(board, move): if self.view.shownIsMainLine() and board.board.next is None: self.emit("piece_moved", move, color) else: if board.board.next is None: self.view.model.add_move2variation(board, move, self.view.shownVariationIdx) self.view.shown += 1 else: new_vari = self.view.model.add_variation(board, (move,)) self.view.setShownBoard(new_vari[-1]) self.keybuffer = "" elif keyname == "BackSpace": self.keybuffer = self.keybuffer[:-1] if self.keybuffer else "" def _genPossibleBoards(self, ply): possibleBoards = [] curboard = self.view.model.getBoardAtPly(ply, self.view.shownVariationIdx) for lmove in lmovegen.genAllMoves(curboard.board): move = Move(lmove) board = curboard.move(move) possibleBoards.append(board) return possibleBoards class BoardState: ''' There are 6 total BoardStates: NormalState, ActiveState, SelectedState LockedNormalState, LockedActiveState, LockedSelectedState The board state is Locked while it is the opponents turn. The board state is not Locked during your turn. Normal/Locked State - No pieces or cords are selected Active State - A piece is currently being dragged by the mouse Selected State - A cord is currently selected ''' def __init__ (self, board): self.parent = board self.view = board.view self.lastMotionCord = None self.RANKS = self.view.model.boards[0].RANKS self.FILES = self.view.model.boards[0].FILES def getBoard (self): return self.view.model.getBoardAtPly(self.view.shown, self.view.shownVariationIdx) def validate (self, cord0, cord1): assert cord0 != None and cord1 != None, "cord0: " + str(cord0) + ", cord1: " + str(cord1) if self.getBoard()[cord0] == None: return False if cord1.x < 0 or cord1.x > self.FILES-1: return False if cord0.x < 0 or cord0.x > self.FILES-1: # drop return validate(self.getBoard(), Move(lmovegen.newMove(self.getBoard()[cord0].piece, cord1.cord, DROP))) else: return validate(self.getBoard(), Move(cord0, cord1, self.getBoard())) def transPoint (self, x, y): xc, yc, square, s = self.view.square x, y = self.view.invmatrix.transform_point(x,y) y -= yc; x -= xc y /= float(s) # Holdings need some shift not to overlap cord letters when showCords is on if x < 0 or x > square: shift = -s*HOLDING_SHIFT if x < 0 else s*HOLDING_SHIFT x -= shift x /= float(s) return x if x>=0 else x-1, self.RANKS-y def point2Cord (self, x, y): point = self.transPoint(x, y) if self.parent.variant == CrazyhouseChess: if not -2 <= int(point[0]) <= self.FILES+1 or not 0 <= int(point[1]) <= self.RANKS-1: return None else: if not 0 <= int(point[0]) <= self.FILES-1 or not 0 <= int(point[1]) <= self.RANKS-1: return None return Cord(int(point[0]), int(point[1])) def isSelectable (self, cord): # Simple isSelectable method, disabling selecting cords out of bound etc if not cord: return False if self.parent.variant == CrazyhouseChess: if (not -2 <= cord.x <= self.FILES+1) or (not 0 <= cord.y <= self.RANKS-1): return False else: if (not 0 <= cord.x <= self.FILES-1) or (not 0 <= cord.y <= self.RANKS-1): return False return True def press (self, x, y, button): pass def release (self, x, y): pass def motion (self, x, y): cord = self.point2Cord(x, y) if self.lastMotionCord == cord: return self.lastMotionCord = cord if cord and self.isSelectable(cord): self.view.hover = cord else: self.view.hover = None def leave (self, x, y): a = self.parent.get_allocation() if not (0 <= x < a.width and 0 <= y < a.height): self.view.hover = None class LockedBoardState (BoardState): ''' Parent of LockedNormalState, LockedActiveState, LockedSelectedState The board is in one of the three Locked states during the opponent's turn. ''' def __init__ (self, board): BoardState.__init__(self, board) def isAPotentiallyLegalNextMove (self, cord0, cord1): """ Determines whether the given move is at all legally possible as the next move after the player who's turn it is makes their move Note: This doesn't always return the correct value, such as when BoardControl.setLocked() has been called and we've begun a drag, but view.shown and BoardControl.lockedPly haven't been updated yet """ if cord0 == None or cord1 == None: return False if not self.parent.lockedPly in self.parent.possibleBoards: return False for board in self.parent.possibleBoards[self.parent.lockedPly]: if not board[cord0]: return False if validate(board, Move(cord0, cord1, board)): return True return False class NormalState (BoardState): ''' It is the human player's turn and no pieces or cords are selected. ''' def isSelectable (self, cord): if not BoardState.isSelectable(self, cord): return False # We don't want empty cords if self.getBoard()[cord] == None: return False # We should not be able to select an opponent piece if self.getBoard()[cord].color != self.getBoard().color: return False return True def press (self, x, y, button): self.parent.grab_focus() cord = self.point2Cord(x,y) if self.isSelectable(cord): self.view.draggedPiece = self.getBoard()[cord] self.view.active = cord self.parent.setStateActive() class ActiveState (BoardState): ''' It is the human player's turn and a piece is being dragged by the mouse. ''' def isSelectable (self, cord): if not BoardState.isSelectable(self, cord): return False return self.validate(self.view.active, cord) def release (self, x, y): cord = self.point2Cord(x,y) if not cord: self.view.active = None self.view.selected = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateNormal() # When in the mixed active/selected state elif self.view.selected: # Move when releasing on a good cord if self.validate(self.view.selected, cord): self.parent.setStateNormal() # It is important to emit_move_signal after setting state # as listeners of the function probably will lock the board self.view.draggedPiece = None self.parent.emit_move_signal(self.view.selected, cord) self.view.selected = None self.view.active = None elif cord == self.view.active == self.view.selected == self.parent.selected_last: # user clicked (press+release) same piece twice, so unselect it self.view.active = None self.view.selected = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateNormal() else: # leave last selected piece selected self.view.active = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateSelected() # If dragged and released on a possible cord elif self.validate(self.view.active, cord): self.parent.setStateNormal() self.view.draggedPiece = None self.parent.emit_move_signal(self.view.active, cord) self.view.active = None # Select last piece user tried to move or that was selected elif self.view.active or self.view.selected: self.view.selected = self.view.active if self.view.active else self.view.selected self.view.active = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateSelected() # Send back, if dragging to a not possible cord else: self.view.active = None # Send the piece back to its original cord self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateNormal() self.parent.selected_last = self.view.selected def motion (self, x, y): if not self.getBoard()[self.view.active]: return BoardState.motion(self, x, y) fcord = self.view.active piece = self.getBoard()[fcord] if piece.color != self.getBoard().color: return xc, yc, square, s = self.view.square co, si = self.view.matrix[0], self.view.matrix[1] point = self.transPoint(x-s*(co+si)/2., y+s*(co-si)/2.) if not point: return x, y = point if piece.x != x or piece.y != y: if piece.x: paintBox = self.view.cord2RectRelative(piece.x, piece.y) else: paintBox = self.view.cord2RectRelative(self.view.active) paintBox = join(paintBox, self.view.cord2RectRelative(x, y)) piece.x = x piece.y = y self.view.redraw_canvas(rect(paintBox), queue=True) class SelectedState (BoardState): ''' It is the human player's turn and a cord is selected. ''' def isSelectable (self, cord): if not BoardState.isSelectable(self, cord): return False # Select another piece if self.getBoard()[cord] != None and \ self.getBoard()[cord].color == self.getBoard().color: return True return self.validate(self.view.selected, cord) def press (self, x, y, button): cord = self.point2Cord(x,y) # Unselecting by pressing the selected cord, or marking the cord to be # moved to. We don't unset self.view.selected, so ActiveState can handle # things correctly if self.isSelectable(cord): if self.view.selected and self.view.selected != cord and \ self.getBoard()[cord] != None and \ self.getBoard()[cord].color == self.getBoard().color and \ not self.validate(self.view.selected, cord): # corner case encountered: # user clicked (press+release) a piece, then clicked (no release yet) # a different piece and dragged it somewhere else. Since # ActiveState.release() will use self.view.selected as the source piece # rather than self.view.active, we need to update it here self.view.selected = cord # re-select new cord self.view.draggedPiece = self.getBoard()[cord] self.view.active = cord self.parent.setStateActive() else: # Unselecting by pressing an inactive cord self.view.selected = None self.parent.setStateNormal() class LockedNormalState (LockedBoardState): ''' It is the opponent's turn and no piece or cord is selected. ''' def isSelectable (self, cord): if not BoardState.isSelectable(self, cord): return False # Don't allow premove if neither player is human if not self.parent.allowPremove: return False # We don't want empty cords if self.getBoard()[cord] == None: return False # We should not be able to select an opponent piece if self.getBoard()[cord].color == self.getBoard().color: return False return True def press (self, x, y, button): self.parent.grab_focus() cord = self.point2Cord(x,y) if self.isSelectable(cord): self.view.draggedPiece = self.getBoard()[cord] self.view.active = cord self.parent.setStateActive() # reset premove if mouse right-clicks or clicks one of the premove cords if button == 3: #right-click self.view.setPremove(None, None, None, None) self.view.startAnimation() elif cord == self.view.premove0 or cord == self.view.premove1: self.view.setPremove(None, None, None, None) self.view.startAnimation() class LockedActiveState (LockedBoardState): ''' It is the opponent's turn and a piece is being dragged by the mouse. ''' def isSelectable (self, cord): if not BoardState.isSelectable(self, cord): return False return self.isAPotentiallyLegalNextMove(self.view.active, cord) def release (self, x, y): cord = self.point2Cord(x,y) if cord == self.view.active == self.view.selected == self.parent.selected_last: # User clicked (press+release) same piece twice, so unselect it self.view.active = None self.view.selected = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateNormal() elif self.parent.allowPremove and self.view.selected and self.isAPotentiallyLegalNextMove(self.view.selected, cord): # In mixed locked selected/active state and user selects a valid premove cord board = self.getBoard() if board[self.view.selected].sign == PAWN and cord.y in (0, self.RANKS-1): promotion = self.parent.getPromotion() else: promotion = None self.view.setPremove(board[self.view.selected], self.view.selected, cord, self.view.shown+2, promotion) self.view.selected = None self.view.active = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateNormal() elif self.parent.allowPremove and self.isAPotentiallyLegalNextMove(self.view.active, cord): # User drags a piece to a valid premove square board = self.getBoard() if board[self.view.active].sign == PAWN and cord.y in (0, self.RANKS-1): promotion = self.parent.getPromotion() else: promotion = None self.view.setPremove(self.getBoard()[self.view.active], self.view.active, cord, self.view.shown+2, promotion) self.view.selected = None self.view.active = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateNormal() elif self.view.active or self.view.selected: # Select last piece user tried to move or that was selected self.view.selected = self.view.active if self.view.active else self.view.selected self.view.active = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateSelected() else: self.view.active = None self.view.selected = None self.view.draggedPiece = None self.view.startAnimation() self.parent.setStateNormal() self.parent.selected_last = self.view.selected def motion (self, x, y): if not self.getBoard()[self.view.active]: return BoardState.motion(self, x, y) fcord = self.view.active piece = self.getBoard()[fcord] if piece.color == self.getBoard().color: return xc, yc, square, s = self.view.square co, si = self.view.matrix[0], self.view.matrix[1] point = self.transPoint(x-s*(co+si)/2., y+s*(co-si)/2.) if not point: return x, y = point if piece.x != x or piece.y != y: if piece.x: paintBox = self.view.cord2RectRelative(piece.x, piece.y) else: paintBox = self.view.cord2RectRelative(self.view.active) paintBox = join(paintBox, self.view.cord2RectRelative(x, y)) piece.x = x piece.y = y self.view.redraw_canvas(rect(paintBox), queue=True) class LockedSelectedState (LockedBoardState): ''' It is the opponent's turn and a cord is selected. ''' def isSelectable (self, cord): if not BoardState.isSelectable(self, cord): return False # Select another piece if self.getBoard()[cord] != None and \ self.getBoard()[cord].color != self.getBoard().color: return True return self.isAPotentiallyLegalNextMove(self.view.selected, cord) def motion (self, x, y): cord = self.point2Cord(x, y) if self.lastMotionCord == cord: self.view.hover = cord return self.lastMotionCord = cord if cord and self.isAPotentiallyLegalNextMove(self.view.selected, cord): self.view.hover = cord else: self.view.hover = None def press (self, x, y, button): cord = self.point2Cord(x,y) # Unselecting by pressing the selected cord, or marking the cord to be # moved to. We don't unset self.view.selected, so ActiveState can handle # things correctly if self.isSelectable(cord): if self.view.selected and self.view.selected != cord and \ self.getBoard()[cord] != None and \ self.getBoard()[cord].color != self.getBoard().color and \ not self.isAPotentiallyLegalNextMove(self.view.selected, cord): # corner-case encountered (see comment in SelectedState.press) self.view.selected = cord # re-select new cord self.view.draggedPiece = self.getBoard()[cord] self.view.active = cord self.parent.setStateActive() else: # Unselecting by pressing an inactive cord self.view.selected = None self.parent.setStateNormal() # reset premove if mouse right-clicks or clicks one of the premove cords if button == 3: #right-click self.view.setPremove(None, None, None, None) self.view.startAnimation() elif cord == self.view.premove0 or cord == self.view.premove1: self.view.setPremove(None, None, None, None) self.view.startAnimation() pychess-0.12beta3/lib/pychess/widgets/PieceWidget.py0000755000175000017470000000121012161415524021522 0ustar tamasusersimport gtk import cairo from pychess.gfx import Pieces class PieceWidget (gtk.DrawingArea): def __init__(self, piece): gtk.DrawingArea.__init__(self) self.connect("expose_event", self.expose) self.piece = piece def setPiece(self, piece): self.piece = piece def getPiece(self): return self.piece def expose(self, widget, event): context = widget.window.cairo_create() rect = self.get_allocation() s = min(rect.width, rect.height) x = (rect.width-s) / 2.0 y = (rect.height-s) / 2.0 Pieces.drawPiece(self.piece, context, x, y, s) pychess-0.12beta3/lib/pychess/widgets/__init__.py0000755000175000017470000000000012161415524021064 0ustar tamasuserspychess-0.12beta3/lib/pychess/widgets/preferencesDialog.py0000644000175000017470000005362012161415524022763 0ustar tamasusersimport sys, os from os import listdir from os.path import isdir, isfile, splitext from xml.dom import minidom import gtk from pychess.System.prefix import addDataPrefix, getDataPrefix from pychess.System.glock import glock_connect_after from pychess.System import conf, gstreamer, uistuff from pychess.Players.engineNest import discoverer from pychess.Utils.const import * from pychess.Utils.IconLoader import load_icon from pychess.gfx import Pieces firstRun = True def run(widgets): global firstRun if firstRun: initialize(widgets) firstRun = False widgets["preferences"].show() def initialize(widgets): GeneralTab(widgets) HintTab(widgets) SoundTab(widgets) PanelTab(widgets) ThemeTab(widgets) def delete_event (widget, *args): widgets["preferences"].hide() return True widgets["preferences"].connect("delete-event", delete_event) widgets["preferences_close_button"].connect("clicked", delete_event) widgets["preferences"].connect("key-press-event", lambda w,e: delete_event(w) if e.keyval == gtk.keysyms.Escape else None) ################################################################################ # General initing # ################################################################################ class GeneralTab: def __init__ (self, widgets): conf.set("firstName", conf.get("firstName", conf.username)) conf.set("secondName", conf.get("secondName", _("Guest"))) # Give to uistuff.keeper for key in ("firstName", "secondName", "hideTabs", "autoRotate", "faceToFace", "showCords", "showCaptured", "figuresInNotation", "fullAnimation", "moveAnimation", "noAnimation"): uistuff.keep(widgets[key], key) ################################################################################ # Hint initing # ################################################################################ class HintTab: def __init__ (self, widgets): self.widgets = widgets # Opening book default_path = os.path.join(addDataPrefix("pychess_book.bin")) path = conf.get("opening_file_entry", default_path) conf.set("opening_file_entry", path) book_chooser_dialog = gtk.FileChooserDialog(_("Select book file"), None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) book_chooser_button = gtk.FileChooserButton(book_chooser_dialog) filter = gtk.FileFilter() filter.set_name(_("Opening books")) filter.add_pattern("*.bin") book_chooser_dialog.add_filter(filter) book_chooser_dialog.set_filename(path) self.widgets["bookChooserDock"].add(book_chooser_button) book_chooser_button.show() def select_new_book(button): new_book = book_chooser_dialog.get_filename() if new_book: conf.set("opening_file_entry", new_book) else: # restore the original book_chooser_dialog.set_filename(path) book_chooser_button.connect("file-set", select_new_book) def on_opening_check_toggled (check): widgets["opening_hbox"].set_sensitive(check.get_active()) widgets["opening_check"].connect_after("toggled", on_opening_check_toggled) uistuff.keep(widgets["opening_check"], "opening_check") # Endgame conf.set("online_egtb_check", conf.get("online_egtb_check", 0)) uistuff.keep(widgets["online_egtb_check"], "online_egtb_check") default_path = os.path.join(getDataPrefix()) egtb_path = conf.get("egtb_path", default_path) conf.set("egtb_path", egtb_path) egtb_chooser_dialog = gtk.FileChooserDialog(_("Select Gaviota TB path"), None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) egtb_chooser_button = gtk.FileChooserButton(egtb_chooser_dialog) egtb_chooser_dialog.set_current_folder(egtb_path) self.widgets["egtbChooserDock"].add(egtb_chooser_button) egtb_chooser_button.show() def select_egtb(button): new_directory = egtb_chooser_dialog.get_filename() if new_directory != egtb_path: conf.set("egtb_path", new_directory) egtb_chooser_button.connect("current-folder-changed", select_egtb) def on_endgame_check_toggled (check): widgets["endgame_hbox"].set_sensitive(check.get_active()) widgets["endgame_check"].connect_after("toggled", on_endgame_check_toggled) uistuff.keep(widgets["endgame_check"], "endgame_check") # Analyzing engines uistuff.createCombo(widgets["ana_combobox"]) uistuff.createCombo(widgets["inv_ana_combobox"]) from pychess.widgets import newGameDialog def update_analyzers_store(discoverer): data = [(item[0], item[1]) for item in newGameDialog.analyzerItems] uistuff.updateCombo(widgets["ana_combobox"], data) uistuff.updateCombo(widgets["inv_ana_combobox"], data) glock_connect_after(discoverer, "all_engines_discovered", update_analyzers_store) update_analyzers_store(discoverer) # Save, load and make analyze combos active conf.set("ana_combobox", conf.get("ana_combobox", 0)) conf.set("inv_ana_combobox", conf.get("inv_ana_combobox", 0)) def on_analyzer_check_toggled (check): widgets["analyzers_vbox"].set_sensitive(check.get_active()) from pychess.Main import gameDic if gameDic: if check.get_active(): for gmwidg in gameDic.keys(): gmwidg.gamemodel.restart_analyzer(HINT) else: for gmwidg in gameDic.keys(): gmwidg.gamemodel.remove_analyzer(HINT) widgets["analyzer_check"].connect_after("toggled", on_analyzer_check_toggled) uistuff.keep(widgets["analyzer_check"], "analyzer_check") def on_invanalyzer_check_toggled (check): widgets["inv_analyzers_vbox"].set_sensitive(check.get_active()) from pychess.Main import gameDic if gameDic: if check.get_active(): for gmwidg in gameDic.keys(): gmwidg.gamemodel.restart_analyzer(SPY) else: for gmwidg in gameDic.keys(): gmwidg.gamemodel.remove_analyzer(SPY) widgets["inv_analyzer_check"].connect_after("toggled", on_invanalyzer_check_toggled) uistuff.keep(widgets["inv_analyzer_check"], "inv_analyzer_check") # Give widgets to keeper def get_value (combobox): engine = list(discoverer.getAnalyzers())[combobox.get_active()] return engine.get("md5") def set_value (combobox, value, show_arrow_check, ana_check, analyzer_type): engine = discoverer.getEngineByMd5(value) if engine is None: combobox.set_active(0) # This return saves us from the None-engine being used # in later code -Jonas Thiem return else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index) replace_analyzers = False if widgets[show_arrow_check].get_active() is True and \ widgets[ana_check].get_active() is True: replace_analyzers = True from pychess.Main import gameDic for gmwidg in gameDic.keys(): spectators = gmwidg.gamemodel.spectators md5 = engine.get('md5') if analyzer_type in spectators and \ spectators[analyzer_type].md5 != md5: gmwidg.gamemodel.remove_analyzer(analyzer_type) if replace_analyzers: gmwidg.gamemodel.start_analyzer(analyzer_type) uistuff.keep(widgets["ana_combobox"], "ana_combobox", get_value, lambda combobox, value: set_value(combobox, value, "hint_mode", "analyzer_check", HINT)) uistuff.keep(widgets["inv_ana_combobox"], "inv_ana_combobox", get_value, lambda combobox, value: set_value(combobox, value, "spy_mode", "inv_analyzer_check", SPY)) ################################################################################ # Sound initing # ################################################################################ # Setup default sounds for i in xrange(9): if not conf.hasKey("soundcombo%d" % i): conf.set("soundcombo%d" % i, SOUND_URI) if not conf.hasKey("sounduri0"): conf.set("sounduri0", "file://"+addDataPrefix("sounds/move1.ogg")) if not conf.hasKey("sounduri1"): conf.set("sounduri1", "file://"+addDataPrefix("sounds/check1.ogg")) if not conf.hasKey("sounduri2"): conf.set("sounduri2", "file://"+addDataPrefix("sounds/capture1.ogg")) if not conf.hasKey("sounduri3"): conf.set("sounduri3", "file://"+addDataPrefix("sounds/start1.ogg")) if not conf.hasKey("sounduri4"): conf.set("sounduri4", "file://"+addDataPrefix("sounds/win1.ogg")) if not conf.hasKey("sounduri5"): conf.set("sounduri5", "file://"+addDataPrefix("sounds/lose1.ogg")) if not conf.hasKey("sounduri6"): conf.set("sounduri6", "file://"+addDataPrefix("sounds/draw1.ogg")) if not conf.hasKey("sounduri7"): conf.set("sounduri7", "file://"+addDataPrefix("sounds/obs_mov.ogg")) if not conf.hasKey("sounduri8"): conf.set("sounduri8", "file://"+addDataPrefix("sounds/obs_end.ogg")) class SoundTab: SOUND_DIRS = (addDataPrefix("sounds"), "/usr/share/sounds", "/usr/local/share/sounds", os.environ["HOME"]) COUNT_OF_SOUNDS = 9 actionToKeyNo = { "aPlayerMoves": 0, "aPlayerChecks": 1, "aPlayerCaptures": 2, "gameIsSetup": 3, "gameIsWon": 4, "gameIsLost": 5, "gameIsDrawn": 6, "observedMoves": 7, "oberservedEnds": 8 } _player = None @classmethod def getPlayer (cls): if not cls._player: cls._player = gstreamer.Player() return cls._player @classmethod def playAction (cls, action): if not conf.get("useSounds", True): return if type(action) == str: no = cls.actionToKeyNo[action] else: no = action typ = conf.get("soundcombo%d" % no, SOUND_MUTE) if typ == SOUND_BEEP: sys.stdout.write("\a") sys.stdout.flush() elif typ == SOUND_URI: uri = conf.get("sounduri%d" % no, "") if not os.path.isfile(uri[7:]): conf.set("soundcombo%d" % no, SOUND_MUTE) return cls.getPlayer().play(uri) def __init__ (self, widgets): # Init open dialog opendialog = gtk.FileChooserDialog ( _("Open Sound File"), None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT)) for dir in self.SOUND_DIRS: if os.path.isdir(dir): opendialog.set_current_folder(dir) break soundfilter = gtk.FileFilter() soundfilter.set_name(_("Sound files")) soundfilter.add_custom(soundfilter.get_needed(), lambda data: data[3] and data[3].startswith("audio/")) opendialog.add_filter(soundfilter) opendialog.set_filter(soundfilter) # Get combo icons icons = ((_("No sound"), "audio-volume-muted", "audio-volume-muted"), (_("Beep"), "stock_bell", "audio-x-generic"), (_("Select sound file..."), "gtk-open", "document-open")) items = [] for level, stock, altstock in icons: image = load_icon(16, stock, altstock) items += [(image, level)] audioIco = load_icon(16, "audio-x-generic") # Set-up combos def callback (combobox, index): if combobox.get_active() == SOUND_SELECT: if opendialog.run() == gtk.RESPONSE_ACCEPT: uri = opendialog.get_uri() model = combobox.get_model() conf.set("sounduri%d"%index, uri) label = os.path.split(uri)[1] if len(model) == 3: model.append([audioIco, label]) else: model.set(model.get_iter((3,)), 1, label) combobox.set_active(3) else: combobox.set_active(conf.get("soundcombo%d"%index,SOUND_MUTE)) opendialog.hide() for i in xrange(self.COUNT_OF_SOUNDS): combo = widgets["soundcombo%d"%i] uistuff.createCombo (combo, items) combo.set_active(0) combo.connect("changed", callback, i) label = widgets["soundlabel%d"%i] label.props.mnemonic_widget = combo uri = conf.get("sounduri%d"%i,"") if os.path.isfile(uri[7:]): model = combo.get_model() model.append([audioIco, os.path.split(uri)[1]]) combo.set_active(3) for i in xrange(self.COUNT_OF_SOUNDS): if conf.get("soundcombo%d"%i, SOUND_MUTE) == SOUND_URI and \ not os.path.isfile(conf.get("sounduri%d"%i,"")[7:]): conf.set("soundcombo%d"%i, SOUND_MUTE) uistuff.keep(widgets["soundcombo%d"%i], "soundcombo%d"%i) #widgets["soundcombo%d"%i].set_active(conf.get("soundcombo%d"%i, SOUND_MUTE)) # Init play button def playCallback (button, index): SoundTab.playAction(index) for i in range (self.COUNT_OF_SOUNDS): button = widgets["soundbutton%d"%i] button.connect("clicked", playCallback, i) # Init 'use sound" checkbutton def checkCallBack (*args): checkbox = widgets["useSounds"] widgets["frame23"].set_property("sensitive", checkbox.get_active()) conf.notify_add("useSounds", checkCallBack) widgets["useSounds"].set_active(True) uistuff.keep(widgets["useSounds"], "useSounds") checkCallBack() def soundError (player, gstmessage): widgets["useSounds"].set_sensitive(False) widgets["useSounds"].set_active(False) self.getPlayer().connect("error", soundError) ################################################################################ # Panel initing # ################################################################################ class PanelTab: def __init__ (self, widgets): # Put panels in trees self.widgets = widgets from pychess.widgets.gamewidget import sidePanels, dockLocation saved_panels = [] xmlOK = os.path.isfile(dockLocation) if xmlOK: doc = minidom.parse(dockLocation) for elem in doc.getElementsByTagName("panel"): saved_panels.append(elem.getAttribute("id")) store = gtk.ListStore(bool, gtk.gdk.Pixbuf, str, object) for panel in sidePanels: checked = True if not xmlOK else panel.__name__ in saved_panels panel_icon = gtk.gdk.pixbuf_new_from_file_at_size(panel.__icon__, 32, 32) text = "%s\n%s" % (panel.__title__, panel.__desc__) store.append((checked, panel_icon, text, panel)) self.tv = widgets["treeview1"] self.tv.set_model(store) self.widgets['panel_about_button'].connect('clicked', self.panel_about) self.widgets['panel_enable_button'].connect('toggled', self.panel_toggled) self.tv.get_selection().connect('changed', self.selection_changed) pixbuf = gtk.CellRendererPixbuf() pixbuf.props.yalign = 0 pixbuf.props.ypad = 3 pixbuf.props.xpad = 3 self.tv.append_column(gtk.TreeViewColumn("Icon", pixbuf, pixbuf=1, sensitive=0)) uistuff.appendAutowrapColumn(self.tv, 200, "Name", markup=2, sensitive=0) widgets['notebook1'].connect("switch-page", self.__on_switch_page) widgets["preferences"].connect("show", self.__on_show_window) widgets["preferences"].connect("hide", self.__on_hide_window) def selection_changed(self, treeselection): store, iter = self.tv.get_selection().get_selected() self.widgets['panel_enable_button'].set_sensitive(bool(iter)) self.widgets['panel_about_button'].set_sensitive(bool(iter)) if iter: active = self.tv.get_model().get(iter, 0)[0] self.widgets['panel_enable_button'].set_active(active) def panel_about(self, button): store, iter = self.tv.get_selection().get_selected() assert iter # The button should only be clickable when we have a selection path = store.get_path(iter) panel = store[path][3] d = gtk.MessageDialog (type=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_CLOSE) d.set_markup ("%s" % panel.__title__) text = panel.__about__ if hasattr(panel, '__about__') else _('Undescribed panel') d.format_secondary_text (text) d.run() d.hide() def panel_toggled(self, button): store, iter = self.tv.get_selection().get_selected() assert iter # The button should only be clickable when we have a selection path = store.get_path(iter) active = button.get_active() if store[path][0] == active: return store[path][0] = active self.__set_panel_active(store[path][3], active) def __set_panel_active(self, panel, active): name = panel.__name__ from pychess.widgets.gamewidget import notebooks, docks from pychess.widgets.pydock import EAST if active: leaf = notebooks["board"].get_parent().get_parent() leaf.dock(docks[name][1], EAST, docks[name][0], name) else: try: notebooks[name].get_parent().get_parent().undock(notebooks[name]) except AttributeError: # A new panel appeared in the panels directory leaf = notebooks["board"].get_parent().get_parent() leaf.dock(docks[name][1], EAST, docks[name][0], name) def showit(self): from pychess.widgets.gamewidget import showDesignGW showDesignGW() def hideit(self): from pychess.widgets.gamewidget import hideDesignGW hideDesignGW() def __on_switch_page(self, notebook, page, page_num): if notebook.get_nth_page(page_num) == self.widgets['sidepanels']: self.showit() else: self.hideit() def __on_show_window(self, widget): notebook = self.widgets['notebook1'] page_num = notebook.get_current_page() if notebook.get_nth_page(page_num) == self.widgets['sidepanels']: self.showit() def __on_hide_window(self, widget): self.hideit() class ThemeTab: def __init__ (self, widgets): conf.set("pieceTheme", conf.get("pieceTheme", "pychess")) self.themes = self.discover_themes() store = gtk.ListStore(gtk.gdk.Pixbuf, str) for theme in self.themes: pngfile = "%s/%s.png" % (addDataPrefix("pieces"), theme) if isfile(pngfile): pixbuf = gtk.gdk.pixbuf_new_from_file(pngfile) store.append((pixbuf, theme)) else: print "WARNING: No piece theme preview icons find. Run create_theme_preview.sh !" break iconView = widgets["pieceTheme"] iconView.set_model(store) iconView.set_pixbuf_column(0) iconView.set_text_column(1) def _get_active(iconview): model = iconview.get_model() selected = iconview.get_selected_items() if len(selected) == 0: return conf.get("pieceTheme", "pychess") i = selected[0][0] theme = model[i][1] Pieces.set_piece_theme(theme) return theme def _set_active(iconview, value): try: index = self.themes.index(value) except ValueError: index = 0 iconview.select_path((index,)) uistuff.keep (widgets["pieceTheme"], "pieceTheme", _get_active, _set_active) def discover_themes(self): themes = ['Pychess'] pieces = addDataPrefix("pieces") themes += [d.capitalize() for d in listdir(pieces) if isdir(os.path.join(pieces,d)) and d != 'ttf'] ttf = addDataPrefix("pieces/ttf") themes += ["ttf-" + splitext(d)[0].capitalize() for d in listdir(ttf) if splitext(d)[1] == '.ttf'] themes.sort() return themes pychess-0.12beta3/lib/pychess/widgets/gamenanny.py0000755000175000017470000002555112176675601021336 0ustar tamasusers""" This module intends to work as glue between the gamemodel and the gamewidget taking care of stuff that is neither very offscreen nor very onscreen like bringing up dialogs and """ import math import gtk from pychess.ic.ICGameModel import ICGameModel from pychess.Utils.Offer import Offer from pychess.Utils.const import * from pychess.Utils.repr import reprResult_long, reprReason_long from pychess.System import conf from pychess.System import glock from pychess.System.Log import log from pychess.widgets import preferencesDialog from gamewidget import getWidgets, key2gmwidg, isDesignGWShown from pychess.widgets.InfoBar import InfoBarMessage, InfoBarMessageButton def nurseGame (gmwidg, gamemodel): """ Call this function when gmwidget is just created """ gmwidg.connect("infront", on_gmwidg_infront) gmwidg.connect("closed", on_gmwidg_closed) gmwidg.connect("title_changed", on_gmwidg_title_changed) # Because of the async loading of games, the game might already be started, # when the glock is ready and nurseGame is called. # Thus we support both cases. if gamemodel.status == WAITING_TO_START: gamemodel.connect("game_started", on_game_started, gmwidg) gamemodel.connect("game_loaded", game_loaded, gmwidg) else: if gamemodel.uri: game_loaded(gamemodel, gamemodel.uri, gmwidg) on_game_started(gamemodel, gmwidg) gamemodel.connect("game_saved", game_saved, gmwidg) gamemodel.connect("game_ended", game_ended, gmwidg) gamemodel.connect("game_unended", game_unended, gmwidg) gamemodel.connect("game_resumed", game_unended, gmwidg) gamemodel.connect("game_changed", game_changed, gmwidg) gamemodel.connect("game_paused", game_paused, gmwidg) #=============================================================================== # Gamewidget signals #=============================================================================== def on_gmwidg_infront (gmwidg): glock.acquire() try: for widget in MENU_ITEMS: if widget in gmwidg.menuitems: continue elif widget == 'show_sidepanels' and isDesignGWShown(): getWidgets()[widget].set_property('sensitive', False) else: getWidgets()[widget].set_property('sensitive', True) # Change window title getWidgets()['window1'].set_title('%s - PyChess' % gmwidg.getTabText()) finally: glock.release() return False def on_gmwidg_closed (gmwidg): glock.acquire() try: if len(key2gmwidg) == 1: getWidgets()['window1'].set_title('%s - PyChess' % _('Welcome')) finally: glock.release() return False def on_gmwidg_title_changed (gmwidg): glock.acquire() try: if gmwidg.isInFront(): getWidgets()['window1'].set_title('%s - PyChess' % gmwidg.getTabText()) finally: glock.release() return False #=============================================================================== # Gamemodel signals #=============================================================================== def game_ended (gamemodel, reason, gmwidg): log.debug("gamenanny.game_ended: reason=%s gmwidg=%s\ngamemodel=%s\n" % \ (reason, gmwidg, gamemodel)) nameDic = {"white": gamemodel.players[WHITE], "black": gamemodel.players[BLACK], "mover": gamemodel.curplayer} if gamemodel.status == WHITEWON: nameDic["winner"] = gamemodel.players[WHITE] nameDic["loser"] = gamemodel.players[BLACK] elif gamemodel.status == BLACKWON: nameDic["winner"] = gamemodel.players[BLACK] nameDic["loser"] = gamemodel.players[WHITE] m1 = reprResult_long[gamemodel.status] % nameDic m2 = reprReason_long[reason] % nameDic hbox = gtk.HBox() image = gtk.Image() image.set_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_DIALOG) hbox.pack_start(image, expand=False, fill=False) vbox = gtk.VBox() label = gtk.Label() label.props.xalign = 0 label.props.justify = gtk.JUSTIFY_LEFT label.set_markup("%s" % m1) vbox.pack_start(label, expand=False, fill=False) label = gtk.Label() label.props.xalign = 0 label.props.justify = gtk.JUSTIFY_LEFT label.props.wrap = True label.set_text(m2) vbox.pack_start(label, expand=False, fill=False) hbox.pack_start(vbox, expand=False, fill=False, padding=7) message = InfoBarMessage(gtk.MESSAGE_INFO, hbox, None) if gamemodel.players[0].__type__ == LOCAL or gamemodel.players[1].__type__ == LOCAL: if gamemodel.players[0].__type__ == REMOTE or gamemodel.players[1].__type__ == REMOTE: message.add_button(InfoBarMessageButton(_("Offer Rematch"), 0)) else: message.add_button(InfoBarMessageButton(_("Play Rematch"), 1)) if gamemodel.status in UNDOABLE_STATES and gamemodel.reason in UNDOABLE_REASONS: if gamemodel.ply == 1: message.add_button(InfoBarMessageButton(_("Undo one move"), 2)) elif gamemodel.ply > 1: message.add_button(InfoBarMessageButton(_("Undo two moves"), 2)) def callback (infobar, response): if response == 0: if gamemodel.players[0].__type__ == REMOTE: gamemodel.players[0].offerRematch() else: gamemodel.players[1].offerRematch() elif response == 1: # newGameDialog uses ionest uses gamenanny uses newGameDialog... from pychess.widgets.newGameDialog import createRematch createRematch(gamemodel) elif response == 2: if gamemodel.curplayer.__type__ == LOCAL and gamemodel.ply > 1: offer = Offer(TAKEBACK_OFFER, gamemodel.ply-2) else: offer = Offer(TAKEBACK_OFFER, gamemodel.ply-1) if gamemodel.players[0].__type__ == LOCAL: gamemodel.players[0].emit("offer", offer) else: gamemodel.players[1].emit("offer", offer) message.callback = callback glock.acquire() try: gmwidg.showMessage(message) gmwidg.status("%s %s." % (m1,m2[0].lower()+m2[1:])) if reason == WHITE_ENGINE_DIED: engineDead(gamemodel.players[0], gmwidg) elif reason == BLACK_ENGINE_DIED: engineDead(gamemodel.players[1], gmwidg) finally: glock.release() if (isinstance(gamemodel, ICGameModel) and \ gamemodel.isObservationGame() is False) or \ gamemodel.isEngine2EngineGame(): gamemodel.restart_analyzer(HINT) gamemodel.restart_analyzer(SPY) if not conf.get("hint_mode", False): gamemodel.pause_analyzer(HINT) if not conf.get("spy_mode", False): gamemodel.pause_analyzer(SPY) return False def _set_statusbar (gamewidget, message): assert type(message) is str or type(message) is unicode gamewidget.status(message) def game_paused (gamemodel, gmwidg): s = _("The game is paused") _set_statusbar(gmwidg, s) return False def game_changed (gamemodel, gmwidg): _set_statusbar(gmwidg, "") return False def game_unended (gamemodel, gmwidg): log.debug("gamenanny.game_unended: %s\n" % gamemodel.boards[-1]) glock.acquire() try: gmwidg.removeMessages() finally: glock.release() _set_statusbar(gmwidg, "") return False # Connect game_loaded, game_saved and game_ended to statusbar def game_loaded (gamemodel, uri, gmwidg): if type(uri) in (str, unicode): s = "%s: %s" % (_("Loaded game"), str(uri)) else: s = _("Loaded game") _set_statusbar(gmwidg, s) return False def game_saved (gamemodel, uri, gmwidg): _set_statusbar(gmwidg, "%s: %s" % (_("Saved game"), str(uri))) return False def analyzer_added (gamemodel, analyzer, analyzer_type, gmwidg): s = _("Analyzer started") + ": " + analyzer.name _set_statusbar(gmwidg, s) return False def on_game_started (gamemodel, gmwidg): on_gmwidg_infront(gmwidg) # setup menu items sensitivity # Rotate to human player boardview = gmwidg.board.view if gamemodel.players[1].__type__ == LOCAL: if gamemodel.players[0].__type__ != LOCAL: boardview.rotation = math.pi elif conf.get("autoRotate", True) and \ gamemodel.curplayer == gamemodel.players[1]: boardview.rotation = math.pi # Play set-up sound preferencesDialog.SoundTab.playAction("gameIsSetup") # Connect player offers to statusbar for player in gamemodel.players: if player.__type__ == LOCAL: player.connect("offer", offer_callback, gamemodel, gmwidg) # Start analyzers if any gamemodel.connect("analyzer_added", analyzer_added, gmwidg) if not (isinstance(gamemodel, ICGameModel) and \ gamemodel.isObservationGame() is False) and \ not gamemodel.isEngine2EngineGame(): gamemodel.start_analyzer(HINT) gamemodel.start_analyzer(SPY) if not conf.get("hint_mode", False): gamemodel.pause_analyzer(HINT) if not conf.get("spy_mode", False): gamemodel.pause_analyzer(SPY) return False #=============================================================================== # Player signals #=============================================================================== def offer_callback (player, offer, gamemodel, gmwidg): if gamemodel.status != RUNNING: # If the offer has already been handled by Gamemodel and the game was # drawn, we need to do nothing return message = "" if offer.type == ABORT_OFFER: message = _("You sent an abort offer") elif offer.type == ADJOURN_OFFER: message = _("You sent an adjournment offer") elif offer.type == DRAW_OFFER: message = _("You sent a draw offer") elif offer.type == PAUSE_OFFER: message = _("You sent a pause offer") elif offer.type == RESUME_OFFER: message = _("You sent a resume offer") elif offer.type == TAKEBACK_OFFER: message = _("You sent an undo offer") elif offer.type == HURRY_ACTION: message = _("You asked your opponent to move") _set_statusbar(gmwidg, message) return False #=============================================================================== # Subfunctions #=============================================================================== def engineDead (engine, gmwidg): gmwidg.bringToFront() d = gtk.MessageDialog(type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK) d.set_markup(_("Engine, %s, has died") % repr(engine)) d.format_secondary_text(_("PyChess has lost connection to the engine, probably because it has died.\n\nYou can try to start a new game with the engine, or try to play against another one.")) d.connect("response", lambda d,r: d.hide()) d.show_all() pychess-0.12beta3/lib/pychess/widgets/BoardPreview.py0000755000175000017470000001527312161415524021740 0ustar tamasusers# -*- coding: UTF-8 -*- import os import gtk, gobject from pychess.Utils.const import reprResult, BLACK, FEN_EMPTY from pychess.Utils.Board import Board from pychess.System.protoopen import protoopen, splitUri from pychess.widgets.BoardView import BoardView from pychess.Savers.ChessFile import LoadingError def ellipsize (string, maxlen): if len(string) <= maxlen or maxlen < 4: return string return string[:maxlen-1] + "…" class BoardPreview: def __init__ (self, widgets, fcbutton, opendialog, enddir): self.position = 0 self.gameno = 0 self.filename = None self.chessfile = None self.widgets = widgets self.fcbutton = fcbutton self.enddir = enddir # Treeview self.list = self.widgets["gamesTree"] self.list.set_model(gtk.ListStore(str, str,str,str)) # GTK_SELECTION_BROWSE - exactly one item is always selected self.list.get_selection().set_mode(gtk.SELECTION_BROWSE) self.list.get_selection().connect_after( 'changed', self.on_selection_changed) # Add columns renderer = gtk.CellRendererText() renderer.set_property("xalign",0) self.list.append_column(gtk.TreeViewColumn(None, renderer, text=0)) self.list.append_column(gtk.TreeViewColumn(None, renderer, text=1)) self.list.append_column(gtk.TreeViewColumn(None, renderer, text=2)) renderer = gtk.CellRendererText() renderer.set_property("xalign",1) self.list.append_column(gtk.TreeViewColumn(None, renderer, text=3)) # Connect buttons self.widgets["first_button"].connect("clicked", self.on_first_button) self.widgets["back_button"].connect("clicked", self.on_back_button) self.widgets["forward_button"].connect("clicked", self.on_forward_button) self.widgets["last_button"].connect("clicked", self.on_last_button) # Add the board self.boardview = BoardView(preview=True) self.boardview.set_size_request(170,170) self.widgets["boardPreviewDock"].add(self.boardview) self.boardview.show() self.gamemodel = self.boardview.model self.boardview.gotStarted = True # Connect label showing possition self.boardview.connect('shown_changed', self.shown_changed) self.boardview.autoUpdateShown = False # Add the filechooserbutton self.widgets["fileChooserDock"].add(fcbutton) # Connect doubleclicking a file to on_file_activated fcbutton.connect("file-activated", self.on_file_activated) # Connect the openbutton in the dialog to on_file_activated openbut = opendialog.get_children()[0].get_children()[1].get_children()[0] openbut.connect("clicked", self.on_file_activated) # The first time the button is opened, the player has just opened # his/her file, before we connected the dialog. if self._retrieve_filename(): self.on_file_activated(fcbutton) def on_file_activated (self, *args): filename = self._retrieve_filename() if filename: if filename == self.get_filename(): return self.set_filename(filename) elif self.get_filename(): filename = self.get_filename() else: return if os.path.isdir(filename): return ending = filename[filename.rfind(".")+1:] loader = self.enddir[ending] self.chessfile = chessfile = loader.load(protoopen(filename)) self.list.get_model().clear() for gameno in range(len(chessfile)): names = chessfile.get_player_names (gameno) names = [ellipsize (name, 9) for name in names] result = reprResult[chessfile.get_result (gameno)] result = result.replace("1/2","½") self.list.get_model().append (["%s." % (gameno+1)]+names+[result]) self.lastSel = -1 # The row that was last selected self.list.set_cursor((0,)) def on_selection_changed (self, selection): iter = selection.get_selected()[1] if iter == None: self.gamemodel.boards = [Board(FEN_EMPTY)] del self.gamemodel.moves[:] self.boardview.shown = 0 self.boardview.redraw_canvas() return sel = self.list.get_model().get_path(iter)[0] if sel == self.lastSel: return self.lastSel = sel self.boardview.animationLock.acquire() try: try: self.chessfile.loadToModel(sel, -1, self.gamemodel) except LoadingError, e: #TODO: Pressent this a little nicer print e self.boardview.lastMove = None self.boardview._shown = self.gamemodel.lowply last = self.gamemodel.ply finally: self.boardview.animationLock.release() self.boardview.redraw_canvas() self.boardview.shown = last self.shown_changed(self.boardview, last) def on_first_button (self, button): self.boardview.showFirst() def on_back_button (self, button): self.boardview.showPrev() def on_forward_button (self, button): self.boardview.showNext() def on_last_button (self, button): self.boardview.showLast() def shown_changed (self, boardView, shown): pos = "%d." % (shown/2+1) if shown & 1: pos += ".." self.widgets["posLabel"].set_text(pos) def set_filename (self, filename): asPath = splitUri(filename)[-1] if os.path.isfile(asPath): self.fcbutton.show() if filename != self._retrieve_filename(): self.fcbutton.set_filename(os.path.abspath(asPath)) else: self.fcbutton.set_uri("") self.fcbutton.hide() self.filename = filename def get_filename (self): return self.filename def is_empty (self): return not self.chessfile or not len(self.chessfile) def _retrieve_filename (self): #if self.fcbutton.get_filename(): # return self.fcbutton.get_filename() if self.fcbutton.get_preview_filename(): return self.fcbutton.get_preview_filename() elif self.fcbutton.get_uri(): return self.fcbutton.get_uri()[7:] def get_position (self): return self.boardview.shown def get_gameno (self): iter = self.list.get_selection().get_selected()[1] if iter == None: return -1 return self.list.get_model().get_path(iter)[0] pychess-0.12beta3/lib/pychess/widgets/newGameDialog.py0000644000175000017470000006123712176664540022062 0ustar tamasusersimport os.path import gettext import locale from cStringIO import StringIO from operator import attrgetter from itertools import groupby import gtk from cairo import ImageSurface from gtksourceview2 import Buffer as SourceBuffer from gtksourceview2 import View as SourceView from gtksourceview2 import LanguageManager from pychess.Utils.IconLoader import load_icon from pychess.Utils.GameModel import GameModel from pychess.Utils.TimeModel import TimeModel from pychess.Utils.const import * from pychess.Utils.repr import localReprSign from pychess.Utils.lutils.LBoard import LBoard from pychess.System import uistuff from pychess.System.Log import log from pychess.System import conf from pychess.System.glock import glock_connect_after from pychess.System.prefix import getDataPrefix, isInstalled, addDataPrefix from pychess.Players.engineNest import discoverer from pychess.Players.Human import Human from pychess.widgets import BoardPreview from pychess.widgets import ionest from pychess.widgets import ImageMenu from pychess.Savers import fen, pgn from pychess.Variants import variants from pychess.Variants.normal import NormalChess #=============================================================================== # We init most dialog icons global to make them accessibly to the # Background.Taskers so they have a similar look. #=============================================================================== big_time = gtk.gdk.pixbuf_new_from_file(addDataPrefix("glade/stock_alarm.svg")) big_people = load_icon(48, "stock_people", "system-users") iwheels = load_icon(24, "gtk-execute") ipeople = load_icon(24, "stock_people", "system-users") inotebook = load_icon(24, "stock_notebook", "computer") speople = load_icon(16, "stock_people", "system-users") snotebook = load_icon(16, "stock_notebook", "computer") weather_icons = ("clear", "clear-night", "few-clouds", "few-clouds-night", "fog", "overcast", "severe-alert", "showers-scattered", "showers", "storm") skillToIcon = {} # Used by TaskerManager. Put here to help synchronization skillToIconLarge = {} for i, icon in enumerate(weather_icons, start=1): skillToIcon[2*i-1] = load_icon(16, "weather-%s" % icon) skillToIcon[2*i] = load_icon(16, "weather-%s" % icon) skillToIconLarge[2*i-1] = load_icon(48, "weather-%s" % icon) skillToIconLarge[2*i] = load_icon(48, "weather-%s" % icon) playerItems = [] smallPlayerItems = [] analyzerItems = [] def createPlayerUIGlobals (discoverer): global playerItems global smallPlayerItems global analyzerItems playerItems = [] smallPlayerItems = [] analyzerItems = [] for variantClass in variants.values(): playerItems += [ [(ipeople, _("Human Being"), "")] ] smallPlayerItems += [ [(speople, _("Human Being"), "")] ] for engine in discoverer.getEngines(): name = engine["name"] c = discoverer.getCountry(engine) path = addDataPrefix("flags/%s.png" % c) if c and os.path.isfile(path): flag_icon = gtk.gdk.pixbuf_new_from_file(path) else: path = addDataPrefix("flags/unknown.png") flag_icon = gtk.gdk.pixbuf_new_from_file(path) for variant in discoverer.getEngineVariants(engine): playerItems[variant] += [(flag_icon, name)] smallPlayerItems[variant] += [(snotebook, name)] if discoverer.is_analyzer(engine): analyzerItems.append((flag_icon, name)) discoverer.connect("all_engines_discovered", createPlayerUIGlobals) #=============================================================================== # GameInitializationMode is the super class of new game dialogs. Dialogs include # the standard new game dialog, the load file dialog and the enter notation # dialog. #=============================================================================== class _GameInitializationMode: @classmethod def _ensureReady (cls): if not hasattr(_GameInitializationMode, "superhasRunInit"): _GameInitializationMode._init() _GameInitializationMode.superhasRunInit = True if not hasattr(cls, "hasRunInit"): cls._init() cls.hasRunInit = True @classmethod def _init (cls): cls.widgets = uistuff.GladeWidgets ("newInOut.glade") uistuff.createCombo(cls.widgets["whitePlayerCombobox"]) uistuff.createCombo(cls.widgets["blackPlayerCombobox"]) cls.widgets["playersIcon"].set_from_pixbuf(big_people) cls.widgets["timeIcon"].set_from_pixbuf(big_time) def on_playerCombobox_changed (widget, skillHbox): skillHbox.props.visible = widget.get_active() > 0 cls.widgets["whitePlayerCombobox"].connect( "changed", on_playerCombobox_changed, cls.widgets["skillHbox1"]) cls.widgets["blackPlayerCombobox"].connect( "changed", on_playerCombobox_changed, cls.widgets["skillHbox2"]) cls.widgets["whitePlayerCombobox"].set_active(0) cls.widgets["blackPlayerCombobox"].set_active(1) def on_skill_changed (scale, image): image.set_from_pixbuf(skillToIcon[int(scale.get_value())]) cls.widgets["skillSlider1"].connect("value-changed", on_skill_changed, cls.widgets["skillIcon1"]) cls.widgets["skillSlider2"].connect("value-changed", on_skill_changed, cls.widgets["skillIcon2"]) cls.widgets["skillSlider1"].set_value(3) cls.widgets["skillSlider2"].set_value(3) cls.__initTimeRadio(_("Blitz"), "ngblitz", cls.widgets["blitzRadio"], cls.widgets["configImageBlitz"], 5, 0) cls.__initTimeRadio(_("Rapid"), "ngrapid", cls.widgets["rapidRadio"], cls.widgets["configImageRapid"], 15, 5) cls.__initTimeRadio(_("Normal"), "ngnormal", cls.widgets["normalRadio"], cls.widgets["configImageNormal"], 40, 15) cls.__initVariantRadio("ngvariant1", cls.widgets["playVariant1Radio"], cls.widgets["configImageVariant1"], FISCHERRANDOMCHESS) cls.__initVariantRadio("ngvariant2", cls.widgets["playVariant2Radio"], cls.widgets["configImageVariant2"], LOSERSCHESS) def updateCombos(*args): if cls.widgets["playNormalRadio"].get_active(): variant = NORMALCHESS elif cls.widgets["playVariant1Radio"].get_active(): variant = conf.get("ngvariant1", FISCHERRANDOMCHESS) else: variant = conf.get("ngvariant2", LOSERSCHESS) variant1 = conf.get("ngvariant1", FISCHERRANDOMCHESS) cls.widgets["playVariant1Radio"].set_tooltip_text(variants[variant1].__desc__) variant2 = conf.get("ngvariant2", LOSERSCHESS) cls.widgets["playVariant2Radio"].set_tooltip_text(variants[variant2].__desc__) data = [(item[0], item[1]) for item in playerItems[variant]] uistuff.updateCombo(cls.widgets["blackPlayerCombobox"], data) uistuff.updateCombo(cls.widgets["whitePlayerCombobox"], data) glock_connect_after(discoverer, "all_engines_discovered", updateCombos) updateCombos(discoverer) conf.notify_add("ngvariant1", updateCombos) conf.notify_add("ngvariant2", updateCombos) cls.widgets["playNormalRadio"].connect("toggled", updateCombos) cls.widgets["playNormalRadio"].set_tooltip_text(variants[NORMALCHESS].__desc__) cls.widgets["playVariant1Radio"].connect("toggled", updateCombos) variant1 = conf.get("ngvariant1", FISCHERRANDOMCHESS) cls.widgets["playVariant1Radio"].set_tooltip_text(variants[variant1].__desc__) cls.widgets["playVariant2Radio"].connect("toggled", updateCombos) variant2 = conf.get("ngvariant2", LOSERSCHESS) cls.widgets["playVariant2Radio"].set_tooltip_text(variants[variant2].__desc__) # The "variant" has to come before players, because the engine positions # in the user comboboxes can be different in different variants for key in ("whitePlayerCombobox", "blackPlayerCombobox", "skillSlider1", "skillSlider2", "notimeRadio", "blitzRadio", "rapidRadio", "normalRadio", "playNormalRadio", "playVariant1Radio", "playVariant2Radio"): uistuff.keep(cls.widgets[key], key) # We don't want the dialog to deallocate when closed. Rather we hide # it on respond cls.widgets["newgamedialog"].connect("delete_event", lambda *a: True) @classmethod def __initTimeRadio (cls, name, id, radiobutton, configImage, defmin, defgain): minSpin = gtk.SpinButton(gtk.Adjustment(1,1,240,1)) gainSpin = gtk.SpinButton(gtk.Adjustment(0,-60,60,1)) cls.widgets["%s min" % id] = minSpin cls.widgets["%s gain" % id] = gainSpin uistuff.keep(minSpin, "%s min" % id, first_value=defmin) uistuff.keep(gainSpin, "%s gain" % id, first_value=defgain) table = gtk.Table(2, 2) table.props.row_spacing = 3 table.props.column_spacing = 12 label = gtk.Label(_("Minutes:")) label.props.xalign = 0 table.attach(label, 0, 1, 0, 1) table.attach(minSpin, 1, 2, 0, 1) label = gtk.Label(_("Gain:")) label.props.xalign = 0 table.attach(label, 0, 1, 1, 2) table.attach(gainSpin, 1, 2, 1, 2) alignment = gtk.Alignment(1,1,1,1) alignment.set_padding(6,6,12,12) alignment.add(table) ImageMenu.switchWithImage(configImage, alignment) def updateString (spin): minutes = minSpin.get_value_as_int() gain = gainSpin.get_value_as_int() if gain > 0: radiobutton.set_label(_("%(name)s %(minutes)d min + %(gain)d sec/move") % { 'name': name, 'minutes': minutes, 'gain': gain}) elif gain < 0: radiobutton.set_label(_("%(name)s %(minutes)d min %(gain)d sec/move") % { 'name': name, 'minutes': minutes, 'gain': gain}) else: radiobutton.set_label(_("%(name)s %(minutes)d min") % { 'name': name, 'minutes': minutes}) minSpin.connect("value-changed", updateString) gainSpin.connect("value-changed", updateString) updateString(None) @classmethod def __initVariantRadio (cls, confid, radiobutton, configImage, default): model = gtk.TreeStore(str) treeview = gtk.TreeView(model) treeview.set_headers_visible(False) treeview.append_column(gtk.TreeViewColumn(None, gtk.CellRendererText(), text=0)) alignment = gtk.Alignment(1,1,1,1) alignment.set_padding(6,6,12,12) alignment.add(treeview) ImageMenu.switchWithImage(configImage, alignment) groupNames = {VARIANTS_BLINDFOLD: _("Blindfold"), VARIANTS_ODDS: _("Odds"), VARIANTS_SHUFFLE: _("Shuffle"), VARIANTS_OTHER: _("Other")} specialVariants = [v for v in variants.values() if v != NormalChess and v.board.variant not in UNSUPPORTED] groups = groupby(specialVariants, attrgetter("variant_group")) pathToVariant = {} variantToPath = {} for i, (id, group) in enumerate(groups): iter = model.append(None, (groupNames[id],)) for variant in group: subiter = model.append(iter, (variant.name,)) path = model.get_path(subiter) pathToVariant[path] = variant.board.variant variantToPath[variant.board.variant] = path treeview.expand_row((i,), True) selection = treeview.get_selection() selection.set_mode(gtk.SELECTION_BROWSE) selection.set_select_function(lambda path: len(path) > 1) selection.select_path(variantToPath[conf.get(confid, default)]) def callback (selection): model, iter = selection.get_selected() if iter: radiobutton.set_label("%s" % model.get(iter, 0) + _(" chess")) path = model.get_path(iter) variant = pathToVariant[path] conf.set(confid, variant) selection.connect("changed", callback) callback(selection) @classmethod def _generalRun (cls, callback): def onResponse(dialog, res): cls.widgets["newgamedialog"].hide() cls.widgets["newgamedialog"].disconnect(handlerId) if res != gtk.RESPONSE_OK: return # Find variant if cls.widgets["playNormalRadio"].get_active(): variant_index = NORMALCHESS elif cls.widgets["playVariant1Radio"].get_active(): variant_index = conf.get("ngvariant1", FISCHERRANDOMCHESS) else: variant_index = conf.get("ngvariant2", LOSERSCHESS) variant = variants[variant_index] # Find time if cls.widgets["notimeRadio"].get_active(): secs = 0 incr = 0 elif cls.widgets["blitzRadio"].get_active(): secs = cls.widgets["ngblitz min"].get_value_as_int()*60 incr = cls.widgets["ngblitz gain"].get_value_as_int() elif cls.widgets["rapidRadio"].get_active(): secs = cls.widgets["ngrapid min"].get_value_as_int()*60 incr = cls.widgets["ngrapid gain"].get_value_as_int() elif cls.widgets["normalRadio"].get_active(): secs = cls.widgets["ngnormal min"].get_value_as_int()*60 incr = cls.widgets["ngnormal gain"].get_value_as_int() # Find players player0 = cls.widgets["whitePlayerCombobox"].get_active() player0 = playerItems[0].index(playerItems[variant_index][player0]) diffi0 = int(cls.widgets["skillSlider1"].get_value()) player1 = cls.widgets["blackPlayerCombobox"].get_active() player1 = playerItems[0].index(playerItems[variant_index][player1]) diffi1 = int(cls.widgets["skillSlider2"].get_value()) # Prepare players for ionest playertups = [] for i, playerno, diffi, color in ((0, player0, diffi0, WHITE), (1, player1, diffi1, BLACK)): if playerno > 0: engine = discoverer.getEngineN (playerno-1) name = discoverer.getName(engine) playertups.append((ARTIFICIAL, discoverer.initPlayerEngine, [engine, color, diffi, variant, secs, incr], name)) else: if not playertups or playertups[0][0] != LOCAL: name = conf.get("firstName", _("You")) else: name = conf.get("secondName", _("Guest")) playertups.append((LOCAL, Human, (color, name), name)) # Set forcePonderOff initPlayerEngine param True in engine-engine games if playertups[0][0] == ARTIFICIAL and playertups[1][0] == ARTIFICIAL: playertups[0][2].append(True) playertups[1][2].append(True) if secs > 0: timemodel = TimeModel (secs, incr) else: timemodel = None gamemodel = GameModel (timemodel, variant) callback(gamemodel, playertups[0], playertups[1]) handlerId = cls.widgets["newgamedialog"].connect("response", onResponse) cls.widgets["newgamedialog"].show() @classmethod def _hideOthers (cls): for extension in ("loadsidepanel", "enterGameNotationSidePanel", "enterGameNotationSidePanel"): cls.widgets[extension].hide() ################################################################################ # NewGameMode # ################################################################################ class NewGameMode (_GameInitializationMode): @classmethod def _init (cls): # We have to override this, so the GameInitializationMode init method # isn't called twice pass @classmethod def run (cls): cls._ensureReady() if cls.widgets["newgamedialog"].props.visible: cls.widgets["newgamedialog"].present() return cls._hideOthers() cls.widgets["newgamedialog"].set_title(_("New Game")) cls._generalRun(ionest.generalStart) ################################################################################ # LoadFileExtension # ################################################################################ class LoadFileExtension (_GameInitializationMode): @classmethod def _init (cls): opendialog, savedialog, enddir, savecombo, savers = ionest.getOpenAndSaveDialogs() cls.filechooserbutton = gtk.FileChooserButton(opendialog) cls.loadSidePanel = BoardPreview.BoardPreview(cls.widgets, cls.filechooserbutton, opendialog, enddir) @classmethod def run (cls, uri=None): cls._ensureReady() if cls.widgets["newgamedialog"].props.visible: cls.widgets["newgamedialog"].present() return if not uri: res = ionest.opendialog.run() ionest.opendialog.hide() if res != gtk.RESPONSE_ACCEPT: return else: if not uri[uri.rfind(".")+1:] in ionest.enddir: log.info("Ignoring strange file: %s" % uri) return cls.loadSidePanel.set_filename(uri) cls.filechooserbutton.emit("file-activated") cls._hideOthers() cls.widgets["newgamedialog"].set_title(_("Open Game")) cls.widgets["loadsidepanel"].show() def _callback (gamemodel, p0, p1): if not cls.loadSidePanel.is_empty(): uri = cls.loadSidePanel.get_filename() loader = ionest.enddir[uri[uri.rfind(".")+1:]] position = cls.loadSidePanel.get_position() gameno = cls.loadSidePanel.get_gameno() ionest.generalStart(gamemodel, p0, p1, (uri, loader, gameno, position)) else: ionest.generalStart(gamemodel, p0, p1) cls._generalRun(_callback) ################################################################################ # EnterNotationExtension # ################################################################################ class EnterNotationExtension (_GameInitializationMode): @classmethod def _init (cls): def callback (widget, allocation): cls.widgets["enterGameNotationFrame"].set_size_request( 223, allocation.height-4) cls.widgets["enterGameNotationSidePanel"].connect_after("size-allocate", callback) flags = [] if isInstalled(): path = gettext.find("pychess") else: path = gettext.find("pychess", localedir=addDataPrefix("lang")) if path: loc = locale.getdefaultlocale()[0][-2:].lower() flags.append(addDataPrefix("flags/%s.png" % loc)) flags.append(addDataPrefix("flags/us.png")) cls.ib = ImageButton(flags) cls.widgets["imageButtonDock"].add(cls.ib) cls.ib.show() cls.sourcebuffer = SourceBuffer() sourceview = SourceView(cls.sourcebuffer) cls.widgets["scrolledwindow6"].add(sourceview) sourceview.show() # Pgn format does not allow tabulator sourceview.set_insert_spaces_instead_of_tabs(True) sourceview.set_wrap_mode(gtk.WRAP_WORD) man = LanguageManager() # Init new version if hasattr(man.props, 'search_path'): path = os.path.join(getDataPrefix(),"gtksourceview-1.0/language-specs") man.props.search_path = man.props.search_path + [path] if 'pgn' in man.get_language_ids(): lang = man.get_language('pgn') cls.sourcebuffer.set_language(lang) else: log.warn("Unable to load pgn syntax-highlighting.") cls.sourcebuffer.set_highlight_syntax(True) # Init old version else: os.environ["XDG_DATA_DIRS"] = getDataPrefix()+":/usr/share/" man = LanguageManager() for lang in man.get_available_languages(): if lang.get_name() == "PGN": cls.sourcebuffer.set_language(lang) break else: log.warn("Unable to load pgn syntax-highlighting.") cls.sourcebuffer.set_highlight(True) @classmethod def run (cls): cls._ensureReady() if cls.widgets["newgamedialog"].props.visible: cls.widgets["newgamedialog"].present() return cls._hideOthers() cls.widgets["newgamedialog"].set_title(_("Enter Game")) cls.widgets["enterGameNotationSidePanel"].show() def _callback (gamemodel, p0, p1): text = cls.sourcebuffer.get_text( cls.sourcebuffer.get_start_iter(), cls.sourcebuffer.get_end_iter()) # Test if the ImageButton has two layers and is set on the local language if len(cls.ib.surfaces) == 2 and cls.ib.current == 0: # 2 step used to avoid backtranslating # (local and english piece letters can overlap) for i, sign in enumerate(localReprSign[1:]): if sign.strip(): text = text.replace(sign, FAN_PIECES[0][i+1]) for i, sign in enumerate(FAN_PIECES[0][1:7]): text = text.replace(sign, reprSign[i+1]) text = str(text) # First we try if it's just a FEN string try: LBoard(NORMALCHESS).applyFen(text) loadType = fen except: loadType = pgn ionest.generalStart(gamemodel, p0, p1, (StringIO(text), loadType, 0, -1)) cls._generalRun(_callback) class ImageButton(gtk.DrawingArea): def __init__ (self, imagePaths): gtk.DrawingArea.__init__(self) self.set_events(gtk.gdk.EXPOSURE_MASK | gtk.gdk.BUTTON_PRESS_MASK) self.connect("expose-event", self.draw) self.connect("button_press_event", self.buttonPress) self.surfaces = [ImageSurface.create_from_png(path) for path in imagePaths] self.current = 0 width, height = self.surfaces[0].get_width(), self.surfaces[0].get_height() self.size = gtk.gdk.Rectangle(0, 0, width, height) self.set_size_request(width, height) def draw (self, self_, event): context = self.window.cairo_create() context.rectangle (event.area.x, event.area.y, event.area.width, event.area.height) context.set_source_surface(self.surfaces[self.current], 0, 0) context.fill() def buttonPress (self, self_, event): if event.button == 1 and event.type == gtk.gdk.BUTTON_PRESS: self.current = (self.current + 1) % len(self.surfaces) self.window.invalidate_rect(self.size, True) self.window.process_updates(True) def createRematch (gamemodel): """ If gamemodel contains only LOCAL or ARTIFICIAL players, this starts a new game, based on the info in gamemodel """ if gamemodel.timemodel: secs = gamemodel.timemodel.intervals[0][WHITE] gain = gamemodel.timemodel.gain newgamemodel = GameModel(TimeModel(secs, gain), gamemodel.variant) else: secs = 0 gain = 0 newgamemodel = GameModel(variant=gamemodel.variant) wp = gamemodel.players[WHITE] bp = gamemodel.players[BLACK] if wp.__type__ == LOCAL: player1tup = (wp.__type__, wp.__class__, (BLACK, repr(wp)), repr(wp)) if bp.__type__ == LOCAL: player0tup = (bp.__type__, bp.__class__, (WHITE, repr(wp)), repr(bp)) else: engine = discoverer.getEngineByMd5(bp.md5) player0tup = (ARTIFICIAL, discoverer.initPlayerEngine, (engine, WHITE, bp.strength, gamemodel.variant, secs, gain), repr(bp)) else: player0tup = (bp.__type__, bp.__class__, (WHITE, repr(bp)), repr(bp)) engine = discoverer.getEngineByMd5(wp.md5) player1tup = (ARTIFICIAL, discoverer.initPlayerEngine, (engine, BLACK, wp.strength, gamemodel.variant, secs, gain), repr(wp)) ionest.generalStart(newgamemodel, player0tup, player1tup) pychess-0.12beta3/lib/pychess/widgets/Background.py0000755000175000017470000000522012161415524021415 0ustar tamasusersfrom os import path import gtk import cairo from pychess.System.prefix import addDataPrefix, addUserCachePrefix CLEARPATH = addDataPrefix("glade/clear.png") surface = None def giveBackground (widget): widget.connect("expose_event", expose) widget.connect("style-set", newtheme) def expose (widget, event): cr = widget.window.cairo_create() cr.rectangle (event.area.x, event.area.y, event.area.width, event.area.height) if not surface: newtheme(widget, None) cr.set_source_surface(surface, 0, 0) pattern = cr.get_source() pattern.set_extend(cairo.EXTEND_REPEAT) cr.fill() def newtheme (widget, oldstyle): global surface lnewcolor = widget.get_style().bg[gtk.STATE_NORMAL] dnewcolor = widget.get_style().dark[gtk.STATE_NORMAL] if oldstyle: loldcolor = oldstyle.bg[gtk.STATE_NORMAL] doldcolor = oldstyle.dark[gtk.STATE_NORMAL] if lnewcolor.red == loldcolor.red and \ lnewcolor.green == loldcolor.green and \ lnewcolor.blue == loldcolor.blue and \ dnewcolor.red == doldcolor.red and \ dnewcolor.green == doldcolor.green and \ dnewcolor.blue == doldcolor.blue: return colors = [ lnewcolor.red/256, lnewcolor.green/256, lnewcolor.blue/256, dnewcolor.red/256, dnewcolor.green/256, dnewcolor.blue/256 ] # Check if a cache has been saved temppng = addUserCachePrefix("temp.png") if path.isfile(temppng): f = open(temppng, "rb") # Check if the cache was made while using the same theme if [ord(c) for c in f.read(6)] == colors: surface = cairo.ImageSurface.create_from_png(f) return # Get mostly transparant shadowy image imgsurface = cairo.ImageSurface.create_from_png(CLEARPATH) AVGALPHA = 108/255. surface = cairo.ImageSurface(cairo.FORMAT_RGB24, imgsurface.get_width(), imgsurface.get_height()) ctx = cairo.Context (surface) if lnewcolor.blue-dnewcolor.blue > 0: a = dnewcolor.red/(3*(lnewcolor.blue-dnewcolor.blue)*(1-AVGALPHA)) ctx.set_source_rgb( lnewcolor.red/65535./2 + dnewcolor.red/65535.*a/2, lnewcolor.green/65535./2 + dnewcolor.green/65535.*a/2, lnewcolor.blue/65535./2 + dnewcolor.blue/65535.*a/2) ctx.paint() ctx.set_source_surface(imgsurface, 0, 0) ctx.paint_with_alpha(.8) # Save a cache for later use. Save 'newcolor' in the frist three pixels # to check for theme changes between two instances f = open(temppng, "wb") for color in colors: f.write(chr(color)) surface.write_to_png(f) pychess-0.12beta3/lib/pychess/widgets/InfoBar.py0000644000175000017470000001416112161415524020657 0ustar tamasusersimport gobject import gtk class InfoBarMessageButton (gobject.GObject): def __init__(self, text, response_id, sensitive=True, tooltip=""): gobject.GObject.__init__(self) self.text = text self.response_id = response_id self.sensitive = sensitive self.tooltip = tooltip self._sensitive_cid = None self._tooltip_cid = None self._button = None def get_sensitive (self): return self._sensitive def set_sensitive (self, sensitive): self._sensitive = sensitive sensitive = gobject.property(get_sensitive, set_sensitive) def get_tooltip (self): return self._tooltip def set_tooltip (self, tooltip): self._tooltip = tooltip tooltip = gobject.property(get_tooltip, set_tooltip) class InfoBarMessage (gobject.GObject): __gsignals__ = { "dismissed": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), } def __init__ (self, message_type, content, callback): gobject.GObject.__init__(self) self.type = message_type container = gtk.HBox() container.pack_start(content, expand=False, fill=False) self.content = container self.callback = callback self.buttons = [] self._dismissed_cid = None def add_button (self, button): """ All buttons must be added before doing InfoBar.push_message() """ if not isinstance(button, InfoBarMessageButton): raise TypeError("Not an InfoBarMessageButton: %s" % repr(button)) self.buttons.append(button) def dismiss (self): self.emit("dismissed") class InfoBar (gtk.InfoBar): """ This is a gtk.InfoBar which manages messages pushed onto it via push_message() like a stack. If/when the current message at the top of the stack is responded to or dismissed by the user, the next message in the stack waiting for a response is displayed. Messages that aren't applicable anymore can be removed from anywhere in the InfoBar message stack by calling message.dismiss() """ def __init__ (self, *args): gtk.InfoBar.__init__(self, *args) self.messages = [] self.response_cid = None self.connect_after("response", self._response_cb) def _remove_message (self, message): if message.handler_is_connected(message._dismissed_cid): message.disconnect(message._dismissed_cid) message._dismissed_cid = None for button in message.buttons: if button.handler_is_connected(button._sensitive_cid): button.disconnect(button._sensitive_cid) button._sensitive_cid = None if button.handler_is_connected(button._tooltip_cid): button.disconnect(button._tooltip_cid) button._tooltip_cid = None def _message_dismissed_cb (self, message): try: shown_message = self.messages[-1] except IndexError: shown_message = None if message == shown_message: self.response(gtk.RESPONSE_CANCEL) else: self._remove_message(message) self.messages.remove(message) return False def _button_sensitive_cb (self, button, property, message): try: shown_message = self.messages[-1] except IndexError: return if message == shown_message: self.set_response_sensitive(button.response_id, button.sensitive) return False def _button_tooltip_cb (self, button, property, message): try: shown_message = self.messages[-1] except IndexError: return if message == shown_message and button._button is not None: button._button.set_property("tooltip-text", button.tooltip) return False def _response_cb (self, infobar, response): try: shown_message = self.messages.pop() except IndexError: pass else: self._unload_message(shown_message) self._remove_message(shown_message) try: cur_message = self.messages[-1] except IndexError: self.hide() else: self._load_message(cur_message) return False def _unload_message (self, message): if self.response_cid is not None and \ self.handler_is_connected(self.response_cid): self.disconnect(self.response_cid) self.response_cid = None for button in message.buttons: button._button = None def _load_message (self, message): for container in (self.get_action_area(), self.get_content_area()): for widget in container: container.remove(widget) self.set_message_type(message.type) self.get_content_area().add(message.content) for button in message.buttons: button._button = self.add_button(button.text, button.response_id) button._sensitive_cid = button.connect( "notify::sensitive", self._button_sensitive_cb, message) button._tooltip_cid = button.connect( "notify::tooltip", self._button_tooltip_cb, message) self._button_sensitive_cb(button, None, message) self._button_tooltip_cb(button, None, message) if message.callback: self.response_cid = self.connect("response", message.callback) def push_message (self, message): if not isinstance(message, InfoBarMessage): raise TypeError("Not of type InfoBarMessage: %s" % repr(message)) try: shown_message = self.messages[-1] except IndexError: pass else: self._unload_message(shown_message) self.messages.append(message) self._load_message(message) message._dismissed_cid = message.connect("dismissed", self._message_dismissed_cb) self.show_all() pychess-0.12beta3/lib/pychess/widgets/SpotGraph.py0000755000175000017470000004125112161415524021251 0ustar tamasusersimport math ceil = lambda f: int(math.ceil(f)) from gobject import * import gtk import cairo import pango line = 10 curve = 60 dotSmall = 14 dotLarge = 24 lineprc = 1/7. hpadding = 5 vpadding = 3 class SpotGraph (gtk.EventBox): __gsignals__ = { 'spotClicked' : (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)) } def __init__ (self): gtk.EventBox.__init__(self) self.connect("expose_event", self.expose) self.typeColors = [[[85, 152, 215], [59, 106, 151]], [[115, 210, 22], [78, 154, 6]]] for type in self.typeColors: for color in type: color[0] = color[0]/255. color[1] = color[1]/255. color[2] = color[2]/255. self.add_events( gtk.gdk.LEAVE_NOTIFY_MASK | gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK ) self.connect("button_press_event", self.button_press) self.connect("button_release_event", self.button_release) self.connect("motion_notify_event", self.motion_notify) self.connect("leave_notify_event", self.motion_notify) self.connect("size-allocate", self.size_allocate) self.cords = [] self.hovered = None self.pressed = False self.spots = {} self.spotQueue = [] # For spots added prior to widget allocation self.xmarks = [] self.ymarks = [] self.set_visible_window(False) ############################################################################ # Drawing # ############################################################################ def redraw_canvas(self, rect=None): if self.window: if not rect: alloc = self.get_allocation() rect = (0, 0, alloc.width, alloc.height) rect = gtk.gdk.Rectangle(*map(int,rect)) self.window.invalidate_rect(rect, True) self.window.process_updates(True) def expose(self, widget, event): context = widget.window.cairo_create() self.draw(context, event.area) return False def draw (self, context, r): alloc = self.get_allocation() width = alloc.width height = alloc.height #------------------------------------------------------ Paint side ruler context.move_to(alloc.x+line, alloc.y+line) context.rel_line_to(0, height-line*2-curve) context.rel_curve_to(0, curve, 0, curve, curve, curve) context.rel_line_to(width-line*2-curve, 0) context.set_line_width(line) context.set_line_cap(cairo.LINE_CAP_ROUND) state = self.state == gtk.STATE_NORMAL and gtk.STATE_PRELIGHT or self.state context.set_source_color(self.get_style().dark[state]) context.stroke() #------------------------------------------------ Paint horizontal marks for x, title in self.xmarks: context.set_source_color(self.get_style().fg[self.state]) context.set_font_size(12) x, y = self.prcToPix (x, 1) context.move_to (x+line/2., y-line/2.) context.rotate(-math.pi/2) context.show_text(title) context.rotate(math.pi/2) context.set_source_color(self.get_style().bg[self.state]) context.move_to (x-line/2., y) context.rel_curve_to (6, 0, 6, line, 6, line) context.rel_curve_to (0, -line, 6, -line, 6, -line) context.close_path() context.fill() #-------------------------------------------------- Paint vertical marks for y, title in self.ymarks: context.set_source_color(self.get_style().fg[self.state]) context.set_font_size(12) x, y = self.prcToPix (0, y) context.move_to (x+line/2., y+line/2.) context.show_text(title) context.set_source_color(self.get_style().bg[self.state]) context.move_to (x, y-line/2.) context.rel_curve_to (0, 6, -line, 6, -line, 6) context.rel_curve_to (line, 0, line, 6, line, 6) context.close_path() context.fill() #----------------------------------------------------------- Paint spots context.set_line_width(dotSmall*lineprc) for x, y, type, name, text in self.spots.values(): context.set_source_rgb(*self.typeColors[type][0]) if self.hovered and name == self.hovered[3]: continue x, y = self.prcToPix (x, y) context.arc(x, y, dotSmall/(1+lineprc)/2., 0, 2 * math.pi) context.fill_preserve() context.set_source_rgb(*self.typeColors[type][1]) context.stroke() #--------------------------------------------------- Paint hovered spots context.set_line_width(dotLarge*lineprc) if self.hovered: x, y, type, name, text = self.hovered x, y = self.prcToPix (x, y) if not self.pressed: context.set_source_rgb(*self.typeColors[type][0]) else: context.set_source_rgb(*self.typeColors[type][1]) context.arc(x, y, dotLarge/(1+lineprc)/2., 0, 2 * math.pi) context.fill_preserve() context.set_source_rgb(*self.typeColors[type][1]) context.stroke() x, y, width, height = self.getTextBounds(self.hovered) self.get_style().paint_flat_box (self.window, gtk.STATE_NORMAL, gtk.SHADOW_NONE, r, self, "tooltip", int(x-hpadding), int(y-vpadding), ceil(width+hpadding*2), ceil(height+vpadding*2)) context.move_to(x, y) context.set_source_color(self.get_style().fg[self.state]) context.show_layout(self.create_pango_layout(text)) ############################################################################ # Events # ############################################################################ def button_press (self, widget, event): alloc = self.get_allocation() self.cords = [event.x+alloc.x, event.y+alloc.y] self.pressed = True if self.hovered: self.redraw_canvas(self.getBounds(self.hovered)) def button_release (self, widget, event): alloc = self.get_allocation() self.cords = [event.x+alloc.x, event.y+alloc.y] self.pressed = False if self.hovered: self.redraw_canvas(self.getBounds(self.hovered)) if self.pointIsOnSpot (event.x+alloc.x, event.y+alloc.y, self.hovered): self.emit("spotClicked", self.hovered[3]) def motion_notify (self, widget, event): alloc = self.get_allocation() self.cords = [event.x+alloc.x, event.y+alloc.y] spot = self.getSpotAtPoint (*self.cords) if self.hovered and spot == self.hovered: return if self.hovered: bounds = self.getBounds(self.hovered) self.hovered = None self.redraw_canvas(bounds) if spot: self.hovered = spot self.redraw_canvas(self.getBounds(self.hovered)) def size_allocate (self, widget, allocation): assert self.get_allocation().width > 1 for spot in self.spotQueue: self.addSpot(*spot) del self.spotQueue[:] ############################################################################ # Interaction # ############################################################################ def addSpot (self, name, text, x0, y0, type=0): """ x and y are in % from 0 to 1 """ assert type in range(len(self.typeColors)) if self.get_allocation().width <= 1: self.spotQueue.append((name, text, x0, y0, type)) return x1, y1 = self.getNearestFreeNeighbourHexigon(x0, 1-y0) spot = (x1, y1, type, name, text) self.spots[name] = spot if not self.hovered and self.cords and \ self.pointIsOnSpot (self.cords[0], self.cords[1], spot): self.hovered = spot self.redraw_canvas(self.getBounds(spot)) def removeSpot (self, name): if not name in self.spots: return spot = self.spots.pop(name) bounds = self.getBounds(spot) if spot == self.hovered: self.hovered = None self.redraw_canvas(bounds) def clearSpots (self): self.hovered = None self.spots.clear() self.redraw_canvas() self.redraw_canvas() def addXMark (self, x, title): self.xmarks.append( (x, title) ) def addYMark (self, y, title): self.ymarks.append( (1-y, title) ) ############################################################################ # Internal stuff # ############################################################################ def getTextBounds (self, spot): x, y, type, name, text = spot x, y = self.prcToPix (x, y) alloc = self.get_allocation() width = alloc.width height = alloc.height extends = self.create_pango_layout(text).get_extents() scale = float(pango.SCALE) x_bearing, y_bearing, twidth, theight = [e/scale for e in extends[1]] tx = x - x_bearing + dotLarge/2. ty = y - y_bearing - theight - dotLarge/2. if tx + twidth > width and x - x_bearing - twidth - dotLarge/2. > alloc.x: tx = x - x_bearing - twidth - dotLarge/2. if ty < alloc.y: ty = y - y_bearing + dotLarge/2. return (tx, ty, twidth, theight) def join (self, r0, r1): x1 = min(r0[0], r1[0]) x2 = max(r0[0]+r0[2], r1[0]+r1[2]) y1 = min(r0[1], r1[1]) y2 = max(r0[1]+r0[3], r1[1]+r1[3]) return (x1, y1, x2 - x1, y2 - y1) def getBounds (self, spot): x, y, type, name, text = spot x, y = self.prcToPix (x, y) if spot == self.hovered: size = dotLarge else: size = dotSmall bounds = (x-size/2.-1, y-size/2.-1, size+2, size+2) if spot == self.hovered: x, y, w, h = self.getTextBounds(spot) tbounds = (x-hpadding, y-vpadding, w+hpadding*2+1, h+vpadding*2+1) return self.join(bounds, tbounds) return bounds def getNearestFreeNeighbourHexigon (self, xorg, yorg): """ This method performs an hexigon search for an empty place to put a new dot. """ x, y = self.prcToPix (xorg, yorg) # Start by testing current spot if self.isEmpty (x, y): return xorg, yorg directions = [(math.cos((i+2)*math.pi/3), math.sin((i+2)*math.pi/3)) for i in xrange(6)] level = 1 while True: x += dotSmall for dx, dy in directions: for i in xrange(level): if self.isEmpty (x, y): return self.pixToPrc (x, y) x += dx*dotSmall y += dy*dotSmall level += 1 def getNearestFreeNeighbourArchi (self, xorg, yorg): """ This method performs an archimedes-spircal search for an empty place to put a new dot. http://en.wikipedia.org/wiki/Archimedean_spiral """ xorg, yorg = self.prcToPix (xorg, yorg) # Start by testing current spot if self.isEmpty (xorg, yorg): return self.pixToPrc (xorg, yorg) r = 0 while True: # This is an approx to the equation # cos((r-s)/(2pi)) = (r^2+s^2-1)/(2*r*s) # which gives the next point on the spiral 1 away. r = (4*math.pi**3*r + r**2 + math.sqrt(16*math.pi**6 + 8*math.pi**3*r + r**4)) / (4*math.pi**3 + 2*r) x = r*math.cos(r)/(4*math.pi)*dotSmall + xorg y = r*math.sin(r)/(4*math.pi)*dotSmall + yorg if self.isEmpty (x, y): return self.pixToPrc (x, y) def getNearestFreeNeighbourSquare (self, xorg, yorg): """ This method performs a spircal search for an empty square to put a new dot. """ up = 2 right = 1 down = 1 left = 2 x, y = self.prcToPix (xorg, yorg) # Start by testing current spot if self.isEmpty (x, y): return self.pixToPrc (x, y) while True: for i in range(right): x += dotSmall if self.isEmpty (x, y): return self.pixToPrc (x, y) for i in range(down): y += dotSmall if self.isEmpty (x, y): return self.pixToPrc (x, y) for i in range(left): x -= dotSmall if self.isEmpty (x, y): return self.pixToPrc (x, y) for i in range(up): y -= dotSmall if self.isEmpty (x, y): return self.pixToPrc (x, y) # Grow spiral bounds right += 2 down += 2 left += 2 up += 2 def isEmpty (self, x0, y0): """ Returns true if a spot placed on (x, y) is inside the graph and not intersecting with other spots. x and y should be in pixels, not percent """ # Make sure spiral search don't put dots outside the graph x, y = self.prcToPix(0,0) w, h = self.prcToPix(1,1) if not x <= x0 <= w or not y <= y0 <= h: return False # Tests if the spot intersects any other spots for x1, y1, type, name, text in self.spots.values(): x1, y1 = self.prcToPix(x1, y1) if (x1-x0)**2 + (y1-y0)**2 < dotSmall**2 - 0.1: return False return True def pointIsOnSpot (self, x0, y0, spot): """ Returns true if (x, y) is inside the spot 'spot'. The size of the spot is determined based on its hoverness. x and y should be in pixels, not percent """ if spot == self.hovered: size = dotLarge else: size = dotSmall x1, y1, type, name, text = spot x1, y1 = self.prcToPix(x1, y1) if (x1-x0)**2 + (y1-y0)**2 <= (size/2.)**2: return True return False def getSpotAtPoint (self, x, y): """ Returns the spot embrace (x, y) if any. Otherwise it returns None. x and y should be in pixels, not percent """ if self.hovered and self.pointIsOnSpot(x, y, self.hovered): return self.hovered for spot in self.spots.values(): if spot == self.hovered: continue if self.pointIsOnSpot(x, y, spot): return spot return None def prcToPix (self, x, y): """ Translates from 0-1 cords to real world cords """ alloc = self.get_allocation() return x*(alloc.width - line*1.5-dotLarge*0.5) + line*1.5 + alloc.x, \ y*(alloc.height - line*1.5-dotLarge*0.5) + dotLarge*0.5 + alloc.y def pixToPrc (self, x, y): """ Translates from real world cords to 0-1 cords """ alloc = self.get_allocation() return (x - line*1.5 - alloc.x)/(alloc.width - line*1.5-dotLarge*0.5), \ (y - dotLarge*0.5 - alloc.y)/(alloc.height - line*1.5-dotLarge*0.5) if __name__ == "__main__": w = gtk.Window() nb = gtk.Notebook() w.add(nb) vb = gtk.VBox() nb.append_page(vb) sg = SpotGraph() sg.addXMark(.5, "Center") sg.addYMark(.5, "Center") vb.pack_start(sg) button = gtk.Button("New Spot") def callback (button): if not hasattr(button, "nextnum"): button.nextnum = 0 else: button.nextnum += 1 sg.addSpot(str(button.nextnum), "Blablabla", 1, 1, 0) button.connect("clicked", callback) vb.pack_start(button, expand=False) w.connect("delete-event", gtk.main_quit) w.show_all() w.resize(400,400) gtk.main() pychess-0.12beta3/lib/pychess/widgets/PromotionDialog.py0000755000175000017470000000276112161415524022453 0ustar tamasusersimport gtk from pychess.System import uistuff from pychess.System.prefix import addDataPrefix from pychess.Utils.Piece import Piece,QUEEN,ROOK,BISHOP,KNIGHT from pychess.Utils.const import WHITE,BLACK from PieceWidget import PieceWidget uistuff.cacheGladefile("promotion.glade") class PromotionDialog: def __init__(self): self.widgets = uistuff.GladeWidgets("promotion.glade") self.dialog = self.widgets["promotionDialog"] self.color = None self.widgets["knightDock"].add(PieceWidget(Piece(WHITE, KNIGHT))) self.widgets["knightDock"].child.show() self.widgets["bishopDock"].add(PieceWidget(Piece(WHITE, BISHOP))) self.widgets["bishopDock"].child.show() self.widgets["rookDock"].add(PieceWidget(Piece(WHITE, ROOK))) self.widgets["rookDock"].child.show() self.widgets["queenDock"].add(PieceWidget(Piece(WHITE, QUEEN))) self.widgets["queenDock"].child.show() def setColor(self, color): self.widgets["knightDock"].child.getPiece().color = color self.widgets["bishopDock"].child.getPiece().color = color self.widgets["rookDock"].child.getPiece().color = color self.widgets["queenDock"].child.getPiece().color = color def runAndHide(self, color): self.setColor(color) res = self.dialog.run() self.dialog.hide() if res != gtk.RESPONSE_DELETE_EVENT: return [QUEEN,ROOK,BISHOP,KNIGHT][int(res)] return None pychess-0.12beta3/lib/pychess/widgets/BoardView.py0000644000175000017470000015363612176264334021243 0ustar tamasusers# -*- coding: UTF-8 -*- import sys from math import floor, ceil, pi from time import time, sleep from threading import Lock, RLock import gtk, gtk.gdk, cairo from gobject import * import pango from pychess.System import glock, conf, gstreamer from pychess.System.glock import glock_connect, glock_connect_after from pychess.System.repeat import repeat, repeat_sleep from pychess.gfx import Pieces from pychess.Utils.Piece import Piece from pychess.Utils.Cord import Cord from pychess.Utils.Move import Move from pychess.Utils.GameModel import GameModel from pychess.Utils.const import * from pychess.Variants.blindfold import BlindfoldChess, HiddenPawnsChess, \ HiddenPiecesChess, AllWhiteChess from pychess.Variants.crazyhouse import CrazyhouseChess import preferencesDialog def intersects (r0, r1): w0 = r0.width + r0.x h0 = r0.height + r0.y w1 = r1.width + r1.x h1 = r1.height + r1.y return (w1 < r1.x or w1 > r0.x) and \ (h1 < r1.y or h1 > r0.y) and \ (w0 < r0.x or w0 > r1.x) and \ (h0 < r0.y or h0 > r1.y) def contains (r0, r1): w0 = r0.width + r0.x h0 = r0.height + r0.y w1 = r1.width + r1.x h1 = r1.height + r1.y return r0.x <= r1.x and w0 >= w1 and \ r0.y <= r1.y and h0 >= h1 def join (r0, r1): """ Take (x, y, w, [h]) squares """ if not r0: return r1 if not r1: return r0 if not r0 and not r1: return None if len(r0) == 3: r0 = (r0[0], r0[1], r0[2], r0[2]) if len(r1) == 3: r1 = (r1[0], r1[1], r1[2], r1[2]) x1 = min(r0[0], r1[0]) x2 = max(r0[0]+r0[2], r1[0]+r1[2]) y1 = min(r0[1], r1[1]) y2 = max(r0[1]+r0[3], r1[1]+r1[3]) return (x1, y1, x2 - x1, y2 - y1) def rect (r): x, y = [int(floor(v)) for v in r[:2]] w = int(ceil(r[2])) if len(r) == 4: h = int(ceil(r[3])) else: h = w return gtk.gdk.Rectangle (x, y, w, h) def matrixAround (rotatedMatrix, anchorX, anchorY): co = rotatedMatrix[0] si = rotatedMatrix[1] aysi = anchorY*si axsi = anchorX*si ayco = anchorY*(1-co) axco = anchorX*(1-co) matrix = cairo.Matrix(co, si, -si, co, axco+aysi, ayco-axsi) invmatrix = cairo.Matrix(co, -si, si, co, axco-aysi, ayco+axsi) return matrix, invmatrix ANIMATION_TIME = 0.5 # If this is true, the board is scaled so that everything fits inside the window # even if the board is rotated 45 degrees SCALE_ROTATED_BOARD = False CORD_PADDING = 1.5 HOLDING_SHIFT = 0.5 class BoardView (gtk.DrawingArea): __gsignals__ = { 'shown_changed' : (SIGNAL_RUN_FIRST, TYPE_NONE, (int,)) } def __init__(self, gamemodel=None, preview=False): gtk.DrawingArea.__init__(self) if gamemodel == None: gamemodel = GameModel() self.model = gamemodel self.preview = preview self.shownVariationIdx = 0 # the main variation is the first in gamemodel.variations list glock_connect(self.model, "game_started", self.game_started) glock_connect_after(self.model, "game_started", self.game_started_after) glock_connect_after(self.model, "game_changed", self.game_changed) glock_connect_after(self.model, "moves_undoing", self.moves_undoing) glock_connect_after(self.model, "game_loading", self.game_loading) glock_connect_after(self.model, "game_loaded", self.game_loaded) glock_connect_after(self.model, "game_ended", self.game_ended) self.connect("expose_event", self.expose) self.connect_after("realize", self.on_realized) conf.notify_add("showCords", self.on_show_cords) conf.notify_add("showCaptured", self.on_show_captured) conf.notify_add("faceToFace", self.on_face_to_face) conf.notify_add("pieceTheme", self.on_set_piece_theme) self.RANKS = self.model.boards[0].RANKS self.FILES = self.model.boards[0].FILES self.animationStart = time() self.lastShown = None self.deadlist = [] self.autoUpdateShown = True self.realSetShown = True # only false when self.shown set temporarily (change shown variation) # to avoid redrawMisc in animation self.padding = 0 # Set to self.pad when setcords is active self.square = 0, 0, self.FILES, 1 # An object global variable with the current # board size self.pad = 0.13 # Padding applied only when setcords is active self._selected = None self._hover = None self._active = None self._premove0 = None self._premove1 = None self._redarrow = None self._greenarrow = None self._bluearrow = None self._shown = self.model.ply self._showCords = False self.showCords = conf.get("showCords", False) self._showCaptured = False if self.preview: self.showCaptured = False else: self.showCaptured = conf.get("showCaptured", False) or self.model.variant == CrazyhouseChess self._showEnpassant = False self.lastMove = None self.matrix = cairo.Matrix() self.matrixPi = cairo.Matrix.init_rotate(pi) self.cordMatricesState = (0, 0) self._rotation = 0 self.drawcount = 0 self.drawtime = 0 self.gotStarted = False self.animationLock = RLock() self.rotationLock = Lock() self.draggedPiece = None # a piece being dragged by the user self.premovePiece = None self.premovePromotion = None def game_started_after (self, model): self.emit("shown_changed", self.shown) def game_started (self, model): if conf.get("noAnimation", False): self.gotStarted = True self.redraw_canvas() else: if model.moves: self.lastMove = model.moves[-1] self.animationLock.acquire() try: for row in self.model.boards[-1].data: for piece in row.values(): #row: if piece: piece.opacity = 0 finally: self.animationLock.release() self.gotStarted = True self.startAnimation() def game_changed (self, model): # Play sounds if self.model.players and self.model.status != WAITING_TO_START: move = model.moves[-1] if move.is_capture(model.boards[-2]): sound = "aPlayerCaptures" else: sound = "aPlayerMoves" if model.boards[-1].board.isChecked(): sound = "aPlayerChecks" if model.players[0].__type__ == REMOTE and \ model.players[1].__type__ == REMOTE: sound = "observedMoves" preferencesDialog.SoundTab.playAction(sound) # Auto updating self.shown can be disabled. Useful for loading games. # If we are not at the latest game we are probably browsing the history, # and we won't like auto updating. if self.autoUpdateShown and self.shown+1 >= model.ply: self.shown = model.ply # Rotate board if conf.get("autoRotate", True): if self.model.players and self.model.curplayer.__type__ == LOCAL: self.rotation = self.model.boards[-1].color * pi def moves_undoing (self, model, moves): if self.shownIsMainLine(): self.shown = model.ply-moves else: # Go back to the mainline to let animation system work board = model.getBoardAtPly(self.shown, self.shownVariationIdx) while board not in model.variations[0]: board = model.boards[board.ply-model.lowply-1] self.shown = board.ply self.shownVariationIdx = 0 self.shown = model.ply-moves def game_loading (self, model, uri): self.autoUpdateShown = False def game_loaded (self, model, uri): self.autoUpdateShown = True self._shown = model.ply def game_ended (self, model, reason): self.redraw_canvas() if self.model.players: sound = False if model.status == DRAW: sound = "gameIsDrawn" elif model.status == WHITEWON: if model.players[0].__type__ == LOCAL: sound = "gameIsWon" elif model.players[1].__type__ == LOCAL: sound = "gameIsLost" elif model.status == BLACKWON: if model.players[1].__type__ == LOCAL: sound = "gameIsWon" elif model.players[0].__type__ == LOCAL: sound = "gameIsLost" elif model.status in (ABORTED, KILLED): sound = "gameIsLost" if model.status in (DRAW, WHITEWON, BLACKWON, KILLED, ABORTED) and \ model.players[0].__type__ == REMOTE and \ model.players[1].__type__ == REMOTE: sound = "oberservedEnds" # This should never be false, unless status is set to UNKNOWN or # something strange if sound: preferencesDialog.SoundTab.playAction(sound) def on_show_cords (self, *args): self.showCords = conf.get("showCords", False) def on_show_captured (self, *args): self.showCaptured = conf.get("showCaptured", False) def on_face_to_face (self, *args): self.redraw_canvas() def on_set_piece_theme (self, *args): self.redraw_canvas() ############################### # Animation # ############################### def paintBoxAround(self, move): paintBox = self.cord2RectRelative(move.cord1) if move.flag != DROP: paintBox = join(paintBox, self.cord2RectRelative(move.cord0)) if move.flag in (KING_CASTLE, QUEEN_CASTLE): board = self.model.boards[-1].board color = board.color wildcastle = Cord(board.ini_kings[color]).x == 3 and board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS) if move.flag == KING_CASTLE: side = 0 if wildcastle else 1 paintBox = join(paintBox, self.cord2RectRelative(Cord(board.ini_rooks[color][side]))) paintBox = join(paintBox, self.cord2RectRelative(Cord(board.fin_rooks[color][side]))) paintBox = join(paintBox, self.cord2RectRelative(Cord(board.fin_kings[color][side]))) else: side = 1 if wildcastle else 0 paintBox = join(paintBox, self.cord2RectRelative(Cord(board.ini_rooks[color][side]))) paintBox = join(paintBox, self.cord2RectRelative(Cord(board.fin_rooks[color][side]))) paintBox = join(paintBox, self.cord2RectRelative(Cord(board.fin_kings[color][side]))) return paintBox def setShownBoard(self, board): """Set shown to the index of the given board in board list. If the board belongs to a different variationd, adjust the shown variation index too. If board is in the main line, reset the shown variation idx to 0 (the main line). """ if board in self.model.variations[self.shownVariationIdx]: # if the board to be shown is in the current shown variation, we are ok self.shown = self.model.variations[self.shownVariationIdx].index(board) + self.model.lowply if board in self.model.variations[0]: self.shownVariationIdx = 0 else: # else we have to go back first for vari in self.model.variations: if board in vari: # Go back to the common board of variations to let animation system work board_in_vari = board while board_in_vari not in self.model.variations[self.shownVariationIdx]: board_in_vari = vari[board_in_vari.ply-self.model.lowply-1] self.realSetShown = False self.shown = board_in_vari.ply break # swich to the new variation self.shownVariationIdx = self.model.variations.index(vari) self.realSetShown = True self.shown = self.model.variations[self.shownVariationIdx].index(board) + self.model.lowply def shownIsMainLine(self): return self.shownVariationIdx==0 def _get_shown(self): return self._shown def _set_shown(self, shown): """Adjust the index in current variation board list.""" # We don't do anything if we are already showing the right ply if shown == self._shown: return # This would cause IndexErrors later if not self.model.lowply <= shown <= self.model.variations[self.shownVariationIdx][-1].ply: return # If there is only one board, we don't do any animation, but simply # redraw the entire board. Same if we are at first draw. if len(self.model.boards) == 1 or self.shown < self.model.lowply: self._shown = shown if shown > self.model.lowply: self.lastMove = self.model.getMoveAtPly(shown-1, self.shownVariationIdx) self.emit("shown_changed", self.shown) self.redraw_canvas() return step = shown > self.shown and 1 or -1 self.animationLock.acquire() try: deadset = set() for i in xrange(self.shown, shown, step): board = self.model.getBoardAtPly(i, self.shownVariationIdx) board1 = self.model.getBoardAtPly(i + step, self.shownVariationIdx) if step == 1: move = self.model.getMoveAtPly(i, self.shownVariationIdx) moved, new, dead = board.simulateMove(board1, move) else: move = self.model.getMoveAtPly(i-1, self.shownVariationIdx) moved, new, dead = board.simulateUnmove(board1, move) # We need to ensure, that the piece coordinate is saved in the # piece for piece, cord0 in moved: # Test if the piece already has a realcoord (has been dragged) if piece.x == None: # We don't want newly restored pieces to flew from their # deadspot to their old position, as it doesn't work # vice versa if piece.opacity == 1: piece.x = cord0.x piece.y = cord0.y for piece in dead: deadset.add(piece) # Reset the location of the piece to avoid a small visual # jump, when it is at some other time waken to life. piece.x = None piece.y = None for piece in new: piece.opacity = 0 finally: self.animationLock.release() self.deadlist = [] for y, row in enumerate(self.model.getBoardAtPly(self.shown, self.shownVariationIdx).data): for x, piece in row.items(): if piece in deadset: self.deadlist.append((piece,x,y)) self._shown = shown if self.realSetShown: self.emit("shown_changed", self.shown) self.animationStart = time() if self.lastMove: paintBox = self.paintBoxAround(self.lastMove) self.lastMove = None self.redraw_canvas(rect(paintBox)) if self.shown > self.model.lowply: self.lastMove = self.model.getMoveAtPly(self.shown-1, self.shownVariationIdx) else: self.lastMove = None self.runAnimation(redrawMisc=self.realSetShown) repeat(self.runAnimation) shown = property(_get_shown, _set_shown) def runAnimation (self, redrawMisc=False): """ The animationsystem in pychess is very loosely inspired by the one of chessmonk. The idea is, that every piece has a place in an array (the board.data one) for where to be drawn. If a piece is to be animated, it can set its x and y properties, to some cord (or part cord like 0.42 for 42% right to file 0). Each time runAnimation is run, it will set those x and y properties a little closer to the location in the array. When it has reached its final location, x and y will be set to None. _set_shown, which starts the animation, also sets a timestamp for the acceleration to work properply. """ self.animationLock.acquire() try: paintBox = None mod = min(1, (time()-self.animationStart)/ANIMATION_TIME) board = self.model.getBoardAtPly(self.shown, self.shownVariationIdx) for y, row in enumerate(board.data): for x, piece in row.items(): if not piece: continue if piece == self.draggedPiece: continue if piece == self.premovePiece: # if premove move is being made, the piece will already be sitting on the cord it needs to move to- # do not animate and reset premove to None if self.shown == self.premovePly: piece.x = None piece.y = None self.setPremove(None, None, None, None) continue # otherwise, animate premove piece moving to the premove cord rather than the cord it actually exists on elif self.premove0 and self.premove1: x = self.premove1.x y = self.premove1.y if piece.x != None: if not conf.get("noAnimation", False): if piece.piece == KNIGHT: newx = piece.x + (x-piece.x)*mod**(1.5) newy = piece.y + (y-piece.y)*mod else: newx = piece.x + (x-piece.x)*mod newy = piece.y + (y-piece.y)*mod else: newx, newy = x, y paintBox = join(paintBox, self.cord2RectRelative(piece.x, piece.y)) paintBox = join(paintBox, self.cord2RectRelative(newx, newy)) if (newx <= x <= piece.x or newx >= x >= piece.x) and \ (newy <= y <= piece.y or newy >= y >= piece.y) or \ abs(newx-x) < 0.005 and abs(newy-y) < 0.005: paintBox = join(paintBox, self.cord2RectRelative(x, y)) piece.x = None piece.y = None else: piece.x = newx piece.y = newy if piece.opacity < 1: if piece.x != None: px = piece.x py = piece.y else: px = x py = y if paintBox: paintBox = join(paintBox,self.cord2RectRelative(px, py)) else: paintBox = self.cord2RectRelative(px, py) if not conf.get("noAnimation", False): newOp = piece.opacity + (1-piece.opacity)*mod else: newOp = 1 if newOp >= 1 >= piece.opacity or abs(1-newOp) < 0.005: piece.opacity = 1 else: piece.opacity = newOp for i, (piece, x, y) in enumerate(self.deadlist): if not paintBox: paintBox = self.cord2RectRelative(x, y) else: paintBox = join(paintBox, self.cord2RectRelative(x, y)) if not conf.get("noAnimation", False): newOp = piece.opacity + (0-piece.opacity)*mod else: newOp = 0 if newOp <= 0 <= piece.opacity or abs(0-newOp) < 0.005: del self.deadlist[i] else: piece.opacity = newOp finally: self.animationLock.release() if redrawMisc: for cord in (self.selected, self.active, self.premove0, self.premove1, self.hover): if cord: paintBox = join(paintBox, self.cord2RectRelative(cord)) for arrow in (self.redarrow, self.greenarrow, self.bluearrow): if arrow: paintBox = join(paintBox, self.cord2RectRelative(arrow[0])) paintBox = join(paintBox, self.cord2RectRelative(arrow[1])) if self.lastMove: paintBox = join(paintBox, self.paintBoxAround(self.lastMove)) if paintBox: self.redraw_canvas(rect(paintBox)) return paintBox and True or False def startAnimation (self): self.animationStart = time() self.runAnimation(redrawMisc = True) repeat(self.runAnimation) ############################# # Drawing # ############################# def on_realized (self, widget): p = (1-self.padding) alloc = self.get_allocation() square = float(min(alloc.width, alloc.height))*p xc = alloc.width/2. - square/2 yc = alloc.height/2. - square/2 s = square/self.FILES self.square = (xc, yc, square, s) def expose(self, widget, event): context = widget.window.cairo_create() #r = (event.area.x, event.area.y, event.area.width, event.area.height) #context.rectangle(r[0]-.5, r[1]-.5, r[2]+1, r[3]+1) #context.clip() if False: import profile profile.runctx("self.draw(context, event.area)", locals(), globals(), "/tmp/pychessprofile") from pstats import Stats s = Stats("/tmp/pychessprofile") s.sort_stats('cumulative') s.print_stats() else: self.drawcount += 1 start = time() self.animationLock.acquire() self.draw(context, event.area) self.animationLock.release() self.drawtime += time() - start #if self.drawcount % 100 == 0: # print "Average FPS: %0.3f - %d / %d" % \ # (self.drawcount/self.drawtime, self.drawcount, self.drawtime) return False ############################################################################ # drawing functions # ############################################################################ ############################### # redraw_canvas # ############################### def redraw_canvas(self, r=None, queue=False): if self.window: glock.acquire() try: if self.window: if not r: alloc = self.get_allocation() r = gtk.gdk.Rectangle(0, 0, alloc.width, alloc.height) assert type(r[2]) == int if queue: self.queue_draw_area(r.x, r.y, r.width, r.height) else: self.window.invalidate_rect(r, True) self.window.process_updates(True) finally: glock.release() ############################### # draw # ############################### def draw (self, context, r): #context.set_antialias (cairo.ANTIALIAS_NONE) if self.shown < self.model.lowply: print "exiting cause to lowlpy", self.shown, self.model.lowply return alloc = self.get_allocation() self.matrix, self.invmatrix = matrixAround( self.matrix, alloc.width/2., alloc.height/2.) cos_, sin_ = self.matrix[0], self.matrix[1] context.transform(self.matrix) if self.showCaptured: holding_size = (alloc.width/(self.FILES+4+HOLDING_SHIFT*2))*(4+HOLDING_SHIFT*2) else: holding_size = 0 square = float(min(alloc.width - holding_size, alloc.height))*(1-self.padding) if SCALE_ROTATED_BOARD: square /= abs(cos_)+abs(sin_) xc = alloc.width/2. - square/2 yc = alloc.height/2. - square/2 s = square/self.FILES self.square = (xc, yc, square, s) self.drawBoard (context, r) if min(alloc.width, alloc.height) > 32: self.drawCords (context, r) if self.gotStarted: self.drawSpecial (context, r) self.drawEnpassant (context, r) self.drawArrows (context) self.animationLock.acquire() try: self.drawPieces (context, r) finally: self.animationLock.release() self.drawLastMove (context, r) if self.model.status == KILLED: self.drawCross (context, r) # Unselect to mark redrawn areas - for debugging purposes #context.transform(self.invmatrix) #context.rectangle(r.x,r.y,r.width,r.height) #dc = self.drawcount*50 #dc = dc % 1536 #c = dc % 256 / 255. #if dc < 256: # context.set_source_rgb(1,c,0) #elif dc < 512: # context.set_source_rgb(1-c,1,0) #elif dc < 768: # context.set_source_rgb(0,1,c) #elif dc < 1024: # context.set_source_rgb(0,1-c,1) #elif dc < 1280: # context.set_source_rgb(c,0,1) #elif dc < 1536: # context.set_source_rgb(1,0,1-c) #context.stroke() ############################### # drawCords # ############################### def drawCords (self, context, r): thickness = 0.01 signsize = 0.04 if not self.showCords: return xc, yc, square, s = self.square if contains(rect((xc, yc, square)), r): return t = thickness*square ss = signsize*square context.rectangle(xc-t*1.5,yc-t*1.5,square+t*3,square+t*3) context.set_source_color(self.get_style().dark[gtk.STATE_NORMAL]) context.set_line_width(t) context.set_line_join(gtk.gdk.JOIN_ROUND) context.stroke() pangoScale = float(pango.SCALE) def paint (inv): for n in xrange(self.RANKS): rank = inv and n+1 or self.RANKS-n layout = self.create_pango_layout("%d" % rank) layout.set_font_description( pango.FontDescription("bold %d" % ss)) w = layout.get_extents()[1][2]/pangoScale h = layout.get_extents()[0][3]/pangoScale # Draw left side context.move_to(xc-t*2.5-w, s*n+yc+h/2+t) context.show_layout(layout) # Draw right side #context.move_to(xc+square+t*2.5, s*n+yc+h/2+t) #context.show_layout(layout) file = inv and self.FILES-n or n+1 layout = self.create_pango_layout(chr(file+ord("A")-1)) layout.set_font_description( pango.FontDescription("bold %d" % ss)) w = layout.get_pixel_size()[0] h = layout.get_pixel_size()[1] y = layout.get_extents()[1][1]/pangoScale # Draw top #context.move_to(xc+s*n+s/2.-w/2., yc-h-t*1.5) #context.show_layout(layout) # Draw bottom context.move_to(xc+s*n+s/2.-w/2., yc+square+t*1.5+abs(y)) context.show_layout(layout) matrix, invmatrix = matrixAround( self.matrixPi, xc+square/2., yc+square/2.) paint(False) context.transform(matrix) paint(True) context.transform(invmatrix) ############################### # drawBoard # ############################### def drawBoard(self, context, r): xc, yc, square, s = self.square for x in xrange(self.FILES): for y in xrange(self.RANKS): if x % 2 + y % 2 == 1: bounding = self.cord2RectRelative((xc+x*s,yc+y*s,s)) if intersects(rect(bounding), r): context.rectangle(xc+x*s,yc+y*s,s,s) context.set_source_color(self.get_style().dark[gtk.STATE_NORMAL]) context.fill() if not self.showCords: context.rectangle(xc, yc, self.FILES*s, self.RANKS*s) context.stroke() ############################### # drawPieces # ############################### def getCordMatrices (self, x, y, inv=False): xc, yc, square, s = self.square square_, rot_ = self.cordMatricesState if square != self.square or rot_ != self.rotation: self.cordMatrices = [None] * self.FILES*self.RANKS + [None] * self.FILES*4 self.cordMatricesState = (self.square, self.rotation) c = x * self.FILES + y if type(c) == int and self.cordMatrices[c]: matrices = self.cordMatrices[c] else: cx, cy = self.cord2Point(x,y) matrices = matrixAround(self.matrix, cx+s/2., cy+s/2.) matrices += (cx, cy) if type(c) == int: self.cordMatrices[c] = matrices return matrices def __drawPiece(self, context, piece, x, y): if self.model.variant == BlindfoldChess: return elif self.model.variant == HiddenPawnsChess: if piece.piece == PAWN: return elif self.model.variant == HiddenPiecesChess: if piece.piece != PAWN: return if not self.showCaptured: if x < 0 or x >= self.FILES: return xc, yc, square, s = self.square if not conf.get("faceToFace", False): matrix, invmatrix, cx, cy = self.getCordMatrices(x, y) else: cx, cy = self.cord2Point(x,y) if piece.color == BLACK: matrix, invmatrix = matrixAround((-1,0), cx+s/2., cy+s/2.) else: matrix = invmatrix = cairo.Matrix(1,0,0,1,0,0) context.transform(invmatrix) Pieces.drawPiece( piece, context, cx+CORD_PADDING, cy+CORD_PADDING, s-CORD_PADDING*2, allWhite=self.model.variant==AllWhiteChess) context.transform(matrix) def drawPieces(self, context, r): pieces = self.model.getBoardAtPly(self.shown, self.shownVariationIdx) xc, yc, square, s = self.square parseC = lambda c: (c.red/65535., c.green/65535., c.blue/65535.) fgN = parseC(self.get_style().fg[gtk.STATE_NORMAL]) fgS = fgN fgA = parseC(self.get_style().fg[gtk.STATE_ACTIVE]) fgP = parseC(self.get_style().fg[gtk.STATE_PRELIGHT]) fgM = fgN # As default we use normal foreground for selected cords, as it looks # less confusing. However for some themes, the normal foreground is so # similar to the selected background, that we have to use the selected # foreground. bgSl = parseC(self.get_style().bg[gtk.STATE_SELECTED]) bgSd = parseC(self.get_style().dark[gtk.STATE_SELECTED]) if min((fgN[0]-bgSl[0])**2+(fgN[1]-bgSl[1])**2+(fgN[2]-bgSl[2])**2, (fgN[0]-bgSd[0])**2+(fgN[1]-bgSd[1])**2+(fgN[2]-bgSd[2])**2) < 0.2: fgS = parseC(self.get_style().fg[gtk.STATE_SELECTED]) # Draw dying pieces (Found in self.deadlist) for piece, x, y in self.deadlist: context.set_source_rgba(fgN[0],fgN[1],fgN[2],piece.opacity) self.__drawPiece(context, piece, x, y) # Draw pieces reincarnating (With opacity < 1) for y, row in enumerate(pieces.data): for x, piece in row.items(): if not piece or piece.opacity == 1: continue if piece.x: x, y = piece.x, piece.y context.set_source_rgba(fgN[0],fgN[1],fgN[2],piece.opacity) self.__drawPiece(context, piece, x, y) # Draw standing pieces (Only those who intersect drawn area) for y, row in enumerate(pieces.data): for x, piece in row.items(): if piece == self.premovePiece: continue if not piece or piece.x != None or piece.opacity < 1: continue if not intersects(rect(self.cord2RectRelative(x,y)), r): continue if Cord(x,y) == self.selected: context.set_source_rgb(*fgS) elif Cord(x,y) == self.active: context.set_source_rgb(*fgA) elif Cord(x,y) == self.hover: context.set_source_rgb(*fgP) else: context.set_source_rgb(*fgN) self.__drawPiece(context, piece, x, y) # Draw moving or dragged pieces (Those with piece.x and piece.y != None) context.set_source_rgb(*fgP) for y, row in enumerate(pieces.data): for x, piece in row.items(): if not piece or piece.x == None or piece.opacity < 1: continue self.__drawPiece(context, piece, piece.x, piece.y) # Draw standing premove piece context.set_source_rgb(*fgM) if self.premovePiece and self.premovePiece.x == None and self.premove0 and self.premove1: self.__drawPiece(context, self.premovePiece, self.premove1.x, self.premove1.y) ############################### # drawSpecial # ############################### def drawSpecial (self, context, redrawn): light_blue = (0.550, 0.775, 0.950, 0.8) dark_blue = (0.475, 0.700, 0.950, 0.5) used = [] for cord, state in ((self.active, gtk.STATE_ACTIVE), (self.selected, gtk.STATE_SELECTED), (self.premove0, gtk.STATE_SELECTED), (self.premove1, gtk.STATE_SELECTED), (self.hover, gtk.STATE_PRELIGHT)): if not cord: continue if cord in used: continue # Ensure that same cord, if having multiple "tasks", doesn't get # painted more than once used.append(cord) bounding = self.cord2RectRelative(cord) if not intersects(rect(bounding), redrawn): continue xc, yc, square, s = self.square x, y = self.cord2Point(cord) context.rectangle(x, y, s, s) if self.isLight(cord): style = self.get_style().bg else: style = self.get_style().dark if cord == self.premove0 or cord == self.premove1: if self.isLight(cord): context.set_source_rgba(*light_blue) else: context.set_source_rgba(*dark_blue) else: context.set_source_color(style[state]) context.fill() ############################### # drawLastMove # ############################### def drawLastMove (self, context, redrawn): if not self.lastMove: return if self.shown <= self.model.lowply: return show_board = self.model.getBoardAtPly(self.shown, self.shownVariationIdx) last_board = self.model.getBoardAtPly(self.shown - 1, self.shownVariationIdx) capture = self.lastMove.is_capture(last_board) wh = 0.27 # Width of marker p0 = 0.155 # Padding on last cord p1 = 0.085 # Padding on current cord sw = 0.02 # Stroke width xc, yc, square, s = self.square context.save() context.set_line_width(sw*s) d0 = {-1:1-p0,1:p0} d1 = {-1:1-p1,1:p1} ms = ((1,1),(-1,1),(-1,-1),(1,-1)) light_yellow = (.929, .831, 0, 0.8) dark_yellow = (.769, .627, 0, 0.5) light_orange = (.961, .475, 0, 0.8) dark_orange = (.808, .361, 0, 0.5) light_green = (0.337, 0.612, 0.117, 0.8) dark_green = (0.237, 0.512, 0.17, 0.5) if self.lastMove.flag in (KING_CASTLE, QUEEN_CASTLE): ksq0 = last_board.board.kings[last_board.color] ksq1 = show_board.board.kings[last_board.color] wildcastle = Cord(last_board.board.ini_kings[last_board.color]).x == 3 and last_board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS) if self.lastMove.flag == KING_CASTLE: side = 0 if wildcastle else 1 rsq0 = show_board.board.ini_rooks[last_board.color][side] rsq1 = show_board.board.fin_rooks[last_board.color][side] else: side = 1 if wildcastle else 0 rsq0 = show_board.board.ini_rooks[last_board.color][side] rsq1 = show_board.board.fin_rooks[last_board.color][side] cord_pairs = [ [Cord(ksq0), Cord(ksq1)], [Cord(rsq0), Cord(rsq1)] ] else: cord_pairs = [ [self.lastMove.cord0, self.lastMove.cord1] ] for [cord0, cord1] in cord_pairs: if cord0 is not None: rel = self.cord2RectRelative(cord0) if intersects(rect(rel), redrawn): r = self.cord2Rect(cord0) for m in ms: context.move_to( r[0]+(d0[m[0]]+wh*m[0])*r[2], r[1]+(d0[m[1]]+wh*m[1])*r[2]) context.rel_line_to( 0, -wh*r[2]*m[1]) context.rel_curve_to( 0, wh*r[2]*m[1]/2.0, -wh*r[2]*m[0]/2.0, wh*r[2]*m[1], -wh*r[2]*m[0], wh*r[2]*m[1]) context.close_path() context.set_source_rgba(*light_yellow) context.fill_preserve() context.set_source_rgba(*dark_yellow) context.stroke() rel = self.cord2RectRelative(cord1) if intersects(rect(rel), redrawn): r = self.cord2Rect(cord1) for m in ms: context.move_to( r[0]+d1[m[0]]*r[2], r[1]+d1[m[1]]*r[2]) context.rel_line_to( wh*r[2]*m[0], 0) context.rel_curve_to( -wh*r[2]*m[0]/2.0, 0, -wh*r[2]*m[0], wh*r[2]*m[1]/2.0, -wh*r[2]*m[0], wh*r[2]*m[1]) context.close_path() if capture: context.set_source_rgba(*light_orange) context.fill_preserve() context.set_source_rgba(*dark_orange) context.stroke() elif cord0 is None: # DROP move context.set_source_rgba(*light_green) context.fill_preserve() context.set_source_rgba(*dark_green) context.stroke() else: context.set_source_rgba(*light_yellow) context.fill_preserve() context.set_source_rgba(*dark_yellow) context.stroke() ############################### # drawArrows # ############################### def __drawArrow (self, context, cords, aw, ahw, ahh, asw, fillc, strkc): context.save() lvx = cords[1].x-cords[0].x lvy = cords[0].y-cords[1].y l = float((lvx**2+lvy**2)**.5) vx = lvx/l vy = lvy/l v1x = -vy v1y = vx r = self.cord2Rect(cords[0]) px = r[0]+r[2]/2.0 py = r[1]+r[2]/2.0 ax = v1x*r[2]*aw/2 ay = v1y*r[2]*aw/2 context.move_to(px+ax, py+ay) p1x = px+(lvx-vx*ahh)*r[2] p1y = py+(lvy-vy*ahh)*r[2] context.line_to(p1x+ax, p1y+ay) lax = v1x*r[2]*ahw/2 lay = v1y*r[2]*ahw/2 context.line_to(p1x+lax, p1y+lay) context.line_to(px+lvx*r[2], py+lvy*r[2]) context.line_to(p1x-lax, p1y-lay) context.line_to(p1x-ax, p1y-ay) context.line_to(px-ax, py-ay) context.close_path() context.set_source_rgba(*fillc) context.fill_preserve() context.set_line_join(gtk.gdk.JOIN_ROUND) context.set_line_width(asw*r[2]) context.set_source_rgba(*strkc) context.stroke() context.restore() def drawArrows (self, context): # TODO: Only redraw when intersecting with the redrawn area aw = 0.3 # Arrow width ahw = 0.72 # Arrow head width ahh = 0.64 # Arrow head height asw = 0.08 # Arrow stroke width if self.bluearrow: self.__drawArrow(context, self.bluearrow, aw, ahw, ahh, asw, (.447,.624,.812,0.9), (.204,.396,.643,1)) if self.shown != self.model.ply or \ self.model.boards != self.model.variations[0]: return if self.greenarrow: self.__drawArrow(context, self.greenarrow, aw, ahw, ahh, asw, (.54,.886,.2,0.9), (.306,.604,.024,1)) if self.redarrow: self.__drawArrow(context, self.redarrow, aw, ahw, ahh, asw, (.937,.16,.16,0.9), (.643,0,0,1)) ############################### # drawEnpassant # ############################### def drawEnpassant (self, context, redrawn): if not self.showEnpassant: return enpassant = self.model.boards[-1].enpassant if not enpassant: return context.set_source_rgb(0, 0, 0) xc, yc, square, s = self.square x, y = self.cord2Point(enpassant) if not intersects(rect((x, y, s, s)), redrawn): return x, y = self.cord2Point(enpassant) cr = context cr.set_font_size(s/2.) fascent, fdescent, fheight, fxadvance, fyadvance = cr.font_extents() chars = "en" xbearing, ybearing, width, height, xadvance, yadvance = \ cr.text_extents(chars) cr.move_to(x + s / 2. - xbearing - width / 2.-1, s / 2. + y - fdescent + fheight / 2.) cr.show_text(chars) ############################### # drawCross # ############################### def drawCross (self, context, redrawn): xc, yc, square, s = self.square context.move_to(xc, yc) context.rel_line_to(square, square) context.move_to(xc+square, yc) context.rel_line_to(-square, square) context.set_line_cap(cairo.LINE_CAP_SQUARE) context.set_source_rgba(0,0,0,0.65) context.set_line_width(s) context.stroke_preserve() context.set_source_rgba(1,0,0,0.8) context.set_line_width(s/2.) context.stroke() ############################################################################ # Attributes # ############################################################################ ############################### # Cord vars # ############################### def _set_selected (self, cord): self._active = None if self._selected == cord: return if self._selected: r = rect(self.cord2RectRelative(self._selected)) if cord: r = r.union(rect(self.cord2RectRelative(cord))) elif cord: r = rect(self.cord2RectRelative(cord)) self._selected = cord self.redraw_canvas(r) def _get_selected (self): return self._selected selected = property(_get_selected, _set_selected) def _set_hover (self, cord): if self._hover == cord: return if self._hover: r = rect(self.cord2RectRelative(self._hover)) if cord: r = r.union(rect(self.cord2RectRelative(cord))) elif cord: r = rect(self.cord2RectRelative(cord)) self._hover = cord self.redraw_canvas(r) def _get_hover (self): return self._hover hover = property(_get_hover, _set_hover) def _set_active (self, cord): if self._active == cord: return if self._active: r = rect(self.cord2RectRelative(self._active)) if cord: r = r.union(rect(self.cord2RectRelative(cord))) elif cord: r = rect(self.cord2RectRelative(cord)) self._active = cord self.redraw_canvas(r) def _get_active (self): return self._active active = property(_get_active, _set_active) def _set_premove0 (self, cord): if self._premove0 == cord: return if self._premove0: r = rect(self.cord2RectRelative(self._premove0)) if cord: r = r.union(rect(self.cord2RectRelative(cord))) elif cord: r = rect(self.cord2RectRelative(cord)) self._premove0 = cord self.redraw_canvas(r) def _get_premove0 (self): return self._premove0 premove0 = property(_get_premove0, _set_premove0) def _set_premove1 (self, cord): if self._premove1 == cord: return if self._premove1: r = rect(self.cord2RectRelative(self._premove1)) if cord: r = r.union(rect(self.cord2RectRelative(cord))) elif cord: r = rect(self.cord2RectRelative(cord)) self._premove1 = cord self.redraw_canvas(r) def _get_premove1 (self): return self._premove1 premove1 = property(_get_premove1, _set_premove1) ################################ # Arrow vars # ################################ def _set_redarrow (self, cords): if cords == self._redarrow: return paintCords = [] if cords: paintCords += cords if self._redarrow: paintCords += self._redarrow r = rect(self.cord2RectRelative(paintCords[0])) for cord in paintCords[1:]: r = r.union(rect(self.cord2RectRelative(cord))) self._redarrow = cords self.redraw_canvas(r) def _get_redarrow (self): return self._redarrow redarrow = property(_get_redarrow, _set_redarrow) def _set_greenarrow (self, cords): if cords == self._greenarrow: return paintCords = [] if cords: paintCords += cords if self._greenarrow: paintCords += self._greenarrow r = rect(self.cord2RectRelative(paintCords[0])) for cord in paintCords[1:]: r = r.union(rect(self.cord2RectRelative(cord))) self._greenarrow = cords self.redraw_canvas(r) def _get_greenarrow (self): return self._greenarrow greenarrow = property(_get_greenarrow, _set_greenarrow) def _set_bluearrow (self, cords): if cords == self._bluearrow: return paintCords = [] if cords: paintCords += cords if self._bluearrow: paintCords += self._bluearrow r = rect(self.cord2RectRelative(paintCords[0])) for cord in paintCords[1:]: r = r.union(rect(self.cord2RectRelative(cord))) self._bluearrow = cords self.redraw_canvas(r) def _get_bluearrow (self): return self._bluearrow bluearrow = property(_get_bluearrow, _set_bluearrow) ################################ # Other vars # ################################ def _set_rotation (self, radians): if not conf.get("fullAnimation", True): glock.acquire() try: self._rotation = radians self.nextRotation = radians self.matrix = cairo.Matrix.init_rotate(radians) self.redraw_canvas() finally: glock.release() else: if hasattr(self, "nextRotation") and \ self.nextRotation != self.rotation: return self.nextRotation = radians oldr = self.rotation start = time() def callback (): glock.acquire() try: amount = (time()-start)/ANIMATION_TIME if amount > 1: amount = 1 next = False else: next = True self._rotation = new = oldr + amount*(radians-oldr) self.matrix = cairo.Matrix.init_rotate(new) self.redraw_canvas() finally: glock.release() return next repeat(callback) def _get_rotation (self): return self._rotation rotation = property(_get_rotation, _set_rotation) def _set_showCords (self, showCords): if not showCords: self.padding = 0 else: self.padding = self.pad self._showCords = showCords self.redraw_canvas() def _get_showCords (self): return self._showCords showCords = property(_get_showCords, _set_showCords) def _set_showCaptured (self, showCaptured): self._showCaptured = showCaptured or self.model.variant == CrazyhouseChess files_for_holding = 4+2*HOLDING_SHIFT if self._showCaptured else 0 self.set_size_request(int(30*(self.FILES + files_for_holding)), 30*self.RANKS) self.redraw_canvas() def _get_showCaptured (self): return False if self.preview else self._showCaptured showCaptured = property(_get_showCaptured, _set_showCaptured) def _set_showEnpassant (self, showEnpassant): if self._showEnpassant == showEnpassant: return if self.model: enpascord = self.model.boards[-1].enpassant if enpascord: r = rect(self.cord2RectRelative(enpascord)) self.redraw_canvas(r) self._showEnpassant = showEnpassant def _get_showEnpassant (self): return self._showEnpassant showEnpassant = property(_get_showEnpassant, _set_showEnpassant) ########################### # Other # ########################### def cord2Rect (self, cord, y=None): if y == None: x, y = cord.x, cord.y else: x = cord xc, yc, square, s = self.square shift = 0 # Holdings need some shift not to overlap cord letters when showCords is on if x < 0 or x > self.FILES-1: shift = -s*HOLDING_SHIFT if x < 0 else s*HOLDING_SHIFT r = (xc+x*s+shift, yc+(self.RANKS-1-y)*s, s) return r def cord2Point (self, cord, y=None): r = self.cord2Rect(cord, y) return r[:2] def cord2RectRelative (self, cord, y=None): """ Like cord2Rect, but gives you bounding rect in case board is beeing Rotated """ if type(cord) == tuple: cx, cy, s = cord else: cx, cy, s = self.cord2Rect(cord, y) x0, y0 = self.matrix.transform_point(cx, cy) x1, y1 = self.matrix.transform_point(cx+s, cy) x2, y2 = self.matrix.transform_point(cx, cy+s) x3, y3 = self.matrix.transform_point(cx+s, cy+s) x = min(x0, x1, x2, x3) y = min(y0, y1, y2, y3) s = max(y0, y1, y2, y3) - y return (x, y, s) def isLight (self, cord): x, y = cord.cords return x % 2 + y % 2 == 1 def showFirst (self): self.shown = self.model.lowply self.shownVariationIdx = 0 def showPrev (self, step=1): if self.shown > self.model.lowply: if self.shown - step > self.model.lowply: self.shown -= step else: self.shown = self.model.lowply if self.model.getBoardAtPly(self.shown, self.shownVariationIdx) in self.model.variations[0]: self.shownVariationIdx = 0 def showNext (self, step=1): maxply = self.model.variations[self.shownVariationIdx][-1].ply if self.shown < maxply: if self.shown + step < maxply: self.shown += step else: self.shown = maxply def showLast (self): maxply = self.model.variations[self.shownVariationIdx][-1].ply self.shown = maxply def backToMainLine(self): while not self.shownIsMainLine(): self.showPrev() def setPremove(self, premovePiece, premove0, premove1, premovePly, promotion=None): self.premovePiece = premovePiece self.premove0 = premove0 self.premove1 = premove1 self.premovePly = premovePly self.premovePromotion = promotion pychess-0.12beta3/lib/pychess/widgets/ConsoleWindow.py0000644000175000017470000001554012173327571022142 0ustar tamasusersimport sys import gtk import gobject import pango from gtk.gdk import keyval_from_name from BorderBox import BorderBox from pychess.System import glock from pychess.System import uistuff from pychess.System.glock import glock_connect class ConsoleWindow: def __init__ (self, widgets, connection): self.connection = connection self.window = gtk.Window() self.window.set_border_width(12) self.window.set_icon_name("pychess") self.window.set_title("FICS Console") self.window.connect("delete-event", lambda w,e: w.hide() or True) uistuff.keepWindowSize("consolewindow", self.window, defaultSize=(700,400)) self.consoleView = ConsoleView(self.connection) self.window.add(self.consoleView) widgets["show_console_button"].connect("clicked", self.showConsole) glock_connect(connection.com, "consoleMessage", self.onConsoleMessage, after=False) glock_connect(connection, "disconnected", lambda c: self.window and self.window.hide()) def showConsole(self, *widget): self.window.show_all() def onConsoleMessage(self, com, line, block_code): # beep if line == chr(7): sys.stdout.write("\a") sys.stdout.flush() return if not line.startswith('<'): self.consoleView.addMessage(line) class ConsoleView (gtk.VPaned): __gsignals__ = { 'messageAdded' : (gobject.SIGNAL_RUN_FIRST, None, (str,str,object)), 'messageTyped' : (gobject.SIGNAL_RUN_FIRST, None, (str,)) } def __init__ (self, connection): gtk.VPaned.__init__(self) self.connection = connection # Inits the read view self.readView = gtk.TextView() fontdesc = pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() self.textbuffer.create_tag("text", foreground="black") self.textbuffer.create_tag("mytext", foreground="darkblue") self.sw = sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.set_shadow_type(gtk.SHADOW_NONE) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = gtk.WRAP_WORD self.pack1(sw, resize=True, shrink=True) # Inits the write view self.history = [] self.pos = 0 self.writeView = gtk.Entry() #self.writeView.set_width_chars(80) self.pack2(self.writeView, resize=True, shrink=True) # Forces are reasonable position for the panner. def callback (widget, event): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.79*allocation.height, allocation.height-60))) handle_id = self.connect("expose-event", callback) self.writeView.connect("key-press-event", self.onKeyPress) self.writeView.grab_focus() def addMessage (self, text, my=False): glock.acquire() try: tb = self.readView.get_buffer() iter = tb.get_end_iter() # Messages have linebreak before the text. This is opposite to log # messages if tb.props.text: tb.insert(iter, "\n") tb = self.readView.get_buffer() tag = "mytext" if my else "text" tb.insert_with_tags_by_name(iter, text, tag) finally: glock.release() def onKeyPress (self, widget, event): if event.keyval in map(keyval_from_name,("Return", "KP_Enter")): if not event.state & gtk.gdk.CONTROL_MASK: buffer = self.writeView.get_buffer() self.connection.client.run_command(buffer.props.text) self.emit("messageTyped", buffer.props.text) self.addMessage(buffer.props.text, my=True) adj = self.sw.get_vadjustment() adj.set_value(adj.get_upper()) # Maintain variables backup, it will be restored to fics on quit for var in self.connection.lvm.variablesBackup: if buffer.props.text == "set %s" % var: if self.connection.lvm.variablesBackup[var] == 0: self.connection.lvm.variablesBackup[var] = 1 else: self.connection.lvm.variablesBackup[var] = 0 elif buffer.props.text in ("set %s 1" % var, "set %s on" % var, "set %s true" % var): self.connection.lvm.variablesBackup[var] = 1 elif buffer.props.text in ("set %s 0" % var, "set %s off" % var, "set %s false" % var): self.connection.lvm.variablesBackup[var] = 0 elif buffer.props.text.startswith("set %s " % var): parts = buffer.props.text.split() if len(parts) == 3 and parts[2]: self.connection.lvm.variablesBackup[var] = parts[2] # Maintain lists backup, it will be restored to fics on quit for list in self.connection.lvm.personalBackup: if buffer.props.text.startswith("addlist %s " % var) or buffer.props.text.startswith("+%s " % var): parts = buffer.props.text.split() if len(parts) == 3 and parts[2]: self.connection.lvm.personalBackup[var].add(parts[2]) if buffer.props.text.startswith("sublist %s " % var) or buffer.props.text.startswith("-%s " % var): parts = buffer.props.text.split() if len(parts) == 3 and parts[2]: self.connection.lvm.personalBackup[var].discard(parts[2]) self.history.append(buffer.props.text) buffer.props.text = "" self.pos = len(self.history) return True elif event.keyval == keyval_from_name("Up"): if self.pos > 0: buffer = self.writeView.get_buffer() self.pos -= 1 buffer.props.text = self.history[self.pos] widget.grab_focus() return True elif event.keyval == keyval_from_name("Down"): buffer = self.writeView.get_buffer() if self.pos == len(self.history)-1: self.pos += 1 buffer.props.text = "" elif self.pos < len(self.history): self.pos += 1 buffer.props.text = self.history[self.pos] widget.grab_focus() return True pychess-0.12beta3/lib/pychess/widgets/discovererDialog.py0000755000175000017470000000615012161415524022626 0ustar tamasusersimport os import gtk from Throbber import Throbber from pychess.Players.engineNest import discoverer from pychess.System import conf, uistuff from pychess.System.glock import glock_connect from pychess.System.prefix import addDataPrefix uistuff.cacheGladefile("discovererDialog.glade") class DiscovererDialog: @classmethod def init (cls, discoverer): assert not hasattr(cls, "widgets"), "Show can only be called once" cls.widgets = uistuff.GladeWidgets("discovererDialog.glade") #======================================================================= # Clear glade defaults #======================================================================= for child in cls.widgets["enginesTable"].get_children(): cls.widgets["enginesTable"].remove(child) #======================================================================= # Connect us to the discoverer #======================================================================= glock_connect(discoverer, "discovering_started", cls._onDiscoveringStarted) glock_connect(discoverer, "engine_discovered", cls._onEngineDiscovered) glock_connect(discoverer, "all_engines_discovered", cls._onAllEnginesDiscovered) cls.finished = False @classmethod def show (cls, discoverer, mainwindow): if cls.finished: return #======================================================================= # Add throbber #======================================================================= throbber = Throbber(100, 100) throbber.set_size_request(100, 100) cls.widgets["throbberDock"].add(throbber) #======================================================================= # Show the window #======================================================================= cls.widgets["discovererDialog"].set_position(gtk.WIN_POS_CENTER_ON_PARENT) cls.widgets["discovererDialog"].set_modal(True) cls.widgets["discovererDialog"].set_transient_for(mainwindow) cls.widgets["discovererDialog"].show_all() @classmethod def _onDiscoveringStarted (cls, discoverer, binnames): #====================================================================== # Insert the names to be discovered #====================================================================== cls.nameToBar = {} for i, name in enumerate(binnames): label = gtk.Label(name+":") label.props.xalign = 1 cls.widgets["enginesTable"].attach(label, 0, 1, i, i+1) bar = gtk.ProgressBar() cls.widgets["enginesTable"].attach(bar, 1, 2, i, i+1) cls.nameToBar[name] = bar @classmethod def _onEngineDiscovered (cls, discoverer, binname, xmlenginevalue): bar = cls.nameToBar[binname] bar.props.fraction = 1 @classmethod def _onAllEnginesDiscovered (cls, discoverer): cls.finished = True cls.widgets["discovererDialog"].hide() pychess-0.12beta3/lib/pychess/widgets/ChainVBox.py0000755000175000017470000001556412161415524021173 0ustar tamasusersimport cairo import gtk from gtk import gdk from gobject import SIGNAL_RUN_FIRST, TYPE_NONE from pychess.System.prefix import addDataPrefix from pychess.System import glock from BorderBox import BorderBox class ChainVBox (gtk.VBox): """ Inspired by the GIMP chainbutton widget """ __gsignals__ = { 'clicked' : (SIGNAL_RUN_FIRST, TYPE_NONE, ()) } def __init__ (self): gtk.VBox.__init__(self) chainline = ChainLine(CHAIN_TOP) self.pack_start(chainline) self.button = gtk.Button() self.pack_start(self.button, expand=False) chainline = ChainLine(CHAIN_BOTTOM) self.pack_start(chainline) self.image = gtk.Image() self.image.set_from_file(addDataPrefix("glade/stock-vchain-24.png")) self.button.set_image(self.image) self.button.set_relief(gtk.RELIEF_NONE) self.button.set_property("yalign", 0) self._active = True self.button.connect("clicked", self.onClicked) def getActive (self): return self._active def setActive (self, active): assert type(active) is bool self._active = active if self._active is True: self.image.set_from_file(addDataPrefix("glade/stock-vchain-24.png")) else: self.image.set_from_file(addDataPrefix("glade/stock-vchain-broken-24.png")) active = property(getActive, setActive) def onClicked (self, button): if self._active is False: self.image.set_from_file(addDataPrefix("glade/stock-vchain-24.png")) self._active = True else: self.image.set_from_file(addDataPrefix("glade/stock-vchain-broken-24.png")) self._active = False self.emit("clicked") CHAIN_TOP, CHAIN_BOTTOM = range(2) SHORT_LINE = 2 LONG_LINE = 8 class ChainLine (gtk.Alignment): """ The ChainLine's are the little right-angle lines above and below the chain button that visually connect the ChainButton to the widgets who's values are "chained" together by the ChainButton being active """ def __init__ (self, position): gtk.Alignment.__init__(self) self.position = position self.connect_after("size-allocate", self.onSizeAllocate) self.connect_after("expose-event", self.onExpose) self.set_flags(gtk.NO_WINDOW) self.set_size_request(10,10) self.lastRectangle = None def onSizeAllocate(self, widget, requisition): if self.window: glock.acquire() try: a = self.get_allocation() rect = gdk.Rectangle(a.x, a.y, a.width, a.height) unionrect = self.lastRectangle.union(rect) if self.lastRectangle != None else rect self.window.invalidate_rect(unionrect, True) self.window.process_updates(True) self.lastRectangle = rect finally: glock.release() def onExpose (self, widget, event): context = widget.window.cairo_create() context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) context.clip() self.draw(context) return False ### ### the original gtk.Style.paint_polygon() way to draw, like The GIMP does it ### # def draw (self, widget, event): # a = self.get_allocation() ## print a.x, a.y, a.width, a.height # points = [None, None, None] # points[0] = (a.x + a.width/2 - SHORT_LINE, a.y + a.height/2) # points[1] = (points[0][0] + SHORT_LINE, points[0][1]) # points[2] = (points[1][0], self.position == CHAIN_TOP and a.y+a.height-1 or a.y) # if self.position == CHAIN_BOTTOM: # t = points[0] # points[0] = points[2] # points[2] = t ## print points # self.points = points # # style = widget.get_style() # style.paint_polygon(widget.get_parent_window(), # gtk.STATE_NORMAL, # gtk.SHADOW_ETCHED_OUT, # event.area, # widget, # "chainbutton", # points, # False) def __toAHalf (self, number): """ To draw thin straight lines in cairo that aren't blurry, you have to adjust the endpoints by 0.5: http://www.cairographics.org/FAQ/#sharp_lines """ return int(number) + 0.5 def draw (self, context): r = self.get_allocation() x = r.x y = r.y width = r.width - 1 height = r.height context.set_source_rgb(.2, .2, .2) # context.rectangle(0, 0, width, height) # context.fill() context.move_to(self.__toAHalf(x+width/2.)-LONG_LINE, self.__toAHalf(y+height/2.)) context.line_to(self.__toAHalf(x+width/2.), self.__toAHalf(y+height/2.)) if self.position == CHAIN_TOP: context.line_to(self.__toAHalf(x+width/2.), self.__toAHalf(float(y+height))) else: context.line_to(self.__toAHalf(x+width/2.), self.__toAHalf(y+0.)) context.set_line_width(1.0) context.set_line_cap(cairo.LINE_CAP_ROUND) context.set_line_join(cairo.LINE_JOIN_ROUND) context.stroke() def __str__ (self): a = self.get_allocation() s = "ChainLine(%s, %s, %s, %s" % (a.x, a.y, a.width, a.height) if self.points != None: points = [] for a in self.points: points.append("(%s, %s)" % (a[0], a[1])) s += ", (" + ", ".join(points) + ")" s += (self.position == CHAIN_TOP and ", CHAIN_TOP" or ", CHAIN_BOTTOM") return s + ")" if __name__ == "__main__": win = gtk.Window() chainvbox = ChainVBox() label = gtk.Label("Locked") adjustment = gtk.Adjustment(value=10, upper=100, lower=0, step_incr=1) spinbutton1 = gtk.SpinButton(adjustment=adjustment) adjustment = gtk.Adjustment(value=0, upper=100, lower=0, step_incr=1) spinbutton2 = gtk.SpinButton(adjustment=adjustment) table = gtk.Table(rows=3,columns=2) # table.attach(label,0,2,0,1) # table.attach(chainvbox,1,2,1,3) # table.attach(spinbutton1,0,1,1,2) # table.attach(spinbutton2,0,1,2,3) table.attach(label,0,2,0,1,xoptions=gtk.SHRINK) table.attach(chainvbox,1,2,1,3,xoptions=gtk.SHRINK) table.attach(spinbutton1,0,1,1,2,xoptions=gtk.SHRINK) table.attach(spinbutton2,0,1,2,3,xoptions=gtk.SHRINK) table.set_row_spacings(2) def onChainBoxClicked (*whatever): if chainvbox.active == False: label.set_label("Unlocked") else: label.set_label("Locked") chainvbox.connect("clicked", onChainBoxClicked) bb = BorderBox(widget=table) win.add(bb) # win.resize(150,100) win.connect("delete-event", gtk.main_quit) win.show_all() gtk.main() pychess-0.12beta3/lib/pychess/widgets/ChatWindow.py0000755000175000017470000006214612172734514021424 0ustar tamasusersimport time import gtk import gobject import pango import re from pychess.Utils.IconLoader import load_icon from pychess.System import uistuff from pychess.System.glock import glock_connect from pychess.widgets.ChatView import ChatView from pychess.widgets.pydock.PyDockTop import PyDockTop from pychess.widgets.pydock import NORTH, EAST, SOUTH, WEST, CENTER from pychess.ic.FICSObjects import FICSPlayer TYPE_PERSONAL, TYPE_CHANNEL = range(2) def get_playername (playername): m = re.match("(\w+)\W*", playername) return m.groups()[0] class BulletCellRenderer (gtk.GenericCellRenderer): __gproperties__ = { "color": (object, "Color", "Color", gobject.PARAM_READWRITE), } def __init__(self): self.__gobject_init__() self.color = None self.width = 16 self.height = 16 def do_set_property(self, pspec, value): setattr(self, pspec.name, value) def do_get_property(self, pspec): return getattr(self, pspec.name) def on_render(self, window, widget, bg_area, cell_area, expose_area, flags): if not self.color: return x, y = self.get_size(widget, cell_area)[:2] context = window.cairo_create() r,g,b = self.color context.set_source_rgb (r,g,b) context.rectangle (x, y, self.width, self.height) context.fill() context.set_line_width (1) context.set_source_rgba (0, 0, 0, 0.5) context.rectangle (x+0.5, y+0.5, self.width-1, self.height-1) context.stroke () context.set_line_width (1) context.set_source_rgba (1, 1, 1, 0.5) context.rectangle (x+1.5, y+1.5, self.width-3, self.height-3) context.stroke () def on_get_size(self, widget, cell_area=None): if cell_area: y = int(cell_area.height/2.-self.height/2.) + cell_area.y x = cell_area.x else: y = 0 x = 0 return (x+1, y+1, self.width+2, self.height+2) gobject.type_register(BulletCellRenderer) class TextImageTree (gtk.TreeView): """ Defines a tree with two columns. The first one has text. The seccond one a clickable stock_icon """ __gsignals__ = { 'activated' : (gobject.SIGNAL_RUN_FIRST, None, (str,str,int)), 'selected' : (gobject.SIGNAL_RUN_FIRST, None, (str,int)) } def __init__(self, icon_name): gtk.TreeView.__init__(self) self.id2iter = {} self.icon_name = icon_name self.props.model = gtk.ListStore(str,str,int) self.idSet = set() self.set_headers_visible(False) self.set_tooltip_column(1) self.set_search_column(1) # First column crt = gtk.CellRendererText() crt.props.ellipsize = pango.ELLIPSIZE_END self.leftcol = gtk.TreeViewColumn("", crt, text=1) self.leftcol.set_expand(True) self.append_column(self.leftcol) # Second column pixbuf = load_icon(16, icon_name) crp = gtk.CellRendererPixbuf() crp.props.pixbuf = pixbuf self.rightcol = gtk.TreeViewColumn("", crp) self.append_column(self.rightcol) # Mouse self.pressed = None self.stdcursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) self.linkcursor = gtk.gdk.Cursor(gtk.gdk.HAND2) self.connect("button_press_event", self.button_press) self.connect("button_release_event", self.button_release) self.connect("motion_notify_event", self.motion_notify) self.connect("leave_notify_event", self.leave_notify) # Selection self.get_selection().connect("changed", self.selection_changed) def addRow (self, id, text, type): if id in self.id2iter: return iter = self.props.model.append([id, text, type]) self.id2iter[id] = iter self.idSet.add(id) def removeRow (self, id): try: iter = self.id2iter[id] except KeyError: return self.props.model.remove(iter) del self.id2iter[id] self.idSet.remove(id) def selectRow (self, id): iter = self.id2iter[id] self.get_selection().select_iter(iter) def __contains__ (self, id): return id in self.idSet def button_press (self, widget, event): path_col_pos = self.get_path_at_pos(int(event.x), int(event.y)) if path_col_pos and path_col_pos[1] == self.rightcol: self.pressed = path_col_pos[0] def button_release (self, widget, event): path_col_pos = self.get_path_at_pos(int(event.x), int(event.y)) if path_col_pos and path_col_pos[1] == self.rightcol: if self.pressed == path_col_pos[0]: iter = self.props.model.get_iter(self.pressed) id = self.props.model.get_value(iter, 0) text = self.props.model.get_value(iter, 1) type = self.props.model.get_value(iter, 2) self.emit("activated", id, text, type) self.pressed = None def motion_notify (self, widget, event): path_col_pos = self.get_path_at_pos(int(event.x), int(event.y)) if path_col_pos and path_col_pos[1] == self.rightcol: self.window.set_cursor(self.linkcursor) else: self.window.set_cursor(self.stdcursor) def leave_notify (self, widget, event): self.window.set_cursor(self.stdcursor) def selection_changed (self, selection): model, iter = selection.get_selected() if iter: id = model.get_value(iter, 0) type = model.get_value(iter, 2) self.emit("selected", id, type) class Panel: def start (self): pass def addItem (self, id, text, type, chatView): pass def removeItem (self, id): pass def selectItem (self, id): pass #=============================================================================== # Panels #=============================================================================== class ViewsPanel (gtk.Notebook, Panel): def __init__ (self, connection): gtk.Notebook.__init__(self) self.set_show_tabs(False) self.set_show_border(False) self.id2Widget = {} self.connection = connection label = gtk.Label() label.set_markup("%s" % _("You have opened no conversations yet")) label.props.xalign = .5 label.props.yalign = 0.381966011 label.props.justify = gtk.JUSTIFY_CENTER label.props.wrap = True label.props.width_request = 300 self.append_page(label, None) # When a person addresses us directly, ChannelsPanel will emit an # additem event and we add a new view. This however means that the first # message the user sends isn't registred by our privateMessage handler. # Therefore we save all messages sent by this hook, and when later we # add new items, we test if anything was already recieved self.messageBuffer = {} def globalPersonalMessage (cm, name, title, isadmin, text): if not name in self.messageBuffer: self.messageBuffer[name] = [] self.messageBuffer[name].append((title, isadmin, text)) self.connection.cm.connect("privateMessage", globalPersonalMessage) def addItem (self, id, name, type, chatView): chatView.connect("messageTyped", self.onMessageTyped, id, name, type) glock_connect(self.connection.cm, "channelMessage", self.onChannelMessage, id, chatView) glock_connect(self.connection.cm, "privateMessage", self.onPersonMessage, get_playername(name), chatView) if type == TYPE_CHANNEL: glock_connect(self.connection.cm, "channelLog", self.onChannelLog, id, chatView) self.connection.cm.getChannelLog(id) if not self.connection.cm.mayTellChannel(id): chatView.disable(_("Only registered users may talk to this channel")) elif type == TYPE_PERSONAL: if name in self.messageBuffer: for title, isadmin, messagetext in self.messageBuffer[name]: chatView.addMessage(name, messagetext) del self.messageBuffer[name] self.addPage(chatView, id) def removeItem (self, id): self.removePage(id) def selectItem (self, id): child = self.id2Widget[id] self.set_current_page(self.page_num(child)) def onChannelLog (self, cm, channel, time, handle, text, name_, chatView): if channel.lower() == name_.lower(): chatView.insertLogMessage(time, handle, text) def onMessageTyped (self, chatView, text, id, name, type): if type == TYPE_CHANNEL: self.connection.cm.tellChannel(id, text) elif type == TYPE_PERSONAL: self.connection.cm.tellPlayer(get_playername(name), text) chatView.addMessage(self.connection.getUsername(), text) def onPersonMessage (self, cm, name, title, isadmin, text, name_, chatView): if name.lower() == name_.lower(): chatView.addMessage(name, text) def onChannelMessage (self, cm, name, isadmin, isme, channel, text, name_, chatView): if channel.lower() == name_.lower() and not isme: chatView.addMessage(name, text) def addPage (self, widget, id): self.id2Widget[id] = widget self.append_page(widget) widget.show_all() def removePage (self, id): child = self.id2Widget.pop(id) self.remove_page(self.page_num(child)) class InfoPanel (gtk.Notebook, Panel): def __init__ (self, connection): gtk.Notebook.__init__(self) self.set_show_tabs(False) self.set_show_border(False) self.id2Widget = {} label = gtk.Label() label.set_markup("%s" % _("No conversation's selected")) label.props.xalign = .5 label.props.yalign = 0.381966011 label.props.justify = gtk.JUSTIFY_CENTER label.props.wrap = True label.props.width_request = 115 self.append_page(label, None) self.connection = connection def addItem (self, id, text, type, chatView): if type == TYPE_PERSONAL: infoItem = self.PlayerInfoItem(id, text, chatView, self.connection) elif type == TYPE_CHANNEL: infoItem = self.ChannelInfoItem(id, text, chatView, self.connection) self.addPage(infoItem, id) def removeItem (self, id): self.removePage(id) def selectItem (self, id): child = self.id2Widget[id] self.set_current_page(self.page_num(child)) def addPage (self, widget, id): self.id2Widget[id] = widget self.append_page(widget) widget.show_all() def removePage (self, id): child = self.id2Widget.pop(id) self.remove_page(self.page_num(child)) class PlayerInfoItem (gtk.Alignment): def __init__ (self, id, text, chatView, connection): gtk.Alignment.__init__(self, xscale=1, yscale=1) self.add(gtk.Label(_("Loading player data"))) playername = get_playername(text) self.fm = connection.fm self.handle_id = glock_connect(self.fm, "fingeringFinished", self.onFingeringFinished, playername) self.fm.finger(playername) def onFingeringFinished (self, fm, finger, playername): if not isinstance(self.get_child(), gtk.Label) or \ finger.getName().lower() != playername.lower(): return self.fm.disconnect(self.handle_id) label = gtk.Label() label.set_markup("%s" % playername) widget = gtk.Frame() widget.set_label_widget(label) widget.set_shadow_type(gtk.SHADOW_NONE) alignment = gtk.Alignment(0, 0, 1, 1) alignment.set_padding(3, 0, 12, 0) widget.add(alignment) store = gtk.ListStore(str,str) for i, note in enumerate(finger.getNotes()): if note: store.append([str(i+1),note]) tv = gtk.TreeView(store) tv.get_selection().set_mode(gtk.SELECTION_NONE) tv.set_headers_visible(False) tv.modify_base(gtk.STATE_NORMAL, self.get_style().bg[gtk.STATE_NORMAL].copy()) cell = gtk.CellRendererText() cell.props.cell_background_gdk = self.get_style().bg[gtk.STATE_ACTIVE].copy() cell.props.cell_background_set = True cell.props.yalign = 0 tv.append_column(gtk.TreeViewColumn("", cell, text=0)) cell = uistuff.appendAutowrapColumn(tv, 50, "Notes", text=1) cell.props.cell_background_gdk = self.get_style().bg[gtk.STATE_NORMAL].copy() cell.props.cell_background_set = True sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) sw.add(tv) alignment.add(sw) self.remove(self.get_child()) self.add(widget) widget.show_all() class ChannelInfoItem (gtk.Alignment): def __init__ (self, id, text, chatView, connection): gtk.Alignment.__init__(self, xscale=1, yscale=1) self.cm = connection.cm self.add(gtk.Label(_("Receiving list of players"))) chatView.connect("messageAdded", self.onMessageAdded) self.store = gtk.ListStore(object, # (r,g,b) Color tuple str, # name string bool # is separator ) self.handle_id = glock_connect(self.cm, "recievedNames", self.onNamesRecieved, id) self.cm.getPeopleInChannel(id) def onNamesRecieved (self, cm, channel, people, channel_): if not isinstance(self.get_child(), gtk.Label) or channel != channel_: return cm.disconnect(self.handle_id) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) list = gtk.TreeView() list.set_headers_visible(False) list.set_tooltip_column(1) list.set_model(self.store) list.append_column(gtk.TreeViewColumn("", BulletCellRenderer(), color=0)) cell = gtk.CellRendererText() cell.props.ellipsize = pango.ELLIPSIZE_END list.append_column(gtk.TreeViewColumn("", cell, text=1)) list.fixed_height_mode = True self.separatorIter = self.store.append([(),"",True]) list.set_row_separator_func(lambda m,i: m.get_value(i, 2)) sw.add(list) self.store.connect("row-inserted", lambda w,p,i: list.queue_resize()) self.store.connect("row-deleted", lambda w,i: list.queue_resize()) # Add those names. If this is not the first namesRecieve, we only # add the new names noneed = set([name for color, name, isSeparator in self.store]) for name in people: if name in noneed: continue self.store.append([(1,1,1), name, False]) self.remove(self.get_child()) self.add(sw) self.show_all() def onMessageAdded (self, chatView, sender, text, color): iter = self.store.get_iter_first() # If the names list hasn't been retrieved yet, we have to skip this if not iter: return while self.store.get_path(iter) != self.store.get_path(self.separatorIter): person = self.store.get_value(iter, 1) # If the person is already in the area before the separator, we # don't have to do anything if person.lower() == sender.lower(): return iter = self.store.iter_next(iter) # Go to iter after separator iter = self.store.iter_next(iter) while iter and self.store.iter_is_valid(iter): person = self.store.get_value(iter, 1) if person.lower() == sender.lower(): self.store.set_value(iter, 0, color) self.store.move_before(iter, self.separatorIter) return iter = self.store.iter_next(iter) # If the person was not in the area under the separator of the # store, it must be a new person, who has joined the channel, and we # simply add him before the separator self.store.insert_before(self.separatorIter, [color, sender, False]) class ChannelsPanel (gtk.ScrolledWindow, Panel): __gsignals__ = { 'conversationAdded' : (gobject.SIGNAL_RUN_FIRST, None, (str,str,int)), 'conversationRemoved' : (gobject.SIGNAL_RUN_FIRST, None, (str,)), 'conversationSelected' : (gobject.SIGNAL_RUN_FIRST, None, (str,)) } def __init__ (self, connection): gtk.ScrolledWindow.__init__(self) self.connection = connection self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) vbox = gtk.VBox() self.add_with_viewport(vbox) self.child.set_shadow_type(gtk.SHADOW_NONE) self.joinedList = TextImageTree("gtk-remove") self.joinedList.connect("activated", self.onRemove) self.joinedList.connect("selected", self.onSelect) vbox.pack_start(self.joinedList) expander = gtk.Expander(_("More channels")) vbox.pack_start(expander, expand=False) self.channelsList = TextImageTree("gtk-add") self.channelsList.connect("activated", self.onAdd) self.channelsList.fixed_height_mode = True expander.add(self.channelsList) expander = gtk.Expander(_("More players")) vbox.pack_start(expander, expand=False) self.playersList = TextImageTree("gtk-add") self.playersList.connect("activated", self.onAdd) self.playersList.fixed_height_mode = True glock_connect(connection.cm, "privateMessage", self.onPersonMessage, after=True) expander.add(self.playersList) def start (self): for id, name in self.connection.cm.getChannels(): id = self.compileId(id, TYPE_CHANNEL) self.channelsList.addRow(id, str(id) + ": " + name, TYPE_CHANNEL) for id, name in self.connection.cm.getChannels(): if id in self.connection.cm.getJoinedChannels(): id = self.compileId(id, TYPE_CHANNEL) if id.isdigit(): self.onAdd(self.channelsList, id, str(id)+": "+name, TYPE_CHANNEL) else: self.onAdd(self.channelsList, id, name, TYPE_CHANNEL) for player in self.connection.players.values(): if player.online: id = self.compileId(player.name, TYPE_PERSONAL) self.playersList.addRow(id, player.name + player.display_titles(), TYPE_PERSONAL) self.connection.players.connect("FICSPlayerEntered", lambda players, player: self.playersList.addRow( self.compileId(player.name, TYPE_PERSONAL), player.name + player.display_titles(), TYPE_PERSONAL)) self.connection.players.connect("FICSPlayerExited", lambda players, player: self.playersList.removeRow( self.compileId(player.name, TYPE_PERSONAL))) def compileId (self, id, type): if type == TYPE_PERSONAL: id = "person" + id.lower() elif type == TYPE_CHANNEL: # FIXME: We can't really add stuff to the id, as panels use it to # identify the channel assert not id.startswith("person"), "Oops, this is a problem" return id def onAdd (self, list, id, text, type): if id in list: list.removeRow(id) self.joinedList.addRow(id, text, type) self.emit('conversationAdded', id, text, type) if type == TYPE_CHANNEL: self.connection.cm.joinChannel(id) self.joinedList.selectRow(id) def onRemove (self, joinedList, id, text, type): joinedList.removeRow(id) if type == TYPE_CHANNEL: self.channelsList.addRow(id, text, type) elif type == TYPE_PERSONAL: self.playersList.addRow(id, text, type) self.emit('conversationRemoved', id) if type == TYPE_CHANNEL: self.connection.cm.removeChannel(id) def onSelect (self, joinedList, id, type): self.emit('conversationSelected', id) def onPersonMessage (self, cm, name, title, isadmin, text): if not self.compileId(name, TYPE_PERSONAL) in self.joinedList: id = self.compileId(name, TYPE_PERSONAL) self.onAdd(self.playersList, id, name, TYPE_PERSONAL) #=============================================================================== # /Panels #=============================================================================== class ChatWindow: def __init__ (self, widgets, connection): self.connection = connection self.window = None widgets["show_chat_button"].connect("clicked", self.showChat) glock_connect(connection.cm, "privateMessage", self.onPersonMessage, after=False) glock_connect(connection, "disconnected", lambda c: self.window and self.window.hide()) self.viewspanel = ViewsPanel(self.connection) self.channelspanel = ChannelsPanel(self.connection) self.infopanel = InfoPanel(self.connection) self.panels = [self.viewspanel, self.channelspanel, self.infopanel] def showChat (self, *widget): if not self.window: self.initUi() self.window.show_all() def initUi (self): self.window = gtk.Window() self.window.set_border_width(12) self.window.set_icon_name("pychess") self.window.set_title("PyChess - Internet Chess Chat") self.window.connect("delete-event", lambda w,e: w.hide() or True) uistuff.keepWindowSize("chatwindow", self.window, defaultSize=(650,400)) dock = PyDockTop("icchat") dock.show() self.window.add(dock) leaf = dock.dock(self.viewspanel, CENTER, gtk.Label("chat"), "chat") leaf.setDockable(False) self.channelspanel.connect('conversationAdded', self.onConversationAdded) self.channelspanel.connect('conversationRemoved', self.onConversationRemoved) self.channelspanel.connect('conversationSelected', self.onConversationSelected) leaf.dock(self.channelspanel, WEST, gtk.Label(_("Conversations")), "conversations") leaf.dock(self.infopanel, EAST, gtk.Label(_("Conversation info")), "info") for panel in self.panels: panel.show_all() panel.start() def onConversationAdded (self, panel, id, text, type): chatView = ChatView() for panel in self.panels: panel.addItem(id, text, type, chatView) def onConversationRemoved (self, panel, id): for panel in self.panels: panel.removeItem(id) def onConversationSelected (self, panel, id): for panel in self.panels: panel.selectItem(id) def onPersonMessage (self, cm, name, title, isadmin, text): if self.connection.bm.isPlaying(): if not self.window: self.initUi() else: self.showChat() self.window.set_urgency_hint(True) def openChatWithPlayer (self, name): self.showChat() self.window.window.raise_() cm = self.connection.cm self.onPersonMessage(cm, name, "", False, "") self.channelspanel.onPersonMessage(cm, name, "", False, "") if __name__ == "__main__": import random class LM: def getPlayerlist(self): for i in range(10): chrs = map(chr,range(ord("a"),ord("z")+1)) yield "".join(random.sample(chrs, random.randrange(20))) def getChannels(self): return [(str(i),n) for i,n in enumerate(self.getPlayerlist())] def joinChannel (self, channel): pass def connect (self, *args): pass def getPeopleInChannel (self, name): pass def finger (self, name): pass def getJoinedChannels (self): return [] class Con: def __init__ (self): self.glm = LM() self.cm = LM() self.fm = LM() cw = ChatWindow({}, Con()) globals()["_"] = lambda x:x cw.showChat() cw.window.connect("delete-event", gtk.main_quit) gtk.main() pychess-0.12beta3/lib/pychess/widgets/SetupBoard.py0000755000175000017470000000506112161415524021411 0ustar tamasusers import gtk, gtk.gdk from gobject import * from math import floor from BoardView import BoardView from pychess.Utils.const import * from pychess.Utils.Cord import Cord ALL = 0 class SetupBoard (gtk.EventBox): __gsignals__ = { 'cord_clicked' : (SIGNAL_RUN_FIRST, TYPE_NONE, (TYPE_PYOBJECT,)), } def __init__(self): gtk.EventBox.__init__(self) self.view = BoardView() self.add(self.view) self.view.showEnpassant = True self.connect("button_press_event", self.button_press) self.connect("button_release_event", self.button_release) self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK|gtk.gdk.POINTER_MOTION_MASK) self.connect("motion_notify_event", self.motion_notify) self.connect("leave_notify_event", self.leave_notify) self.brush = None # Selection and stuff # def setBrush (self, brush): self.brush = brush def getBrush (self): return self.brush def transPoint (self, x, y): if not self.view.square: return None xc, yc, square, s = self.view.square y -= yc; x -= xc y /= float(s) x /= float(s) if self.view.fromWhite: y = 8 - y else: x = 8 - x return x, y def point2Cord (self, x, y): if not self.view.square: return None point = self.transPoint(x, y) x = floor(point[0]) if self.view.fromWhite: y = floor(point[1]) else: y = floor(point[1]) if not (0 <= x <= 7 and 0 <= y <= 7): return None return Cord(x, y) def button_press (self, widget, event): self.grab_focus() cord = self.point2Cord (event.x, event.y) if self.legalCords == ALL or cord in self.legalCords: self.view.active = cord else: self.view.active = None def button_release (self, widget, event): cord = self.point2Cord (event.x, event.y) if cord == self.view.active: self.emit('cord_clicked', cord) self.view.active = None def motion_notify (self, widget, event): cord = self.point2Cord (event.x, event.y) if cord == None: return if self.legalCords == ALL or cord in self.legalCords: self.view.hover = cord else: self.view.hover = None def leave_notify (self, widget, event): a = self.get_allocation() if not (0 <= event.x < a.width and 0 <= event.y < a.height): self.view.hover = None pychess-0.12beta3/lib/pychess/widgets/ChatView.py0000755000175000017470000001362212172734446021066 0ustar tamasusersfrom time import strftime, gmtime, localtime import random import gtk from gtk.gdk import keyval_from_name import pango import gobject from pychess.System import glock from pychess.System import uistuff from BorderBox import BorderBox class ChatView (gtk.VPaned): __gsignals__ = { 'messageAdded' : (gobject.SIGNAL_RUN_FIRST, None, (str,str,object)), 'messageTyped' : (gobject.SIGNAL_RUN_FIRST, None, (str,)) } def __init__ (self): gtk.VPaned.__init__(self) # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = gtk.TextView() sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.set_shadow_type(gtk.SHADOW_NONE) sw.set_size_request(-1, 20) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.props.wrap_mode = gtk.WRAP_WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 #self.readView.get_buffer().create_tag("log", # foreground = self.readView.get_style().fg[gtk.STATE_INSENSITIVE]) self.pack1(BorderBox(sw,bottom=True), resize=True, shrink=True) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = gtk.TextView() sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.set_shadow_type(gtk.SHADOW_NONE) sw.add(self.writeView) self.writeView.props.wrap_mode = gtk.WRAP_WORD self.writeView.props.pixels_below_lines = 1 self.writeView.props.pixels_above_lines = 2 self.writeView.props.left_margin = 2 self.pack2(BorderBox(sw,top=True), resize=True, shrink=True) # Forces are reasonable position for the panner. def callback (widget, event): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.70*allocation.height, allocation.height-60))) handle_id = self.connect("expose-event", callback) self.writeView.connect("key-press-event", self.onKeyPress) def _ensureColor(self, pref): """ Ensures that the tags for pref_normal and pref_bold are set in the text buffer """ tb = self.readView.get_buffer() if not pref in self.colors: color = uistuff.genColor(len(self.colors) + 1, self.startpoint) self.colors[pref] = color color = [int(c * 255) for c in color] color = "#" + "".join([hex(v)[2:].zfill(2) for v in color]) tb.create_tag(pref + "_normal", foreground=color) tb.create_tag(pref + "_bold", foreground=color, weight=pango.WEIGHT_BOLD) def clear (self): self.writeView.get_buffer().props.text = "" self.readView.get_buffer().props.text = "" tagtable = self.readView.get_buffer().get_tag_table() for i in xrange(len(self.colors)): tagtable.remove("%d_normal" % i) tagtable.remove("%d_bold" % i) self.colors.clear() def __addMessage (self, iter, time, sender, text): pref = sender.lower() tb = self.readView.get_buffer() # Calculate a color for the sender self._ensureColor(pref) # Insert time, name and text with different stylesd tb.insert_with_tags_by_name(iter, "(%s) "%time, pref+"_normal") tb.insert_with_tags_by_name(iter, sender+": ", pref+"_bold") tb.insert(iter, text) # This is used to buzz the user and add senders to a list of active participants self.emit("messageAdded", sender, text, self.colors[pref]) def insertLogMessage (self, timestamp, sender, text): """ Takes a list of (timestamp, sender, text) pairs, and inserts them in the beginning of the document. All text will be in a gray color """ glock.acquire() try: tb = self.readView.get_buffer() iter = tb.get_iter_at_mark(tb.get_mark("logMark")) time = strftime("%H:%M:%S", localtime(timestamp)) self.__addMessage(iter, time, sender, text) tb.insert(iter, "\n") finally: glock.release() def addMessage (self, sender, text): glock.acquire() try: tb = self.readView.get_buffer() iter = tb.get_end_iter() # Messages have linebreak before the text. This is opposite to log # messages if tb.props.text: tb.insert(iter, "\n") self.__addMessage(iter, strftime("%H:%M:%S"), sender, text) finally: glock.release() def disable (self, message): """ Sets the write field insensitive, in cases where the channel is read only. Use the message to give the user a propriate exlpanation """ self.writeView.set_sensitive(False) self.writeView.props.buffer.set_text(message) def enable (self): self.writeView.props.buffer.set_text("") self.writeView.set_sensitive(True) def onKeyPress (self, widget, event): if event.keyval in map(keyval_from_name,("Return", "KP_Enter")): if not event.state & gtk.gdk.CONTROL_MASK: buffer = self.writeView.get_buffer() self.emit("messageTyped", buffer.props.text) buffer.props.text = "" return True pychess-0.12beta3/lib/pychess/widgets/Throbber.py0000755000175000017470000000431612161415524021112 0ustar tamasusersimport sys import time import math import gtk import gobject import cairo if sys.platform == 'win32': from pychess.System.WinRsvg import rsvg else: import rsvg from pychess.System.uistuff import addDataPrefix from pychess.System.repeat import repeat_sleep from pychess.System import glock MAX_FPS = 20 RAD_PS = 2*math.pi class Throbber (gtk.DrawingArea): def __init__(self, width, height): gtk.DrawingArea.__init__(self) self.connect("expose_event", self.__expose) self.surface = self.__loadSvg(addDataPrefix("glade/throbber.svg"), width, height) self.width = width self.height = height self.started = False repeat_sleep(self.redraw, 1./MAX_FPS) def __expose(self, widget, event): context = widget.window.cairo_create() if not self.started: self.started = time.time() ds = time.time() - self.started r = -RAD_PS * ds matrix = cairo.Matrix() matrix.translate(self.width/2, self.height/2) matrix.rotate(int(r/(2*math.pi)*12)/12.*2*math.pi) matrix.translate(-self.width/2, -self.height/2) context.transform(matrix) context.set_source_surface(self.surface, 0, 0) context.paint() def redraw (self): if self.window: glock.acquire() try: if self.window: a = self.get_allocation() rect = gtk.gdk.Rectangle(0, 0, a.width, a.height) self.window.invalidate_rect(rect, True) self.window.process_updates(True) return True finally: glock.release() def __loadSvg (self, path, width, height): svg = rsvg.Handle(path) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) context = cairo.Context(surface) context.set_operator(cairo.OPERATOR_SOURCE) if svg.props.width != width or svg.props.height != height: context.scale(width/float(svg.props.width), height/float(svg.props.height)) svg.render_cairo(context) return surface pychess-0.12beta3/lib/pychess/widgets/ImageMenu.py0000755000175000017470000001030712161415524021207 0ustar tamasusersimport gtk class ImageMenu(gtk.EventBox): def __init__ (self, image, child): gtk.EventBox.__init__(self) self.add(image) self.subwindow = gtk.Window() self.subwindow.set_decorated(False) self.subwindow.set_resizable(False) self.subwindow.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.subwindow.add(child) self.subwindow.connect_after("expose-event", self.__sub_onExpose) self.subwindow.connect("button_press_event", self.__sub_onPress) self.subwindow.connect("motion_notify_event", self.__sub_onMotion) self.subwindow.connect("leave_notify_event", self.__sub_onMotion) self.subwindow.connect("delete-event", self.__sub_onDelete) self.subwindow.connect("focus-out-event", self.__sub_onFocusOut) child.show_all() self.setOpen(False) self.connect("button_press_event", self.__onPress) def setOpen (self, isopen): self.isopen = isopen if isopen: topwindow = self.get_parent() while not isinstance(topwindow, gtk.Window): topwindow = topwindow.get_parent() x, y = topwindow.window.get_position() x += self.get_allocation().x + self.get_allocation().width y += self.get_allocation().y self.subwindow.move(x, y) self.subwindow.props.visible = isopen self.set_state(self.isopen and gtk.STATE_SELECTED or gtk.STATE_NORMAL) def __onPress (self, self_, event): if event.button == 1 and event.type == gtk.gdk.BUTTON_PRESS: self.setOpen(not self.isopen) def __sub_setGrabbed (self, grabbed): if grabbed and not gtk.gdk.pointer_is_grabbed(): gtk.gdk.pointer_grab(self.subwindow.window, event_mask = gtk.gdk.LEAVE_NOTIFY_MASK| gtk.gdk.POINTER_MOTION_MASK| gtk.gdk.BUTTON_PRESS_MASK) gtk.gdk.keyboard_grab(self.subwindow.window) elif gtk.gdk.pointer_is_grabbed(): gtk.gdk.pointer_ungrab() gtk.gdk.keyboard_ungrab() def __sub_onMotion (self, subwindow, event): a = subwindow.get_allocation() self.__sub_setGrabbed(not (0 <= event.x < a.width and 0 <= event.y < a.height)) def __sub_onPress (self, subwindow, event): a = subwindow.get_allocation() if not (0 <= event.x < a.width and 0 <= event.y < a.height): gtk.gdk.pointer_ungrab(event.time) self.setOpen(False) def __sub_onExpose (self, subwindow, event): a = subwindow.get_allocation() context = subwindow.window.cairo_create() context.set_line_width(2) context.rectangle (a.x, a.y, a.width, a.height) context.set_source_color(self.get_style().dark[gtk.STATE_NORMAL]) context.stroke() self.__sub_setGrabbed(self.isopen) def __sub_onDelete (self, subwindow, event): self.setOpen(False) return True def __sub_onFocusOut (self, subwindow, event): self.setOpen(False) def switchWithImage (image, dialog): parent = image.get_parent() parent.remove(image) imageMenu = ImageMenu(image, dialog) parent.add(imageMenu) imageMenu.show() if __name__ == "__main__": win = gtk.Window() vbox = gtk.VBox() vbox.add(gtk.Label("Her er der en kat")) image = gtk.image_new_from_icon_name("gtk-properties", gtk.ICON_SIZE_BUTTON) vbox.add(image) vbox.add(gtk.Label("Her er der ikke en kat")) win.add(vbox) table = gtk.Table(2, 2) table.attach(gtk.Label("Minutes:"), 0, 1, 0, 1) spin1 = gtk.SpinButton(gtk.Adjustment(0,0,100,1)) table.attach(spin1, 1, 2, 0, 1) table.attach(gtk.Label("Gain:"), 0, 1, 1, 2) spin2 = gtk.SpinButton(gtk.Adjustment(0,0,100,1)) table.attach(spin2, 1, 2, 1, 2) table.set_border_width(6) switchWithImage(image, table) def onValueChanged (spin): print spin.get_value() spin1.connect("value-changed", onValueChanged) spin2.connect("value-changed", onValueChanged) win.show_all() win.connect("delete-event", gtk.main_quit) gtk.main() pychess-0.12beta3/lib/pychess/widgets/gamewidget.py0000755000175000017470000010125112175035404021454 0ustar tamasusers """ This module handles the tabbed layout in PyChess """ from BoardControl import BoardControl from ChessClock import ChessClock from MenuItemsDict import MenuItemsDict from pychess.System import glock, conf, prefix from pychess.System.Log import log from pychess.System.glock import glock_connect from pychess.System.prefix import addUserConfigPrefix from pychess.System.uistuff import makeYellow from pychess.Utils.GameModel import GameModel from pychess.Utils.IconLoader import load_icon from pychess.Utils.const import * from pychess.Utils.lutils import lmove from pychess.Utils.logic import playerHasMatingMaterial, isClaimableDraw from pychess.ic.ICGameModel import ICGameModel from pychess.widgets.InfoBar import InfoBar from pydock.PyDockTop import PyDockTop from pydock.__init__ import CENTER, EAST, SOUTH import cStringIO import gtk import gobject import imp import os import traceback ################################################################################ # Initialize modul constants, and a few worker functions # ################################################################################ def createAlignment (top, right, bottom, left): align = gtk.Alignment(.5, .5, 1, 1) align.set_property("top-padding", top) align.set_property("right-padding", right) align.set_property("bottom-padding", bottom) align.set_property("left-padding", left) return align def cleanNotebook (): notebook = gtk.Notebook() notebook.set_show_tabs(False) notebook.set_show_border(False) return notebook def createImage (pixbuf): image = gtk.Image() image.set_from_pixbuf(pixbuf) return image light_on = load_icon(16, "stock_3d-light-on", "weather-clear") light_off = load_icon(16, "stock_3d-light-off", "weather-clear-night") gtk_close = load_icon(16, "gtk-close") media_previous = load_icon(16, "gtk-media-previous-ltr") media_rewind = load_icon(16, "gtk-media-rewind-ltr") media_forward = load_icon(16, "gtk-media-forward-ltr") media_next = load_icon(16, "gtk-media-next-ltr") path = prefix.addDataPrefix("sidepanel") postfix = "Panel.py" files = [f[:-3] for f in os.listdir(path) if f.endswith(postfix)] sidePanels = [imp.load_module(f, *imp.find_module(f, [path])) for f in files] dockLocation = addUserConfigPrefix("pydock.xml") ################################################################################ # Initialize module variables # ################################################################################ widgets = None def setWidgets (w): global widgets widgets = w def getWidgets (): return widgets key2gmwidg = {} notebooks = {"board": cleanNotebook(), "statusbar": cleanNotebook(), "messageArea": cleanNotebook()} for panel in sidePanels: notebooks[panel.__name__] = cleanNotebook() docks = {"board": (gtk.Label("Board"), notebooks["board"])} ################################################################################ # The holder class for tab releated widgets # ################################################################################ class GameWidget (gobject.GObject): __gsignals__ = { 'close_clicked': (gobject.SIGNAL_RUN_FIRST, None, ()), 'infront': (gobject.SIGNAL_RUN_FIRST, None, ()), 'title_changed': (gobject.SIGNAL_RUN_FIRST, None, ()), 'closed': (gobject.SIGNAL_RUN_FIRST, None, ()), } def __init__ (self, gamemodel): gobject.GObject.__init__(self) self.gamemodel = gamemodel tabcontent = self.initTabcontents() boardvbox, board, infobar = self.initBoardAndClock(gamemodel) statusbar, stat_hbox = self.initStatusbar(board) self.tabcontent = tabcontent self.board = board self.statusbar = statusbar self.infobar = infobar self.messages = [] self.notebookKey = gtk.Label(); self.notebookKey.set_size_request(0,0) self.boardvbox = boardvbox self.stat_hbox = stat_hbox self.menuitems = MenuItemsDict(self) gamemodel.connect("game_started", self.game_started) gamemodel.connect("game_ended", self.game_ended) gamemodel.connect("game_changed", self.game_changed) gamemodel.connect("game_paused", self.game_paused) gamemodel.connect("game_resumed", self.game_resumed) gamemodel.connect("moves_undone", self.moves_undone) gamemodel.connect("game_unended", self.game_unended) gamemodel.connect("game_saved", self.game_saved) gamemodel.connect("players_changed", self.players_changed) gamemodel.connect("analyzer_added", self.analyzer_added) gamemodel.connect("analyzer_removed", self.analyzer_removed) gamemodel.connect("analyzer_resumed", self.analyzer_resumed) gamemodel.connect("analyzer_paused", self.analyzer_paused) self.players_changed(gamemodel) if gamemodel.timemodel: gamemodel.timemodel.connect("zero_reached", self.zero_reached) # Help crazyhouse testing #board.view.connect("shown_changed", self.shown_changed) self.analyzer_cids = {} # Some stuff in the sidepanels .load functions might change UI, so we # need glock # TODO: Really? glock.acquire() try: self.panels = [panel.Sidepanel().load(self) for panel in sidePanels] finally: glock.release() def __del__ (self): self.board.__del__() def _update_menu_abort (self): if self.gamemodel.isEngine2EngineGame(): self.menuitems["abort"].sensitive = True self.menuitems["abort"].tooltip = "" elif self.gamemodel.isObservationGame(): self.menuitems["abort"].sensitive = False elif isinstance(self.gamemodel, ICGameModel) \ and self.gamemodel.status in UNFINISHED_STATES: if self.gamemodel.ply < 2: self.menuitems["abort"].label = _("Abort") self.menuitems["abort"].tooltip = \ _("This game can be automatically aborted without rating loss because there has not yet been two moves made") else: self.menuitems["abort"].label = _("Offer Abort") self.menuitems["abort"].tooltip = \ _("Your opponent must agree to abort the game because there has been two or more moves made") self.menuitems["abort"].sensitive = True else: self.menuitems["abort"].sensitive = False self.menuitems["abort"].tooltip = "" def _update_menu_adjourn (self): self.menuitems["adjourn"].sensitive = \ isinstance(self.gamemodel, ICGameModel) and \ self.gamemodel.status in UNFINISHED_STATES and \ not self.gamemodel.isObservationGame() and \ not self.gamemodel.hasGuestPlayers() if isinstance(self.gamemodel, ICGameModel) and \ self.gamemodel.status in UNFINISHED_STATES and \ not self.gamemodel.isObservationGame() and \ self.gamemodel.hasGuestPlayers(): self.menuitems["adjourn"].tooltip = \ _("This game can not be adjourned because one or both players are guests") else: self.menuitems["adjourn"].tooltip = "" def _update_menu_draw (self): self.menuitems["draw"].sensitive = self.gamemodel.status in UNFINISHED_STATES \ and not self.gamemodel.isObservationGame() def can_win (color): if self.gamemodel.timemodel: return playerHasMatingMaterial(self.gamemodel.boards[-1], color) and \ self.gamemodel.timemodel.getPlayerTime(color) > 0 else: return playerHasMatingMaterial(self.gamemodel.boards[-1], color) if isClaimableDraw(self.gamemodel.boards[-1]) or not \ (can_win(self.gamemodel.players[0].color) or \ can_win(self.gamemodel.players[1].color)): self.menuitems["draw"].label = _("Claim Draw") def _update_menu_resign (self): self.menuitems["resign"].sensitive = self.gamemodel.status in UNFINISHED_STATES \ and not self.gamemodel.isObservationGame() def _update_menu_pause_and_resume (self): self.menuitems["pause1"].sensitive = self.gamemodel.status == RUNNING \ and (self.gamemodel.isEngine2EngineGame() or not self.gamemodel.isObservationGame()) self.menuitems["resume1"].sensitive = self.gamemodel.status == PAUSED \ and (self.gamemodel.isEngine2EngineGame() or not self.gamemodel.isObservationGame()) # TODO: if IC game is over and opponent is available, enable Resume def _update_menu_undo (self): if self.gamemodel.isObservationGame(): self.menuitems["undo1"].sensitive = False elif isinstance(self.gamemodel, ICGameModel): if self.gamemodel.status in UNFINISHED_STATES and self.gamemodel.ply > 0: self.menuitems["undo1"].sensitive = True else: self.menuitems["undo1"].sensitive = False elif self.gamemodel.ply > 0 \ and self.gamemodel.status in UNDOABLE_STATES + (RUNNING,): self.menuitems["undo1"].sensitive = True else: self.menuitems["undo1"].sensitive = False def _update_menu_ask_to_move (self): if self.gamemodel.isObservationGame(): self.menuitems["ask_to_move"].sensitive = False elif isinstance(self.gamemodel, ICGameModel): self.menuitems["ask_to_move"].sensitive = False elif self.gamemodel.waitingplayer.__type__ == LOCAL \ and self.gamemodel.status in UNFINISHED_STATES \ and self.gamemodel.status != PAUSED: self.menuitems["ask_to_move"].sensitive = True else: self.menuitems["ask_to_move"].sensitive = False def _showHolding (self, holding): figurines = ["", ""] for color in (BLACK, WHITE): for piece in holding[color].keys(): count = holding[color][piece] figurines[color] += " " if count==0 else FAN_PIECES[color][piece]*count self.status(figurines[BLACK] + " " + figurines[WHITE]) def shown_changed (self, boardview, shown): if self.gamemodel.boards[-1].variant == CRAZYHOUSECHESS: holding = self.gamemodel.getBoardAtPly(shown, boardview.variation).board.holding self._showHolding(holding) def game_started (self, gamemodel): self._update_menu_abort() self._update_menu_adjourn() self._update_menu_draw() self._update_menu_pause_and_resume() self._update_menu_resign() self._update_menu_undo() self._update_menu_ask_to_move() def game_ended (self, gamemodel, reason): for item in self.menuitems: if item not in self.menuitems.VIEW_MENU_ITEMS: self.menuitems[item].sensitive = False self._update_menu_undo() self._set_arrow(HINT, None) self._set_arrow(SPY, None) return False def game_changed (self, gamemodel): '''This runs when the game changes. It updates everything.''' self._update_menu_abort() self._update_menu_ask_to_move() self._update_menu_draw() self._update_menu_pause_and_resume() self._update_menu_undo() self._set_arrow(HINT, None) self._set_arrow(SPY, None) self.name_changed(gamemodel.players[0]) #We may need to add * to name return False def game_saved(self, gamemodel, uri): '''Run when the game is saved. Will remove * from title.''' self.name_changed(gamemodel.players[0]) #We may need to remove * in name return False def game_paused (self, gamemodel): self._update_menu_pause_and_resume() self._update_menu_undo() self._update_menu_ask_to_move() return False def game_resumed (self, gamemodel): self._update_menu_pause_and_resume() self._update_menu_undo() self._update_menu_ask_to_move() return False def moves_undone (self, gamemodel, moves): self.game_changed(gamemodel) return False def game_unended (self, gamemodel): self._update_menu_abort() self._update_menu_adjourn() self._update_menu_draw() self._update_menu_pause_and_resume() self._update_menu_resign() self._update_menu_undo() self._update_menu_ask_to_move() return False def players_changed (self, gamemodel): for player in gamemodel.players: self.name_changed(player) # Notice that this may connect the same player many times. In # normal use that shouldn't be a problem. glock_connect(player, "name_changed", self.name_changed) def _set_arrow (self, analyzer_type, coordinates): if self.gamemodel.isPlayingICSGame(): return if analyzer_type == HINT: self.board.view._set_greenarrow(coordinates) else: self.board.view._set_redarrow(coordinates) def _on_analyze (self, analyzer, analysis, analyzer_type): if len(analysis) >= 1 and analysis[0] is not None: moves = analysis[0][0] if moves and (self.gamemodel.curplayer.__type__ == LOCAL or \ [player.__type__ for player in self.gamemodel.players] == [REMOTE, REMOTE]): if moves[0].flag == DROP: board = self.gamemodel.boards[-1] piece = lmove.FCORD(moves[0].move) color = board.color if analyzer_type == HINT else 1-board.color cord0 = board.getHoldingCord(color, piece) self._set_arrow(analyzer_type, (cord0, moves[0].cord1)) else: self._set_arrow(analyzer_type, moves[0].cords) else: self._set_arrow(analyzer_type, None) return False def analyzer_added (self, gamemodel, analyzer, analyzer_type): self.analyzer_cids[analyzer_type] = \ analyzer.connect("analyze", self._on_analyze, analyzer_type) #self.menuitems[analyzer_type + "_mode"].active = True self.menuitems[analyzer_type + "_mode"].sensitive = True return False def analyzer_removed (self, gamemodel, analyzer, analyzer_type): self._set_arrow(analyzer_type, None) #self.menuitems[analyzer_type + "_mode"].active = False self.menuitems[analyzer_type + "_mode"].sensitive = False try: cid = self.analyzer_cids[analyzer_type] except IndexError: return False if analyzer.handler_is_connected(cid): analyzer.disconnect(cid) return False def analyzer_resumed (self, gamemodel, analyzer, analyzer_type): self.menuitems[analyzer_type + "_mode"].active = True self._on_analyze(analyzer, analyzer.getAnalysis(), analyzer_type) return False def analyzer_paused (self, gamemodel, analyzer, analyzer_type): self.menuitems[analyzer_type + "_mode"].active = False self._set_arrow(analyzer_type, None) return False @property def display_text (self): '''This will give you the name of the game.''' vs = " " + _("vs") + " " if isinstance(self.gamemodel, ICGameModel): ficsgame = self.gamemodel.ficsgame t = vs.join((ficsgame.wplayer.long_name(game_type=ficsgame.game_type), ficsgame.bplayer.long_name(game_type=ficsgame.game_type))) else: t = vs.join(map(repr, self.gamemodel.players)) if self.gamemodel.display_text != "": t += " " + self.gamemodel.display_text #if self.gamemodel.needsSave: # t="*"+t return t def name_changed (self, player): '''This activates when it should be checked if the name of the game changes.''' newText = self.display_text if newText != self.getTabText(): self.setTabText(newText) def zero_reached (self, timemodel, color): if self.gamemodel.status not in UNFINISHED_STATES: return if self.gamemodel.players[0].__type__ == LOCAL \ and self.gamemodel.players[1].__type__ == LOCAL: self.menuitems["call_flag"].sensitive = True return for player in self.gamemodel.players: opplayercolor = BLACK if player == self.gamemodel.players[WHITE] else WHITE if player.__type__ == LOCAL and opplayercolor == color: log.debug("gamewidget.zero_reached: LOCAL player=%s, color=%s\n" % \ (repr(player), str(color))) self.menuitems["call_flag"].sensitive = True break def initTabcontents(self): tabcontent = createAlignment(gtk.Notebook().props.tab_vborder,0,0,0) hbox = gtk.HBox() hbox.set_spacing(4) hbox.pack_start(createImage(light_off), expand=False) close_button = gtk.Button() close_button.set_property("can-focus", False) close_button.add(createImage(gtk_close)) close_button.set_relief(gtk.RELIEF_NONE) close_button.set_size_request(20, 18) close_button.connect("clicked", lambda w: self.emit("close_clicked")) hbox.pack_end(close_button, expand=False) label = gtk.Label("") label.set_alignment(0,.7) hbox.pack_end(label) tabcontent.add(hbox) tabcontent.show_all() # Gtk doesn't show tab labels when the rest is return tabcontent def initBoardAndClock(self, gamemodel): boardvbox = gtk.VBox() boardvbox.set_spacing(2) infobar = InfoBar() if gamemodel.timemodel: ccalign = createAlignment(0, 0, 0, 0) cclock = ChessClock() cclock.setModel(gamemodel.timemodel) ccalign.add(cclock) ccalign.set_size_request(-1, 32) boardvbox.pack_start(ccalign, expand=False) actionMenuDic = {} for item in ACTION_MENU_ITEMS: actionMenuDic[item] = widgets[item] board = BoardControl(gamemodel, actionMenuDic) boardvbox.pack_start(board) return boardvbox, board, infobar def initStatusbar(self, board): def tip (widget, x, y, keyboard_mode, tooltip, text): l = gtk.Label(text) tooltip.set_custom(l) l.show() return True stat_hbox = gtk.HBox() page_vbox = gtk.VBox() page_vbox.set_spacing(1) sep = gtk.HSeparator() sep.set_size_request(-1, 2) page_hbox = gtk.HBox() startbut = gtk.Button() startbut.add(createImage(media_previous)) startbut.set_relief(gtk.RELIEF_NONE) startbut.props.has_tooltip = True startbut.connect("query-tooltip", tip, _("Jump to initial position")) backbut = gtk.Button() backbut.add(createImage(media_rewind)) backbut.set_relief(gtk.RELIEF_NONE) backbut.props.has_tooltip = True backbut.connect("query-tooltip", tip, _("Step back one move")) forwbut = gtk.Button() forwbut.add(createImage(media_forward)) forwbut.set_relief(gtk.RELIEF_NONE) forwbut.props.has_tooltip = True forwbut.connect("query-tooltip", tip, _("Step forward one move")) endbut = gtk.Button() endbut.add(createImage(media_next)) endbut.set_relief(gtk.RELIEF_NONE) endbut.props.has_tooltip = True endbut.connect("query-tooltip", tip, _("Jump to latest position")) startbut.connect("clicked", lambda w: board.view.showFirst()) backbut.connect("clicked", lambda w: board.view.showPrev()) forwbut.connect("clicked", lambda w: board.view.showNext()) endbut.connect("clicked", lambda w: board.view.showLast()) page_hbox.pack_start(startbut) page_hbox.pack_start(backbut) page_hbox.pack_start(forwbut) page_hbox.pack_start(endbut) page_vbox.pack_start(sep) page_vbox.pack_start(page_hbox) statusbar = gtk.Statusbar() stat_hbox.pack_start(page_vbox, expand=False) stat_hbox.pack_start(statusbar) return statusbar, stat_hbox def setLocked (self, locked): """ Makes the board insensitive and turns off the tab ready indicator """ log.debug("GameWidget.setLocked: %s locked=%s\n" % (self.gamemodel.players, str(locked))) self.board.setLocked(locked) if not self.tabcontent.get_children(): return if len(self.tabcontent.child.get_children()) < 2: log.warn("GameWidget.setLocked: Not removing last tabcontent child\n") return glock.acquire() try: self.tabcontent.child.remove(self.tabcontent.child.get_children()[0]) if not locked: self.tabcontent.child.pack_start(createImage(light_on), expand=False) else: self.tabcontent.child.pack_start(createImage(light_off), expand=False) self.tabcontent.show_all() finally: glock.release() log.debug("GameWidget.setLocked: %s: returning\n" % self.gamemodel.players) def setTabText (self, text): self.tabcontent.child.get_children()[1].set_text(text) self.emit('title_changed') def getTabText (self): return self.tabcontent.child.get_children()[1].get_text() def status (self, message): glock.acquire() try: self.statusbar.pop(0) if message: #print "Setting statusbar to \"%s\"" % str(message) self.statusbar.push(0, message) finally: glock.release() def bringToFront (self): getheadbook().set_current_page(self.getPageNumber()) def isInFront(self): if not getheadbook(): return False return getheadbook().get_current_page() == self.getPageNumber() def getPageNumber (self): return getheadbook().page_num(self.notebookKey) def showMessage (self, message): self.messages.append(message) self.infobar.push_message(message) if self == cur_gmwidg(): notebooks["messageArea"].show() def removeMessages (self): for message in self.messages: message.dismiss() del self.messages[:] if self == cur_gmwidg(): notebooks["messageArea"].hide() ################################################################################ # Main handling of gamewidgets # ################################################################################ def splitit(widget): if not hasattr(widget, 'get_children'): return for child in widget.get_children(): splitit(child) widget.remove(child) def delGameWidget (gmwidg): """ Remove the widget from the GUI after the game has been terminated """ gmwidg.emit("closed") del key2gmwidg[gmwidg.notebookKey] pageNum = gmwidg.getPageNumber() headbook = getheadbook() headbook.remove_page(pageNum) for notebook in notebooks.values(): notebook.remove_page(pageNum) if headbook.get_n_pages() == 1 and conf.get("hideTabs", False): show_tabs(False) if headbook.get_n_pages() == 0: mainvbox = widgets["mainvbox"] centerVBox = mainvbox.get_children()[2] for child in centerVBox.get_children(): centerVBox.remove(child) mainvbox.remove(centerVBox) mainvbox.remove(mainvbox.get_children()[1]) mainvbox.pack_end(background) background.show() from pychess.ic.ICLogon import dialog if dialog is not None and dialog.lounge is not None: dialog.lounge.present() gmwidg.__del__() def _ensureReadForGameWidgets (): mainvbox = widgets["mainvbox"] if len(mainvbox.get_children()) == 3: return global background background = widgets["mainvbox"].get_children()[1] mainvbox.remove(background) # Initing headbook align = createAlignment (4, 4, 0, 4) align.set_property("yscale", 0) headbook = gtk.Notebook() headbook.set_scrollable(True) headbook.props.tab_vborder = 0 align.add(headbook) mainvbox.pack_start(align, expand=False) show_tabs(not conf.get("hideTabs", False)) # Initing center centerVBox = gtk.VBox() # The message area centerVBox.pack_start(notebooks["messageArea"], expand=False) def callback (notebook, gpointer, page_num): notebook.props.visible = notebook.get_nth_page(page_num).child.props.visible notebooks["messageArea"].connect("switch-page", callback) # The dock global dock, dockAlign dock = PyDockTop("main") dockAlign = createAlignment(4,4,0,4) dockAlign.add(dock) centerVBox.pack_start(dockAlign) dockAlign.show() dock.show() for panel in sidePanels: hbox = gtk.HBox() pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(panel.__icon__, 16, 16) icon = gtk.image_new_from_pixbuf(pixbuf) label = gtk.Label(panel.__title__) label.set_size_request(0, 0) label.set_alignment(0, 1) hbox.pack_start(icon, expand=False, fill=False) hbox.pack_start(label, expand=True, fill=True) hbox.set_spacing(2) hbox.show_all() def cb (widget, x, y, keyboard_mode, tooltip, title, desc, filename): table = gtk.Table(2,2) table.set_row_spacings(2) table.set_col_spacings(6) table.set_border_width(4) pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(filename, 56, 56) image = gtk.image_new_from_pixbuf(pixbuf) image.set_alignment(0, 0) table.attach(image, 0,1,0,2) titleLabel = gtk.Label() titleLabel.set_markup("%s" % title) titleLabel.set_alignment(0, 0) table.attach(titleLabel, 1,2,0,1) descLabel = gtk.Label(desc) descLabel.props.wrap = True table.attach(descLabel, 1,2,1,2) tooltip.set_custom(table) table.show_all() return True hbox.props.has_tooltip = True hbox.connect("query-tooltip", cb, panel.__title__, panel.__desc__, panel.__icon__) docks[panel.__name__] = (hbox, notebooks[panel.__name__]) if os.path.isfile(dockLocation): try: dock.loadFromXML(dockLocation, docks) except Exception, e: stringio = cStringIO.StringIO() traceback.print_exc(file=stringio) error = stringio.getvalue() log.error("Dock loading error: %s\n%s" % (e, error)) md = gtk.MessageDialog(widgets["window1"], type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_CLOSE) md.set_markup(_("PyChess was unable to load your panel settings")) md.format_secondary_text(_("Your panel settings have been reset. If this problem repeats, you should report it to the developers")) md.run() md.hide() os.remove(dockLocation) for title, panel in docks.values(): title.unparent() panel.unparent() if not os.path.isfile(dockLocation): leaf = dock.dock(docks["board"][1], CENTER, gtk.Label(docks["board"][0]), "board") docks["board"][1].show_all() leaf.setDockable(False) # S epanel = leaf.dock(docks["engineOutputPanel"][1], SOUTH, docks["engineOutputPanel"][0], "engineOutputPanel") epanel.default_item_height = 60 # NE leaf = leaf.dock(docks["annotationPanel"][1], EAST, docks["annotationPanel"][0], "annotationPanel") leaf = leaf.dock(docks["historyPanel"][1], CENTER, docks["historyPanel"][0], "historyPanel") leaf = leaf.dock(docks["scorePanel"][1], CENTER, docks["scorePanel"][0], "scorePanel") # SE leaf = leaf.dock(docks["bookPanel"][1], SOUTH, docks["bookPanel"][0], "bookPanel") leaf = leaf.dock(docks["commentPanel"][1], CENTER, docks["commentPanel"][0], "commentPanel") leaf = leaf.dock(docks["chatPanel"][1], CENTER, docks["chatPanel"][0], "chatPanel") def unrealize (dock): # unhide the panel before saving so its configuration is saved correctly notebooks["board"].get_parent().get_parent().zoomDown() dock.saveToXML(dockLocation) dock.__del__() dock.connect("unrealize", unrealize) # The status bar notebooks["statusbar"].set_border_width(4) centerVBox.pack_start(notebooks["statusbar"], expand=False) mainvbox.pack_start(centerVBox) centerVBox.show_all() mainvbox.show() # Connecting headbook to other notebooks def callback (notebook, gpointer, page_num): for notebook in notebooks.values(): notebook.set_current_page(page_num) headbook.connect("switch-page", callback) if hasattr(headbook, "set_tab_reorderable"): def page_reordered (widget, child, new_num, headbook): old_num = notebooks["board"].page_num(key2gmwidg[child].boardvbox) if old_num == -1: log.error('Games and labels are out of sync!') else: for notebook in notebooks.values(): notebook.reorder_child(notebook.get_nth_page(old_num), new_num) headbook.connect("page-reordered", page_reordered, headbook) def attachGameWidget (gmwidg): _ensureReadForGameWidgets() headbook = getheadbook() key2gmwidg[gmwidg.notebookKey] = gmwidg headbook.append_page(gmwidg.notebookKey, gmwidg.tabcontent) gmwidg.notebookKey.show_all() headbook.set_tab_label_packing(gmwidg.notebookKey, True, True, gtk.PACK_START) if hasattr(headbook, "set_tab_reorderable"): headbook.set_tab_reorderable (gmwidg.notebookKey, True) def callback (notebook, gpointer, page_num, gmwidg): if notebook.get_nth_page(page_num) == gmwidg.notebookKey: gmwidg.emit("infront") headbook.connect_after("switch-page", callback, gmwidg) gmwidg.emit("infront") align = createAlignment(4,4,0,4) align.show() align.add(gmwidg.infobar) notebooks["messageArea"].append_page(align) notebooks["board"].append_page(gmwidg.boardvbox) gmwidg.boardvbox.show_all() for panel, instance in zip(sidePanels, gmwidg.panels): notebooks[panel.__name__].append_page(instance) instance.show_all() notebooks["statusbar"].append_page(gmwidg.stat_hbox) gmwidg.stat_hbox.show_all() # We should always show tabs if more than one exists if headbook.get_n_pages() == 2: show_tabs(True) headbook.set_current_page(-1) if headbook.get_n_pages() == 1 and not widgets["show_sidepanels"].get_active(): zoomToBoard(True) def cur_gmwidg (): headbook = getheadbook() if headbook == None: return None notebookKey = headbook.get_nth_page(headbook.get_current_page()) return key2gmwidg[notebookKey] def getheadbook (): if len(widgets["mainvbox"].get_children()) == 2: # If the headbook hasn't been added yet return None return widgets["mainvbox"].get_children()[1].child def zoomToBoard (viewZoomed): if not notebooks["board"].get_parent(): return if viewZoomed: notebooks["board"].get_parent().get_parent().zoomUp() else: notebooks["board"].get_parent().get_parent().zoomDown() def show_tabs (show): if show: widgets["mainvbox"].get_children()[1].show_all() else: widgets["mainvbox"].get_children()[1].hide() def tabsCallback (none): head = getheadbook() if not head: return if head.get_n_pages() == 1: show_tabs(not conf.get("hideTabs", False)) conf.notify_add("hideTabs", tabsCallback) ################################################################################ # Handling of the special sidepanels-design-gamewidget used in preferences # ################################################################################ designGW = None def showDesignGW(): global designGW if not designGW: designGW = GameWidget(GameModel()) if isDesignGWShown(): return getWidgets()["show_sidepanels"].set_active(True) getWidgets()["show_sidepanels"].set_sensitive(False) attachGameWidget(designGW) def hideDesignGW(): if isDesignGWShown(): delGameWidget(designGW) getWidgets()["show_sidepanels"].set_sensitive(True) def isDesignGWShown(): return designGW in key2gmwidg.values() pychess-0.12beta3/lib/pychess/Savers/0000755000175000017470000000000012176727272016573 5ustar tamasuserspychess-0.12beta3/lib/pychess/Savers/ChessFile.py0000755000175000017470000000474312161415524021011 0ustar tamasusersimport datetime from pychess.Utils.const import RUNNING class LoadingError (Exception): pass class ChessFile: """ This class descripes an opened chessfile. It is lazy in the sense of not parsing any games, that the user don't request. It has no catching. """ def __init__ (self, games): """ Games should be a list of the raw file data, splitted such that games[0] is used for game 0 etc. SourceUri must be the """ self.games = games self.sourceUri = None def loadToModel (self, gameno, position, model=None): """ Load the data of game "gameno" into the gamemodel If no model is specified, a new one will be created, loaded and returned """ raise NotImplementedError def __len__ (self): return len(self.games) def get_player_names (self, gameno): """ Returns the a tuple of the players names Default is ("Unknown", "Unknown") if nothing is specified """ return ("Unknown", "Unknown") def get_elo (self, gameno): """ Returns the a tuple of the players rating in ELO format Default is 1600 if nothing is specified in the file """ return (1600, 1600) def get_date (self, gameno): """ Returns the a tuple (year,month,day) of the game date Default is current time if nothing is specified in the file """ today = datetime.date.today() return today.timetuple()[:3] def get_site (self, gameno): """ Returns the a location at which the game took place Default is "?" if nothing is specified in the file """ return "?" def get_event (self, gameno): """ Returns the event at which the game took place Could be "World Chess Cup" or "My local tournament" Default is "?" if nothing is specified in the file """ return "?" def get_round (self, gameno): """ Returns the round of the event at which the game took place Pgn supports having subrounds like 2.1.5, but as of writing, only the first int is returned. Default is 1 if nothing is specified in the file """ return 1 def get_result (self, gameno): """ Returns the result of the game Can be any of: RUNNING, DRAW, WHITEWON or BLACKWON Default is RUNNING if nothing is specified in the file """ return RUNNING pychess-0.12beta3/lib/pychess/Savers/png.py0000644000175000017470000000270712175035206017723 0ustar tamasusers# -*- coding: UTF-8 -*- import os import gtk import cairo import rsvg from pychess.Utils.const import * from pychess.gfx import Pieces from pychess.widgets.BoardView import BoardView from pychess.widgets import gamewidget from pychess.System.prefix import addDataPrefix __label__ = _("Png image") __ending__ = "png" __append__ = False PADDING = 3 SQUARE = 40 def save(file, model, position): """Export the current position into a .png file""" d = Diagram(model) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, SQUARE*8, SQUARE*8) context = cairo.Context(surface) d.shown = position d.draw_position(context) surface.write_to_png(file.name) class Diagram(BoardView): def draw_position(self, context): context.set_source_rgb(0.5, 0.5, 0.5) self.__drawBoard (context) pieces = self.model.getBoardAtPly(self.shown) context.set_source_rgb(0, 0, 0) for y, row in enumerate(pieces.data): for x, piece in row.items(): if piece is not None: Pieces.drawPiece(piece, context, x*SQUARE, (7-y)*SQUARE, SQUARE) def __drawBoard(self, context): for x in xrange(8): for y in xrange(8): if (x+y) % 2 == 1: context.rectangle(x*SQUARE, y*SQUARE, SQUARE, SQUARE) context.fill() if not self.showCords: context.rectangle(0, 0, 8*SQUARE, 8*SQUARE) context.stroke() pychess-0.12beta3/lib/pychess/Savers/chessalpha2.py0000755000175000017470000001110212164765035021334 0ustar tamasusers# -*- coding: utf-8 -*- from htmlentitydefs import entitydefs from pychess.Utils.Move import toFAN from pychess.Utils.const import * group = lambda l, s: [l[i:i+s] for i in xrange(0,len(l),s)] __label__ = _("Chess Alpha 2 Diagram") __ending__ = "html" __append__ = True #table[background][color][piece] diaPieces = ((('\'','Ê','Â','À','Ä','Æ','È'), ('\'','ê','â','à','ä','æ','è')), (('#','Ë','Ã','Á','Å','Ç','É'), ('#','ë','ã','á','å','ç','é'))) borderNums = ('¬','"','£','$','%','^','&','*') lisPieces = ((FAN_PIECES[BLACK][KNIGHT],'K'), (FAN_PIECES[BLACK][BISHOP],'J'), (FAN_PIECES[BLACK][ROOK],'L'), (FAN_PIECES[BLACK][QUEEN],'M'), (FAN_PIECES[BLACK][KING],'N'), (FAN_PIECES[WHITE][KNIGHT],'k'), (FAN_PIECES[WHITE][BISHOP],'j'), (FAN_PIECES[WHITE][ROOK],'l'), (FAN_PIECES[WHITE][QUEEN],'m'), (FAN_PIECES[WHITE][KING],'n'), ('†', '+'), ('‡', '+'), ('1/2', 'Z')) def fanconv(fan): for f,r in lisPieces: fan = fan.replace(f,r) return fan # Dictionaries and expressions for parsing diagrams entitydefs = dict(("&%s;"%a,unichr(ord(b)).encode('utf-8')) for a,b in entitydefs.iteritems() if len(b)==1) def2entity = dict((b, a) for a,b in entitydefs.iteritems()) style = """ @font-face {font-family: "Chess Alpha 2"; src: local("Chess Alpha 2"), url("http://pychess.org/fonts/ChessAlpha2.eot?") format("eot"), url("http://pychess.org/fonts/ChessAlpha2.woff") format("woff"), url("http://pychess.org/fonts/ChessAlpha2.ttf") format("truetype"), url("http://pychess.org/fonts/ChessAlpha2.svg#ChessAlpha2") format("svg"); font-weight:"normal"; font-style:"normal";} table.pychess {display:inline-block; vertical-align:top} table.pychess td {margin:0; padding:0; font-size:10pt; font-family:"Chess Alpha 2"; padding-left:.5em} table.pychess td.numa {width:0; text-align:right} table.pychess td.numa {width:0; text-align:right; padding-left:1em} table.pychess td.status {text-align:center; font-size:12pt; padding-right:2em} table.pychess pre {margin:0; padding:0; font-family:"Chess Alpha 2"; font-size:16pt; text-align:center; line-height:1}""" def save (file, model, position): """Saves the position as a diagram using chess fonts""" print >> file, "" print >> file, ""%style print >> file, "" sanmvs = map(toFAN, model.boards[:-1], model.moves) sanmvs = map(fanconv, sanmvs) if model.lowply & 1: sanmvs = [">"]+sanmvs if model.status in (DRAW, WHITEWON, BLACKWON): sanmvs.extend(['']*(-len(sanmvs)%2)) sanmvs.append(fanconv(reprResult[model.status])) sanmvs.extend(['']*(-len(sanmvs)%4)) sanmvs = group(sanmvs, 2) for i in xrange((len(sanmvs)+1)/2): left = i+1+model.lowply/2 writeMoves(file, str(i+1+model.lowply/2), sanmvs[i], str(left+len(sanmvs)/2), sanmvs[i+len(sanmvs)/2]) print >> file, "
"
    writeDiagram(file, model)
    print >> file, "
" file.close() def writeMoves(file, m1, movepair1, m2, movepair2): m1 += '.'; m2 += '.' if not movepair2[0]: m2 = '' print >> file, "%s%s%s" % (m1, movepair1[0], movepair1[1]) if not movepair2[1] and movepair2[0] in map(fanconv, reprResult): print >> file, "%s" % movepair2[0] else: print >> file, "%s%s%s" % (m2, movepair2[0], movepair2[1]) def writeDiagram(file, model, border = True, whitetop = False): data = model.boards[-1].data[:] if not whitetop: data.reverse() if border: print >> file, "[<<<<<<<<]" for y,row in enumerate(data): if whitetop: file.write(borderNums(y)) else: file.write(borderNums[7-y]) for x,piece in sorted(row.items()): # exclude captured pieces in holding if x>=0 and x<=7: bg = y%2==x%2 if piece == None: color = WHITE piece = EMPTY else: color = piece.color piece = piece.piece c = diaPieces[bg][color][piece] if c in def2entity: c = def2entity[c] file.write(c) file.write('\\\n') if border: print >> file, "{ABCDEFGH}" pychess-0.12beta3/lib/pychess/Savers/pgn.py0000755000175000017470000003134412176275355017741 0ustar tamasusers# -*- coding: UTF-8 -*- import re from datetime import date from pychess.System.Log import log from pychess.Utils.Board import Board from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.GameModel import GameModel from pychess.Utils.lutils.lmove import toSAN from pychess.Utils.Move import Move from pychess.Utils.const import * from pychess.Utils.logic import getStatus from pychess.Variants.crazyhouse import CrazyhouseChess, CrazyhouseBoard from pychess.Variants.fischerandom import FischerRandomChess, FRCBoard from pychess.Variants.wildcastle import WildcastleChess, WildcastleBoard from pgnbase import PgnBase, pgn_load from ChessFile import LoadingError __label__ = _("Chess Game") __ending__ = "pgn" __append__ = True def wrap (string, length): lines = [] last = 0 while True: if len(string)-last <= length: lines.append(string[last:]) break i = string[last:length+last].rfind(" ") lines.append(string[last:i+last]) last += i + 1 return "\n".join(lines) def msToClockTimeTag (ms): """ Converts milliseconds to a chess clock time string in 'WhiteClock'/ 'BlackClock' PGN header format """ msec = ms % 1000 sec = ((ms - msec) % (1000 * 60)) / 1000 min = ((ms - sec*1000 - msec) % (1000*60*60)) / (1000*60) hour = ((ms - min*1000*60 - sec*1000 - msec) % (1000*60*60*24)) / (1000*60*60) return "%01d:%02d:%02d.%03d" % (hour, min, sec, msec) def parseClockTimeTag (tag): """ Parses 'WhiteClock'/'BlackClock' PGN headers and returns the time the player playing that color has left on their clock in milliseconds """ match = re.match("(\d{1,2}).(\d\d).(\d\d).(\d\d\d)", tag) if match: hour, min, sec, msec = match.groups() return int(msec) + int(sec)*1000 + int(min)*60*1000 + int(hour)*60*60*1000 def save (file, model, position): status = reprResult[model.status] print >> file, '[Event "%s"]' % model.tags["Event"] print >> file, '[Site "%s"]' % model.tags["Site"] print >> file, '[Date "%04d.%02d.%02d"]' % \ (int(model.tags["Year"]), int(model.tags["Month"]), int(model.tags["Day"])) print >> file, '[Round "%s"]' % model.tags["Round"] print >> file, '[White "%s"]' % repr(model.players[WHITE]) print >> file, '[Black "%s"]' % repr(model.players[BLACK]) print >> file, '[Result "%s"]' % status if "ECO" in model.tags: print >> file, '[ECO "%s"]' % model.tags["ECO"] if "WhiteElo" in model.tags: print >> file, '[WhiteElo "%s"]' % model.tags["WhiteElo"] if "BlackElo" in model.tags: print >> file, '[BlackElo "%s"]' % model.tags["BlackElo"] if "TimeControl" in model.tags: print >> file, '[TimeControl "%s"]' % model.tags["TimeControl"] if "Time" in model.tags: print >> file, '[Time "%s"]' % str(model.tags["Time"]) if model.timemodel: print >> file, '[WhiteClock "%s"]' % \ msToClockTimeTag(int(model.timemodel.getPlayerTime(WHITE) * 1000)) print >> file, '[BlackClock "%s"]' % \ msToClockTimeTag(int(model.timemodel.getPlayerTime(BLACK) * 1000)) if issubclass(model.variant, FischerRandomChess): print >> file, '[Variant "Fischerandom"]' elif issubclass(model.variant, CrazyhouseChess): print >> file, '[Variant "Crazyhouse"]' elif issubclass(model.variant, WildcastleChess): print >> file, '[Variant "Wildcastle"]' if model.boards[0].asFen() != FEN_START: print >> file, '[SetUp "1"]' print >> file, '[FEN "%s"]' % model.boards[0].asFen() print >> file, '[PlyCount "%s"]' % (model.ply-model.lowply) if "EventDate" in model.tags: print >> file, '[EventDate "%s"]' % model.tags["EventDate"] if "Annotator" in model.tags: print >> file, '[Annotator "%s"]' % model.tags["Annotator"] print >> file result = [] walk(model.boards[0].board, result) result = " ".join(result) result = wrap(result, 80) print >> file, result, status print >> file file.close() def walk(node, result): """Prepares a game data for .pgn storage. Recursively walks the node tree to collect moves and comments into a resulting movetext string. Arguments: node - list (a tree of lboards created by the pgn parser) result - str (movetext strings)""" def store(text): if len(result) > 1 and result[-1] == "(": result[-1] = "(%s" % text elif text == ")": result[-1] = "%s)" % result[-1] else: result.append(text) while True: if node is None: break # Initial game or variation comment if node.prev is None: for child in node.children: if isinstance(child, basestring): store("{%s}" % child) node = node.next continue movecount = move_count(node) if movecount: store(movecount) move = node.lastMove store(toSAN(node.prev, move)) for nag in node.nags: if nag: store(nag) for child in node.children: if isinstance(child, basestring): # comment store("{%s}" % child) else: # variations store("(") walk(child[0], result) store(")") if node.next: node = node.next else: break def move_count(node): ply = node.plyCount if ply % 2 == 1: mvcount = "%d." % (ply/2+1) elif node.prev.prev is None or node != node.prev.next or node.prev.children: # initial game move, or initial variation move or move after comment mvcount = "%d..." % (ply/2) else: mvcount = "" return mvcount def load(file): return pgn_load(file, klass=PGNFile) class PGNFile (PgnBase): def __init__ (self, games): PgnBase.__init__(self, games) def loadToModel (self, gameno, position=-1, model=None): if not model: model = GameModel() # the seven mandatory PGN headers model.tags['Event'] = self._getTag(gameno, 'Event') model.tags['Site'] = self._getTag(gameno, 'Site') model.tags['Date'] = self._getTag(gameno, 'Date') model.tags['Round'] = self.get_round(gameno) model.tags['White'], model.tags['Black'] = self.get_player_names(gameno) model.tags['Result'] = reprResult[self.get_result(gameno)] pgnHasYearMonthDay = True for tag in ('Year', 'Month', 'Day'): if not self._getTag(gameno, tag): pgnHasYearMonthDay = False break if model.tags['Date'] and not pgnHasYearMonthDay: date_match = re.match(".*(\d{4}).(\d{2}).(\d{2}).*", model.tags['Date']) if date_match: year, month, day = date_match.groups() model.tags['Year'] = year model.tags['Month'] = month model.tags['Day'] = day # non-mandatory headers for tag in ('Annotator', 'ECO', 'EventDate', 'Time', 'WhiteElo', 'BlackElo', 'TimeControl'): if self._getTag(gameno, tag): model.tags[tag] = self._getTag(gameno, tag) # TODO: enable this when NewGameDialog is altered to give user option of # whether to use PGN's clock time, or their own custom time. Also, # dialog should set+insensitize variant based on the variant of the # game selected in the dialog # if model.timemodel: # for tag, color in (('WhiteClock', WHITE), ('BlackClock', BLACK)): # if self._getTag(gameno, tag): # try: # ms = parseClockTimeTag(self._getTag(gameno, tag)) # model.timemodel.intervals[color][0] = ms / 1000 # except ValueError: # raise LoadingError( \ # "Error parsing '%s' Header for gameno %s" % (tag, gameno)) # if model.tags['TimeControl']: # minutes, gain = parseTimeControlTag(model.tags['TimeControl']) # model.timemodel.minutes = minutes # model.timemodel.gain = gain fenstr = self._getTag(gameno, "FEN") variant = self.get_variant(gameno) if variant: # Fixes for some non statndard Chess960 .pgn if (fenstr is not None) and variant == "Fischerandom": model.tags["Variant"] = "Fischerandom" parts = fenstr.split() parts[0] = parts[0].replace(".", "/").replace("0", "") if len(parts) == 1: parts.append("w") parts.append("-") parts.append("-") fenstr = " ".join(parts) elif variant == "Crazyhouse": model.tags["Variant"] = "Crazyhouse" elif variant == "Wildcastle": model.tags["Variant"] = "Wildcastle" if variant == "Fischerandom": board = LBoard(FISCHERRANDOMCHESS) model.variant = FischerRandomChess elif variant == "Crazyhouse": board = LBoard(CRAZYHOUSECHESS) model.variant = CrazyhouseChess elif variant == "Wildcastle": board = LBoard(WILDCASTLECHESS) model.variant = WildcastleChess else: board = LBoard() if fenstr: try: board.applyFen(fenstr) except SyntaxError, e: board.applyFen(FEN_EMPTY) raise LoadingError(_("The game can't be loaded, because of an error parsing FEN"), e.args[0]) else: board.applyFen(FEN_START) boards = [board] del model.moves[:] del model.variations[:] self.error = None movetext = self.get_movetext(gameno) boards = self.parse_string(movetext, boards[0], position) # The parser built a tree of lboard objects, now we have to # create the high level Board and Move lists... for board in boards: if board.lastMove is not None: model.moves.append(Move(board.lastMove)) def walk(node, path): if node.prev is None: # initial game board if variant == "Fischerandom": board = FRCBoard(setup=node.asFen(), lboard=node) elif variant == "Crazyhouse": board = CrazyhouseBoard(setup=node.asFen(), lboard=node) else: board = Board(setup=node.asFen(), lboard=node) else: move = Move(node.lastMove) board = node.prev.pieceBoard.move(move, lboard=node) if node.next is None: model.variations.append(path+[board]) else: walk(node.next, path+[board]) for child in node.children: if isinstance(child, list): if len(child) > 1: # non empty variation, go walk walk(child[1], list(path)) # Collect all variation paths into a list of board lists # where the first one will be the boards of mainline game. # model.boards will allways point to the current shown variation # which will be model.variations[0] when we are in the mainline. walk(boards[0], []) model.boards = model.variations[0] if model.timemodel: blacks = len(model.moves)/2 whites = len(model.moves)-blacks model.timemodel.intervals = [ [model.timemodel.intervals[0][0]]*(whites+1), [model.timemodel.intervals[1][0]]*(blacks+1), ] log.debug("pgn.loadToModel: intervals %s\n" % model.timemodel.intervals) # Find the physical status of the game model.status, model.reason = getStatus(model.boards[-1]) # Apply result from .pgn if the last position was loaded if position == -1 or len(model.moves) == position - model.lowply: status = self.get_result(gameno) if status in (WHITEWON, BLACKWON) and status != model.status: model.status = status model.reason = WON_RESIGN elif status == DRAW and status != model.status: model.status = DRAW model.reason = DRAW_AGREE # If parsing gave an error we throw it now, to enlarge our possibility # of being able to continue the game from where it failed. if self.error: raise self.error return model pychess-0.12beta3/lib/pychess/Savers/__init__.py0000755000175000017470000000006612164134000020663 0ustar tamasusers__all__ = ["fen", "epd", "pgn", 'chessalpha2', 'png'] pychess-0.12beta3/lib/pychess/Savers/epd.py0000755000175000017470000001200312164244117017701 0ustar tamasusersfrom ChessFile import ChessFile, LoadingError from pychess.Utils.GameModel import GameModel from pychess.Utils.const import * from pychess.Utils.logic import getStatus from pychess.Utils.lutils.leval import evaluateComplete __label__ = _("Chess Position") __ending__ = "epd" __append__ = True def save (file, model, position): """Saves game to file in fen format""" color = model.boards[-1].color fen = model.boards[-1].asFen().split(" ") # First four parts of fen are the same in epd file.write(" ".join(fen[:4])) ############################################################################ # Repetition count # ############################################################################ rc = model.boards[-1].board.repetitionCount() ############################################################################ # Centipawn evaluation # ############################################################################ if model.status == WHITEWON: if color == WHITE: ce = 32766 else: ce = -32766 elif model.status == BLACKWON: if color == WHITE: ce = -32766 else: ce = 32766 elif model.status == DRAW: ce = 0 else: ce = evaluateComplete(model.boards[-1].board, model.boards[-1].color) ############################################################################ # Opcodes # ############################################################################ opcodes = ( ("fmvn", fen[5]), # In fen full move number is the 6th field ("hmvc", fen[4]), # In fen halfmove clock is the 5th field # Email and name of reciever and sender. We don't know the email. ("tcri", "?@?.? %s" % repr(model.players[color]).replace(";","")), ("tcsi", "?@?.? %s" % repr(model.players[1-color]).replace(";","")), ("ce", ce), ("rc", rc), ) for key, value in opcodes: file.write(" %s %s;" % (key, value)) ############################################################################ # Resign opcode # ############################################################################ if model.status in (WHITEWON, BLACKWON) and model.reason == WON_RESIGN: file.write(" resign;") print >> file file.close() def load (file): return EpdFile ([line for line in map(str.strip, file) if line]) class EpdFile (ChessFile): def loadToModel (self, gameno, position, model=None): if not model: model = GameModel() fieldlist = self.games[gameno].split(" ") if len(fieldlist) == 4: fen = self.games[gameno] opcodestr = "" elif len(fieldlist) > 4: fen = " ".join(fieldlist[:4]) opcodestr = " ".join(fieldlist[4:]) else: raise LoadingError, "EPD string can not have less than 4 field" opcodes = {} for opcode in map(str.strip, opcodestr.split(";")): space = opcode.find(" ") if space == -1: opcodes[opcode] = True else: opcodes[opcode[:space]] = opcode[space+1:] if "hmvc" in opcodes: fen += " " + opcodes["hmvc"] else: fen += " 0" if "fmvn" in opcodes: fen += " " + opcodes["fmvn"] else: fen += " 1" model.boards = [model.variant.board(setup=fen)] model.variations = [model.boards] model.status = WAITING_TO_START # rc is kinda broken #if "rc" in opcodes: # model.boards[0].board.rc = int(opcodes["rc"]) if "resign" in opcodes: if fieldlist[1] == "w": model.status = BLACKWON else: model.status = WHITEWON model.reason = WON_RESIGN if model.status == WAITING_TO_START: model.status, model.reason = getStatus(model.boards[-1]) return model def get_player_names (self, gameno): data = self.games[gameno] names = {} for key in "tcri", "tcsi": keyindex = data.find(key) if keyindex == -1: names[key] = _("Unknown") else: sem = data.find(";", keyindex) if sem == -1: opcode = data[keyindex+len(key)+1:] else: opcode = data[keyindex+len(key)+1:sem] email, name = opcode.split(" ", 1) names[key] = name color = data.split(" ")[1] == "b" and BLACK or WHITE if color == WHITE: return (names["tcri"], names["tcsi"]) else: return (names["tcsi"], names["tcri"]) pychess-0.12beta3/lib/pychess/Savers/fen.py0000755000175000017470000000217212164240440017702 0ustar tamasusersfrom pychess.Utils.GameModel import GameModel from pychess.Utils.const import WAITING_TO_START from pychess.Utils.logic import getStatus __label__ = _("Simple Chess Position") __ending__ = "fen" __append__ = True def save (file, model, position): """Saves game to file in fen format""" print >> file, model.boards[-1].asFen() file.close() def load (file): return FenFile ([line for line in map(str.strip, file) if line]) from ChessFile import ChessFile class FenFile (ChessFile): def loadToModel (self, gameno, position, model=None): if not model: model = GameModel() # We have to set full move number to 1 to make sure LBoard and GameModel # are synchronized. #fenlist = self.games[gameno].split(" ") #if len(fenlist) == 6: # fen = " ".join(fenlist[:5]) + " 1" fen = self.games[gameno] model.boards = [model.variant.board(setup=fen)] model.variations = [model.boards] if model.status == WAITING_TO_START: model.status, model.reason = getStatus(model.boards[-1]) return model pychess-0.12beta3/lib/pychess/Savers/database.py0000644000175000017470000002136612161415524020705 0ustar tamasusers# -*- coding: UTF-8 -*- from array import array from sqlalchemy import select, func, and_ from pgn import PGNFile from pychess.Utils.const import reprResult, WHITE, BLACK from pychess.Utils.const import * from pychess.Utils.lutils.LBoard import LBoard from pychess.Database import model as dbmodel from pychess.Database.dbwalk import walk, COMMENT, VARI_START, VARI_END, NAG from pychess.Database.model import metadata, event, site, player, pl1, pl2, game, annotator from pychess.Variants.fischerandom import FischerRandomChess __label__ = _("PyChess database") __endings__ = "pdb", __append__ = True def save (file, model): movelist = array("H") comments = [] walk(model.boards[0].board, movelist, comments) game_event = model.tags["Event"] game_site = model.tags["Site"] year, month, day = int(model.tags["Year"]), int(model.tags["Month"]), int(model.tags["Day"]) game_round = model.tags.get("Round") white = repr(model.players[WHITE]) black = repr(model.players[BLACK]) result = model.status eco = model.tags.get("ECO") board = int(model.tags.get("Board")) if model.tags.get("Board") else None white_elo = int(model.tags.get("WhiteElo")) if model.tags.get("WhiteElo") else None black_elo = int(model.tags.get("BlackElo")) if model.tags.get("BlackElo") else None variant = 1 if issubclass(model.variant, FischerRandomChess) else None fen = model.boards[0].board.asFen() fen = fen if fen != FEN_START else None game_annotator = model.tags.get("Annotator") ply_count = model.ply-model.lowply def get_id(table, name): if not name: return None s = select([table.c.id], table.c.name==name.decode("utf_8")) result = conn.execute(s) id_ = result.scalar() if id_ is None: result = conn.execute(table.insert().values(name=name.decode("utf_8"))) id_ = result.inserted_primary_key[0] return id_ conn = dbmodel.engine.connect() trans = conn.begin() try: event_id = get_id(event, game_event) site_id = get_id(site, game_site) white_id = get_id(player, white) black_id = get_id(player, black) annotator_id = get_id(annotator, game_annotator) wt = model.players[WHITE].__type__ bt = model.players[BLACK].__type__ if REMOTE in (wt, bt): collection_id = REMOTE elif ARTIFICIAL in (wt, bt): collection_id = ARTIFICIAL else: collection_id = LOCAL new_values = { 'event_id': event_id, 'site_id': site_id, 'date_year': year, 'date_month': month, 'date_day': day, 'round': game_round, 'white_id': white_id, 'black_id': black_id, 'result': result, 'white_elo': white_elo, 'black_elo': black_elo, 'ply_count': ply_count, 'eco': eco, 'board': board, 'fen': fen, 'variant': variant, 'annotator_id': annotator_id, 'collection_id': collection_id, 'movelist': movelist.tostring(), 'comments': "|".join(comments).decode("utf_8"), } if hasattr(model, "game_id") and model.game_id is not None: result = conn.execute(game.update().where(game.c.id==model.game_id).values(new_values)) else: result = conn.execute(game.insert().values(new_values)) model.game_id = result.inserted_primary_key[0] trans.commit() except: trans.rollback() raise def load(file): conn = dbmodel.engine.connect() s = select([func.count(game.c.id)]) count = conn.execute(s).scalar() print "Database contains %s games" % count s = select([player.c.name]) result = conn.execute(s) players = result.fetchall() print "Database contains %s players" % len(players) s = select([game.c.id.label("Id"), pl1.c.name.label('White'), pl2.c.name.label('Black'), game.c.result.label('Result'), event.c.name.label('Event'), site.c.name.label('Site'), game.c.round.label('Round'), game.c.date_year.label('Year'), game.c.date_month.label('Month'), game.c.date_day.label('Day'), game.c.white_elo.label('WhiteElo'), game.c.black_elo.label('BlackElo'), game.c.eco.label('ECO'), game.c.fen.label('Board'), game.c.fen.label('FEN'), game.c.variant.label('Variant'), annotator.c.name.label('Annotator')], from_obj=[ game.outerjoin(pl1, game.c.white_id==pl1.c.id)\ .outerjoin(pl2, game.c.black_id==pl2.c.id)\ .outerjoin(event, game.c.event_id==event.c.id)\ .outerjoin(site, game.c.site_id==site.c.id)\ .outerjoin(annotator, game.c.annotator_id==annotator.c.id)]) result = conn.execute(s) colnames = result.keys() result.close() return Database([], colnames, s, count, players) class Database(PGNFile): def __init__ (self, games, colnames, select, count, players): PGNFile.__init__(self, games) self.colnames = colnames self.select = select self.count = count self.players = players self.comments = [] def get_movetext(self, gameno): s = select([game.c.movelist, game.c.comments], game.c.id==self.games[gameno][0]) conn = dbmodel.engine.connect() result = conn.execute(s).first() self.comments = result[1].split("|") arr = array("H") arr.fromstring(result[0]) return arr def loadToModel (self, gameno, position=-1, model=None): self.comment_idx = 0 model = PGNFile.loadToModel (self, gameno, position=position, model=model) model.game_id = self.games[gameno]["Id"] return model def _getTag (self, gameno, tagkey): if tagkey == "Result": return reprResult[self.games[gameno][tagkey]] if tagkey == "Date": y = self.games[gameno]['Year'] m = self.games[gameno]['Month'] d = self.games[gameno]['Day'] tag_date = "%s.%s.%s" % (y if y else "????", m if m else "??", d if d else "??") return tag_date if tagkey in self.colnames: tag = self.games[gameno][tagkey] return "%s" % (tag if tag else "") else: return "" def parse_string(self, movetext, board, position, variation=False): boards = [] last_board = board if variation: # this board used only to hold initial variation comments boards.append(LBoard(board.variant)) else: # initial game board boards.append(board) error = None parenthesis = 0 v_array = array("H") for elem in movetext: if parenthesis > 0: v_array.append(elem) if elem == VARI_END: parenthesis -= 1 if parenthesis == 0: v_last_board.children.append(self.parse_string(v_array[:-1], last_board.prev, position, variation=True)) v_array = array("H") continue elif elem == VARI_START: parenthesis += 1 if parenthesis == 1: v_last_board = last_board if parenthesis == 0: if elem < COMMENT: # a move if not variation: if position != -1 and last_board.ply >= position: break new_board = last_board.clone() new_board.applyMove(elem) new_board.prev = last_board # set last_board next, except starting a new variation if variation and last_board==board: boards[0].next = new_board else: last_board.next = new_board boards.append(new_board) last_board = new_board elif elem == COMMENT: comment = self.comments[self.comment_idx] self.comment_idx += 1 if variation and last_board==board: # initial variation comment boards[0].children.append(comment) else: last_board.children.append(comment) elif elem > NAG: # NAG last_board.nags.append("$%s" % (elem-NAG)) else: print "Unknown element in movelist array:", elem if error: raise error return boards pychess-0.12beta3/lib/pychess/Savers/pgnbase.py0000644000175000017470000002546712176274267020603 0ustar tamasusers# -*- coding: UTF-8 -*- import re from pychess.Utils.const import * from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import parseSAN, ParsingError from pychess.Savers.ChessFile import ChessFile, LoadingError # token categories COMMENT_REST, COMMENT_BRACE, COMMENT_NAG, \ VARIATION_START, VARIATION_END, \ RESULT, FULL_MOVE, MOVE, MOVE_COMMENT = range(1,10) pattern = re.compile(r""" (\;.*?[\n\r]) # comment, rest of line style |(\{.*?\}) # comment, between {} |(\$[0-9]+) # comment, Numeric Annotation Glyph |(\() # variation start |(\)) # variation end |(\*|1-0|0-1|1/2) # result (spec requires 1/2-1/2 for draw, but we want to tolerate simple 1/2 too) |( ([a-hKQRBN][a-hxKQRBN1-8+#=\-]{1,6} |[PNBRQ]@[a-h][1-8][+#]? # crazyhouse drop move |o\-o(?:\-o)? |O\-O(?:\-O)? |0\-0(?:\-0)? |\-\-) # non standard '--' is used for null move inside variations ([\?!]{1,2})* ) # move (full, count, move with ?!, ?!) """, re.VERBOSE | re.DOTALL) class PgnBase(ChessFile): def __init__ (self, games): ChessFile.__init__(self, games) self.tagcache = {} def parse_string(self, string, board, position, variation=False): """Recursive parses a movelist part of one game. Arguments: srting - str (movelist) board - lboard (initial position) position - int (maximum ply to parse) variation- boolean (True if the string is a variation)""" boards = [] boards_append = boards.append last_board = board if variation: # this board used only to hold initial variation comments boards_append(LBoard(board.variant)) else: # initial game board boards_append(board) status = None parenthesis = 0 v_string = "" for m in re.finditer(pattern, string): group, text = m.lastindex, m.group(m.lastindex) if parenthesis > 0: v_string += ' '+text if group == VARIATION_END: parenthesis -= 1 if parenthesis == 0: v_last_board.children.append(self.parse_string(v_string[:-1], last_board.prev, position, variation=True)) v_string = "" continue elif group == VARIATION_START: parenthesis += 1 if parenthesis == 1: v_last_board = last_board if parenthesis == 0: if group == FULL_MOVE: if not variation: if position != -1 and last_board.plyCount >= position: break mstr = m.group(MOVE) try: lmove = parseSAN(last_board, mstr) except ParsingError, e: # TODO: save the rest as comment # last_board.children.append(string[m.start():]) notation, reason, boardfen = e.args ply = last_board.plyCount if ply % 2 == 0: moveno = "%d." % (ply/2+1) else: moveno = "%d..." % (ply/2+1) errstr1 = _("The game can't be read to end, because of an error parsing move %(moveno)s '%(notation)s'.") % { 'moveno': moveno, 'notation': notation} errstr2 = _("The move failed because %s.") % reason self.error = LoadingError (errstr1, errstr2) break except: ply = last_board.plyCount if ply % 2 == 0: moveno = "%d." % (ply/2+1) else: moveno = "%d..." % (ply/2+1) errstr1 = _( "Error parsing move %(moveno)s %(mstr)s") % {"moveno": moveno, "mstr": mstr} self.error = LoadingError (errstr1, "") break new_board = last_board.clone() new_board.applyMove(lmove) if m.group(MOVE_COMMENT): new_board.nags.append(symbol2nag(m.group(MOVE_COMMENT))) new_board.prev = last_board # set last_board next, except starting a new variation if variation and last_board==board: boards[0].next = new_board else: last_board.next = new_board boards_append(new_board) last_board = new_board elif group == COMMENT_REST: last_board.children.append(text[1:]) elif group == COMMENT_BRACE: comm = text.replace('{\r\n', '{').replace('\r\n}', '}') comm = comm[1:-1].splitlines() comment = ' '.join([line.strip() for line in comm]) if variation and last_board==board: # initial variation comment boards[0].children.append(comment) else: last_board.children.append(comment) elif group == COMMENT_NAG: last_board.nags.append(text) elif group == RESULT: if text == "1/2": status = reprResult.index("1/2-1/2") else: status = reprResult.index(text) break else: print "Unknown:",text return boards #, status def _getTag (self, gameno, tagkey): if gameno in self.tagcache: if tagkey in self.tagcache[gameno]: return self.tagcache[gameno][tagkey] else: return None else: if self.games: self.tagcache[gameno] = dict(tagre.findall(self.games[gameno][0])) return self._getTag(gameno, tagkey) else: return None def get_movetext(self, no): return self.games[no][1] def get_variant(self, no): variant = self._getTag(no, "Variant") if variant: if "fischer" in variant.lower() or "960" in variant: return "Fischerandom" elif "crazyhouse" in variant.lower(): return "Crazyhouse" elif "wildcastle" in variant.lower(): return "Wildcastle" else: return "" else: event = self.get_event(no) if "Chess960" in event: return "Fischerandom" elif "crazyhouse" in event.lower(): return "Crazyhouse" elif "wildcastle" in event.lower(): return "Wildcastle" else: return "" def get_player_names (self, no): p1 = self._getTag(no,"White") and self._getTag(no,"White") or "Unknown" p2 = self._getTag(no,"Black") and self._getTag(no,"Black") or "Unknown" return (p1, p2) def get_elo (self, no): p1 = self._getTag(no,"WhiteElo") and self._getTag(no,"WhiteElo") or "1600" p2 = self._getTag(no,"BlackElo") and self._getTag(no,"BlackElo") or "1600" p1 = p1.isdigit() and int(p1) or 1600 p2 = p2.isdigit() and int(p2) or 1600 return (p1, p2) def get_date (self, no): the_date = self._getTag(no,"Date") today = date.today() if not the_date: return today.timetuple()[:3] return [ s.isdigit() and int(s) or today.timetuple()[i] \ for i,s in enumerate(the_date.split(".")) ] def get_site (self, no): return self._getTag(no,"Site") and self._getTag(no,"Site") or "?" def get_event (self, no): return self._getTag(no,"Event") and self._getTag(no,"Event") or "?" def get_round (self, no): round = self._getTag(no,"Round") if not round: return 1 if round.find(".") >= 1: round = round[:round.find(".")] if not round.isdigit(): return 1 return int(round) def get_result (self, no): pgn2Const = {"*":RUNNING, "1/2-1/2":DRAW, "1/2":DRAW, "1-0":WHITEWON, "0-1":BLACKWON} if self._getTag(no,"Result") in pgn2Const: return pgn2Const[self._getTag(no,"Result")] return RUNNING tagre = re.compile(r"\[([a-zA-Z]+)[ \t]+\"(.*?)\"\]") def pgn_load(file, klass=PgnBase): files = [] inTags = False for line in file: line = line.lstrip() if not line: continue elif line.startswith("%"): continue if line.startswith("["): if tagre.match(line) is not None: if not inTags: files.append(["",""]) inTags = True files[-1][0] += line.decode("latin_1") else: if not inTags: files[-1][1] += line.decode('latin_1') else: print "Warning: ignored invalid tag pair %s" % line else: inTags = False if not files: # In rare cases there might not be any tags at all. It's not # legal, but we support it anyways. files.append(["",""]) files[-1][1] += line.decode('latin_1') return klass(files) nag2symbolDict = { "$0": "", "$1": "!", "$2": "?", "$3": "!!", "$4": "??", "$5": "!?", "$6": "?!", "$7": "□", # forced move "$8": "□", "$9": "??", "$10": "=", "$11": "=", "$12": "=", "$13": "∞", # unclear "$14": "+=", "$15": "=+", "$16": "±", "$17": "∓", "$18": "+-", "$19": "-+", "$20": "+--", "$21": "--+", "$22": "⨀", # zugzwang "$23": "⨀", "$24": "◯", # space "$25": "◯", "$26": "◯", "$27": "◯", "$28": "◯", "$29": "◯", "$32": "⟳", # development "$33": "⟳", "$36": "↑", # initiative "$37": "↑", "$40": "→", # attack "$41": "→", "$44": "~=", # compensation "$45": "=~", "$132": "⇆", # counterplay "$133": "⇆", "$136": "⨁", # time "$137": "⨁", "$138": "⨁", "$139": "⨁", "$140": "∆", # with the idea "$141": "∇", # aimed against "$142": "⌓", # better is "$146": "N", # novelty } symbol2nagDict = {} for k, v in nag2symbolDict.iteritems(): if v not in symbol2nagDict: symbol2nagDict[v] = k def nag2symbol(nag): return nag2symbolDict.get(nag, nag) def symbol2nag(symbol): return symbol2nagDict[symbol] pychess-0.12beta3/lib/pychess/Players/0000755000175000017470000000000012176727272016747 5ustar tamasuserspychess-0.12beta3/lib/pychess/Players/ProtocolEngine.py0000755000175000017470000000210012161415524022230 0ustar tamasusersfrom gobject import SIGNAL_RUN_FIRST from threading import Condition from pychess.System.Log import log from pychess.Players.Engine import Engine from pychess.Utils.const import * from pychess.Utils.repr import reprColor class ProtocolEngine (Engine): __gsignals__ = { "readyForOptions": (SIGNAL_RUN_FIRST, None, ()), "readyForMoves": (SIGNAL_RUN_FIRST, None, ()) } #=========================================================================== # Setting engine options #=========================================================================== def __init__ (self, subprocess, color, protover, md5): Engine.__init__(self, md5) self.engine = subprocess self.defname = subprocess.defname self.color = color self.protover = protover self.readyMoves = False self.readyOptions = False self.connected = True self.mode = NORMAL log.debug(reprColor[color]+"\n", self.defname) self.movecon = Condition() pychess-0.12beta3/lib/pychess/Players/ICPlayer.py0000755000175000017470000002201612173202156020757 0ustar tamasusersfrom collections import defaultdict from Queue import Queue from pychess.Players.Player import Player, PlayerIsDead, TurnInterrupt from pychess.Utils.Move import parseSAN, toAN from pychess.Utils.lutils.lmove import ParsingError from pychess.Utils.Offer import Offer from pychess.Utils.const import * from pychess.System.Log import log class ICPlayer (Player): __type__ = REMOTE def __init__ (self, gamemodel, ichandle, gameno, color, name, icrating=None): Player.__init__(self) self.queue = Queue() self.okqueue = Queue() self.setName(name) self.ichandle = ichandle self.icrating = icrating self.color = color self.gameno = gameno self.gamemodel = gamemodel self.connection = connection = self.gamemodel.connection self.connections = connections = defaultdict(list) connections[connection.bm].append(connection.bm.connect_after("boardUpdate", self.__boardUpdate)) connections[connection.om].append(connection.om.connect("onOfferAdd", self.__onOfferAdd)) connections[connection.om].append(connection.om.connect("onOfferRemove", self.__onOfferRemove)) connections[connection.om].append(connection.om.connect("onOfferDeclined", self.__onOfferDeclined)) connections[connection.cm].append(connection.cm.connect("privateMessage", self.__onPrivateMessage)) self.offers = {} def getICHandle (self): return self.name #=========================================================================== # Handle signals from the connection #=========================================================================== def __onOfferAdd (self, om, offer): if self.gamemodel.status in UNFINISHED_STATES and not self.gamemodel.isObservationGame(): log.debug("ICPlayer.__onOfferAdd: emitting offer: self.gameno=%s self.name=%s %s\n" % \ (self.gameno, self.name, offer)) self.offers[offer.index] = offer self.emit ("offer", offer) def __onOfferDeclined (self, om, offer): for offer_ in self.gamemodel.offers.keys(): if offer.type == offer_.type: offer.param = offer_.param log.debug("ICPlayer.__onOfferDeclined: emitting decline for %s\n" % offer) self.emit("decline", offer) def __onOfferRemove (self, om, offer): if offer.index in self.offers: log.debug("ICPlayer.__onOfferRemove: emitting withdraw: self.gameno=%s self.name=%s %s\n" % \ (self.gameno, self.name, offer)) self.emit ("withdraw", self.offers[offer.index]) del self.offers[offer.index] def __onPrivateMessage (self, cm, name, title, isadmin, text): if name == self.ichandle: self.emit("offer", Offer(CHAT_ACTION, param=text)) def __boardUpdate (self, bm, gameno, ply, curcol, lastmove, fen, wname, bname, wms, bms): log.debug("ICPlayer.__boardUpdate: id(self)=%d self=%s %s %s %s %d %d %s %s %d %d\n" % \ (id(self), self, gameno, wname, bname, ply, curcol, lastmove, fen, wms, bms)) if gameno == self.gameno and len(self.gamemodel.players) >= 2 \ and wname == self.gamemodel.players[0].ichandle \ and bname == self.gamemodel.players[1].ichandle: log.debug("ICPlayer.__boardUpdate: id=%d self=%s gameno=%s: this is my move\n" % \ (id(self), self, gameno)) # In some cases (like lost on time) the last move is resent if ply <= self.gamemodel.ply: return if 1-curcol == self.color: log.debug("ICPlayer.__boardUpdate: id=%d self=%s ply=%d: putting move=%s in queue\n" % \ (id(self), self, ply, lastmove)) self.queue.put((ply, lastmove)) # Ensure the fics thread doesn't continue parsing, before the # game/player thread has recieved the move. # Specifically this ensures that we aren't killed due to end of # game before our last move is recieved self.okqueue.get(block=True) #=========================================================================== # Ending the game #=========================================================================== def __disconnect (self): if self.connections is None: return for obj in self.connections: for handler_id in self.connections[obj]: if obj.handler_is_connected(handler_id): obj.disconnect(handler_id) self.connections = None def end (self, status, reason): self.__disconnect() self.queue.put("del") def kill (self, reason): self.__disconnect() self.queue.put("del") #=========================================================================== # Send the player move updates #=========================================================================== def makeMove (self, board1, move, board2): log.debug("ICPlayer.makemove: id(self)=%d self=%s move=%s board1=%s board2=%s\n" % \ (id(self), self, move, board1, board2)) if board2 and not self.gamemodel.isObservationGame(): # TODO: Will this work if we just always use CASTLE_SAN? cn = CASTLE_KK if board2.variant == FISCHERRANDOMCHESS: cn = CASTLE_SAN self.connection.bm.sendMove (toAN (board2, move, castleNotation=cn)) item = self.queue.get(block=True) try: if item == "del": raise PlayerIsDead if item == "int": raise TurnInterrupt ply, sanmove = item if ply < board1.ply: # This should only happen in an observed game board1 = self.gamemodel.getBoardAtPly(max(ply-1, 0)) log.debug("ICPlayer.makemove: id(self)=%d self=%s from queue got: ply=%d sanmove=%s\n" % \ (id(self), self, ply, sanmove)) try: move = parseSAN (board1, sanmove) log.debug("ICPlayer.makemove: id(self)=%d self=%s parsed move=%s\n" % \ (id(self), self, move)) except ParsingError, e: raise return move finally: log.debug("ICPlayer.makemove: id(self)=%d self=%s returning move=%s\n" % \ (id(self), self, move)) self.okqueue.put("ok") #=========================================================================== # Interacting with the player #=========================================================================== def pause (self): pass def resume (self): pass def setBoard (self, fen): # setBoard will currently only be called for ServerPlayer when starting # to observe some game. In this case FICS already knows how the board # should look, and we don't need to set anything pass def playerUndoMoves (self, movecount, gamemodel): log.debug("ICPlayer.playerUndoMoves: id(self)=%d self=%s, undoing movecount=%d\n" % \ (id(self), self, movecount)) # If current player has changed so that it is no longer us to move, # We raise TurnInterruprt in order to let GameModel continue the game if movecount % 2 == 1 and gamemodel.curplayer != self: self.queue.put("int") def putMessage (self, text): self.connection.cm.tellPlayer (self.name, text) #=========================================================================== # Offer handling #=========================================================================== def offerRematch (self): if self.gamemodel.timemodel: min = int(self.gamemodel.timemodel.intervals[0][0])/60 inc = self.gamemodel.timemodel.gain else: min = 0 inc = 0 self.connection.om.challenge(self.ichandle, self.gamemodel.ficsgame.game_type, min, inc, self.gamemodel.ficsgame.rated) def offer (self, offer): log.debug("ICPlayer.offer: self=%s %s\n" % (repr(self), offer)) if offer.type == TAKEBACK_OFFER: # only 1 outstanding takeback offer allowed on FICS, so remove any of ours indexes = self.offers.keys() for index in indexes: if self.offers[index].type == TAKEBACK_OFFER: log.debug("ICPlayer.offer: del self.offers[%s] %s\n" % (index, offer)) del self.offers[index] self.connection.om.offer(offer, self.gamemodel.ply) def offerDeclined (self, offer): log.debug("ICPlayer.offerDeclined: sending decline for %s\n" % offer) self.connection.om.decline(offer) def offerWithdrawn (self, offer): pass def offerError (self, offer, error): pass pychess-0.12beta3/lib/pychess/Players/CECPEngine.py0000644000175000017470000012036312176544577021173 0ustar tamasusersfrom threading import RLock import Queue import itertools import re import time import gtk, gobject from pychess.System import glock from pychess.System.Log import log from pychess.System.ThreadPool import pool from pychess.Utils.Move import Move from pychess.Utils.Board import Board from pychess.Utils.Cord import Cord from pychess.Utils.Move import toSAN, toAN, parseAny, listToMoves from pychess.Utils.Offer import Offer from pychess.Utils.const import * from pychess.Utils.logic import validate, getMoveKillingKing from pychess.Utils.lutils.ldata import MATE_VALUE from pychess.Utils.lutils.lmove import ParsingError from pychess.Variants import variants from pychess.Players.Player import PlayerIsDead, TurnInterrupt from ProtocolEngine import ProtocolEngine def isdigits (strings): for s in strings: s = s.replace(".","") if s.startswith("-"): if not s[1:].isdigit(): return False else: if not s.isdigit(): return False return True movere = re.compile(r""" ( # group start (?: # non grouping parenthesis start [PKQRBN]? # piece [a-h]?[1-8]? # unambiguous column or line x? # capture @? # drop [a-h][1-8] # destination square =?[QRBN]? # promotion |O\-O(?:\-O)? # castling |0\-0(?:\-0)? # castling ) # non grouping parenthesis end [+#]? # check/mate ) # group end \s* # any whitespace """, re.VERBOSE) d_plus_dot_expr = re.compile(r"\d+\.") anare = re.compile(""" ^ # beginning of string \s* # \d+ [+\-\.]? # The ply analyzed. Some engines end it with a dot, minus or plus \s+ # (-?Mat\s*\d+ | [+\-\d\.]+) # The score found in centipawns. # Mat1 is used by gnuchess to specify mate in one. # otherwise we should support a signed float \s+ # [\d\.]+ # The time used in seconds \s+ # [\d\.]+ # Number of nodes visited \s+ # (.+) # The Principal-Variation. With or without move numbers \s* # $ # end of string """, re.VERBOSE) #anare = re.compile("\d+\.?\s+ (Mat\d+|[-\d\.]+) \s+ \d+\s+\d+\s+((?:%s\s*)+)" % mov) whitespaces = re.compile(r"\s+") def semisynced(f): """ All moveSynced methods will be queued up, and called in the right order after self.readyMoves is true """ def newFunction(*args, **kw): self = args[0] self.funcQueue.put((f, args, kw)) if self.readyMoves: self.boardLock.acquire() try: while True: try: func_, args_, kw_ = self.funcQueue.get_nowait() func_(*args_, **kw_) except TypeError, e: print "TypeError: %s" % repr(args) raise except Queue.Empty: break finally: self.boardLock.release() return newFunction # There is no way in the CECP protocol to determine if an engine not answering # the protover=2 handshake with done=1 is old or just very slow. Thus we # need a timeout after which we conclude the engine is 'protover=1' and will # never answer. # XBoard will only give 2 seconds, but as we are quite sure that # the engines support the protocol, we can add more. We don't add # infinite time though, just in case. # The engine can get more time by sending done=0 TIME_OUT_FIRST = 10 # The amount of seconds to add for the second timeout TIME_OUT_SECOND = 15 class CECPEngine (ProtocolEngine): def __init__ (self, subprocess, color, protover, md5): ProtocolEngine.__init__(self, subprocess, color, protover, md5) self.features = { "ping": 0, "setboard": 0, "playother": 0, "san": 0, "usermove": 0, "time": 1, "draw": 1, "sigint": 0, "sigterm": 0, "reuse": 0, "analyze": 0, "myname": ', '.join(self.defname), "variants": None, "colors": 1, "ics": 0, "name": 0, "pause": 0, "nps": 0, "debug": 0, "memory": 0, "smp": 0, "egt": '', "option": '', } self.supported_features = [ "ping", "setboard", "san", "usermove", "time", "draw", "sigint", "analyze", "myname", "variants", "colors", "pause", "done", "debug", "smp", "memory", "option" ] self.options = {} self.options["Ponder"] = {"name": "Ponder", "type": "check", "default": False} self.name = None self.board = Board(setup=True) # if self.engineIsInNotPlaying == True, engine is in "force" mode, # i.e. not thinking or playing, but still verifying move legality self.engineIsInNotPlaying = False self.movenext = False self.waitingForMove = False self.readyForMoveNowCommand = False self.timeHandicap = 1 self.lastping = 0 self.lastpong = 0 self.timeout = None self.returnQueue = Queue.Queue() self.engine.connect("line", self.parseLines) self.engine.connect("died", lambda e: self.returnQueue.put("del")) self.funcQueue = Queue.Queue() self.optionQueue = [] self.boardLock = RLock() self.undoQueue = [] self.connect("readyForOptions", self.__onReadyForOptions_before) self.connect_after("readyForOptions", self.__onReadyForOptions) self.connect_after("readyForMoves", self.__onReadyForMoves) #=========================================================================== # Starting the game #=========================================================================== def prestart (self): print >> self.engine, "xboard" if self.protover == 1: # start a new game (CECPv1 engines): print >> self.engine, "new" # we are now ready for options: self.emit("readyForOptions") elif self.protover == 2: # start advanced protocol initialisation: print >> self.engine, "protover 2" # we don't start a new game for CECPv2 here, # we will do it after feature accept/reject is completed. # set timeout for feature accept/reject: self.timeout = time.time() + TIME_OUT_FIRST def start (self): if self.mode in (ANALYZING, INVERSE_ANALYZING): pool.start(self.__startBlocking) else: self.__startBlocking() def __startBlocking (self): if self.protover == 1: self.emit("readyForMoves") if self.protover == 2: try: r = self.returnQueue.get(True, max(self.timeout-time.time(),0)) if r == "not ready": # The engine has sent done=0, and parseLine has added more # time to self.timeout r = self.returnQueue.get(True, max(self.timeout-time.time(),0)) except Queue.Empty: log.warn("Got timeout error\n", self.defname) self.emit("readyForOptions") self.emit("readyForMoves") else: if r == 'del': raise PlayerIsDead assert r == "ready" def __onReadyForOptions_before (self, self_): self.readyOptions = True def __onReadyForOptions (self, self_): # This is no longer needed #self.timeout = time.time() # We always want post turned on so the Engine Output sidebar can # show those things -Jonas Thiem print >> self.engine, "post" for command in self.optionQueue: print >> self.engine, command def __onReadyForMoves (self, self_): # If we are an analyzer, this signal was already called in a different # thread, so we can safely block it. if self.mode in (ANALYZING, INVERSE_ANALYZING): if not self.board: self.board = Board(setup=True) self.__sendAnalyze(self.mode == INVERSE_ANALYZING) self.readyMoves = True semisynced(lambda s:None)(self) #=========================================================================== # Ending the game #=========================================================================== @semisynced def end (self, status, reason): if self.connected: # We currently can't fillout the comment "field" as the repr strings # for reasons and statuses lies in Main.py # Creating Status and Reason class would solve this if status == DRAW: print >> self.engine, "result 1/2-1/2 {?}" elif status == WHITEWON: print >> self.engine, "result 1-0 {?}" elif status == BLACKWON: print >> self.engine, "result 0-1 {?}" else: print >> self.engine, "result * {?}" # Make sure the engine exits and do some cleaning self.kill(reason) def kill (self, reason): """ Kills the engine, starting with the 'quit' command, then sigterm and eventually sigkill. Returns the exitcode, or if engine have already been killed, returns None """ if self.connected: self.connected = False try: try: print >> self.engine, "quit" self.returnQueue.put("del") self.engine.gentleKill() except OSError, e: # No need to raise on a hang up error, as the engine is dead # anyways if e.errno == 32: log.warn("Hung up Error", self.defname) return e.errno else: raise finally: # Clear the analyzed data, if any self.emit("analyze", []) #=========================================================================== # Send the player move updates #=========================================================================== def setBoard (self, board): self.setBoardList([board], []) @semisynced def putMove (self, board1, move, board2): """ Sends the engine the last move made (for spectator engines). @param board1: The current board @param move: The last move made @param board2: The board before the last move was made """ # If the spactator engine analyzing an older position, let it do if self.board != board2: return self.board = board1 if not board2: self.__tellEngineToPlayCurrentColorAndMakeMove() self.movenext = False return if self.mode == INVERSE_ANALYZING: self.board = self.board.switchColor() self.__printColor() if self.engineIsInNotPlaying: print >> self.engine, "force" self.__usermove(board2, move) if self.mode == INVERSE_ANALYZING: if self.board.board.opIsChecked(): # Many engines don't like positions able to take down enemy # king. Therefore we just return the "kill king" move # automaticaly self.emit("analyze", [([getMoveKillingKing(self.board)], MATE_VALUE-1)]) return self.__printColor() if self.engineIsInNotPlaying: print >> self.engine, "force" def makeMove (self, board1, move, board2): """ Gets a move from the engine (for player engines). @param board1: The current board @param move: The last move made @param board2: The board before the last move was made @return: The move the engine decided to make """ log.debug("makeMove: move=%s self.movenext=%s board1=%s board2=%s self.board=%s\n" % \ (move, self.movenext, board1, board2, self.board), self.defname) assert self.readyMoves self.boardLock.acquire() try: if self.board == board1 or not board2 or self.movenext: self.board = board1 self.__tellEngineToPlayCurrentColorAndMakeMove() self.movenext = False else: self.board = board1 self.__usermove(board2, move) if self.engineIsInNotPlaying: self.__tellEngineToPlayCurrentColorAndMakeMove() finally: self.boardLock.release() self.waitingForMove = True self.readyForMoveNowCommand = True # Parse outputs r = self.returnQueue.get() if r == "not ready": log.warn("Engine seems to be protover=2, but is treated as protover=1", self.defname) r = self.returnQueue.get() if r == "ready": r = self.returnQueue.get() if r == "del": raise PlayerIsDead, "Killed by foreign forces" if r == "int": raise TurnInterrupt self.waitingForMove = False self.readyForMoveNowCommand = False assert isinstance(r, Move), r return r @semisynced def updateTime (self, secs, opsecs): if self.features["time"]: print >> self.engine, "time", int(secs*100*self.timeHandicap) print >> self.engine, "otim", int(opsecs*100) #=========================================================================== # Standard options #=========================================================================== def setOptionAnalyzing (self, mode): self.mode = mode def setOptionInitialBoard (self, model): # We don't use the optionQueue here, as set board prints a whole lot of # stuff. Instead we just call it, and let semisynced handle the rest. self.setBoardList(model.boards[:], model.moves[:]) @semisynced def setBoardList (self, boards, moves): # Notice: If this method is to be called while playing, the engine will # need 'new' and an arrangement similar to that of 'pause' to avoid # the current thought move to appear self.boardLock.acquire() try: if self.mode == INVERSE_ANALYZING: self.board = self.board.switchColor() self.__printColor() self.__tellEngineToStopPlayingCurrentColor() self.__setBoard(boards[0]) self.board = boards[-1] for board, move in zip(boards[:-1], moves): self.__usermove(board, move) if self.mode in (ANALYZING, INVERSE_ANALYZING): self.board = boards[-1] if self.mode == INVERSE_ANALYZING: self.board = self.board.switchColor() self.__printColor() if self.engineIsInNotPlaying: print >> self.engine, "force" # The called of setBoardList will have to repost/analyze the # analyzer engines at this point. finally: self.boardLock.release() def setOptionVariant (self, variant): if self.features["variants"] is None: log.warn("setOptionVariant: engine doesn't support variants\n", self.defname) return if variant in variants.values() and not variant.standard_rules: assert variant.cecp_name in self.features["variants"], \ "%s doesn't support %s variant" % (self, variant.cecp_name) self.optionQueue.append("variant %s" % variant.cecp_name) #==================================================# # Strength system # #==================================================# # Strength Depth Ponder Time handicap # # 1 1 o 1,258% # # 2 2 o 1,584% # # 3 3 o 1.995% # # # # 19 o x 79,43% # # 20 o x o # #==================================================# def setOptionStrength (self, strength, forcePonderOff): self.strength = strength if strength <= 19: self.__setTimeHandicap(0.01 * 10**(strength/10.)) if strength <= 18: self.__setDepth(strength) # Crafty ofers 100 skill levels if "crafty" in self.features["myname"].lower() and strength <= 19: self.optionQueue.append("skill %s" % strength*5) self.__setPonder(strength >= 19 and not forcePonderOff) if strength == 20: self.optionQueue.append("egtb") else: self.optionQueue.append("random") def __setDepth (self, depth): self.optionQueue.append("sd %d" % depth) def __setTimeHandicap (self, timeHandicap): self.timeHandicap = timeHandicap def __setPonder (self, ponder): if ponder: self.optionQueue.append("hard") else: self.optionQueue.append("hard") self.optionQueue.append("easy") def setOptionTime (self, secs, gain): # Notice: In CECP we apply time handicap in updateTime, not in # setOptionTime. minutes = int(secs / 60) secs = int(secs % 60) s = str(minutes) if secs: s += ":" + str(secs) self.optionQueue.append("level 0 %s %d" % (s, gain)) #=========================================================================== # Option handling #=========================================================================== def setOption (self, key, value): """ Set an option, which will be sent to the engine, after the 'readyForOptions' signal has passed. If you want to know the possible options, you should go to engineDiscoverer or use the getOption, getOptions and hasOption methods, while you are in your 'readyForOptions' signal handler """ if self.readyMoves: log.warn("Options set after 'readyok' are not sent to the engine", self.defname) if key == "cores": self.optionQueue.append("cores %s" % value) elif key == "memory": self.optionQueue.append("memory %s" % value) elif key.lower() == "ponder": self.__setPonder(value==1) else: self.optionQueue.append("option %s=%s" % (key, value)) #=========================================================================== # Interacting with the player #=========================================================================== @semisynced def pause (self): """ Pauses engine using the "pause" command if available. Otherwise put engine in force mode. By the specs the engine shouldn't ponder in force mode, but some of them do so anyways. """ log.debug("pause: self=%s\n" % self, self.defname) self.engine.pause() return if self.mode in (ANALYZING, INVERSE_ANALYZING): return if self.features["pause"]: print >> self.engine, "pause" elif self.board: self.__tellEngineToStopPlayingCurrentColor() self._blockTillMove() @semisynced def resume (self): log.debug("resume: self=%s\n" % self, self.defname) self.engine.resume() return if self.mode not in (ANALYZING, INVERSE_ANALYZING): if self.features["pause"]: print "features resume" print >> self.engine, "resume" elif self.board: print "go resume" self.__tellEngineToPlayCurrentColorAndMakeMove() @semisynced def hurry (self): log.debug("hurry: self.waitingForMove=%s self.readyForMoveNowCommand=%s\n" % \ (self.waitingForMove, self.readyForMoveNowCommand), self.defname) if self.waitingForMove and self.readyForMoveNowCommand: self.__tellEngineToMoveNow() self.readyForMoveNowCommand = False @semisynced def spectatorUndoMoves (self, moves, gamemodel): log.debug("spectatorUndoMoves: moves=%s gamemodel.ply=%s gamemodel.boards[-1]=%s self.board=%s\n" % \ (moves, gamemodel.ply, gamemodel.boards[-1], self.board), self.defname) if self.mode == INVERSE_ANALYZING: self.board = self.board.switchColor() self.__printColor() if self.engineIsInNotPlaying: print >> self.engine, "force" for i in xrange(moves): print >> self.engine, "undo" self.board = gamemodel.boards[-1] if self.mode == INVERSE_ANALYZING: self.board = self.board.switchColor() self.__printColor() if self.engineIsInNotPlaying: print >> self.engine, "force" @semisynced def playerUndoMoves (self, moves, gamemodel): log.debug("playerUndoMoves: moves=%s gamemodel.ply=%s gamemodel.boards[-1]=%s self.board=%s\n" % \ (moves, gamemodel.ply, gamemodel.boards[-1], self.board), self.defname) if gamemodel.curplayer != self and moves % 2 == 1: # Interrupt if we were searching, but should no longer do so self.returnQueue.put("int") self.__tellEngineToStopPlayingCurrentColor() if self.board and gamemodel.status in UNFINISHED_STATES: log.debug("playerUndoMoves: self.__tellEngineToMoveNow(), self._blockTillMove()\n") self.__tellEngineToMoveNow() self._blockTillMove() for i in xrange(moves): print >> self.engine, "undo" if gamemodel.curplayer == self: self.board = gamemodel.boards[-1] self.__tellEngineToPlayCurrentColorAndMakeMove() else: self.board = None #=========================================================================== # Offer handling #=========================================================================== def offer (self, offer): if offer.type == DRAW_OFFER: if self.features["draw"]: print >> self.engine, "draw" else: self.emit("accept", offer) def offerError (self, offer, error): if self.features["draw"]: # We don't keep track if engine draws are offers or accepts. We just # Always assume they are accepts, and if they are not, we get this # error and emit offer instead if offer.type == DRAW_OFFER and error == ACTION_ERROR_NONE_TO_ACCEPT: self.emit("offer", Offer(DRAW_OFFER)) #=========================================================================== # Internal #=========================================================================== def __usermove (self, board, move): if self.features["usermove"]: self.engine.write("usermove ") if self.features["san"]: print >> self.engine, toSAN(board, move) else: cn = CASTLE_KK if board.variant == FISCHERRANDOMCHESS: cn = CASTLE_SAN print >> self.engine, toAN(board, move, short=True, castleNotation=cn) def __tellEngineToMoveNow (self): if self.features["sigint"]: self.engine.sigint() print >> self.engine, "?" def __tellEngineToStopPlayingCurrentColor (self): print >> self.engine, "force" self.engineIsInNotPlaying = True def __tellEngineToPlayCurrentColorAndMakeMove (self): self.__printColor() print >> self.engine, "go" self.engineIsInNotPlaying = False def __sendAnalyze (self, inverse=False): self.__tellEngineToStopPlayingCurrentColor() if inverse: self.board = self.board.setColor(1-self.color) self.__printColor() if self.engineIsInNotPlaying: print >> self.engine, "force" self.mode = INVERSE_ANALYZING else: self.mode = ANALYZING print >> self.engine, "post" print >> self.engine, "analyze" # workaround for crafty not sending analysis after it has found a mating line # http://code.google.com/p/pychess/issues/detail?id=515 if "crafty" in self.features["myname"].lower(): print >> self.engine, "noise 0" def __printColor (self): if self.features["colors"] or self.mode == INVERSE_ANALYZING: if self.board.color == WHITE: print >> self.engine, "white" else: print >> self.engine, "black" def __setBoard (self, board): if self.features["setboard"]: self.__tellEngineToStopPlayingCurrentColor() fen = board.asFen(enable_bfen=False) if self.mode == INVERSE_ANALYZING: # Some engine doesn't support feature "colors" (f.e: TJchess) # so "black" and "white" command doesn't change the side to move fen_arr = fen.split() if self.board.color == WHITE: if fen_arr[1] == "b": fen_arr[1] = "w" fen = " ".join(fen_arr) else: if fen_arr[1] == "w": fen_arr[1] = "b" fen = " ".join(fen_arr) print >> self.engine, "setboard", fen else: # Kludge to set black to move, avoiding the troublesome and now # deprecated "black" command. - Equal to the one xboard uses self.__tellEngineToStopPlayingCurrentColor() if board.color == BLACK: print >> self.engine, "a2a3" print >> self.engine, "edit" print >> self.engine, "#" for color in WHITE, BLACK: for y, row in enumerate(board.data): for x, piece in enumerate(row): if not piece or piece.color != color: continue sign = reprSign[piece.sign] cord = repr(Cord(x,y)) print >> self.engine, sign+cord print >> self.engine, "c" print >> self.engine, "." def _blockTillMove (self): saved_state = self.boardLock._release_save() log.debug("_blockTillMove(): acquiring self.movecon lock\n", self.defname) self.movecon.acquire() log.debug("_blockTillMove(): self.movecon acquired\n", self.defname) try: log.debug("_blockTillMove(): doing self.movecon.wait\n", self.defname) self.movecon.wait() finally: log.debug("_blockTillMove(): releasing self.movecon..\n", self.defname) self.movecon.release() self.boardLock._acquire_restore(saved_state) #=========================================================================== # Parsing #=========================================================================== def parseLines (self, engine, lines): for line in lines: self.__parseLine(line) def __parseLine (self, line): if line[0:1] == "#": # Debug line which we shall ignore as specified in CECPv2 specs return # log.debug("__parseLine: line=\"%s\"\n" % line.strip(), self.defname) parts = whitespaces.split(line.strip()) if parts[0] == "pong": self.lastpong = int(parts[1]) return # Illegal Move if parts[0].lower().find("illegal") >= 0: log.warn("__parseLine: illegal move: line=\"%s\", board=%s" \ % (line.strip(), self.board), self.defname) if parts[-2] == "sd" and parts[-1].isdigit(): print >> self.engine, "depth", parts[-1] return # A Move (Perhaps) if self.board: if parts[0] == "move": movestr = parts[1] # Old Variation elif d_plus_dot_expr.match(parts[0]) and parts[1] == "...": movestr = parts[2] else: movestr = False if movestr: log.debug("__parseLine: acquiring self.boardLock\n", self.defname) self.waitingForMove = False self.readyForMoveNowCommand = False self.boardLock.acquire() try: if self.engineIsInNotPlaying: # If engine was set in pause just before the engine sent its # move, we ignore it. However the engine has to know that we # ignored it, and thus we step it one back log.info("__parseLine: Discarding engine's move: %s\n" % movestr, self.defname) print >> self.engine, "undo" return else: try: move = parseAny(self.board, movestr) except ParsingError, e: self.end(WHITEWON if self.board.color == BLACK else BLACKWON, WON_ADJUDICATION) return if validate(self.board, move): self.board = None self.returnQueue.put(move) return self.end(WHITEWON if self.board.color == BLACK else BLACKWON, WON_ADJUDICATION) return finally: log.debug("__parseLine(): releasing self.boardLock\n", self.defname) self.boardLock.release() self.movecon.acquire() self.movecon.notifyAll() self.movecon.release() # Analyzing if self.engineIsInNotPlaying: if parts[:4] == ["0","0","0","0"]: # Crafty doesn't analyze until it is out of book print >> self.engine, "book off" return match = anare.match(line) if match: score, moves = match.groups() if "mat" in score.lower() or "#" in moves: # Will look either like -Mat 3 or Mat3 scoreval = MATE_VALUE if score.startswith('-'): scoreval = -scoreval else: scoreval = int(score) mvstrs = movere.findall(moves) try: moves = listToMoves (self.board, mvstrs, type=None, validate=True, ignoreErrors=False) except: # Errors may happen when parsing "old" lines from # analyzing engines, which haven't yet noticed their new tasks log.debug('Ignored an "old" line from analyzer: %s\n' % mvstrs, self.defname) return # Don't emit if we weren't able to parse moves, or if we have a move # to kill the opponent king - as it confuses many engines if moves and not self.board.board.opIsChecked(): self.emit("analyze", [(moves, scoreval)]) return # Offers draw if parts[0:2] == ["offer", "draw"]: self.emit("accept", Offer(DRAW_OFFER)) return # Resigns if parts[0] == "resign" or \ (parts[0] == "tellics" and parts[1] == "resign"): # buggy crafty # Previously: if "resign" in parts, # however, this is too generic, since "hint", "bk", # "feature option=.." and possibly other, future CECPv2 # commands can validly contain the word "resign" without this # being an intentional resign offer. self.emit("offer", Offer(RESIGNATION)) return #if parts[0].lower() == "error": # return #Tell User Error if parts[0] == "tellusererror": # Create a non-modal non-blocking message dialog with the error: dlg = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_CLOSE, message_format=None) # Use the engine name if already known, otherwise the defname: displayname = self.name if not displayname: displayname = self.defname # Compose the dialog text: dlg.set_markup(gobject.markup_escape_text(_("The engine %s reports an error:") % displayname) + "\n\n" + gobject.markup_escape_text(" ".join(parts[1:]))) # handle response signal so the "Close" button works: dlg.connect("response", lambda dlg, x: dlg.destroy()) dlg.show_all() return # Tell Somebody if parts[0][:4] == "tell" and \ parts[0][4:] in ("others", "all", "ics", "icsnoalias"): log.info("Ignoring tell %s: %s\n" % (parts[0][4:], " ".join(parts[1:]))) return if "feature" in parts: # Some engines send features after done=1, so we will iterate after done=1 too done1 = False # We skip parts before 'feature', as some engines give us lines like # White (1) : feature setboard=1 analyze...e="GNU Chess 5.07" done=1 parts = parts[parts.index("feature"):] for i, pair in enumerate(parts[1:]): # As "parts" is split with no thoughs on quotes or double quotes # we need to do some extra handling. if pair.find("=") < 0: continue key, value = pair.split("=",1) if value[0] in ('"',"'") and value[-1] in ('"',"'"): value = value[1:-1] # If our pair was unfinished, like myname="GNU, we search the # rest of the pairs for a quotating mark. elif value[0] in ('"',"'"): rest = value[1:] + " " + " ".join(parts[2+i:]) i = rest.find('"') j = rest.find("'") if i + j == -2: log.warn("Missing endquotation in %s feature", self.defname) value = rest elif min(i, j) != -1: value = rest[:min(i, j)] else: l = max(i, j) value = rest[:l] elif value.isdigit(): value = int(value) if key in self.supported_features: print >> self.engine, "accepted %s" % key else: print >> self.engine, "rejected %s" % key if key == "done": if value == 1: done1 = True continue elif value == 0: log.info("Adds %d seconds timeout\n" % TIME_OUT_SECOND, self.defname) # This'll buy you some more time self.timeout = time.time()+TIME_OUT_SECOND self.returnQueue.put("not ready") return if key == "smp" and value == 1: self.options["cores"] = {"name": "cores", "type": "spin", "default": 1, "min": 1, "max": 64} elif key == "memory" and value == 1: self.options["memory"] = {"name": "memory", "type": "spin", "default": 32, "min": 1, "max": 4096} elif key == "option" and key != "done": option = self.__parse_option(value) self.options[option["name"]] = option else: self.features[key] = value if key == "myname" and not self.name: self.setName(value) if done1: # Start a new game before using the engine: # (CECPv2 engines) print >> self.engine, "new" # We are now ready for play: self.emit("readyForOptions") self.emit("readyForMoves") self.returnQueue.put("ready") # A hack to get better names in protover 1. # Unfortunately it wont work for now, as we don't read any lines from # protover 1 engines. When should we stop? if self.protover == 1: if self.defname[0] in ''.join(parts): basis = self.defname[0] name = ' '.join(itertools.dropwhile(lambda part: basis not in part, parts)) self.features['myname'] = name if not self.name: self.setName(name) def __parse_option(self, option): if " -check " in option: name, value = option.split(" -check ") return {"type": "check", "name": name, "default": bool(int(value))} elif " -spin " in option: name, value = option.split(" -spin ") defv, minv, maxv = value.split() return {"type": "spin", "name": name, "default": int(defv), "min": int(minv), "max": int(maxv)} elif " -slider " in option: name, value = option.split(" -slider ") defv, minv, maxv = value.split() return {"type": "spin", "name": name, "default": int(defv), "min": int(minv), "max": int(maxv)} elif " -string " in option: name, value = option.split(" -string ") return {"type": "text", "name": name, "default": value} elif " -file " in option: name, value = option.split(" -file ") return {"type": "text", "name": name, "default": value} elif " -path " in option: name, value = option.split(" -path ") return {"type": "text", "name": name, "default": value} elif " -combo " in option: name, value = option.split(" -combo ") return {"type": "combo", "name": name, "default": value} elif " -button" in option: pos = option.find(" -button") return {"type": "button", "name": option[:pos]} elif " -save" in option: pos = option.find(" -save") return {"type": "button", "name": option[:pos]} elif " -reset" in option: pos = option.find(" -reset") return {"type": "button", "name": option[:pos]} #=========================================================================== # Info #=========================================================================== def canAnalyze (self): assert self.ready, "Still waiting for done=1" return self.features["analyze"] def maxAnalysisLines (self): return 1 def requestMultiPV (self, setting): return 1 def isAnalyzing (self): return self.mode in (ANALYZING, INVERSE_ANALYZING) def __repr__ (self): if self.name: return self.name return self.features["myname"] pychess-0.12beta3/lib/pychess/Players/engineNest.py0000644000175000017470000004532212167746335021427 0ustar tamasusersfrom __future__ import with_statement import os import sys import json from hashlib import md5 from threading import Thread from os.path import join, dirname, abspath from copy import deepcopy from gobject import GObject, SIGNAL_RUN_FIRST, TYPE_NONE from pychess.System import conf from pychess.System.Log import log from pychess.System.command import Command from pychess.System.SubProcess import SubProcess, searchPath, SubProcessError from pychess.System.prefix import addUserConfigPrefix, getEngineDataPrefix from pychess.System.ThreadPool import pool, PooledThread from pychess.Players.Player import PlayerIsDead from pychess.Utils.const import * from CECPEngine import CECPEngine from UCIEngine import UCIEngine from pychess.Variants import variants attrToProtocol = {"uci": UCIEngine, "xboard": CECPEngine} PYTHONBIN = sys.executable.split("/")[-1] backup = [ {"protocol": "xboard", "name": "PyChess.py", "country": "dk", "vm_name": PYTHONBIN, "vm_args": ["-u"]}, {"protocol": "xboard", "name": "shatranj.py", "country": "us", "vm_name": PYTHONBIN, "vm_args": ["-u"], "args": ["-xboard"]}, {"protocol": "xboard", "name": "gnuchess", "country": "us"}, {"protocol": "xboard", "name": "gnome-gnuchess", "country": "us"}, {"protocol": "xboard", "name": "crafty", "country": "us"}, {"protocol": "xboard", "name": "faile", "country": "ca", "protover": 1}, {"protocol": "xboard", "name": "phalanx", "country": "cz", "protover": 1}, {"protocol": "xboard", "name": "sjeng", "country": "be"}, {"protocol": "xboard", "name": "hoichess", "country": "de"}, {"protocol": "xboard", "name": "boochess", "country": "de", "protover": 1}, {"protocol": "xboard", "name": "amy", "country": "de"}, {"protocol": "xboard", "name": "amundsen", "country": "sw"}, {"protocol": "uci", "name": "gnuchessu", "country": "us"}, {"protocol": "uci", "name": "robbolito", "country": "ru"}, {"protocol": "uci", "name": "glaurung", "country": "no"}, {"protocol": "uci", "name": "stockfish", "country": "no"}, {"protocol": "uci", "name": "ShredderClassicLinux", "country": "de"}, {"protocol": "uci", "name": "fruit_21_static", "country": "fr"}, {"protocol": "uci", "name": "fruit", "country": "fr"}, {"protocol": "uci", "name": "toga2", "country": "de"}, {"protocol": "uci", "name": "hiarcs", "country": "gb"}, {"protocol": "uci", "name": "diablo", "country": "us"}, {"protocol": "uci", "name": "Houdini.exe", "country": "be", "vm_name": "wine"}, {"protocol": "uci", "name": "Rybka.exe", "country": "ru", "vm_name": "wine"}, ] class EngineDiscoverer (GObject, PooledThread): __gsignals__ = { "discovering_started": (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), "engine_discovered": (SIGNAL_RUN_FIRST, TYPE_NONE, (str, object)), "engine_failed": (SIGNAL_RUN_FIRST, TYPE_NONE, (str, object)), "all_engines_discovered": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), } def __init__ (self): GObject.__init__(self) self.engines = [] self.jsonpath = addUserConfigPrefix("engines.json") try: self._engines = json.load(open(self.jsonpath)) except ValueError, e: log.warn("engineNest: Couldn\'t read engines.json, renamed it to .bak\n%s\n" % (self.jsonpath,e)) os.rename(self.jsonpath, self.jsonpath+".bak") self._engines = deepcopy(backup) except IOError, e: log.info("engineNest: Couldn\'t open engines.json, creating a new.\n%s\n" % e) self._engines = deepcopy(backup) ############################################################################ # Discover methods # ############################################################################ def __findRundata (self, engine): """ Searches for a readable, executable named 'name' in the PATH. For the PyChess engine, special handling is taken, and we search PYTHONPATH as well as the directory from where the 'os' module is imported """ if engine.get("vm_name") is not None: altpath = engine.get("vm_command") vmpath = searchPath(engine["vm_name"], access=os.R_OK|os.X_OK, altpath = altpath) if engine["name"] == "PyChess.py": path = join(abspath(dirname(__file__)), "PyChess.py") if not os.access(path, os.R_OK): path = None else: altpath = engine.get("command") path = searchPath(engine["name"], access=os.R_OK, altpath=altpath) if vmpath and path: return vmpath, path else: altpath = engine.get("command") path = searchPath(engine["name"], access=os.R_OK|os.X_OK, altpath=altpath) if path: return None, path return False def __fromUCIProcess (self, subprocess): ids = subprocess.ids options = subprocess.options engine = {} if 'author' in ids: engine['author'] = ids['author'] if options: engine["options"] = options.values() return engine def __fromCECPProcess (self, subprocess): features = subprocess.features options = subprocess.options engine = {} if features['variants'] is not None: engine['variants'] = features['variants'].split(",") if features['analyze'] == 1: engine["analyze"] = True if options: engine["options"] = options.values() return engine def __discoverE (self, engine): subproc = self.initEngine (engine, BLACK) try: subproc.connect('readyForOptions', self.__discoverE2, engine) subproc.prestart() # Sends the 'start line' subproc.start() except SubProcessError, e: log.warn("Engine %s failed discovery: %s" % (engine["name"],e)) self.emit("engine_failed", engine["name"], engine) except PlayerIsDead, e: # Check if the player died after engine_discovered by our own hands if not self.toBeRechecked[engine["name"]][1]: log.warn("Engine %s failed discovery: %s" % (engine["name"],e)) self.emit("engine_failed", engine["name"], engine) def __discoverE2 (self, subproc, engine): if engine.get("protocol") == "uci": fresh = self.__fromUCIProcess(subproc) elif engine.get("protocol") == "xboard": fresh = self.__fromCECPProcess(subproc) engine.update(fresh) exitcode = subproc.kill(UNKNOWN_REASON) if exitcode: log.debug("Engine failed %s\n" % engine["name"]) self.emit("engine_failed", engine['name'], engine) return engine['recheck'] = False log.debug("Engine finished %s\n" % engine["name"]) self.emit ("engine_discovered", engine['name'], engine) ############################################################################ # Main loop # ############################################################################ def __needClean(self, rundata, engine): """ Check if the filename or md5sum of the engine has changed. In that case we need to clean the engine """ vmpath, path = rundata # Check if filename is not set, or if it has changed if engine.get("command") is None or engine.get("command") != path: return True # If the engine failed last time, we'll recheck it as well if engine.get('recheck'): return True # Check if md5sum is not set, or if it has changed if engine.get("md5") is None: return True with open(path) as f: md5sum = md5(f.read()).hexdigest() if engine.get("md5") != md5sum: return True return False def __clean(self, rundata, engine): """ Grab the engine from the backup and attach the attributes from rundata. The update engine is ready for discovering. """ vmpath, path = rundata with open(path) as f: md5sum = md5(f.read()).hexdigest() ###### # Find the backup engine ###### try: backup_engine = (c for c in backup if c["name"] == engine["name"]).next() engine["country"] = backup_engine["country"] except StopIteration: log.warn("Engine '%s' has not been tested and verified to work with PyChess\n" % \ engine.get('name')) engine['recheck'] = True ###### # Clean it ###### engine['command'] = path engine['md5'] = md5sum if vmpath is not None: engine['vm_command'] = vmpath ###### # Save the xml ###### def save(self, *args): try: with open(self.jsonpath, "w") as f: json.dump(self._engines, f, indent=1, sort_keys=True) except IOError, e: log.error("Saving engines.json raised exception: %s\n" % \ ", ".join(str(a) for a in e.args)) def run (self): self.engines = [] # List available engines for engine in self._engines: # Find the known and installed engines on the system # Look up rundata = self.__findRundata(engine) if not rundata: # Engine is not available on the system continue if self.__needClean(rundata, engine): self.__clean(rundata, engine) engine['recheck'] = True self.engines.append(engine) ###### # Runs all the engines in toBeRechecked, in order to gather information ###### self.toBeRechecked = dict((c["name"],[c,False]) for c in self._engines if c.get('recheck')) def count(self_, name, engine, wentwell): if wentwell: self.toBeRechecked[name][1] = True if all([elem[1] for elem in self.toBeRechecked.values()]): self.engines.sort(key=lambda x: x["name"]) self.emit("all_engines_discovered") self.connect("engine_discovered", count, True) self.connect("engine_failed", count, False) if self.toBeRechecked: self.emit("discovering_started", self.toBeRechecked.keys()) self.connect("all_engines_discovered", self.save) for engine, need in self.toBeRechecked.values(): self.__discoverE(engine) else: self.emit("all_engines_discovered") ############################################################################ # Interaction # ############################################################################ def is_analyzer(self, engine): protocol = engine.get("protocol") if protocol == "uci": return True elif protocol == "xboard": return engine.get("analyze") is not None def getAnalyzers (self): return [engine for engine in self.getEngines() if self.is_analyzer(engine)] def getEngines (self): """ Returns list of engine dicts """ return self.engines def getEngineN (self, index): return self.getEngines()[index] def getEngineByName (self, name): names = [engine["name"] for engine in self.getEngines()] return self.getEngines()[names.index(name)] def getEngineByMd5 (self, md5sum, list=[]): if not list: list = self.getEngines() for engine in list: md5 = engine.get('md5') if md5 is None: continue if md5 == md5sum: return engine def getEngineVariants (self, engine): for variantClass in variants.values(): if variantClass.standard_rules: yield variantClass.board.variant else: if engine.get("variants"): if variantClass.cecp_name in engine.get("variants"): yield variantClass.board.variant # UCI knows Chess960 only if variantClass.cecp_name == "fischerandom" and engine.get("options"): for option in engine["options"]: if option["name"] == "UCI_Chess960": yield variantClass.board.variant def getName (self, engine=None): # Test if the call was to get the name of the thread if engine is None: return Thread.getName(self) return engine["name"] def getCountry (self, engine): return engine.get("country") def initEngine (self, engine, color): name = engine['name'] protocol = engine["protocol"] protover = 2 if engine.get("protover") is None else engine.get("protover") path = engine['command'] args = [] if engine.get('args')is None else [a for a in engine['args']] if engine.get('vm_command') is not None: vmpath = engine['vm_command'] vmargs = [] if engine.get('vm_args') is None else [a for a in engine['vm_args']] args = vmargs+[path]+args path = vmpath md5 = engine['md5'] working_directory = engine.get("workingDirectory") if working_directory: workdir = working_directory else: workdir = getEngineDataPrefix() warnwords = ("illegal", "error", "exception") subprocess = SubProcess(path, args, warnwords, SUBPROCESS_SUBPROCESS, workdir) engine_proc = attrToProtocol[protocol](subprocess, color, protover, md5) engine_proc.setName(name) # If the user has configured special options for this engine, here is # where they should be set. def optionsCallback(e): if engine.get("options"): for option in engine["options"]: key = option["name"] value = option.get("value") if (value is not None) and option["default"] != value: if protocol == "xboard" and option["type"] == "check": value = int(bool(value)) e.setOption(key, value) engine_proc.connect("readyForOptions", optionsCallback) return engine_proc def initPlayerEngine (self, engine, color, diffi, variant, secs=0, incr=0, forcePonderOff=False): engine = self.initEngine (engine, color) def optionsCallback (engine): engine.setOptionStrength(diffi, forcePonderOff) engine.setOptionVariant(variant) if secs > 0: engine.setOptionTime(secs, incr) engine.connect("readyForOptions", optionsCallback) engine.prestart() return engine def initAnalyzerEngine (self, engine, mode, variant): engine = self.initEngine (engine, WHITE) def optionsCallback (engine): engine.setOptionAnalyzing(mode) engine.setOptionVariant(variant) engine.connect("readyForOptions", optionsCallback) engine.prestart() return engine def addEngine(self, name, new_engine, protocol): engine = {"name": name, "protocol": protocol, "command": new_engine, "recheck": True} self._engines.append(engine) def removeEngine(self, name): names = [engine["name"] for engine in self.getEngines()] index = names.index(name) del self.engines[index] names = [engine["name"] for engine in self._engines] index = names.index(name) del self._engines[index] discoverer = EngineDiscoverer() def init_engine (analyzer_type, gamemodel, force=False): """ Initializes and starts the engine analyzer of analyzer_type the user has configured in the Engines tab of the preferencesDialog, for gamemodel. If no such engine is set in the preferences, or if the configured engine doesn't support the chess variant being played in gamemodel, then no analyzer is started and None is returned. """ if analyzer_type == HINT: combo_name = "ana_combobox" check_name = "analyzer_check" mode = ANALYZING else: combo_name = "inv_ana_combobox" check_name = "inv_analyzer_check" mode = INVERSE_ANALYZING analyzer = None if conf.get(check_name, True): anaengines = list(discoverer.getAnalyzers()) engine = discoverer.getEngineByMd5(conf.get(combo_name, 0)) if engine is None: engine = anaengines[0] if gamemodel.variant.board.variant in discoverer.getEngineVariants(engine): analyzer = discoverer.initAnalyzerEngine(engine, mode, gamemodel.variant) log.debug("%s analyzer: %s\n" % (analyzer_type, repr(analyzer))) return analyzer def is_uci(engine_command): command = Command(engine_command, "uci\n") output = command.run(timeout=3)[1] uci = False for line in output.split("\n"): line = line.rstrip() if line == "uciok": uci = True break elif "Error" in line or "Illegal" in line or "Invalid" in line: break return uci def is_cecp(engine_command): command = Command(engine_command, "xboard\nprotover 2\n") output = command.run(timeout=3)[1] cecp = False for line in output.split("\n"): line = line.rstrip() if "feature" in line and "done" in line: cecp = True break elif "Error" in line or "Illegal" in line or "Invalid" in line: break return cecp if __name__ == "__main__": import glib, gobject gobject.threads_init() mainloop = glib.MainLoop() # discoverer = EngineDiscoverer() def discovering_started (discoverer, names): print "discovering_started", names discoverer.connect("discovering_started", discovering_started) def engine_discovered (discoverer, name, engine): sys.stdout.write(".") discoverer.connect("engine_discovered", engine_discovered) def all_engines_discovered (discoverer): print "all_engines_discovered" print [engine["name"] for engine in discoverer.getEngines()] mainloop.quit() discoverer.connect("all_engines_discovered", all_engines_discovered) discoverer.start() mainloop.run() pychess-0.12beta3/lib/pychess/Players/UCIEngine.py0000644000175000017470000006545012172047760021072 0ustar tamasusersfrom __future__ import with_statement import collections from copy import copy import Queue from threading import RLock from pychess.Utils.Move import * from pychess.Utils.Board import Board from pychess.Utils.Cord import Cord from pychess.Utils.Offer import Offer from pychess.Utils.Move import toAN, parseAN, listToMoves from pychess.Utils.logic import validate, getMoveKillingKing, getStatus, legalMoveCount from pychess.Utils.const import * from pychess.Utils.lutils.ldata import MATE_VALUE from pychess.Utils.lutils.lmove import ParsingError from pychess.System import conf from pychess.System.Log import log from pychess.System.SubProcess import TimeOutError, SubProcessError from pychess.System.ThreadPool import pool from pychess.Variants.fischerandom import FischerRandomChess from ProtocolEngine import ProtocolEngine from pychess.Players.Player import Player, PlayerIsDead, TurnInterrupt TYPEDIC = {"check":lambda x:x=="true", "spin":int} OPTKEYS = ("name", "type", "min", "max", "default", "var") class UCIEngine (ProtocolEngine): def __init__ (self, subprocess, color, protover, md5): ProtocolEngine.__init__(self, subprocess, color, protover, md5) self.ids = {} self.options = {} self.optionsToBeSent = {} self.wtime = 60000 self.btime = 60000 self.incr = 0 self.timeHandicap = 1 self.moveLock = RLock() # none of the following variables should be changed or used in a # condition statement without holding the above self.moveLock self.ponderOn = False self.pondermove = None self.ignoreNext = False self.waitingForMove = False self.needBestmove = False self.readyForStop = False # keeps track of whether we already sent a 'stop' command self.multipvSetting = conf.get("multipv", 1) # MultiPV option sent to the engine self.multipvExpected = 1 # Number of PVs expected (limited by number of legal moves) self.commands = collections.deque() self.gameBoard = Board(setup=True) # board at the end of all moves played self.board = Board(setup=True) # board to send the engine self.uciPosition = "startpos" self.analysis = [ None ] self.returnQueue = Queue.Queue() self.engine.connect("line", self.parseLines) self.engine.connect("died", self.__die) self.connect("readyForOptions", self.__onReadyForOptions_before) self.connect_after("readyForOptions", self.__onReadyForOptions) self.connect_after("readyForMoves", self.__onReadyForMoves) def __die (self, subprocess): self.returnQueue.put("die") #=========================================================================== # Starting the game #=========================================================================== def prestart (self): print >> self.engine, "uci" def start (self): if self.mode in (ANALYZING, INVERSE_ANALYZING): pool.start(self.__startBlocking) else: self.__startBlocking() def __startBlocking (self): r = self.returnQueue.get() if r == 'die': raise PlayerIsDead assert r == "ready" or r == 'del' #self.emit("readyForOptions") #self.emit("readyForMoves") def __onReadyForOptions_before (self, self_): self.readyOptions = True def __onReadyForOptions (self, self_): if self.mode in (ANALYZING, INVERSE_ANALYZING): if self.hasOption("Ponder"): self.setOption('Ponder', False) if self.hasOption("MultiPV") and self.multipvSetting > 1: self.setOption('MultiPV', self.multipvSetting) for option, value in self.optionsToBeSent.iteritems(): if type(value) == bool: value = str(value).lower() print >> self.engine, "setoption name", option, "value", str(value) print >> self.engine, "isready" def __onReadyForMoves (self, self_): self.returnQueue.put("ready") self.readyMoves = True self._newGame() # If we are an analyzer, this signal was already called in a different # thread, so we can safely block it. if self.mode in (ANALYZING, INVERSE_ANALYZING): self._searchNow() #=========================================================================== # Ending the game #=========================================================================== def end (self, status, reason): # UCI doens't care about reason, so we just kill self.kill(reason) def kill (self, reason): """ Kills the engine, starting with the 'stop' and 'quit' commands, then trying sigterm and eventually sigkill. Returns the exitcode, or if engine have already been killed, the method returns None """ if self.connected: self.connected = False try: try: print >> self.engine, "stop" print >> self.engine, "quit" self.returnQueue.put("del") return self.engine.gentleKill() except OSError, e: # No need to raise on a hang up error, as the engine is dead # anyways if e.errno == 32: log.warn("Hung up Error", self.defname) return e.errno else: raise finally: # Clear the analyzed data, if any self.emit("analyze", []) #=========================================================================== # Send the player move updates #=========================================================================== def _moveToUCI (self, board, move): cn = CASTLE_KK if board.variant == FISCHERRANDOMCHESS: cn = CASTLE_KR return toAN(board, move, short=True, castleNotation=cn) def _setBoard (self, board): if board.variant == NORMALCHESS and board.asFen() == FEN_START: self.uciPosition = "startpos" else: self.uciPosition = "fen " + board.asFen() self.board = self.gameBoard = board if self.mode == INVERSE_ANALYZING: self.board = self.gameBoard.switchColor() def setBoard (self, board): log.debug("setBoardAtPly: board=%s\n" % board, self.defname) self._setBoard(board) if not self.readyMoves: return self._searchNow() def putMove (self, board1, move, board2): log.debug("putMove: board1=%s move=%s board2=%s self.board=%s\n" % \ (board1, move, board2, self.board), self.defname) # If the spactator engine analyzing an older position, let it do if self.board != board2: return self._setBoard(board1) if not self.readyMoves: return self._searchNow() def makeMove (self, board1, move, board2): log.debug("makeMove: move=%s self.pondermove=%s board1=%s board2=%s self.board=%s\n" % \ (move, self.pondermove, board1, board2, self.board), self.defname) assert self.readyMoves with self.moveLock: self._setBoard(board1) self.waitingForMove = True ponderhit = False if board2 and self.pondermove and move == self.pondermove: ponderhit = True elif board2 and self.pondermove: self.ignoreNext = True print >> self.engine, "stop" self._searchNow(ponderhit=ponderhit) # Parse outputs try: r = self.returnQueue.get() if r == "del": raise PlayerIsDead if r == "int": with self.moveLock: self.pondermove = None self.ignoreNext = True self.needBestmove = True self.hurry() raise TurnInterrupt return r finally: with self.moveLock: self.waitingForMove = False # empty the queue of any moves received post-undo/TurnInterrupt self.returnQueue.queue.clear() def updateTime (self, secs, opsecs): if self.color == WHITE: self.wtime = int(secs*1000*self.timeHandicap) self.btime = int(opsecs*1000) else: self.btime = int(secs*1000*self.timeHandicap) self.wtime = int(opsecs*1000) #=========================================================================== # Standard options #=========================================================================== def setOptionAnalyzing (self, mode): self.mode = mode if self.mode == INVERSE_ANALYZING: self.board = self.gameBoard.switchColor() def setOptionInitialBoard (self, model): log.debug("setOptionInitialBoard: self=%s, model=%s\n" % \ (self, model), self.defname) self._setBoard(model.boards[0]) def setOptionVariant (self, variant): if variant == FischerRandomChess: assert self.hasOption("UCI_Chess960") self.setOption("UCI_Chess960", True) def setOptionTime (self, secs, gain): self.wtime = int(max(secs*1000*self.timeHandicap, 1)) self.btime = int(max(secs*1000*self.timeHandicap, 1)) self.incr = int(gain*1000*self.timeHandicap) def setOptionStrength (self, strength, forcePonderOff): self.strength = strength if self.hasOption('UCI_LimitStrength') and strength <= 18: self.setOption('UCI_LimitStrength', True) if self.hasOption('UCI_Elo'): self.setOption('UCI_Elo', 150 * strength) # Stockfish offers 20 skill levels if self.hasOption('Skill Level') and strength <= 19: self.setOption('Skill Level', strength) if ((not self.hasOption('UCI_Elo')) and (not self.hasOption('Skill Level'))) or strength <= 19: self.timeHandicap = th = 0.01 * 10**(strength/10.) self.wtime = int(max(self.wtime*th, 1)) self.btime = int(max(self.btime*th, 1)) self.incr = int(self.incr*th) if self.hasOption('Ponder'): self.setOption('Ponder', strength >= 19 and not forcePonderOff) #=========================================================================== # Interacting with the player #=========================================================================== def pause (self): log.debug("pause: self=%s\n" % self, self.defname) self.engine.pause() return if self.board.color == self.color or \ self.mode != NORMAL or self.pondermove: self.ignoreNext = True print >> self.engine, "stop" def resume (self): log.debug("resume: self=%s\n" % self, self.defname) self.engine.resume() return if self.mode == NORMAL: if self.board.color == self.color: self._searchNow() elif self.ponderOn and self.pondermove: self._startPonder() else: self._searchNow() def hurry (self): log.debug("hurry: self.waitingForMove=%s self.readyForStop=%s\n" % \ (self.waitingForMove, self.readyForStop), self.defname) # sending this more than once per move will crash most engines # so we need to send only the first one, and then ignore every "hurry" request # after that until there is another outstanding "position..go" with self.moveLock: if self.waitingForMove and self.readyForStop: print >> self.engine, "stop" self.readyForStop = False def playerUndoMoves (self, moves, gamemodel): log.debug("playerUndoMoves: moves=%s gamemodel.ply=%s gamemodel.boards[-1]=%s self.board=%s\n" % \ (moves, gamemodel.ply, gamemodel.boards[-1], self.board), self.defname) self._setBoard(gamemodel.boards[-1]) if (gamemodel.curplayer != self and moves % 2 == 1) or \ (gamemodel.curplayer == self and moves % 2 == 0): # Interrupt if we were searching but should no longer do so, or # if it is was our move before undo and it is still our move after undo # since we need to send the engine the new FEN in makeMove() log.debug("playerUndoMoves: putting 'int' into self.returnQueue=%s\n" % \ self.returnQueue.queue, self.defname) self.returnQueue.put("int") def spectatorUndoMoves (self, moves, gamemodel): log.debug("spectatorUndoMoves: moves=%s gamemodel.ply=%s gamemodel.boards[-1]=%s self.board=%s\n" % \ (moves, gamemodel.ply, gamemodel.boards[-1], self.board), self.defname) self._setBoard(gamemodel.boards[-1]) if self.readyMoves: self._searchNow() #=========================================================================== # Offer handling #=========================================================================== def offer (self, offer): if offer.type == DRAW_OFFER: self.emit("decline", offer) else: self.emit("accept", offer) #=========================================================================== # Option handling #=========================================================================== def setOption (self, key, value): """ Set an option, which will be sent to the engine, after the 'readyForOptions' signal has passed. If you want to know the possible options, you should go to engineDiscoverer or use the getOption, getOptions and hasOption methods, while you are in your 'readyForOptions' signal handler """ if self.readyMoves: log.warn("Options set after 'readyok' are not sent to the engine", self.defname) self.optionsToBeSent[key] = value self.ponderOn = key=="Ponder" and value is True def getOption (self, option): assert self.readyOptions if option in self.options: return self.options[option]["default"] return None def getOptions (self): assert self.readyOptions return copy(self.options) def hasOption (self, key): assert self.readyOptions return key in self.options #=========================================================================== # Internal #=========================================================================== def _newGame (self): print >> self.engine, "ucinewgame" def _searchNow (self, ponderhit=False): log.debug("_searchNow: self.needBestmove=%s ponderhit=%s self.board=%s\n" % \ (self.needBestmove, ponderhit, self.board), self.defname) with self.moveLock: commands = [] if ponderhit: commands.append("ponderhit") elif self.mode == NORMAL: commands.append("position %s" % self.uciPosition) if self.strength <= 3: commands.append("go depth %d" % self.strength) else: commands.append("go wtime %d winc %d btime %d binc %d" % \ (self.wtime, self.incr, self.btime, self.incr)) else: print >> self.engine, "stop" if self.mode == INVERSE_ANALYZING: if self.board.board.opIsChecked(): # Many engines don't like positions able to take down enemy # king. Therefore we just return the "kill king" move # automaticaly self.emit("analyze", [([getMoveKillingKing(self.board)], MATE_VALUE-1)]) return commands.append("position fen %s" % self.board.asFen()) else: commands.append("position %s" % self.uciPosition) commands.append("go infinite") if self.hasOption("MultiPV") and self.multipvSetting > 1: self.multipvExpected = min(self.multipvSetting, legalMoveCount(self.board)) else: self.multipvExpected = 1 self.analysis = [None] * self.multipvExpected if self.needBestmove: self.commands.append(commands) log.debug("_searchNow: self.needBestmove==True, appended to self.commands=%s\n" % \ self.commands, self.defname) else: for command in commands: print >> self.engine, command if getStatus(self.board)[1] != WON_MATE: # XXX This looks fishy. self.needBestmove = True self.readyForStop = True def _startPonder (self): uciPos = self.uciPosition print >> self.engine, "position", uciPos, " moves", \ self._moveToUCI(self.board, self.pondermove) print >> self.engine, "go ponder wtime", self.wtime, \ "winc", self.incr, "btime", self.btime, "binc", self.incr #=========================================================================== # Parsing from engine #=========================================================================== def parseLines (self, engine, lines): for line in lines: self.__parseLine(line) def __parseLine (self, line): if not self.connected: return parts = line.split() if not parts: return #---------------------------------------------------------- Initializing if parts[0] == "id": self.ids[parts[1]] = " ".join(parts[2:]) if parts[1] == "name": self.setName(self.ids["name"]) return if parts[0] == "uciok": self.emit("readyForOptions") return if parts[0] == "readyok": self.emit("readyForMoves") return #------------------------------------------------------- Options parsing if parts[0] == "option": dic = {} last = 1 varlist = [] for i in xrange (2, len(parts)+1): if i == len(parts) or parts[i] in OPTKEYS: key = parts[last] value = " ".join(parts[last+1:i]) if "type" in dic and dic["type"] in TYPEDIC: value = TYPEDIC[dic["type"]](value) if key == "var": varlist.append(value) elif key == "type" and value == "string": dic[key] = "text" else: dic[key] = value last = i if varlist: dic["choices"] = varlist self.options[dic["name"]] = dic return #---------------------------------------------------------------- A Move if self.mode == NORMAL and parts[0] == "bestmove": with self.moveLock: self.needBestmove = False self.__sendQueuedGo() if self.ignoreNext: log.debug("__parseLine: line='%s' self.ignoreNext==True, returning\n" % \ line.strip(), self.defname) self.ignoreNext = False self.readyForStop = True return if not self.waitingForMove: log.warn("__parseLine: self.waitingForMove==False, ignoring move=%s\n" % \ parts[1], self.defname) self.pondermove = None return self.waitingForMove = False try: move = parseAN(self.board, parts[1]) except ParsingError, e: self.end(WHITEWON if self.board.color == BLACK else BLACKWON, WON_ADJUDICATION) return if not validate(self.board, move): # This is critical. To avoid game stalls, we need to resign on # behalf of the engine. log.error("__parseLine: move=%s didn't validate, putting 'del' in returnQueue. self.board=%s\n" % \ (repr(move), self.board), self.defname) self.end(WHITEWON if self.board.color == BLACK else BLACKWON, WON_ADJUDICATION) return self._setBoard(self.board.move(move)) log.debug("__parseLine: applied move=%s to self.board=%s\n" % \ (move, self.board), self.defname) if self.ponderOn: self.pondermove = None # An engine may send an empty ponder line, simply to clear. if len(parts) == 4: # Engines don't always check for everything in their # ponders. Hence we need to validate. # But in some cases, what they send may not even be # correct AN - specially in the case of promotion. try: pondermove = parseAN(self.board, parts[3]) except ParsingError: pass else: if validate(self.board, pondermove): self.pondermove = pondermove self._startPonder() self.returnQueue.put(move) log.debug("__parseLine: put move=%s into self.returnQueue=%s\n" % \ (move, self.returnQueue.queue), self.defname) return #----------------------------------------------------------- An Analysis if self.mode != NORMAL and parts[0] == "info" and "pv" in parts: multipv = 1 if "multipv" in parts: multipv = int(parts[parts.index("multipv")+1]) scoretype = parts[parts.index("score")+1] if scoretype in ('lowerbound', 'upperbound'): score = None else: score = int(parts[parts.index("score")+2]) if scoretype == 'mate': # print >> self.engine, "stop" if score != 0: sign = score/abs(score) score = sign*MATE_VALUE movstrs = parts[parts.index("pv")+1:] try: moves = listToMoves (self.board, movstrs, AN, validate=True, ignoreErrors=False) except ParsingError, e: # ParsingErrors may happen when parsing "old" lines from # analyzing engines, which haven't yet noticed their new tasks log.debug("__parseLine: Ignored (%s) from analyzer: ParsingError%s\n" % \ (' '.join(movstrs),e), self.defname) return if multipv <= len(self.analysis): self.analysis[multipv - 1] = (moves, score) self.emit("analyze", self.analysis) return #----------------------------------------------- An Analyzer bestmove if self.mode != NORMAL and parts[0] == "bestmove": with self.moveLock: log.debug("__parseLine: processing analyzer bestmove='%s'\n" % \ line.strip(), self.defname) self.needBestmove = False self.__sendQueuedGo(sendlast=True) return # Stockfish complaining it received a 'stop' without a corresponding 'position..go' if line.strip() == "Unknown command: stop": with self.moveLock: log.debug("__parseLine: processing '%s'\n" % line.strip(), self.defname) self.ignoreNext = False self.needBestmove = False self.readyForStop = False self.__sendQueuedGo() return #* score #* cp # the score from the engine's point of view in centipawns. #* mate # mate in y moves, not plies. # If the engine is getting mated use negative values for y. #* lowerbound # the score is just a lower bound. #* upperbound # the score is just an upper bound. def __sendQueuedGo (self, sendlast=False): """ Sends the next position...go or ponderhit command set which was queued (if any). sendlast -- If True, send the last position-go queued rather than the first, and discard the others (intended for analyzers) """ with self.moveLock: if len(self.commands) > 0: if sendlast: commands = self.commands.pop() self.commands.clear() else: commands = self.commands.popleft() for command in commands: print >> self.engine, command self.needBestmove = True self.readyForStop = True log.debug("__sendQueuedGo: sent queued go=%s\n" % commands, self.defname) #=========================================================================== # Info #=========================================================================== def maxAnalysisLines (self): try: return int(self.options["MultiPV"]["max"]) except (KeyError, ValueError): return 1 # Engine does not support the MultiPV option def requestMultiPV (self, n): multipvMax = self.maxAnalysisLines() n = min(n, multipvMax) if n != self.multipvSetting: conf.set("multipv", n) with self.moveLock: self.multipvSetting = n print >> self.engine, "stop" print >> self.engine, "setoption name MultiPV value", n self._searchNow() return n def __repr__ (self): if self.name: return self.name if "name" in self.ids: return self.ids["name"] return ', '.join(self.defname) pychess-0.12beta3/lib/pychess/Players/Engine.py0000755000175000017470000001042612161415524020520 0ustar tamasusersfrom urllib import urlopen, urlencode from gobject import SIGNAL_RUN_FIRST, TYPE_NONE from pychess.System.ThreadPool import pool from pychess.System.Log import log from pychess.Utils.Offer import Offer from pychess.Utils.const import ARTIFICIAL, CHAT_ACTION from Player import Player class Engine (Player): __type__ = ARTIFICIAL ''' Argument is a vector of analysis lines. The first element is the pv list of moves. The second is a score relative to the engine. If no score is known, the value can be None, but not 0, which is a draw. ''' __gsignals__ = { 'analyze': (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)) } def __init__(self, md5=None): Player.__init__(self) self.md5 = md5 self.currentAnalysis = [] def on_analysis(self_, analysis): self.currentAnalysis = analysis self.connect('analyze', on_analysis) #=========================================================================== # Offer handling #=========================================================================== def offer (self, offer): raise NotImplementedError def offerDeclined (self, offer): pass #Ignore def offerWithdrawn (self, offer): pass #Ignore def offerError (self, offer, error): pass #Ignore #=========================================================================== # General Engine Options #=========================================================================== def setOptionAnalyzing (self, mode): self.mode = mode def setOptionInitialBoard (self, model): """ If the game starts at a board other than FEN_START, it should be sent here. We sends a gamemodel, so the engine can load the entire list of moves, if any """ pass # Optional def setOptionVariant (self, variant): """ Inform the engine of any special variant. If the engine doesn't understand the variant, this will raise an error. """ raise NotImplementedError def setOptionTime (self, secs, gain): """ Seconds is the initial clock of the game. Gain is the amount of seconds a player gets after each move. If the engine doesn't support playing with time, this will fail.""" raise NotImplementedError def setOptionStrength (self, strength): """ Strength is a number [1,8] inclusive. Higher is better. """ self.strength = strength raise NotImplementedError #=========================================================================== # Engine specific methods #=========================================================================== def canAnalyze (self): raise NotImplementedError def maxAnalysisLines (self): raise NotImplementedError def requestMultiPV (self, setting): """Set the number of analysis lines the engine will give, if possible. If setting is too high, the engine's maximum will be used. The setting will last until the next call to requestMultiPV. Return value: the setting used. """ raise NotImplementedError def getAnalysis (self): """ Returns a list of moves, or None if there haven't yet been made an analysis """ return self.currentAnalysis #=========================================================================== # General chat handling #=========================================================================== def putMessage (self, message): def answer (message): try: data = urlopen("http://www.pandorabots.com/pandora/talk?botid=8d034368fe360895", urlencode({"message":message, "botcust2":"x"})).read() except IOError, e: log.warn("Couldn't answer message from online bot: '%s'\n" % e, self.defname) return ss = "DMPGirl:" es = "
" answer = data[data.find(ss)+len(ss) : data.find(es,data.find(ss))] self.emit("offer", Offer(CHAT_ACTION, answer)) pool.start(answer, message) pychess-0.12beta3/lib/pychess/Players/Human.py0000755000175000017470000003024512173202156020362 0ustar tamasusersfrom Queue import Queue import gtk, gobject from pychess.Utils.const import * from pychess.Utils.logic import validate from pychess.Utils.Move import Move from pychess.Utils.Offer import Offer from pychess.System.Log import log from pychess.System import glock, conf from pychess.Players.Player import Player, PlayerIsDead, TurnInterrupt OFFER_MESSAGES = { DRAW_OFFER: (_("Your opponent has offered you a draw. Accept?"), _("Your opponent has offered you a draw. If you accept this offer, the game will end with a score of 1/2 - 1/2."), False), ABORT_OFFER: (_("Your opponent wants to abort the game. Accept?"), _("Your opponent has asked that the game be aborted. If you accept this offer, the game will end with no rating change."), False), ADJOURN_OFFER: (_("Your opponent wants to adjourn the game. Accept?"), _("Your opponent has asked that the game be adjourned. If you accept this offer, the game will be adjourned and you can resume it later (when your opponent is online and both players agree to resume)."), False), TAKEBACK_OFFER: (_("Your opponent wants to undo %s move(s). Accept?"), _("Your opponent has asked that the last %s move(s) be undone. If you accept this offer, the game will continue from the earlier position."), True), PAUSE_OFFER: (_("Your opponent wants to pause the game. Accept?"), _("Your opponent has asked that the game be paused. If you accept this offer, the game clock will be paused until both players agree to resume the game."), False), RESUME_OFFER: (_("Your opponent wants to resume the game. Accept?"), _("Your opponent has asked that the game be resumed. If you accept this offer, the game clock will continue from where it was paused."), False) } ACTION_NAMES = { RESIGNATION: _("The resignation"), FLAG_CALL: _("The flag call"), DRAW_OFFER: _("The draw offer"), ABORT_OFFER: _("The abort offer"), ADJOURN_OFFER: _("The adjourn offer"), PAUSE_OFFER: _("The pause offer"), RESUME_OFFER: _("The resume offer"), SWITCH_OFFER: _("The offer to switch sides"), TAKEBACK_OFFER: _("The takeback offer"), } ACTION_ACTIONS = { RESIGNATION: _("resign"), FLAG_CALL: _("call your opponents flag"), DRAW_OFFER: _("offer a draw"), ABORT_OFFER: _("offer an abort"), ADJOURN_OFFER: _("offer to adjourn"), PAUSE_OFFER: _("offer a pause"), RESUME_OFFER: _("offer to resume"), SWITCH_OFFER: _("offer to switch sides"), TAKEBACK_OFFER: _("offer a takeback"), HURRY_ACTION: _("ask your opponent to move") } ERROR_MESSAGES = { ACTION_ERROR_NOT_OUT_OF_TIME: _("Your opponent is not out of time."), ACTION_ERROR_CLOCK_NOT_STARTED: _("The clock hasn't been started yet."), ACTION_ERROR_SWITCH_UNDERWAY: _("You can't switch colors during the game."), ACTION_ERROR_TOO_LARGE_UNDO: _("You have tried to undo too many moves."), } class Human (Player): __type__ = LOCAL __gsignals__ = { "messageRecieved": (gobject.SIGNAL_RUN_FIRST, None, (str,)), } def __init__ (self, gmwidg, color, name, ichandle=None, icrating=None): Player.__init__(self) self.defname = "Human" self.board = gmwidg.board self.gmwidg = gmwidg self.gamemodel = self.board.view.model self.queue = Queue() self.color = color self.conid = [ self.board.connect("piece_moved", self.piece_moved), self.board.connect("action", lambda b,action,param: self.emit_action(action, param)) ] self.setName(name) self.ichandle = ichandle self.icrating = icrating if self.gamemodel.timemodel: self.gamemodel.timemodel.connect('zero_reached', self.zero_reached) #=========================================================================== # Handle signals from the board #=========================================================================== def zero_reached (self, timemodel, color): if conf.get('autoCallFlag', False) and \ self.gamemodel.status == RUNNING and \ timemodel.getPlayerTime(1-self.color) <= 0: log.info('Automatically sending flag call on behalf of player %s.' % self.name) self.emit("offer", Offer(FLAG_CALL)) def piece_moved (self, board, move, color): if color != self.color: return self.queue.put(move) def emit_action (self, action, param): # If there are two or more tabs open, we have to ensure us that it is # us who are in the active tab, and not the others if not self.gmwidg.isInFront(): return log.debug("Human.emit_action: self.name=%s, action=%s\n" % (self.name, action)) # If there are two human players, we have to ensure us that it was us # who did the action, and not the others if self.gamemodel.players[1-self.color].__type__ == LOCAL: if action == HURRY_ACTION: if self.gamemodel.boards[-1].color == self.color: return else: if self.gamemodel.boards[-1].color != self.color: return self.emit("offer", Offer(action, param=param)) #=========================================================================== # Send the player move updates #=========================================================================== def makeMove (self, board1, move, board2): log.debug("Human.makeMove: move=%s, board1=%s board2=%s\n" % \ (move, board1, board2)) if self.board.view.premovePiece and self.board.view.premove0 and self.board.view.premove1 and \ self.color == self.board.view.premovePiece.color: if validate(board1, Move(self.board.view.premove0, self.board.view.premove1, board1, promotion=self.board.view.premovePromotion)): log.debug("Human.makeMove: Setting move to premove %s %s\n" % \ (self.board.view.premove0, self.board.view.premove1)) self.board.emit_move_signal(self.board.view.premove0, self.board.view.premove1, promotion=self.board.view.premovePromotion) # reset premove self.board.view.setPremove(None, None, None, None) self.gmwidg.setLocked(False) item = self.queue.get(block=True) self.gmwidg.setLocked(True) if item == "del": raise PlayerIsDead, "Killed by foreign forces" if item == "int": log.debug("Human.makeMove: %s: raise TurnInterrupt" % self) raise TurnInterrupt return item #=========================================================================== # Ending the game #=========================================================================== def end (self, status, reason): self.queue.put("del") def kill (self, reason): print "I am killed", self for id in self.conid: if self.board.handler_is_connected(id): self.board.disconnect(id) self.queue.put("del") #=========================================================================== # Interacting with the player #=========================================================================== def hurry (self): title = _("Your opponent asks you to hurry!") description = _("Generally this means nothing, as the game is timebased, but if you want to please your opponent, perhaps you should get going.") self._message(title, description, gtk.MESSAGE_INFO, gtk.BUTTONS_OK) @glock.glocked def pause (self): self.gmwidg.setLocked(True) @glock.glocked def resume (self): log.debug("Human.resume: %s\n" % (self)) if self.board.view.model.curplayer == self: self.gmwidg.setLocked(False) def playerUndoMoves (self, movecount, gamemodel): log.debug("Human.playerUndoMoves: movecount=%s self=%s\n" % (movecount, self)) #If the movecount is odd, the player has changed, and we have to interupt if movecount % 2 == 1: # If it is no longer us to move, we raise TurnInterruprt in order to # let GameModel continue the game. if gamemodel.curplayer != self: log.debug("Human.playerUndoMoves: putting TurnInterrupt into self.queue\n") self.queue.put("int") # If the movecount is even, we have to ensure the board is unlocked. # This is because it might have been locked by the game ending, but # perhaps we have now undone some moves, and it is no longer ended. elif movecount % 2 == 0 and gamemodel.curplayer == self: log.debug("Human.playerUndoMoves: self=%s: calling gmwidg.setLocked\n" % (self)) self.gmwidg.setLocked(False) def putMessage (self, text): self.emit("messageRecieved", text) def sendMessage (self, text): self.emit("offer", Offer(CHAT_ACTION, param=text)) #=========================================================================== # Offer handling #=========================================================================== def offer (self, offer): log.debug("Human.offer: self=%s %s\n" % (self, offer)) title, description, takesParam = OFFER_MESSAGES[offer.type] if takesParam: param = offer.param if offer.type == TAKEBACK_OFFER and \ self.gamemodel.players[1-self.color].__type__ is not REMOTE: param = self.gamemodel.ply - offer.param title = title % param description = description % param def responsecb (dialog, response): if response == gtk.RESPONSE_YES: self.emit("accept", offer) else: self.emit("decline", offer) self._message(title, description, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, responsecb) def offerDeclined (self, offer): log.debug("Human.offerDeclined: self=%s %s\n" % (self, offer)) if offer.type not in ACTION_NAMES: return title = _("%s was declined by your opponent") % ACTION_NAMES[offer.type] description = _("You can try to send the offer to your opponent later in the game again.") self._message(title, description, gtk.MESSAGE_INFO, gtk.BUTTONS_OK) def offerWithdrawn (self, offer): log.debug("Human.offerWithdrawn: self=%s %s\n" % (self, offer)) if offer.type not in ACTION_NAMES: return title = _("%s was withdrawn by your opponent") % ACTION_NAMES[offer.type] description = _("Your opponent seems to have changed his or her mind.") self._message(title, description, gtk.MESSAGE_INFO, gtk.BUTTONS_OK) def offerError (self, offer, error): log.debug("Human.offerError: self=%s error=%s %s\n" % (self, error, offer)) if offer.type not in ACTION_NAMES: return actionName = ACTION_NAMES[offer.type] if error == ACTION_ERROR_NONE_TO_ACCEPT: title = _("Unable to accept %s") % actionName.lower() description = _("PyChess was unable to get the %s offer accepted. Probably because it has been withdrawn.") elif error == ACTION_ERROR_NONE_TO_DECLINE or \ error == ACTION_ERROR_NONE_TO_WITHDRAW: # If the offer was not there, it has probably already been either # declined or withdrawn. return else: title = _("%s returns an error") % actionName description = ERROR_MESSAGES[error] self._message(title, description, gtk.MESSAGE_INFO, gtk.BUTTONS_OK) @glock.glocked def _message (self, title, description, type, buttons, responsecb=(lambda d,r:None)): d = gtk.MessageDialog (type=type, buttons=buttons) d.set_markup ("%s" % title) d.format_secondary_text (description) def response (dialog, response, responsecb): responsecb(dialog, response) dialog.hide() d.connect("response", response, responsecb) d.show() pychess-0.12beta3/lib/pychess/Players/__init__.py0000755000175000017470000000000012161415524021035 0ustar tamasuserspychess-0.12beta3/lib/pychess/Players/PyChessFICS.py0000644000175000017470000004071112161415524021333 0ustar tamasusersfrom pychess.Players.PyChess import PyChess from pychess.System.prefix import addDataPrefix, isInstalled from pychess.System.repeat import repeat_sleep from pychess.System.ThreadPool import pool from pychess.System import GtkWorker from pychess.Utils.const import * from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import determineAlgebraicNotation, toLAN from pychess.Utils.lutils import lsearch from pychess.Utils.repr import reprResult_long, reprReason_long from pychess.ic import FICSConnection from urllib import urlopen, urlencode import email.Utils import math import pychess import random import signal import subprocess class PyChessFICS(PyChess): def __init__ (self, password, from_address, to_address): PyChess.__init__(self) self.ports = (23, 5000) if not password: self.username = "guest" else: self.username = "PyChess" self.owner = "Lobais" self.password = password self.from_address = "The PyChess Bot <%s>" % from_address self.to_address = "Thomas Dybdahl Ahle <%s>" % to_address # Possible start times self.minutes = (1,2,3,4,5,6,7,8,9,10) self.gains = (0,5,10,15,20) # Possible colors. None == random self.colors = (WHITE, BLACK, None) # The amount of random challenges, that PyChess sends with each seek self.challenges = 10 enableEGTB() self.sudos = set() self.ownerOnline = False self.waitingForPassword = None self.log = [] self.acceptedTimesettings = [] self.worker = None repeat_sleep(self.sendChallenges, 60*1) def __triangular(self, low, high, mode): """Triangular distribution. Continuous distribution bounded by given lower and upper limits, and having a given mode value in-between. http://en.wikipedia.org/wiki/Triangular_distribution """ u = random.random() c = (mode - low) / (high - low) if u > c: u = 1 - u c = 1 - c low, high = high, low tri = low + (high - low) * (u * c) ** 0.5 if tri < mode: return int(tri) elif tri > mode: return int(math.ceil(tri)) return int(round(tri)) def sendChallenges(self): if self.connection.bm.isPlaying(): return True statsbased = ((0.39197722779282, 3, 0), (0.59341408108783, 5, 0), (0.77320877377846, 1, 0), (0.8246379941394, 10, 0), (0.87388717406441, 2, 12), (0.91443760169489, 15, 0), (0.9286423058163, 4, 0), (0.93891977227793, 2, 0), (0.94674539138335, 20, 0), (0.95321476842423, 2, 2), (0.9594588808257, 5, 2), (0.96564528079889, 3, 2), (0.97173859621034, 7, 0), (0.97774906636184, 3, 1), (0.98357243654425, 5, 12), (0.98881309737017, 5, 5), (0.99319644938247, 6, 0), (0.99675879556023, 3, 12), (1, 5, 3)) #n = random.random() #for culminativeChance, minute, gain in statsbased: # if n < culminativeChance: # break culminativeChance, minute, gain = random.choice(statsbased) #type = random.choice((TYPE_LIGHTNING, TYPE_BLITZ, TYPE_STANDARD)) #if type == TYPE_LIGHTNING: # minute = self.__triangular(0,2+1,1) # mingain = not minute and 1 or 0 # maxgain = int((3-minute)*3/2) # gain = random.randint(mingain, maxgain) #elif type == TYPE_BLITZ: # minute = self.__triangular(0,14+1,5) # mingain = max(int((3-minute)*3/2+1), 0) # maxgain = int((15-minute)*3/2) # gain = random.randint(mingain, maxgain) #elif type == TYPE_STANDARD: # minute = self.__triangular(0,20+1,12) # mingain = max(int((15-minute)*3/2+1), 0) # maxgain = int((20-minute)*3/2) # gain = self.__triangular(mingain, maxgain, mingain) #color = random.choice(self.colors) self.extendlog(["Seeking %d %d" % (minute, gain)]) self.connection.glm.seek(minute, gain, True) opps = random.sample(self.connection.players.get_online_playernames(), self.challenges) self.extendlog("Challenging %s" % op for op in opps) for player in opps: self.connection.om.challenge(player, minute, gain, True) return True def makeReady(self): signal.signal(signal.SIGINT, gtk.main_quit) PyChess.makeReady(self) self.connection = FICSConnection("freechess.org",self.ports, self.username, self.password) self.connection.connect("connectingMsg", self.__showConnectLog) self.connection._connect() self.connection.glm.connect("addPlayer", self.__onAddPlayer) self.connection.glm.connect("removePlayer", self.__onRemovePlayer) self.connection.cm.connect("privateMessage", self.__onTell) self.connection.alm.connect("logOut", self.__onLogOut) self.connection.bm.connect("playGameCreated", self.__onGameCreated) self.connection.bm.connect("curGameEnded", self.__onGameEnded) self.connection.bm.connect("boardUpdate", self.__onBoardUpdate) self.connection.om.connect("onChallengeAdd", self.__onChallengeAdd) self.connection.om.connect("onOfferAdd", self.__onOfferAdd) self.connection.adm.connect("onAdjournmentsList", self.__onAdjournmentsList) self.connection.em.connect("onAmbiguousMove", self.__onAmbiguousMove) self.connection.em.connect("onIllegalMove", self.__onAmbiguousMove) self.connection.adm.queryAdjournments() self.connection.lvm.setVariable("autoflag", 1) self.connection.fm.setFingerNote(1, "PyChess is the chess engine bundled with the PyChess %s " % pychess.VERSION + "chess client. This instance is owned by %s, but acts " % self.owner + "quite autonomously.") self.connection.fm.setFingerNote(2, "PyChess is 100% Python code and is released under the terms of " + "the GPL. The evalution function is largely equal to the one of" + "GnuChess, but it plays quite differently.") self.connection.fm.setFingerNote(3, "PyChess runs on an elderly AMD Sempron(tm) Processor 3200+, 512 " + "MB DDR2 Ram, but is built to take use of 64bit calculating when " + "accessible, through the gpm library.") self.connection.fm.setFingerNote(4, "PyChess uses a small 500 KB openingbook based solely on Kasparov " + "games. The engine doesn't have much endgame knowledge, but might " + "in some cases access an online endgamedatabase.") self.connection.fm.setFingerNote(5, "PyChess will allow any pause/resume and adjourn wishes, but will " + "deny takebacks. Draw, abort and switch offers are accepted, " + "if they are found to be an advance. Flag is auto called, but " + "PyChess never resigns. We don't want you to forget your basic " + "mating skills.") def main(self): self.connection.run() self.extendlog([str(self.acceptedTimesettings)]) self.phoneHome("Session ended\n"+"\n".join(self.log)) print "Session ended" def run(self): pool.start(self.main) gtk.gdk.threads_init() gtk.main() #=========================================================================== # General #=========================================================================== def __showConnectLog (self, connection, message): print message def __onLogOut (self, autoLogoutManager): self.connection.close() #sys.exit() def __onAddPlayer (self, gameListManager, player): if player["name"] in self.sudos: self.sudos.remove(player["name"]) if player["name"] == self.owner: self.connection.cm.tellPlayer(self.owner, "Greetings") self.ownerOnline = True def __onRemovePlayer (self, gameListManager, playername): if playername == self.owner: self.ownerOnline = False def __onAdjournmentsList (self, adjournManager, adjournments): for adjournment in adjournments: if adjournment["online"]: adjournManager.challenge(adjournment["opponent"]) def __usage (self): return "|| PyChess bot help file || " +\ "# help 'Displays this help file' " +\ "# sudo 'Lets PyChess execute the given command' "+\ "# sendlog 'Makes PyChess send you its current log'" def __onTell (self, chatManager, name, title, isadmin, text): if self.waitingForPassword: if text.strip() == self.password or (not self.password and text == "none"): self.sudos.add(name) self.tellHome("%s gained sudo access" % name) self.connection.client.run_command(self.waitingForPassword) else: chatManager.tellPlayer(name, "Wrong password") self.tellHome("%s failed sudo access" % name) self.waitingForPassword = None return args = text.split() #if args == ["help"]: # chatManager.tellPlayer(name, self.__usage()) if args[0] == "sudo": command = " ".join(args[1:]) if name in self.sudos or name == self.owner: # Notice: This can be used to make nasty loops print >> self.connection.client, command else: print repr(name), self.sudos chatManager.tellPlayer(name, "Please send me the password") self.waitingForPassword = command elif args == ["sendlog"]: if self.log: # TODO: Consider email chatManager.tellPlayer(name, "\\n".join(self.log)) else: chatManager.tellPlayer(name, "The log is currently empty") else: if self.ownerOnline: self.tellHome("%s told me '%s'" % (name, text)) else: def onlineanswer (message): data = urlopen("http://www.pandorabots.com/pandora/talk?botid=8d034368fe360895", urlencode({"message":message, "botcust2":"x"})).read() ss = "DMPGirl:" es = "
" answer = data[data.find(ss)+len(ss) : data.find(es,data.find(ss))] chatManager.tellPlayer(name, answer) pool.start(onlineanswer, text) #chatManager.tellPlayer(name, "Sorry, your request was nonsense.\n"+\ # "Please read my help file for more info") #=========================================================================== # Challenges and other offers #=========================================================================== def __onChallengeAdd (self, offerManager, index, match): #match = {"tp": type, "w": fname, "rt": rating, "r": rated, "t": mins, "i": incr} offerManager.acceptIndex(index) def __onOfferAdd (self, offerManager, offer): if offer.type in (PAUSE_OFFER, RESUME_OFFER, ADJOURN_OFFER): offerManager.accept(offer) elif offer.type in (TAKEBACK_OFFER,): offerManager.decline(offer) elif offer.type in (DRAW_OFFER, ABORT_OFFER, SWITCH_OFFER): if self.__willingToDraw(): offerManager.accept(offer) else: offerManager.decline(offer) #=========================================================================== # Playing #=========================================================================== def __onGameCreated (self, boardManager, ficsgame): base = int(ficsgame.min)*60 inc = int(ficsgame.inc) self.clock[:] = base, base self.increment[:] = inc, inc self.gameno = ficsgame.gameno self.lastPly = -1 self.acceptedTimesettings.append((base, inc)) self.tellHome("Starting a game (%s, %s) gameno: %s" % (ficsgame.wplayer.name, ficsgame.bplayer.name, ficsgame.gameno)) if ficsgame.bplayer.name.lower() == self.connection.getUsername().lower(): self.playingAs = BLACK else: self.playingAs = WHITE self.board = LBoard(NORMALCHESS) # Now we wait until we recieve the board. def __go (self): if self.worker: self.worker.cancel() self.worker = GtkWorker(lambda worker: PyChess._PyChess__go(self, worker)) self.worker.connect("published", lambda w, msg: self.extendlog(msg)) self.worker.connect("done", self.__onMoveCalculated) self.worker.execute() def __willingToDraw (self): return self.scr <= 0 # FIXME: this misbehaves in all but the simplest use cases def __onGameEnded (self, boardManager, ficsgame): self.tellHome(reprResult_long[ficsgame.result] + " " + reprReason_long[ficsgame.reason]) lsearch.searching = False if self.worker: self.worker.cancel() self.worker = None def __onMoveCalculated (self, worker, sanmove): if worker.isCancelled() or not sanmove: return self.board.applyMove(parseSAN(self.board,sanmove)) self.connection.bm.sendMove(sanmove) self.extendlog(["Move sent %s" % sanmove]) def __onBoardUpdate (self, boardManager, gameno, ply, curcol, lastmove, fen, wname, bname, wms, bms): self.extendlog(["","I got move %d %s for gameno %s" % (ply, lastmove, gameno)]) if self.gameno != gameno: return self.board.applyFen(fen) self.clock[:] = wms/1000., bms/1000. if curcol == self.playingAs: self.__go() def __onAmbiguousMove (self, errorManager, move): # This is really a fix for fics, but sometimes it is necessary if determineAlgebraicNotation(move) == SAN: self.board.popMove() move_ = parseSAN(self.board, move) lanmove = toLAN(self.board, move_) self.board.applyMove(move_) self.connection.bm.sendMove(lanmove) else: self.connection.cm.tellOpponent( "I'm sorry, I wanted to move %s, but FICS called " % move + "it 'Ambigious'. I can't find another way to express it, " + "so you can win") self.connection.bm.resign() #=========================================================================== # Utils #=========================================================================== def extendlog(self, messages): [log.info(m+"\n") for m in messages] self.log.extend(messages) del self.log[:-10] def tellHome(self, message): print message if self.ownerOnline: self.connection.cm.tellPlayer(self.owner, message) def phoneHome(self, message): SENDMAIL = '/usr/sbin/sendmail' SUBJECT = "Besked fra botten" p = subprocess.Popen([SENDMAIL, '-f', email.Utils.parseaddr(self.from_address)[1], email.Utils.parseaddr(self.to_address)[1]], stdin=subprocess.PIPE) print >> p.stdin, "MIME-Version: 1.0" print >> p.stdin, "Content-Type: text/plain; charset=UTF-8" print >> p.stdin, "Content-Disposition: inline" print >> p.stdin, "From: %s" % self.from_address print >> p.stdin, "To: %s" % self.to_address print >> p.stdin, "Subject: %s" % SUBJECT print >> p.stdin print >> p.stdin, message print >> p.stdin, "Cheers" p.stdin.close() p.wait() pychess-0.12beta3/lib/pychess/Players/Player.py0000755000175000017470000001247712161415524020557 0ustar tamasusersfrom gobject import GObject, SIGNAL_RUN_FIRST, TYPE_NONE class PlayerIsDead (Exception): """ Used instead of returning a move, when an engine crashes, or a nonlocal player disconnects """ pass class TurnInterrupt (Exception): """ Used instead of returning a move, when a players turn is interrupted. Currently this will only happen when undoMoves changes the current player """ pass class Player (GObject): __gsignals__ = { "offer": (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), "withdraw": (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), "decline": (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), "accept": (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), "name_changed": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), } def __init__ (self): GObject.__init__(self) self.name = "" self.ichandle = None self.icrating = None def setName (self, name): """ __repr__ should return this name """ self.name = name self.emit("name_changed") def __repr__ (self): return self.name #=========================================================================== # Starting the game #=========================================================================== def prestart (self): pass # Optional def start (self): pass # Optional def setOptionInitialBoard (self, model): pass # Optional. Further defined in Engine.py #=========================================================================== # Ending the game #=========================================================================== def end (self, status, reason): """ Called when the game ends in a normal way. Use this for shutting down engines etc. """ raise NotImplementedError def kill (self, reason): """ Called when game has too die fast and ugly. Mostly used in case of errors and stuff. Use for closing connections etc. """ raise NotImplementedError #=========================================================================== # Send the player move updates #=========================================================================== def makeMove (self, board1, move, board2): """ Takes a board object, and if ply>lowply the latest move object and second latest board object as well. Otherwise these two are None. Retruns: A new move object, witch the player wants to do. """ raise NotImplementedError def putMove (self, board1, move, board2): """ Like makeMove, but doesn't block and doesn't return anything. putMove is only used when the player is spectatctor to a game """ #Optional def updateTime (self, secs, opsecs): """ Updates the player with the current remaining time as a float of seconds """ #Optional #=========================================================================== # Interacting with the player #=========================================================================== def pause (self): """ Should stop the player from thinking until resume is called """ raise NotImplementedError def resume (self): """ Should resume player to think if he's paused """ raise NotImplementedError def hurry (self): """ Forces engines to move now, and sends a hurry message to nonlocal human players """ #Optional def undoMoves (self, moves, gamemodel): """ Undo 'moves' moves and makes the latest board in gamemodel the current """ #Optional def playerUndoMoves (self, moves, gamemodel): """ Some players undo different depending on whether they are players or spectators. This is a convenient way to handle that. """ #Optional return self.undoMoves (moves, gamemodel) def spectatorUndoMoves (self, moves, gamemodel): """ Some players undo different depending on whether they are players or spectators. This is a convenient way to handle that. """ #Optional return self.undoMoves (moves, gamemodel) def putMessage (self, message): """ Sends the player a chatmessage """ #Optional #=========================================================================== # Offer handling #=========================================================================== def offer (self, offer): """ The players opponent has offered the player offer. If the player accepts, it should respond by mirroring the offer with emit("accept", offer). If it should either ignore the offer or emit "decline".""" raise NotImplementedError def offerDeclined (self, offer): """ An offer sent by the player was responded negative by the opponent """ #Optional def offerWithdrawn (self, offer): """ An offer earlier offered to the player has been withdrawn """ #Optional def offerError (self, offer, error): """ An offer, accept or action made by the player has been refused by the game model. """ #Optional pychess-0.12beta3/lib/pychess/Players/PyChessCECP.py0000644000175000017470000003362512176264367021344 0ustar tamasusersfrom pychess.Players.PyChess import PyChess from pychess.Utils.book import getOpenings from pychess.Utils.const import * from pychess.Utils.lutils.Benchmark import benchmark from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.ldata import MAXPLY from pychess.Utils.lutils import lsearch, leval from pychess.Utils.lutils.lmove import parseSAN, parseAny, toSAN from pychess.Utils.lutils import lsearch from pychess.Utils.lutils.lsearch import enableEGTB from pychess.Utils.lutils.validator import validateMove import pychess import re import signal import sys import threading class PyChessCECP(PyChess): def __init__ (self): PyChess.__init__(self) self.board = LBoard(NORMALCHESS) self.board.applyFen(FEN_START) self.forced = False self.analyzing = False self.thread = None self.basetime = 0 self.features = { "ping": 1, "setboard": 1, "playother": 1, "san": 1, "usermove": 1, "time": 1, "draw": 1, "sigint": 0, "sigterm": 0, "reuse": 1, "analyze": 1, "myname": "PyChess %s" % pychess.VERSION, "variants": "normal,wildcastle,nocastle,fischerandom,crazyhouse", "colors": 0, "ics": 0, "name": 0, "pause": 0, # Unimplemented "nps": 0, # Unimplemented "debug": 1, "memory": 1, "smp": 0, # Unimplemented # "egt": "gaviota", # TODO: re-enable "option": "skipPruneChance -slider 0 0 100" } def handle_sigterm(self, *args): self.__stopSearching() sys.exit(0) def makeReady(self): PyChess.makeReady(self) signal.signal(signal.SIGINT, signal.SIG_IGN) signal.signal(signal.SIGTERM, self.handle_sigterm) def run (self): while True: try: line = raw_input() except EOFError: line = "quit" lines = line.split() if 1: #try: if not lines: continue ########## CECP commands ########## # See http://www.gnu.org/software/xboard/engine-intf.html#8 elif lines[0] == "xboard": pass elif lines[0] == "protover": stringPairs = ["=".join([k, '"%s"' % v if type(v) is str else str(v)]) for k,v in self.features.iteritems()] print "feature %s" % " ".join(stringPairs) print "feature done=1" elif lines[0] in ("accepted", "rejected"): # We only really care about one case: if tuple(lines) == ("rejected", "debug"): self.debug = False elif lines[0] == "new": self.__stopSearching() self.board = LBoard(NORMALCHESS) self.board.applyFen(FEN_START) self.forced = False self.playingAs = BLACK self.clock[:] = self.basetime, self.basetime self.searchtime = 0 self.sd = MAXPLY if self.analyzing: self.__analyze() elif lines[0] == "variant": if len(lines) > 1: if lines[1] == "fischerandom": self.board.variant = FISCHERRANDOMCHESS elif lines[1] == "crazyhouse": self.board.variant = CRAZYHOUSECHESS self.board.iniCrazy() elif lines[1] == "wildcastle": self.board.variant = WILDCASTLESHUFFLECHESS elif lines[0] == "quit": self.forced = True self.__stopSearching() sys.exit(0) elif lines[0] == "random": leval.random = True elif lines[0] == "force": if not self.forced and not self.analyzing: self.forced = True self.__stopSearching() elif lines[0] == "go": self.playingAs = self.board.color self.forced = False self.__go() elif lines[0] == "playother": self.playingAs = 1-self.board.color self.forced = False # TODO: start pondering, if possible elif lines[0] in ("black", "white"): newColor = lines[0] == "black" and BLACK or WHITE self.__stopSearching() self.playingAs = 1-newColor if self.board.color != newColor: self.board.setColor(newColor) self.board.setEnpassant(None) if self.analyzing: self.__analyze() elif lines[0] == "level": self.movestogo = int(lines[1]) inc = int(lines[3]) minutes = lines[2].split(":") # Per protocol spec, strip off any non-numeric suffixes. for i in xrange(len(minutes)): minutes[i] = re.match(r'\d*', minutes[i]).group() self.basetime = int(minutes[0])*60 if len(minutes) > 1 and minutes[1]: self.basetime += int(minutes[1]) self.clock[:] = self.basetime, self.basetime self.increment = inc, inc elif lines[0] == "st": self.searchtime = float(lines[1]) elif lines[0] == "sd": self.sd = int(lines[1]) # Unimplemented: nps elif lines[0] == "time": self.clock[self.playingAs] = float(lines[1])/100. elif lines[0] == "otim": self.clock[1-self.playingAs] = float(lines[1])/100. elif lines[0] == "usermove": self.__stopSearching() try: move = parseAny (self.board, lines[1]) except ParsingError, e: print "Error (unknown command):", lines[1] print self.board continue if not validateMove(self.board, move): print "Illegal move", lines[1] print self.board continue self.board.applyMove(move) self.playingAs = self.board.color if not self.forced and not self.analyzing: self.__go() if self.analyzing: self.__analyze() elif lines[0] == "?": if not self.forced and not self.analyzing: self.__stopSearching() elif lines[0] == "ping": print "pong", lines[1] elif lines[0] == "draw": if self.__willingToDraw(): print "offer draw" elif lines[0] == "result": # We don't really care what the result is at the moment. pass elif lines[0] == "setboard": self.__stopSearching() try: self.board = LBoard(self.board.variant) fen = " ".join(lines[1:]) self.board.applyFen(fen.replace("[", "/").replace("]", "")) except SyntaxError as e: print "tellusererror Illegal position:", str(e) if self.analyzing: self.__analyze() # "edit" is unimplemented. See docs. Exiting edit mode returns to analyze mode. elif lines[0] == "hint": pass # TODO: Respond "Hint: MOVE" if we have an expected reply elif lines[0] == "bk": entries = getOpenings(self.board) if entries: totalWeight = sum(entry[1] for entry in entries) for entry in entries: print "\t%s\t%02.2f%%" % (toSAN(self.board, entry[0]), entry[1] * 100.0 / totalWeight) elif lines[0] == "undo": self.__stopSearching() self.board.popMove() if self.analyzing: self.__analyze() elif lines[0] == "remove": self.__stopSearching() self.board.popMove() self.board.popMove() if self.analyzing: self.__analyze() elif lines[0] in ("hard", "easy"): self.ponder = (lines[0] == "hard") elif lines[0] in ("post", "nopost"): self.post = (lines[0] == "post") elif lines[0] == "analyze": self.analyzing = True self.__analyze() elif lines[0] in ("name", "rating", "ics", "computer"): pass # We don't care. # Unimplemented: pause, resume elif lines[0] == "memory": # FIXME: this is supposed to control the *total* memory use. if lsearch.searching: print "Error (already searching):", line else: limit = int(lines[1]) if limit < 1: print "Error (limit too low):", line else: pass # TODO implement #lsearch.setHashSize(limit) elif lines[0] == "cores": pass # We aren't SMP-capable. elif lines[0] == "egtpath": # TODO: Accept "egtpath TYPE PATH" commands, at least for Gaviota EGTBs pass elif lines[0] == "option" and len(lines) > 1: name, eq, value = lines[1].partition("=") if value: value = int(value) # CECP spec says option values are *always* numeric if name == "skipPruneChance": if 0 <= value <= 100: self.skipPruneChance = value / 100.0 else: print "Error (argument must be an integer 0..100):", line ########## CECP analyze mode commands ########## # See http://www.gnu.org/software/xboard/engine-intf.html#11 elif lines[0] == "exit": if self.analyzing: self.__stopSearching() self.analyzing = False # Periodic updates (".") are not implemented. ########## Custom commands ########## elif lines[0] == "egtb": enableEGTB() elif lines[0] == "benchmark": benchmark() elif lines[0] == "profile": if len(lines) > 1: import cProfile cProfile.runctx("benchmark()", locals(), globals(), lines[1]) else: print "Usage: profile outputfilename" elif len(lines) == 1: # A GUI without usermove support might try to send a move. try: move = parseAny (self.board, line) except: print "Error (unknown command):", line continue if not validateMove(self.board, move): print "Illegal move", lines[0] print self.board continue self.__stopSearching() self.board.applyMove(move) self.playingAs = self.board.color if not self.forced and not self.analyzing: self.__go() if self.analyzing: self.__analyze() else: print "Error (unknown command):", line #except SystemExit: #sys.exit(0) #except: #print "Error (missing or invalid argument)", line def __stopSearching(self): lsearch.searching = False if self.thread: self.thread.join() def __go (self): def ondone (result): self.board.applyMove(parseSAN(self.board,result)) print "move %s" % result # TODO: start pondering, if enabled self.thread = threading.Thread(target=PyChess._PyChess__go, args=(self,ondone)) self.thread.start() def __analyze (self): self.thread = threading.Thread(target=PyChess._PyChess__analyze, args=(self,)) self.thread.start() def __willingToDraw (self): return self.scr <= 0 # FIXME: this misbehaves in all but the simplest use cases pychess-0.12beta3/lib/pychess/Players/PyChess.py0000755000175000017470000001616112175751302020675 0ustar tamasusers#!/usr/bin/pypy -u if __name__ == "__main__": print "feature done=0" from pychess.Utils import const const.STANDARD_LOGGING = True from pychess.System.prefix import addDataPrefix from pychess.Utils.book import getOpenings from pychess.Utils.const import * from pychess.Utils.lutils import lsearch from pychess.Utils.lutils.ldata import MAXPLY from pychess.Utils.lutils.lsearch import alphaBeta from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import listToSan, toSAN from time import time import gettext import pychess import random import sys gettext.install("pychess", localedir=addDataPrefix("lang"), unicode=1) class PyChess: def __init__ (self): self.sd = MAXPLY self.skipPruneChance = 0 self.clock = [0, 0] self.increment = [0, 0] self.movestogo = 0 self.searchtime = 0 self.scr = 0 # The current predicted score. Used when accepting draw offers self.playingAs = WHITE self.ponder = False # Currently unused self.post = False self.debug = True def makeReady(self): try: import psyco psyco.bind(alphaBeta) except ImportError: pass #=========================================================================== # Play related #=========================================================================== def __remainingMovesA (self): # Based on regression of a 180k games pgn x = self.board.plyCount return -1.71086e-12*x**6 \ +1.69103e-9*x**5 \ -6.00801e-7*x**4 \ +8.17741e-5*x**3 \ +2.91858e-4*x**2 \ -0.94497*x \ +78.8979 def __remainingMovesB (self): # We bet a game will be around 80 moves x = self.board.plyCount return max(80-x,4) def __getBestOpening (self): totalWeight = 0 choice = None for move, weight, histGames, histScore in getOpenings(self.board): totalWeight += weight if totalWeight == 0: break if not move or random.randrange(totalWeight) < weight: choice = move return choice def __go (self, ondone=None): """ Finds and prints the best move from the current position """ mv = self.__getBestOpening() if mv: mvs = [mv] if not mv: lsearch.skipPruneChance = self.skipPruneChance lsearch.searching = True timed = self.basetime > 0 if self.searchtime > 0: usetime = self.searchtime else: usetime = self.clock[self.playingAs] / self.__remainingMovesA() if self.clock[self.playingAs] < 6*60+self.increment[self.playingAs]*40: # If game is blitz, we assume 40 moves rather than 80 usetime *= 2 # The increment is a constant. We'll use this always usetime += self.increment[self.playingAs] if usetime < 0.5: # We don't wan't to search for e.g. 0 secs usetime = 0.5 prevtime = 0 starttime = time() lsearch.endtime = starttime + usetime if timed else sys.maxint if self.debug: if timed: print "# Time left: %3.2f s; Planing to think for %3.2f s" % (self.clock[self.playingAs], usetime) else: print "# Searching to depth %d without timelimit" % self.sd for depth in range(1, self.sd+1): # Heuristic time saving # Don't waste time, if the estimated isn't enough to complete next depth if timed and usetime <= prevtime*4 and usetime > 1: break lsearch.timecheck_counter = lsearch.TIMECHECK_FREQ search_result = alphaBeta(self.board, depth) if lsearch.searching: mvs, self.scr = search_result if time() > lsearch.endtime: break if self.post: pv = " ".join(listToSan(self.board, mvs)) time_cs = int(100 * (time()-starttime)) print depth, self.scr, time_cs, lsearch.nodes, pv else: # We were interrupted if depth == 1: mvs, self.scr = search_result break prevtime = time()-starttime - prevtime self.clock[self.playingAs] -= time() - starttime - self.increment[self.playingAs] if not mvs: if not lsearch.searching: # We were interupted lsearch.nodes = 0 return # This should only happen in terminal mode if self.scr == 0: print "result %s" % reprResult[DRAW] elif self.scr < 0: if self.board.color == WHITE: print "result %s" % reprResult[BLACKWON] else: print "result %s" % reprResult[WHITEWON] else: if self.board.color == WHITE: print "result %s" % reprResult[WHITEWON] else: print "result %s" % reprResult[BLACKWON] return lsearch.nodes = 0 lsearch.searching = False move = mvs[0] sanmove = toSAN(self.board, move) if ondone: ondone(sanmove) return sanmove def __analyze (self): """ Searches, and prints info from, the position as stated in the cecp protocol """ start = time() lsearch.endtime = sys.maxint lsearch.searching = True for depth in xrange (1, self.sd): if not lsearch.searching: break t = time() mvs, scr = alphaBeta (self.board, depth) pv = " ".join(listToSan(self.board, mvs)) time_cs = int(100 * (time() - start)) print depth, scr, time_cs, lsearch.nodes, pv lsearch.nodes = 0 ################################################################################ # main # ################################################################################ if __name__ == "__main__": if len(sys.argv) == 1 or sys.argv[1:] == ["xboard"]: from pychess.Players.PyChessCECP import PyChessCECP pychess = PyChessCECP() elif len(sys.argv) == 5 and sys.argv[1] == "fics": from pychess.Players.PyChessFICS import PyChessFICS pychess = PyChessFICS(*sys.argv[2:]) else: print "Unknown argument(s):", repr(sys.argv) sys.exit(0) pychess.makeReady() pychess.run() pychess-0.12beta3/lib/pychess/Utils/0000755000175000017470000000000012176727272016430 5ustar tamasuserspychess-0.12beta3/lib/pychess/Utils/Board.py0000755000175000017470000002552312176164244020035 0ustar tamasusersfrom copy import copy from lutils.LBoard import LBoard from lutils.bitboard import iterBits from lutils.lmove import RANK, FILE, FCORD, FLAG, PROMOTE_PIECE, toAN from Piece import Piece from Cord import Cord from const import * def reverse_enum(L): for index in reversed(xrange(len(L))): yield index, L[index] class Board: """ Board is a thin layer above LBoard, adding the Piece objects, which are needed for animation in BoardView. In contrast to LBoard, Board is immutable, which means it will clone itself each time you apply a move to it. Caveat: As the only objects, the Piece objects in the self.data lists will not be cloned, to make animation state preserve between moves """ variant = NORMALCHESS RANKS = 8 FILES = 8 def __init__ (self, setup=False, lboard=None): self.data = [dict(enumerate([None]*self.FILES)) for i in xrange(self.RANKS)] if lboard is None: self.board = LBoard(self.variant) else: self.board = lboard self.board.pieceBoard = self if setup: if lboard is None: if setup == True: self.board.applyFen(FEN_START) elif isinstance(setup, basestring): self.board.applyFen(setup) wpieces = self.board.boards[WHITE] bpieces = self.board.boards[BLACK] for cord in iterBits(wpieces[PAWN]): self.data[RANK(cord)][FILE(cord)] = Piece(WHITE, PAWN) for cord in iterBits(wpieces[KNIGHT]): self.data[RANK(cord)][FILE(cord)] = Piece(WHITE, KNIGHT) for cord in iterBits(wpieces[BISHOP]): self.data[RANK(cord)][FILE(cord)] = Piece(WHITE, BISHOP) for cord in iterBits(wpieces[ROOK]): self.data[RANK(cord)][FILE(cord)] = Piece(WHITE, ROOK) for cord in iterBits(wpieces[QUEEN]): self.data[RANK(cord)][FILE(cord)] = Piece(WHITE, QUEEN) if self.board.kings[WHITE] != -1: self[Cord(self.board.kings[WHITE])] = Piece(WHITE, KING) for cord in iterBits(bpieces[PAWN]): self.data[RANK(cord)][FILE(cord)] = Piece(BLACK, PAWN) for cord in iterBits(bpieces[KNIGHT]): self.data[RANK(cord)][FILE(cord)] = Piece(BLACK, KNIGHT) for cord in iterBits(bpieces[BISHOP]): self.data[RANK(cord)][FILE(cord)] = Piece(BLACK, BISHOP) for cord in iterBits(bpieces[ROOK]): self.data[RANK(cord)][FILE(cord)] = Piece(BLACK, ROOK) for cord in iterBits(bpieces[QUEEN]): self.data[RANK(cord)][FILE(cord)] = Piece(BLACK, QUEEN) if self.board.kings[BLACK] != -1: self[Cord(self.board.kings[BLACK])] = Piece(BLACK, KING) if self.variant == CRAZYHOUSECHESS: for color in (BLACK, WHITE): holding = self.board.holding[color] for piece in holding: for i in range(holding[piece]): self[self.newHoldingCord(color, piece)] = Piece(color, piece) def getHoldingCord(self, color, piece): enum = reverse_enum if color == WHITE else enumerate files = ((self.FILES+2, self.FILES+1, self.FILES), (-3, -2, -1)) for x in files[color]: for i, row in enum(self.data): if (row.get(x) is not None) and row.get(x).piece == piece: return Cord(x, i) def newHoldingCord(self, color, piece): enum = reverse_enum if color == BLACK else enumerate files = ((self.FILES, self.FILES+1, self.FILES+2), (-1, -2, -3)) for x in files[color]: for i, row in enum(self.data): if row.get(x) is None: return Cord(x, i) def simulateMove (self, board1, move): moved = [] new = [] dead = [] if move.flag == NULL_MOVE: return moved, new, dead cord0, cord1 = move.cords if move.flag == DROP: piece = FCORD(move.move) cord0 = self.getHoldingCord(self.color, piece) moved.append( (self[cord0], cord0) ) return moved, new, dead moved.append( (self[cord0], cord0) ) if self[cord1]: piece = PAWN if self.variant == CRAZYHOUSECHESS and self[cord1].promoted else self[cord1].piece cord = self.newHoldingCord(self.color, piece) moved.append( (board1[cord], cord1) ) new.append( board1[cord] ) if move.flag in (QUEEN_CASTLE, KING_CASTLE): side = move.flag - QUEEN_CASTLE if FILE(cord0.x) == 3 and self.board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): side = 0 if side == 1 else 1 rook = self.board.ini_rooks[self.color][side] moved.append( (self[Cord(rook)], Cord(rook)) ) elif move.flag in PROMOTIONS: newPiece = board1[cord1] moved.append( (newPiece, cord0) ) new.append( newPiece ) elif move.flag == ENPASSANT: shift = -1 if self.color == WHITE else 1 ep_cord = Cord(cord1.x, cord1.y + shift) moved.append( (self[ep_cord], ep_cord) ) cord = self.newHoldingCord(self.color, PAWN) new.append( board1[cord] ) return moved, new, dead def simulateUnmove (self, board1, move): moved = [] new = [] dead = [] if move.flag == NULL_MOVE: return moved, new, dead cord0, cord1 = move.cords moved.append( (self[cord1], cord1) ) if board1[cord1]: piece = PAWN if self.variant == CRAZYHOUSECHESS and board1[cord1].promoted else board1[cord1].piece cord = self.getHoldingCord(1-self.color, piece) moved.append( (self[cord], cord) ) self[cord].opacity = 1 dead.append( self[cord] ) if move.flag in (QUEEN_CASTLE, KING_CASTLE): side = move.flag - QUEEN_CASTLE if FILE(cord0.x) == 3 and self.board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): side = 0 if side == 1 else 1 rook = self.board.fin_rooks[board1.color][side] moved.append( (self[Cord(rook)], Cord(rook)) ) elif move.flag in PROMOTIONS: newPiece = board1[cord0] moved.append( (newPiece, cord1) ) new.append( newPiece ) elif move.flag == ENPASSANT: cord = self.getHoldingCord(1-self.color, PAWN) moved.append( (self[cord], cord) ) self[cord].opacity = 1 dead.append( self[cord] ) return moved, new, dead def move (self, move, lboard=None): """ Creates a new Board object cloning itself then applying the move.move to the clone Board's lboard. If lboard param was given, it will be used when cloning, and move will not be applyed, just the high level Piece objects will be adjusted.""" flag = FLAG(move.move) if flag != DROP: assert self[move.cord0], "%s %s" % (move, self.asFen()) newBoard = self.clone(lboard=lboard) if lboard is None: newBoard.board.applyMove (move.move) cord0, cord1 = move.cords if self[move.cord1] is not None or flag == ENPASSANT: if self.variant == CRAZYHOUSECHESS: piece = PAWN if flag == ENPASSANT or self[move.cord1].promoted else self[move.cord1].piece new_piece = Piece(self.color, piece) else: piece = PAWN if flag == ENPASSANT else self[move.cord1].piece new_piece = Piece(1-self.color, piece) newBoard[self.newHoldingCord(self.color, piece)] = new_piece if flag == DROP: piece = FCORD(move.move) newBoard[cord1] = newBoard[self.getHoldingCord(self.color, piece)] newBoard[self.getHoldingCord(self.color, piece)] = None else: newBoard[cord1] = newBoard[cord0] if flag != NULL_MOVE and flag != DROP: newBoard[cord0] = None if flag in (QUEEN_CASTLE, KING_CASTLE): side = flag - QUEEN_CASTLE if FILE(cord0.x) == 3 and self.board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): side = 0 if side == 1 else 1 inirook = self.board.ini_rooks[self.color][side] finrook = self.board.fin_rooks[self.color][side] newBoard[Cord(finrook)] = newBoard[Cord(inirook)] newBoard[Cord(inirook)] = None if flag in PROMOTIONS: new_piece = Piece(self.color, PROMOTE_PIECE(flag)) new_piece.promoted = True newBoard[cord1] = new_piece elif flag == ENPASSANT: newBoard[Cord(cord1.x, cord0.y)] = None return newBoard def switchColor (self): """ Switches the current color to move and unsets the enpassant cord. Mostly to be used by inversed analyzers """ return self.setColor(1-self.color) def _get_enpassant (self): if self.board.enpassant != None: return Cord(self.board.enpassant) return None enpassant = property(_get_enpassant) def setColor (self, color): newBoard = self.clone() newBoard.board.setColor(color) newBoard.board.setEnpassant(None) return newBoard def _get_color (self): return self.board.color color = property(_get_color) def _get_ply (self): return self.board.plyCount ply = property(_get_ply) def asFen (self, enable_bfen=True): return self.board.asFen(enable_bfen) def __repr__ (self): return str(self.board) def __getitem__ (self, cord): return self.data[cord.y].get(cord.x) def __setitem__ (self, cord, piece): self.data[cord.y][cord.x] = piece def clone (self, lboard=None): if lboard is None: lboard = self.board.clone() if self.variant != NORMALCHESS: from pychess.Variants import variants newBoard = variants[self.variant].board() else: newBoard = Board() newBoard.board = lboard newBoard.board.pieceBoard = newBoard for y, row in enumerate(self.data): for x, piece in row.items(): newBoard.data[y][x] = piece return newBoard def __eq__ (self, other): if type(self) != type(other): return False return self.board == other.board pychess-0.12beta3/lib/pychess/Utils/Piece.py0000755000175000017470000000217412161415524020022 0ustar tamasusersfrom pychess.Utils.const import KING, QUEEN, ROOK, BISHOP, KNIGHT, PAWN from pychess.Utils.repr import reprSign, reprColor, reprPiece class Piece: def __init__ (self, color, piece): self.color = color self.piece = piece # in crazyhouse we need to know this for later captures self.promoted = False self.opacity = 1.0 self.x = None self.y = None # Sign is a deprecated synonym for piece def _set_sign (self, sign): self.piece = sign def _get_sign (self): return self.piece sign = property(_get_sign, _set_sign) def __repr__ (self): represen = "<%s %s" % (reprColor[self.color], reprPiece[self.piece]) if self.opacity != 1.0: represen += " Op:%0.1f" % self.opacity if self.x != None or self.y != None: if self.x != None: represen += " X:%0.1f" % self.x else: represen += " X:None" if self.y != None: represen += " Y:%0.1f" % self.y else: represen += " Y:None" represen += ">" return represen pychess-0.12beta3/lib/pychess/Utils/eval.py0000755000175000017470000005362312161415524017731 0ustar tamasusers ### DEPRECATED ### SHOULD ONLY BE USED AS A REFERENCE TO MAKE leval pieceValues = [0, 900, 500, 350, 300, 100] from array import array from pychess.Utils.const import * # these tables will be used for positional bonuses: # whiteknight = array('b', [ -20, -35,-10, -10, -10,-10, -35, -20, -10, 0, 0, 3, 3, 0, 0, -10, -10, 0, 15, 15, 15, 15, 0, -10, -10, 0, 20, 20, 20, 20, 0, -10, -10, 10, 25, 20, 25, 25, 10, -10, -10, 15, 25, 35, 35, 35, 15, -10, -10, 15, 25, 25, 25, 25, 15, -10, -20, -10,-10, -10, -10,-10, -10, -20 ]) blackknight = array('b', [ -20,-10,-10,-10,-10, -10,-10,-20, -10, 15, 25, 25, 25, 25, 15,-10, -10, 15, 25, 35, 35 , 35, 15,-10, -10, 10, 25, 20, 25, 25, 10,-10, -10, 0, 20, 20, 20, 20, 0,-10, -10, 0, 15, 15, 15, 15, 0,-10, -10, 0, 0, 3, 3, 0, 0,-10, -20,-35,-10,-10,-10, -10,-35,-20 ]) whitepawn = array('b', [ 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 35, 5, 5, 50, 45, 30, 0, 0, 0, 7, 7, 5, 5, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 10, 20, 20, 10, 5, 5, 12, 18, 18, 27, 27, 18, 18, 18, 25, 30, 30, 35, 35, 35, 30, 25, 0, 0, 0, 0, 0, 0, 0, 0 ]) blackpawn = array('b', [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 35, 35, 35, 30, 25, 12, 18, 18, 27, 27, 18, 18, 18, 0, 0, 10, 20, 20, 10, 5, 5, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 7, 7, 5, 5, 0, 25, 25, 35, 5, 5, 50, 45, 30, 0, 0, 0, 0, 0, 0, 0, 0]) whiteking = array('h', [ -100, 15, 15, -20, 10, 4, 15, -100, -250, -200, -150, -100, -100, -150, -200, -250, -350, -300, -300, -250, -250, -300, -300, -350, -400, -400, -400, -350, -350, -400, -400, -400, -450, -450, -450, -450, -450, -450, -450, -450, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500 ]) blackking = array('h', [ -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -450, -450, -450, -450, -450, -450, -450, -450, -400, -400, -400, -350, -350, -400, -400, -400, -350, -300, -300, -250, -250, -300, -300, -350, -250, -200, -150, -100, -100, -150, -200, -250, -100, 7, 15, -20, 10, 4, 15, -100 ]) whitequeen = array('b', [ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 7, 10, 5, 0, 0, -15, -15, -15, -10, -10, -15, -15, -15, -40, -40, -40, -40, -40, -40, -40, -40, -60, -40, -40, -60, -60, -40, -40, -60, -30, -30, -30, -30, -30, -30, -30, -30, 0, 0, 3, 3, 3, 3, 3, 0, 5, 5, 5, 10, 10, 7, 5, 5 ]) blackqueen = array('b', [ 5, 5, 5, 10, 10, 7, 5, 5, 0, 0, 3, 3, 3, 3, 3, 0, -30, -30, -30, -30, -30, -30, -30, -30, -60, -40, -40, -60, -60, -40, -40, -60, -40, -40, -40, -40, -40, -40, -40, -40, -15, -15, -15, -10, -10, -15, -15, -15, 0, 0, 0, 7, 10, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0 ]) whiterook = array('b', [ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 7, 10, 0, 0, 0, -15, -15, -15, -10, -10, -15, -15, -15, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -30, -30, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 0, 10, 15, 20, 20, 15, 10, 0, 10, 15, 20, 25, 25, 20, 15, 10 ]) blackrook = array('b', [ 10 , 15, 20, 25, 25, 20, 15, 10, 0 , 10, 15, 20, 20, 15, 10, 0, -20 ,-20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -30, -30, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -15, -15, -15, -10, -10, -15, -15, -15, 0, 0, 0, 7, 10, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2 ]) whitebishop = array('b', [ -5, -5, -10, -5, -5, -10, -5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, -5, -10, -5, -5, -10, -5, -5 ]) blackbishop = array('b', [ -5, -5, -10, -5, -5, -10, -5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, -5, -10, -5, -5, -10, -5, -5 ]) pos = { KNIGHT: { BLACK: array('b', [ -20,-10,-10,-10,-10, -10,-10,-20, -10, 15, 25, 25, 25, 25, 15,-10, -10, 15, 25, 35, 35 , 35, 15,-10, -10, 10, 25, 20, 25, 25, 10,-10, -10, 0, 20, 20, 20, 20, 0,-10, -10, 0, 15, 15, 15, 15, 0,-10, -10, 0, 0, 3, 3, 0, 0,-10, -20,-35,-10,-10,-10, -10,-35,-20 ]), WHITE: array('b', [ -20, -35,-10, -10, -10,-10, -35, -20, -10, 0, 0, 3, 3, 0, 0, -10, -10, 0, 15, 15, 15, 15, 0, -10, -10, 0, 20, 20, 20, 20, 0, -10, -10, 10, 25, 20, 25, 25, 10, -10, -10, 15, 25, 35, 35, 35, 15, -10, -10, 15, 25, 25, 25, 25, 15, -10, -20, -10,-10, -10, -10,-10, -10, -20 ]) }, PAWN: { WHITE: array('b', [ 0, 0, 0, 0, 0, 0, 0, 0, 25, 25, 35, 5, 5, 50, 45, 30, 0, 0, 0, 7, 7, 5, 5, 0, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 10, 20, 20, 10, 5, 5, 12, 18, 18, 27, 27, 18, 18, 18, 25, 30, 30, 35, 35, 35, 30, 25, 0, 0, 0, 0, 0, 0, 0, 0 ]), BLACK: array('b', [ 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 35, 35, 35, 30, 25, 12, 18, 18, 27, 27, 18, 18, 18, 0, 0, 10, 20, 20, 10, 5, 5, 0, 0, 0, 14, 14, 0, 0, 0, 0, 0, 0, 7, 7, 5, 5, 0, 25, 25, 35, 5, 5, 50, 45, 30, 0, 0, 0, 0, 0, 0, 0, 0]) }, KING: { WHITE: array('h', [ -100, 15, 15, -20, 10, 4, 15, -100, -250, -200, -150, -100, -100, -150, -200, -250, -350, -300, -300, -250, -250, -300, -300, -350, -400, -400, -400, -350, -350, -400, -400, -400, -450, -450, -450, -450, -450, -450, -450, -450, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500 ]), BLACK: array('h', [ -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, -450, -450, -450, -450, -450, -450, -450, -450, -400, -400, -400, -350, -350, -400, -400, -400, -350, -300, -300, -250, -250, -300, -300, -350, -250, -200, -150, -100, -100, -150, -200, -250, -100, 7, 15, -20, 10, 4, 15, -100 ]) }, QUEEN: { BLACK: array('b', [ 5, 5, 5, 10, 10, 7, 5, 5, 0, 0, 3, 3, 3, 3, 3, 0, -30, -30, -30, -30, -30, -30, -30, -30, -60, -40, -40, -60, -60, -40, -40, -60, -40, -40, -40, -40, -40, -40, -40, -40, -15, -15, -15, -10, -10, -15, -15, -15, 0, 0, 0, 7, 10, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0 ]), WHITE: array('b', [ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 7, 10, 5, 0, 0, -15, -15, -15, -10, -10, -15, -15, -15, -40, -40, -40, -40, -40, -40, -40, -40, -60, -40, -40, -60, -60, -40, -40, -60, -30, -30, -30, -30, -30, -30, -30, -30, 0, 0, 3, 3, 3, 3, 3, 0, 5, 5, 5, 10, 10, 7, 5, 5 ]) }, ROOK: { WHITE: array('b', [ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 7, 10, 0, 0, 0, -15, -15, -15, -10, -10, -15, -15, -15, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -30, -30, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, 0, 10, 15, 20, 20, 15, 10, 0, 10, 15, 20, 25, 25, 20, 15, 10 ]), BLACK: array('b', [ 10 , 15, 20, 25, 25, 20, 15, 10, 0 , 10, 15, 20, 20, 15, 10, 0, -20 ,-20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -30, -30, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -15, -15, -15, -10, -10, -15, -15, -15, 0, 0, 0, 7, 10, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2 ]) }, BISHOP: { WHITE: array('b', [ -5, -5, -10, -5, -5, -10, -5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, -5, -10, -5, -5, -10, -5, -5 ]), BLACK: array('b', [ -5, -5, -10, -5, -5, -10, -5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 3, 15, 10, 10, 15, 3, -5, -5, 5, 6, 15, 15, 6, 5, -5, -5, 10, 5, 10, 10, 5, 10, -5, -5, -5, -10, -5, -5, -10, -5, -5 ]) } } endking = array('b', [ -5, -3, -1, 0, 0, -1, -3, -5, -3, 10, 10, 10, 10, 10, 10, -3, -1, 10, 25, 25, 25, 25, 10, -1, 0, 10, 25, 30, 30, 25, 10, 0, 0, 10, 25, 30, 30, 25, 10, 0, -1, 10, 25, 25, 25, 25, 10, -1, -3, 10, 10, 10, 10, 10, 10, -3, -5, -3, -1, 0, 0, -1, -3, -5 ]) # Init KingTropism table # Sjeng uses max instead of min.. tropismTable = [] for px in range(8): for py in range(8): for kx in range(8): for ky in range(8): knight = abs(ky-py) + abs(kx-px) rook = min(abs(ky-py), abs(kx-px)) *2 +5 queen = min(abs(ky-py), abs(kx-px)) +5 tropismTable.append(knight + rook*20 + queen*20*20) tropismArray = array('I',tropismTable) def lookUpTropism (px, py, kx, ky, piece): value = tropismArray[ky + kx*8 + py*8*8 + px*8*8*8] knight = value % 20 rook = (value-knight)/20 % 20 queen = (value-knight-rook*20)/20/20 if piece == knight: return knight-5 if piece == rook: return rook-5 return queen-5 def evaluateComplete (board, color=WHITE): """ A detailed evaluation function, taking into account several positional factors """ if board.status == RUNNING: analyzePawnStructure (board) s = evalMaterial (board) + \ evalPawnStructure (board) + \ evalBadBishops (board) + \ evalDevelopment (board) + \ evalCastling (board) + \ evalRookBonus (board) + \ evalKingTropism (board) elif board.status == DRAW: s = 0 elif board.status == WHITEWON: s = 9999 else: s = -9999 return (color == WHITE and [s] or [-s])[0] def evalMaterial (board): materialValue = [0, 0] numPawns = [0, 0] for row in board.data: for piece in row: if not piece: continue materialValue[piece.color] += pieceValues[piece.sign] if piece.sign == PAWN: numPawns[piece.color] += 1 # If both sides are equal, no need to compute anything! if materialValue[BLACK] == materialValue[WHITE]: return 0 matTotal = materialValue[BLACK] + materialValue[WHITE] # Who is leading the game, material-wise? if materialValue[BLACK] > materialValue[WHITE]: # Black leading matDiff = materialValue[BLACK] - materialValue[WHITE] val = min( 2400, matDiff ) + \ ( matDiff * ( 12000 - matTotal ) * numPawns[BLACK] ) \ / ( 6400 * ( numPawns[BLACK] + 1 ) ) return -val else: # White leading matDiff = materialValue[WHITE] - materialValue[BLACK] val = min( 2400, matDiff ) + \ ( matDiff * ( 12000 - matTotal ) * numPawns[WHITE] ) \ / ( 6400 * ( numPawns[WHITE] + 1 ) ) return val def evalKingTropism (board): """ All other things being equal, having your Knights, Queens and Rooks close to the opponent's king is a good thing """ score = 0 try: wking, bking = board.kings wky, wkx = wking.cords bky, bkx = bking.cords except: return 0 for py, row in enumerate(board.data): for px, piece in enumerate(row): if piece and piece.color == WHITE: if piece.sign == KNIGHT: score += lookUpTropism(px,py,bkx,bky,KNIGHT) elif piece.sign == ROOK: score += lookUpTropism(px,py,bkx,bky,ROOK) elif piece.sign == QUEEN: score += lookUpTropism(px,py,bkx,bky,QUEEN) elif piece and piece.color == BLACK: if piece.sign == KNIGHT: score -= lookUpTropism(px,py,wkx,wky,KNIGHT) elif piece.sign == ROOK: score -= lookUpTropism(px,py,wkx,wky,ROOK) elif piece.sign == QUEEN: score -= lookUpTropism(px,py,wkx,wky,QUEEN) return score def evalRookBonus (board): """ Rooks are more effective on the seventh rank and on open files """ score = 0 for y, row in enumerate(board.data): for x, piece in enumerate(row): if not piece or not piece.sign == ROOK: continue if pieceCount <= 6: # We should try to keep the rooks at the back lines if y in (0,7): score += piece.color == WHITE and 12 or -12 # Is this rook on a semi- or completely open file? noblack = blackPawnFileBins[x] == 0 and 1 or 0 nowhite = whitePawnFileBins[x] == 0 and 1 or 0 if piece.color == WHITE: if noblack: score += (noblack+nowhite)*6 else: score += nowhite*8 else: if nowhite: score -= (noblack+nowhite)*6 else: score -= nowhite*8 return score def evalDevelopment (board): """ Mostly useful in the opening, this term encourages the machine to move its bishops and knights into play, to control the center with its queen's and king's pawns """ score = 0 # Test endgame if pieceCount <= 8: wking, bking = board.kings score += endking[wking.y*8+wking.x] score -= endking[bking.y*8+bking.x] return score for y, row in enumerate(board.data): for x, piece in enumerate(row): if not piece: continue #s = pos[piece.sign][piece.color][y*8+x] if piece.color == WHITE: if piece.sign == PAWN: score += whitepawn[x+y*8] elif piece.sign == KNIGHT: score += whiteknight[x+y*8] elif piece.sign == BISHOP: score += whitebishop[x+y*8] elif piece.sign == ROOK: score += whiterook[x+y*8] elif piece.sign == QUEEN: score += whitequeen[x+y*8] elif piece.sign == KING: score += whiteking[x+y*8] else: if piece.sign == PAWN: score -= blackpawn[x+y*8] elif piece.sign == KNIGHT: score -= blackknight[x+y*8] elif piece.sign == BISHOP: score -= blackbishop[x+y*8] elif piece.sign == ROOK: score -= blackrook[x+y*8] elif piece.sign == QUEEN: score -= blackqueen[x+y*8] elif piece.sign == KING: score -= blackking[x+y*8] return score def evalCastling (board): """ Used to encourage castling """ if pieceCount <= 6: return 0 score = 0 for color, mod in ((WHITE,1),(BLACK,-1)): mainrow = board.data[int(3.5-3.5*mod)] # It is good to have a pawn in the king column for x, p in enumerate(mainrow): if p and p.sign == KING and p.color == color: bin = color == WHITE and whitePawnFileBins or blackPawnFileBins if not bin[x]: score -= 10*mod break kside = color == BLACK and B_OO or W_OO qside = color == BLACK and B_OOO or W_OOO # Being castled deserves a bonus if board.hasCastled[color]: score += 15*mod continue # Biggest penalty if you can't castle at all if not board.castling & (qside|kside): score -= 60*mod # Penalty if you can only castle kingside elif not board.castling & qside: score -= 30*mod # Bigger penalty if you can only castle queenside elif not board.castling & kside: score -= 45*mod return score def evalBadBishops (board): """ Bishops may be limited in their movement if there are too many pawns on squares of their color """ score = 0 for y, row in enumerate(board.data): for x, piece in enumerate(row): if not piece or not piece.sign == BISHOP: continue mod = piece.color == WHITE and 1 or -1 # What is the bishop's square color? lightsq = x % 2 + y % 2 == 1 if lightsq: score -= pawnColorBins[0]*7 * mod else: score -= pawnColorBins[1]*7 * mod return score def evalPawnStructure (board) : """ Given the pawn formations, penalize or bonify the position according to the features it contains """ score = 0 for x in range (8): # First, look for doubled pawns # In chess, two or more pawns on the same file usually hinder each other, # so we assign a penalty if whitePawnFileBins[x] > 1: score -= 10 if blackPawnFileBins[x] > 1: score += 10 # Now, look for an isolated pawn, i.e., one which has no neighbor pawns # capable of protecting it from attack at some point in the future if x == 0 and whitePawnFileBins[x] > 0 and whitePawnFileBins[1] == 0: score -= 15 elif x == 7 and whitePawnFileBins[x] > 0 and whitePawnFileBins[6] == 0: score -= 15 elif whitePawnFileBins[x] > 0 and whitePawnFileBins[x-1] == 0 and \ whitePawnFileBins[x+1] == 0: score -= 15 if x == 0 and blackPawnFileBins[x] > 0 and blackPawnFileBins[1] == 0: score += 15 elif x == 7 and blackPawnFileBins[x] > 0 and blackPawnFileBins[6] == 0: score += 15 elif blackPawnFileBins[x] > 0 and blackPawnFileBins[x-1] == 0 and \ blackPawnFileBins[x+1] == 0: score += 15 # Penalize pawn rams, because they restrict movement score -= 8 * pawnRams return score whitePawnFileBins = [0]*8 pawnColorBins = [0]*2 pawnRams = 0 blackPawnFileBins = [0]*8 def analyzePawnStructure (board): """ Look at pawn positions to be able to detect features such as doubled, isolated or passed pawns """ global whitePawnFileBins, blackPawnFileBins, pawnColorBins, pawnRams whitePawnFileBins = [0]*8 blackPawnFileBins = [0]*8 pawnColorBins[0] = 0 pawnColorBins[1] = 0 # Whiterams-Blackrams pawnRams = 0 global pieceCount pieceCount = 0 data = board.data for y, row in enumerate(data[::-1]): for x, piece in enumerate(row): if not piece: continue if piece.sign == PAWN and y not in (0,7): if piece.color == WHITE: whitePawnFileBins[x] += 1 else: blackPawnFileBins[x] += 1 # Is this pawn on a white or a black square? if y % 2 == x % 2: pawnColorBins[ 0 ] += 1 else: pawnColorBins[ 1 ] += 1 # Look for a "pawn ram", i.e., a situation where a black pawn # is located in the square immediately ahead of this one. if piece.color == WHITE: ahead = data[y+1][x] else: ahead = data[y-1][x] if ahead and ahead.sign == PAWN and ahead.color == piece.color: if piece.color == WHITE: pawnRams += 1 else: pawnRams -= 1 elif piece: pieceCount += 1 pychess-0.12beta3/lib/pychess/Utils/__init__.py0000755000175000017470000000000012161415524020516 0ustar tamasuserspychess-0.12beta3/lib/pychess/Utils/lutils/0000755000175000017470000000000012176727272017744 5ustar tamasuserspychess-0.12beta3/lib/pychess/Utils/lutils/bitboard.py0000755000175000017470000000553712161415524022105 0ustar tamasusersfrom array import array #=============================================================================== # setBit returns a bitboard with the ith bit set #=============================================================================== def setBit (bitboard, i): return bitboard | bitPosArray[i] bitPosArray = [2**(63-i) for i in xrange(64)] #=============================================================================== # clearBit returns the bitboard with the ith bit unset #=============================================================================== def clearBit (bitboard, i): return bitboard & notBitPosArray[i] notBitPosArray = [~2**(63-i) for i in xrange(64)] #=============================================================================== # firstBit returns the bit closest to 0 (A4) that is set in the board #=============================================================================== def firstBit (bitboard): """ Returns the index of the first non-zero bit from left """ if (bitboard >> 48): return lzArray[bitboard >> 48] if (bitboard >> 32): return lzArray[bitboard >> 32] + 16 if (bitboard >> 16): return lzArray[bitboard >> 16] + 32 return lzArray[bitboard] + 48 # The bitCount array returns the leading non-zero bit in the 16 bit # input argument. lzArray = array('B',[0]*65536) s = n = 1 for i in range(16): for j in range (s, s + n): lzArray[j] = 16 - 1 - i s += n n += n #=============================================================================== # lastBit returns the bit closest to 63 (H8) that is set in the board #=============================================================================== def lastBit (bitboard): return lsb [bitboard & -bitboard] lsb = {} for i in xrange(64): lsb[2**i] = 63-i #=============================================================================== # iterBits yields, or returns a list of, the positions of all set bits in a # bitboard. There is no guarantee of the order. #=============================================================================== def iterBits (bitboard): while bitboard: bit = bitboard & -bitboard yield lsb[bit] bitboard -= bit #=============================================================================== # toString returns a representation of the bitboard for debugging #=============================================================================== def toString (bitboard): s = [] last = -1 while bitboard: cord = firstBit (bitboard) bitboard = clearBit (bitboard, cord) for c in range(cord-last-1): s.append(" -") s.append(" #") last = cord while len(s) < 64: s.append(" -") s2 = "" for i in range(64,0,-8): a = s[i-8:i] s2 += "".join(a) + "\n" return s2 pychess-0.12beta3/lib/pychess/Utils/lutils/lsort.py0000755000175000017470000000454412161415524021457 0ustar tamasusers from attack import getAttacks, staticExchangeEvaluate from pychess.Utils.eval import pos as positionValues from sys import maxint from ldata import * def getCaptureValue (board, move): mpV = PIECE_VALUES[board.arBoard[move>>6 & 63]] cpV = PIECE_VALUES[board.arBoard[move & 63]] if mpV < cpV: return cpV - mpV else: temp = staticExchangeEvaluate (board, move) return temp < 0 and -maxint or temp def sortCaptures (board, moves): f = lambda move: getCaptureValue (board, move) moves.sort(key=f, reverse=True) return moves def getMoveValue (board, table, depth, move): """ Sort criteria is as follows. 1. The move from the hash table 2. Captures as above. 3. Killers. 4. History. 5. Moves to the centre. """ # As we only return directly from transposition table if hashf == hashfEXACT # There could be a non hashfEXACT very promising move for us to test if table.isHashMove(depth, move): return maxint fcord = (move >> 6) & 63 tcord = move & 63 flag = move >> 12 arBoard = board.arBoard fpiece = fcord if flag == DROP else arBoard[fcord] tpiece = arBoard[tcord] if tpiece != EMPTY: # We add some extra to ensure also bad captures will be searched early return PIECE_VALUES[tpiece] - PIECE_VALUES[fpiece] + 1000 if flag in PROMOTIONS: return PIECE_VALUES[flag-3] - PAWN_VALUE + 1000 if flag == DROP: return PIECE_VALUES[tpiece] + 1000 killervalue = table.isKiller(depth, move) if killervalue: return 1000 + killervalue # King tropism - a move that brings us nearer to the enemy king, is probably # a good move #opking = board.kings[1-board.color] #score = distance[fpiece][fcord][opking] - distance[fpiece][tcord][opking] if fpiece not in positionValues: # That is, fpiece == EMPTY print fcord, tcord print repr(board) score = positionValues[fpiece][board.color][tcord] - \ positionValues[fpiece][board.color][fcord] # History heuristic score += table.getButterfly(move) return score def sortMoves (board, table, ply, hashmove, moves): f = lambda move: getMoveValue (board, table, ply, hashmove, move) moves.sort(key=f, reverse=True) return moves pychess-0.12beta3/lib/pychess/Utils/lutils/PolyglotHash.py0000644000175000017470000004216512161415524022727 0ustar tamasusers# -*- coding: UTF-8 -*- # Polyglot opening books are indexed by 64-bit Zobrist hash keys. # The standard specifies the following Zobrist seed values. # The numbers in this file come from PolyGlot by Fabien Letouzey. # PolyGlot is available under the GNU GPL from http://wbec-ridderkerk.nl pieceHashes = [ [ [ 0x0000000000000000 ] * 64, [ 0x5355f900c2a82dc7, 0x07fb9f855a997142, 0x5093417aa8a7ed5e, 0x7bcbc38da25a7f3c, 0x19fc8a768cf4b6d4, 0x637a7780decfc0d9, 0x8249a47aee0e41f7, 0x79ad695501e7d1e8, 0x14acbaf4777d5776, 0xf145b6beccdea195, 0xdabf2ac8201752fc, 0x24c3c94df9c8d3f6, 0xbb6e2924f03912ea, 0x0ce26c0b95c980d9, 0xa49cd132bfbf7cc4, 0xe99d662af4243939, 0x27e6ad7891165c3f, 0x8535f040b9744ff1, 0x54b3f4fa5f40d873, 0x72b12c32127fed2b, 0xee954d3c7b411f47, 0x9a85ac909a24eaa1, 0x70ac4cd9f04f21f5, 0xf9b89d3e99a075c2, 0x87b3e2b2b5c907b1, 0xa366e5b8c54f48b8, 0xae4a9346cc3f7cf2, 0x1920c04d47267bbd, 0x87bf02c6b49e2ae9, 0x092237ac237f3859, 0xff07f64ef8ed14d0, 0x8de8dca9f03cc54e, 0x9c1633264db49c89, 0xb3f22c3d0b0b38ed, 0x390e5fb44d01144b, 0x5bfea5b4712768e9, 0x1e1032911fa78984, 0x9a74acb964e78cb3, 0x4f80f7a035dafb04, 0x6304d09a0b3738c4, 0x2171e64683023a08, 0x5b9b63eb9ceff80c, 0x506aacf489889342, 0x1881afc9a3a701d6, 0x6503080440750644, 0xdfd395339cdbf4a7, 0xef927dbcf00c20f2, 0x7b32f7d1e03680ec, 0xb9fd7620e7316243, 0x05a7e8a57db91b77, 0xb5889c6e15630a75, 0x4a750a09ce9573f7, 0xcf464cec899a2f8a, 0xf538639ce705b824, 0x3c79a0ff5580ef7f, 0xede6c87f8477609d, 0x799e81f05bc93f31, 0x86536b8cf3428a8c, 0x97d7374c60087b73, 0xa246637cff328532, 0x043fcae60cc0eba0, 0x920e449535dd359e, 0x70eb093b15b290cc, 0x73a1921916591cbd, ], [ 0xc547f57e42a7444e, 0x78e37644e7cad29e, 0xfe9a44e9362f05fa, 0x08bd35cc38336615, 0x9315e5eb3a129ace, 0x94061b871e04df75, 0xdf1d9f9d784ba010, 0x3bba57b68871b59d, 0xd2b7adeeded1f73f, 0xf7a255d83bc373f8, 0xd7f4f2448c0ceb81, 0xd95be88cd210ffa7, 0x336f52f8ff4728e7, 0xa74049dac312ac71, 0xa2f61bb6e437fdb5, 0x4f2a5cb07f6a35b3, 0x87d380bda5bf7859, 0x16b9f7e06c453a21, 0x7ba2484c8a0fd54e, 0xf3a678cad9a2e38c, 0x39b0bf7dde437ba2, 0xfcaf55c1bf8a4424, 0x18fcf680573fa594, 0x4c0563b89f495ac3, 0x40e087931a00930d, 0x8cffa9412eb642c1, 0x68ca39053261169f, 0x7a1ee967d27579e2, 0x9d1d60e5076f5b6f, 0x3810e399b6f65ba2, 0x32095b6d4ab5f9b1, 0x35cab62109dd038a, 0xa90b24499fcfafb1, 0x77a225a07cc2c6bd, 0x513e5e634c70e331, 0x4361c0ca3f692f12, 0xd941aca44b20a45b, 0x528f7c8602c5807b, 0x52ab92beb9613989, 0x9d1dfa2efc557f73, 0x722ff175f572c348, 0x1d1260a51107fe97, 0x7a249a57ec0c9ba2, 0x04208fe9e8f7f2d6, 0x5a110c6058b920a0, 0x0cd9a497658a5698, 0x56fd23c8f9715a4c, 0x284c847b9d887aae, 0x04feabfbbdb619cb, 0x742e1e651c60ba83, 0x9a9632e65904ad3c, 0x881b82a13b51b9e2, 0x506e6744cd974924, 0xb0183db56ffc6a79, 0x0ed9b915c66ed37e, 0x5e11e86d5873d484, 0xf678647e3519ac6e, 0x1b85d488d0f20cc5, 0xdab9fe6525d89021, 0x0d151d86adb73615, 0xa865a54edcc0f019, 0x93c42566aef98ffb, 0x99e7afeabe000731, 0x48cbff086ddf285a, ], [ 0x23b70edb1955c4bf, 0xc330de426430f69d, 0x4715ed43e8a45c0a, 0xa8d7e4dab780a08d, 0x0572b974f03ce0bb, 0xb57d2e985e1419c7, 0xe8d9ecbe2cf3d73f, 0x2fe4b17170e59750, 0x11317ba87905e790, 0x7fbf21ec8a1f45ec, 0x1725cabfcb045b00, 0x964e915cd5e2b207, 0x3e2b8bcbf016d66d, 0xbe7444e39328a0ac, 0xf85b2b4fbcde44b7, 0x49353fea39ba63b1, 0x1dd01aafcd53486a, 0x1fca8a92fd719f85, 0xfc7c95d827357afa, 0x18a6a990c8b35ebd, 0xcccb7005c6b9c28d, 0x3bdbb92c43b17f26, 0xaa70b5b4f89695a2, 0xe94c39a54a98307f, 0xb7a0b174cff6f36e, 0xd4dba84729af48ad, 0x2e18bc1ad9704a68, 0x2de0966daf2f8b1c, 0xb9c11d5b1e43a07e, 0x64972d68dee33360, 0x94628d38d0c20584, 0xdbc0d2b6ab90a559, 0xd2733c4335c6a72f, 0x7e75d99d94a70f4d, 0x6ced1983376fa72b, 0x97fcaacbf030bc24, 0x7b77497b32503b12, 0x8547eddfb81ccb94, 0x79999cdff70902cb, 0xcffe1939438e9b24, 0x829626e3892d95d7, 0x92fae24291f2b3f1, 0x63e22c147b9c3403, 0xc678b6d860284a1c, 0x5873888850659ae7, 0x0981dcd296a8736d, 0x9f65789a6509a440, 0x9ff38fed72e9052f, 0xe479ee5b9930578c, 0xe7f28ecd2d49eecd, 0x56c074a581ea17fe, 0x5544f7d774b14aef, 0x7b3f0195fc6f290f, 0x12153635b2c0cf57, 0x7f5126dbba5e0ca7, 0x7a76956c3eafb413, 0x3d5774a11d31ab39, 0x8a1b083821f40cb4, 0x7b4a38e32537df62, 0x950113646d1d6e03, 0x4da8979a0041e8a9, 0x3bc36e078f7515d7, 0x5d0a12f27ad310d1, 0x7f9d1a2e1ebe1327, ], [ 0xa09e8c8c35ab96de, 0xfa7e393983325753, 0xd6b6d0ecc617c699, 0xdfea21ea9e7557e3, 0xb67c1fa481680af8, 0xca1e3785a9e724e5, 0x1cfc8bed0d681639, 0xd18d8549d140caea, 0x4ed0fe7e9dc91335, 0xe4dbf0634473f5d2, 0x1761f93a44d5aefe, 0x53898e4c3910da55, 0x734de8181f6ec39a, 0x2680b122baa28d97, 0x298af231c85bafab, 0x7983eed3740847d5, 0x66c1a2a1a60cd889, 0x9e17e49642a3e4c1, 0xedb454e7badc0805, 0x50b704cab602c329, 0x4cc317fb9cddd023, 0x66b4835d9eafea22, 0x219b97e26ffc81bd, 0x261e4e4c0a333a9d, 0x1fe2cca76517db90, 0xd7504dfa8816edbb, 0xb9571fa04dc089c8, 0x1ddc0325259b27de, 0xcf3f4688801eb9aa, 0xf4f5d05c10cab243, 0x38b6525c21a42b0e, 0x36f60e2ba4fa6800, 0xeb3593803173e0ce, 0x9c4cd6257c5a3603, 0xaf0c317d32adaa8a, 0x258e5a80c7204c4b, 0x8b889d624d44885d, 0xf4d14597e660f855, 0xd4347f66ec8941c3, 0xe699ed85b0dfb40d, 0x2472f6207c2d0484, 0xc2a1e7b5b459aeb5, 0xab4f6451cc1d45ec, 0x63767572ae3d6174, 0xa59e0bd101731a28, 0x116d0016cb948f09, 0x2cf9c8ca052f6e9f, 0x0b090a7560a968e3, 0xabeeddb2dde06ff1, 0x58efc10b06a2068d, 0xc6e57a78fbd986e0, 0x2eab8ca63ce802d7, 0x14a195640116f336, 0x7c0828dd624ec390, 0xd74bbe77e6116ac7, 0x804456af10f5fb53, 0xebe9ea2adf4321c7, 0x03219a39ee587a30, 0x49787fef17af9924, 0xa1e9300cd8520548, 0x5b45e522e4b1b4ef, 0xb49c3b3995091a36, 0xd4490ad526f14431, 0x12a8f216af9418c2, ], [ 0x6ffe73e81b637fb3, 0xddf957bc36d8b9ca, 0x64d0e29eea8838b3, 0x08dd9bdfd96b9f63, 0x087e79e5a57d1d13, 0xe328e230e3e2b3fb, 0x1c2559e30f0946be, 0x720bf5f26f4d2eaa, 0xb0774d261cc609db, 0x443f64ec5a371195, 0x4112cf68649a260e, 0xd813f2fab7f5c5ca, 0x660d3257380841ee, 0x59ac2c7873f910a3, 0xe846963877671a17, 0x93b633abfa3469f8, 0xc0c0f5a60ef4cdcf, 0xcaf21ecd4377b28c, 0x57277707199b8175, 0x506c11b9d90e8b1d, 0xd83cc2687a19255f, 0x4a29c6465a314cd1, 0xed2df21216235097, 0xb5635c95ff7296e2, 0x22af003ab672e811, 0x52e762596bf68235, 0x9aeba33ac6ecc6b0, 0x944f6de09134dfb6, 0x6c47bec883a7de39, 0x6ad047c430a12104, 0xa5b1cfdba0ab4067, 0x7c45d833aff07862, 0x5092ef950a16da0b, 0x9338e69c052b8e7b, 0x455a4b4cfe30e3f5, 0x6b02e63195ad0cf8, 0x6b17b224bad6bf27, 0xd1e0ccd25bb9c169, 0xde0c89a556b9ae70, 0x50065e535a213cf6, 0x9c1169fa2777b874, 0x78edefd694af1eed, 0x6dc93d9526a50e68, 0xee97f453f06791ed, 0x32ab0edb696703d3, 0x3a6853c7e70757a7, 0x31865ced6120f37d, 0x67fef95d92607890, 0x1f2b1d1f15f6dc9c, 0xb69e38a8965c6b65, 0xaa9119ff184cccf4, 0xf43c732873f24c13, 0xfb4a3d794a9a80d2, 0x3550c2321fd6109c, 0x371f77e76bb8417e, 0x6bfa9aae5ec05779, 0xcd04f3ff001a4778, 0xe3273522064480ca, 0x9f91508bffcfc14a, 0x049a7f41061a9e60, 0xfcb6be43a9f2fe9b, 0x08de8a1c7797da9b, 0x8f9887e6078735a1, 0xb5b4071dbfc73a66, ], [ 0x55b6344cf97aafae, 0xb862225b055b6960, 0xcac09afbddd2cdb4, 0xdaf8e9829fe96b5f, 0xb5fdfc5d3132c498, 0x310cb380db6f7503, 0xe87fbb46217a360e, 0x2102ae466ebb1148, 0xf8549e1a3aa5e00d, 0x07a69afdcc42261a, 0xc4c118bfe78feaae, 0xf9f4892ed96bd438, 0x1af3dbe25d8f45da, 0xf5b4b0b0d2deeeb4, 0x962aceefa82e1c84, 0x046e3ecaaf453ce9, 0xf05d129681949a4c, 0x964781ce734b3c84, 0x9c2ed44081ce5fbd, 0x522e23f3925e319e, 0x177e00f9fc32f791, 0x2bc60a63a6f3b3f2, 0x222bbfae61725606, 0x486289ddcc3d6780, 0x7dc7785b8efdfc80, 0x8af38731c02ba980, 0x1fab64ea29a2ddf7, 0xe4d9429322cd065a, 0x9da058c67844f20c, 0x24c0e332b70019b0, 0x233003b5a6cfe6ad, 0xd586bd01c5c217f6, 0x5e5637885f29bc2b, 0x7eba726d8c94094b, 0x0a56a5f0bfe39272, 0xd79476a84ee20d06, 0x9e4c1269baa4bf37, 0x17efee45b0dee640, 0x1d95b0a5fcf90bc6, 0x93cbe0b699c2585d, 0x65fa4f227a2b6d79, 0xd5f9e858292504d5, 0xc2b5a03f71471a6f, 0x59300222b4561e00, 0xce2f8642ca0712dc, 0x7ca9723fbb2e8988, 0x2785338347f2ba08, 0xc61bb3a141e50e8c, 0x150f361dab9dec26, 0x9f6a419d382595f4, 0x64a53dc924fe7ac9, 0x142de49fff7a7c3d, 0x0c335248857fa9e7, 0x0a9c32d5eae45305, 0xe6c42178c4bbb92e, 0x71f1ce2490d20b07, 0xf1bcc3d275afe51a, 0xe728e8c83c334074, 0x96fbf83a12884624, 0x81a1549fd6573da5, 0x5fa7867caf35e149, 0x56986e2ef3ed091b, 0x917f1dd5f8886c61, 0xd20d8c88c8ffe65f, ], ], [ [ 0x0000000000000000 ] * 64, [ 0x9d39247e33776d41, 0x2af7398005aaa5c7, 0x44db015024623547, 0x9c15f73e62a76ae2, 0x75834465489c0c89, 0x3290ac3a203001bf, 0x0fbbad1f61042279, 0xe83a908ff2fb60ca, 0x0d7e765d58755c10, 0x1a083822ceafe02d, 0x9605d5f0e25ec3b0, 0xd021ff5cd13a2ed5, 0x40bdf15d4a672e32, 0x011355146fd56395, 0x5db4832046f3d9e5, 0x239f8b2d7ff719cc, 0x05d1a1ae85b49aa1, 0x679f848f6e8fc971, 0x7449bbff801fed0b, 0x7d11cdb1c3b7adf0, 0x82c7709e781eb7cc, 0xf3218f1c9510786c, 0x331478f3af51bbe6, 0x4bb38de5e7219443, 0xaa649c6ebcfd50fc, 0x8dbd98a352afd40b, 0x87d2074b81d79217, 0x19f3c751d3e92ae1, 0xb4ab30f062b19abf, 0x7b0500ac42047ac4, 0xc9452ca81a09d85d, 0x24aa6c514da27500, 0x4c9f34427501b447, 0x14a68fd73c910841, 0xa71b9b83461cbd93, 0x03488b95b0f1850f, 0x637b2b34ff93c040, 0x09d1bc9a3dd90a94, 0x3575668334a1dd3b, 0x735e2b97a4c45a23, 0x18727070f1bd400b, 0x1fcbacd259bf02e7, 0xd310a7c2ce9b6555, 0xbf983fe0fe5d8244, 0x9f74d14f7454a824, 0x51ebdc4ab9ba3035, 0x5c82c505db9ab0fa, 0xfcf7fe8a3430b241, 0x3253a729b9ba3dde, 0x8c74c368081b3075, 0xb9bc6c87167c33e7, 0x7ef48f2b83024e20, 0x11d505d4c351bd7f, 0x6568fca92c76a243, 0x4de0b0f40f32a7b8, 0x96d693460cc37e5d, 0x42e240cb63689f2f, 0x6d2bdcdae2919661, 0x42880b0236e4d951, 0x5f0f4a5898171bb6, 0x39f890f579f92f88, 0x93c5b5f47356388b, 0x63dc359d8d231b78, 0xec16ca8aea98ad76, ], [ 0x56436c9fe1a1aa8d, 0xefac4b70633b8f81, 0xbb215798d45df7af, 0x45f20042f24f1768, 0x930f80f4e8eb7462, 0xff6712ffcfd75ea1, 0xae623fd67468aa70, 0xdd2c5bc84bc8d8fc, 0x7eed120d54cf2dd9, 0x22fe545401165f1c, 0xc91800e98fb99929, 0x808bd68e6ac10365, 0xdec468145b7605f6, 0x1bede3a3aef53302, 0x43539603d6c55602, 0xaa969b5c691ccb7a, 0xa87832d392efee56, 0x65942c7b3c7e11ae, 0xded2d633cad004f6, 0x21f08570f420e565, 0xb415938d7da94e3c, 0x91b859e59ecb6350, 0x10cff333e0ed804a, 0x28aed140be0bb7dd, 0xc5cc1d89724fa456, 0x5648f680f11a2741, 0x2d255069f0b7dab3, 0x9bc5a38ef729abd4, 0xef2f054308f6a2bc, 0xaf2042f5cc5c2858, 0x480412bab7f5be2a, 0xaef3af4a563dfe43, 0x19afe59ae451497f, 0x52593803dff1e840, 0xf4f076e65f2ce6f0, 0x11379625747d5af3, 0xbce5d2248682c115, 0x9da4243de836994f, 0x066f70b33fe09017, 0x4dc4de189b671a1c, 0x51039ab7712457c3, 0xc07a3f80c31fb4b4, 0xb46ee9c5e64a6e7c, 0xb3819a42abe61c87, 0x21a007933a522a20, 0x2df16f761598aa4f, 0x763c4a1371b368fd, 0xf793c46702e086a0, 0xd7288e012aeb8d31, 0xde336a2a4bc1c44b, 0x0bf692b38d079f23, 0x2c604a7a177326b3, 0x4850e73e03eb6064, 0xcfc447f1e53c8e1b, 0xb05ca3f564268d99, 0x9ae182c8bc9474e8, 0xa4fc4bd4fc5558ca, 0xe755178d58fc4e76, 0x69b97db1a4c03dfe, 0xf9b5b7c4acc67c96, 0xfc6a82d64b8655fb, 0x9c684cb6c4d24417, 0x8ec97d2917456ed0, 0x6703df9d2924e97e, ], [ 0x7f9b6af1ebf78baf, 0x58627e1a149bba21, 0x2cd16e2abd791e33, 0xd363eff5f0977996, 0x0ce2a38c344a6eed, 0x1a804aadb9cfa741, 0x907f30421d78c5de, 0x501f65edb3034d07, 0x37624ae5a48fa6e9, 0x957baf61700cff4e, 0x3a6c27934e31188a, 0xd49503536abca345, 0x088e049589c432e0, 0xf943aee7febf21b8, 0x6c3b8e3e336139d3, 0x364f6ffa464ee52e, 0xd60f6dcedc314222, 0x56963b0dca418fc0, 0x16f50edf91e513af, 0xef1955914b609f93, 0x565601c0364e3228, 0xecb53939887e8175, 0xbac7a9a18531294b, 0xb344c470397bba52, 0x65d34954daf3cebd, 0xb4b81b3fa97511e2, 0xb422061193d6f6a7, 0x071582401c38434d, 0x7a13f18bbedc4ff5, 0xbc4097b116c524d2, 0x59b97885e2f2ea28, 0x99170a5dc3115544, 0x6f423357e7c6a9f9, 0x325928ee6e6f8794, 0xd0e4366228b03343, 0x565c31f7de89ea27, 0x30f5611484119414, 0xd873db391292ed4f, 0x7bd94e1d8e17debc, 0xc7d9f16864a76e94, 0x947ae053ee56e63c, 0xc8c93882f9475f5f, 0x3a9bf55ba91f81ca, 0xd9a11fbb3d9808e4, 0x0fd22063edc29fca, 0xb3f256d8aca0b0b9, 0xb03031a8b4516e84, 0x35dd37d5871448af, 0xe9f6082b05542e4e, 0xebfafa33d7254b59, 0x9255abb50d532280, 0xb9ab4ce57f2d34f3, 0x693501d628297551, 0xc62c58f97dd949bf, 0xcd454f8f19c5126a, 0xbbe83f4ecc2bdecb, 0xdc842b7e2819e230, 0xba89142e007503b8, 0xa3bc941d0a5061cb, 0xe9f6760e32cd8021, 0x09c7e552bc76492f, 0x852f54934da55cc9, 0x8107fccf064fcf56, 0x098954d51fff6580, ], [ 0xda3a361b1c5157b1, 0xdcdd7d20903d0c25, 0x36833336d068f707, 0xce68341f79893389, 0xab9090168dd05f34, 0x43954b3252dc25e5, 0xb438c2b67f98e5e9, 0x10dcd78e3851a492, 0xdbc27ab5447822bf, 0x9b3cdb65f82ca382, 0xb67b7896167b4c84, 0xbfced1b0048eac50, 0xa9119b60369ffebd, 0x1fff7ac80904bf45, 0xac12fb171817eee7, 0xaf08da9177dda93d, 0x1b0cab936e65c744, 0xb559eb1d04e5e932, 0xc37b45b3f8d6f2ba, 0xc3a9dc228caac9e9, 0xf3b8b6675a6507ff, 0x9fc477de4ed681da, 0x67378d8eccef96cb, 0x6dd856d94d259236, 0xa319ce15b0b4db31, 0x073973751f12dd5e, 0x8a8e849eb32781a5, 0xe1925c71285279f5, 0x74c04bf1790c0efe, 0x4dda48153c94938a, 0x9d266d6a1cc0542c, 0x7440fb816508c4fe, 0x13328503df48229f, 0xd6bf7baee43cac40, 0x4838d65f6ef6748f, 0x1e152328f3318dea, 0x8f8419a348f296bf, 0x72c8834a5957b511, 0xd7a023a73260b45c, 0x94ebc8abcfb56dae, 0x9fc10d0f989993e0, 0xde68a2355b93cae6, 0xa44cfe79ae538bbe, 0x9d1d84fcce371425, 0x51d2b1ab2ddfb636, 0x2fd7e4b9e72cd38c, 0x65ca5b96b7552210, 0xdd69a0d8ab3b546d, 0x604d51b25fbf70e2, 0x73aa8a564fb7ac9e, 0x1a8c1e992b941148, 0xaac40a2703d9bea0, 0x764dbeae7fa4f3a6, 0x1e99b96e70a9be8b, 0x2c5e9deb57ef4743, 0x3a938fee32d29981, 0x26e6db8ffdf5adfe, 0x469356c504ec9f9d, 0xc8763c5b08d1908c, 0x3f6c6af859d80055, 0x7f7cc39420a3a545, 0x9bfb227ebdf4c5ce, 0x89039d79d6fc5c5c, 0x8fe88b57305e2ab6, ], [ 0x001f837cc7350524, 0x1877b51e57a764d5, 0xa2853b80f17f58ee, 0x993e1de72d36d310, 0xb3598080ce64a656, 0x252f59cf0d9f04bb, 0xd23c8e176d113600, 0x1bda0492e7e4586e, 0x21e0bd5026c619bf, 0x3b097adaf088f94e, 0x8d14dedb30be846e, 0xf95cffa23af5f6f4, 0x3871700761b3f743, 0xca672b91e9e4fa16, 0x64c8e531bff53b55, 0x241260ed4ad1e87d, 0x106c09b972d2e822, 0x7fba195410e5ca30, 0x7884d9bc6cb569d8, 0x0647dfedcd894a29, 0x63573ff03e224774, 0x4fc8e9560f91b123, 0x1db956e450275779, 0xb8d91274b9e9d4fb, 0xa2ebee47e2fbfce1, 0xd9f1f30ccd97fb09, 0xefed53d75fd64e6b, 0x2e6d02c36017f67f, 0xa9aa4d20db084e9b, 0xb64be8d8b25396c1, 0x70cb6af7c2d5bcf0, 0x98f076a4f7a2322e, 0xbf84470805e69b5f, 0x94c3251f06f90cf3, 0x3e003e616a6591e9, 0xb925a6cd0421aff3, 0x61bdd1307c66e300, 0xbf8d5108e27e0d48, 0x240ab57a8b888b20, 0xfc87614baf287e07, 0xef02cdd06ffdb432, 0xa1082c0466df6c0a, 0x8215e577001332c8, 0xd39bb9c3a48db6cf, 0x2738259634305c14, 0x61cf4f94c97df93d, 0x1b6baca2ae4e125b, 0x758f450c88572e0b, 0x959f587d507a8359, 0xb063e962e045f54d, 0x60e8ed72c0dff5d1, 0x7b64978555326f9f, 0xfd080d236da814ba, 0x8c90fd9b083f4558, 0x106f72fe81e2c590, 0x7976033a39f7d952, 0xa4ec0132764ca04b, 0x733ea705fae4fa77, 0xb4d8f77bc3e56167, 0x9e21f4f903b33fd9, 0x9d765e419fb69f6d, 0xd30c088ba61ea5ef, 0x5d94337fbfaf7f5b, 0x1a4e4822eb4d7a59, ], [ 0x230e343dfba08d33, 0x43ed7f5a0fae657d, 0x3a88a0fbbcb05c63, 0x21874b8b4d2dbc4f, 0x1bdea12e35f6a8c9, 0x53c065c6c8e63528, 0xe34a1d250e7a8d6b, 0xd6b04d3b7651dd7e, 0x5e90277e7cb39e2d, 0x2c046f22062dc67d, 0xb10bb459132d0a26, 0x3fa9ddfb67e2f199, 0x0e09b88e1914f7af, 0x10e8b35af3eeab37, 0x9eedeca8e272b933, 0xd4c718bc4ae8ae5f, 0x81536d601170fc20, 0x91b534f885818a06, 0xec8177f83f900978, 0x190e714fada5156e, 0xb592bf39b0364963, 0x89c350c893ae7dc1, 0xac042e70f8b383f2, 0xb49b52e587a1ee60, 0xfb152fe3ff26da89, 0x3e666e6f69ae2c15, 0x3b544ebe544c19f9, 0xe805a1e290cf2456, 0x24b33c9d7ed25117, 0xe74733427b72f0c1, 0x0a804d18b7097475, 0x57e3306d881edb4f, 0x4ae7d6a36eb5dbcb, 0x2d8d5432157064c8, 0xd1e649de1e7f268b, 0x8a328a1cedfe552c, 0x07a3aec79624c7da, 0x84547ddc3e203c94, 0x990a98fd5071d263, 0x1a4ff12616eefc89, 0xf6f7fd1431714200, 0x30c05b1ba332f41c, 0x8d2636b81555a786, 0x46c9feb55d120902, 0xccec0a73b49c9921, 0x4e9d2827355fc492, 0x19ebb029435dcb0f, 0x4659d2b743848a2c, 0x963ef2c96b33be31, 0x74f85198b05a2e7d, 0x5a0f544dd2b1fb18, 0x03727073c2e134b1, 0xc7f6aa2de59aea61, 0x352787baa0d7c22f, 0x9853eab63b5e0b35, 0xabbdcdd7ed5c0860, 0xcf05daf5ac8d77b0, 0x49cad48cebf4a71e, 0x7a4c10ec2158c4a6, 0xd9e92aa246bf719e, 0x13ae978d09fe5557, 0x730499af921549ff, 0x4e4b705b92903ba4, 0xff577222c14f0a3a, ], ], ] epHashes = [0x70cc73d90bc26e24, 0xe21a6b35df0c3ad7, 0x003a93d8b2806962, 0x1c99ded33cb890a1, 0xcf3145de0add4289, 0xd0e4427a5514fb72, 0x77c621cc9fb3a483, 0x67a34dac4356550b ] W_OOHash = 0x31d71dce64b2c310 W_OOOHash = 0xf165b587df898190 B_OOHash = 0xa57e6339dd2cf3a0 B_OOOHash = 0x1ef6e6dbb1961ec9 colorHash = 0xf8d626aaaf278509 pychess-0.12beta3/lib/pychess/Utils/lutils/attack.py0000755000175000017470000002530412161415524021560 0ustar tamasusersfrom bitboard import * from ldata import * from pychess.Utils.const import * # # Caveat: Many functions in this module has very similar code. If you fix a # bug, or write a perforance enchace, please update all functions. Apologies # for the inconvenience # def isAttacked (board, cord, color): """ To determine if cord is attacked by any pieces from color. """ _moveArray = moveArray pboards = board.boards[color] # Knights if pboards[KNIGHT] & _moveArray[KNIGHT][cord]: return True rayto = fromToRay[cord] blocker = board.blocker # Bishops & Queens bitboard = (pboards[BISHOP] | pboards[QUEEN]) & _moveArray[BISHOP][cord] if bitboard: others = ~bitboard & blocker # inlined iterBits() while bitboard: bit = bitboard & -bitboard ray = rayto[lsb[bit]] # If there is a path and no other piece stand in our way if ray and not ray & others: return True bitboard -= bit # Rooks & Queens bitboard = (pboards[ROOK] | pboards[QUEEN]) & _moveArray[ROOK][cord] if bitboard: others = ~bitboard & blocker # inlined iterBits() while bitboard: bit = bitboard & -bitboard ray = rayto[lsb[bit]] # If there is a path and no other piece stand in our way if ray and not ray & others: return True bitboard -= bit # Pawns # Would a pawn of the opposite color, standing at out kings cord, be able # to attack any of our pawns? ptype = color == WHITE and BPAWN or PAWN if pboards[PAWN] & _moveArray[ptype][cord]: return True # King if pboards[KING] & _moveArray[KING][cord]: return True return False def getAttacks (board, cord, color): """ To create a bitboard of pieces of color, which attacks cord """ _moveArray = moveArray pieces = board.boards[color] # Knights bits = pieces[KNIGHT] & _moveArray[KNIGHT][cord] # Kings bits |= pieces[KING] & _moveArray[KING][cord] # Pawns bits |= pieces[PAWN] & _moveArray[color == WHITE and BPAWN or PAWN][cord] rayto = fromToRay[cord] blocker = board.blocker # Bishops and Queens bitboard = (pieces[BISHOP] | pieces[QUEEN]) & _moveArray[BISHOP][cord] # inlined iterBits() while bitboard: bit = bitboard & -bitboard c = lsb[bit] ray = rayto[c] if ray and not clearBit(ray & blocker, c): bits |= bitPosArray[c] bitboard -= bit # Rooks and queens bitboard = (pieces[ROOK] | pieces[QUEEN]) & _moveArray[ROOK][cord] # inlined iterBits() while bitboard: bit = bitboard & -bitboard c = lsb[bit] ray = rayto[c] if ray and not clearBit(ray & blocker, c): bits |= bitPosArray[c] bitboard -= bit return bits def getPieceMoves (board, cord, color, piece): """ To create a bitboard of specified pieces of color, which can move to cord """ _moveArray = moveArray color = board.color pieces = board.boards[color] if piece == KNIGHT or piece == KING: return pieces[piece] & _moveArray[piece][cord] rayto = fromToRay[cord] blocker = board.blocker if sliders[piece]: cords = pieces[piece] & _moveArray[piece][cord] bits = 0 for c in iterBits(cords): ray = rayto[c] if ray and not clearBit(ray & blocker, c): bits |= bitPosArray[c] return bits if piece == PAWN: pawns = pieces[PAWN] bits = pawns & _moveArray[color == WHITE and BPAWN or PAWN][cord] bits |= pawns & bitPosArray[cord + (color == WHITE and -8 or 8)] if not blocker & bitPosArray[cord + (color == WHITE and -8 or 8)]: bits |= pawns & rankBits[color == WHITE and 1 or 6] return bits def pinnedOnKing (board, cord, color): # Determine if the piece on cord is pinned against its colors king. # In chess, a pin is a situation in which a piece is forced to stay put # because moving it would expose a more valuable piece behind it to # capture. # Caveat: pinnedOnKing should only be called by genCheckEvasions(). kingCord = board.kings[color] dir = directions[kingCord][cord] if dir == -1: return False opcolor = 1 - color blocker = board.blocker # Path from piece to king is blocked, so no pin if clearBit(fromToRay[kingCord][cord], cord) & blocker: return False b = (rays[kingCord][dir] ^ fromToRay[kingCord][cord]) & blocker if not b: return False cord1 = cord > kingCord and firstBit (b) or lastBit (b) # If diagonal if dir <= 3 and bitPosArray[cord1] & \ (board.boards[opcolor][QUEEN] | board.boards[opcolor][BISHOP]): return True # Rank / file if dir >= 4 and bitPosArray[cord1] & \ (board.boards[opcolor][QUEEN] | board.boards[opcolor][ROOK]): return True return False def staticExchangeEvaluate (board, moveOrTcord, color=None): """ The GnuChess Static Exchange Evaluator (or SEE for short). First determine the target square. Create a bitboard of all squares attacking the target square for both sides. Using these 2 bitboards, we take turn making captures from smallest piece to largest piece. When a sliding piece makes a capture, we check behind it to see if another attacker piece has been exposed. If so, add this to the bitboard as well. When performing the "captures", we stop if one side is ahead and doesn't need to capture, a form of pseudo-minimaxing. """ # # Notice: If you use the tcord version, the color is the color attacked, and # the color to witch the score is relative. # swaplist = [0] if color == None: move = moveOrTcord flag = move >> 12 fcord = (move >> 6) & 63 tcord = move & 63 color = board.friends[BLACK] & bitPosArray[fcord] and BLACK or WHITE opcolor = 1-color boards = board.boards[color] opboards = board.boards[opcolor] ours = getAttacks (board, tcord, color) ours = clearBit (ours, fcord) theirs = getAttacks (board, tcord, opcolor) if xray[board.arBoard[fcord]]: ours, theirs = addXrayPiece (board, tcord, fcord, color, ours, theirs) if flag in PROMOTIONS: swaplist = [PIECE_VALUES[flag-3] - PAWN_VALUE] lastval = -PIECE_VALUES[flag-3] else: if flag == ENPASSANT: swaplist = [PAWN_VALUE] else: swaplist = [PIECE_VALUES[board.arBoard[tcord]]] lastval = -PIECE_VALUES[board.arBoard[fcord]] else: tcord = moveOrTcord opcolor = 1-color boards = board.boards[color] opboards = board.boards[opcolor] ours = getAttacks (board, tcord, color) theirs = getAttacks (board, tcord, opcolor) lastval = -PIECE_VALUES[board.arBoard[tcord]] while theirs: for piece in xrange(PAWN, KING+1): r = theirs & opboards[piece] if r: cord = firstBit(r) theirs = clearBit(theirs, cord) if xray[piece]: ours, theirs = addXrayPiece (board, tcord, cord, color, ours, theirs) swaplist.append(swaplist[-1] + lastval) lastval = PIECE_VALUES[piece] break if not ours: break for piece in xrange(PAWN, KING+1): r = ours & boards[piece] if r: cord = firstBit(r) ours = clearBit(ours, cord) if xray[piece]: ours, theirs = addXrayPiece (board, tcord, cord, color, ours, theirs) swaplist.append(swaplist[-1] + lastval) lastval = -PIECE_VALUES[piece] break # At this stage, we have the swap scores in a list. We just need to # mini-max the scores from the bottom up to the top of the list. for n in xrange(len(swaplist)-1, 0, -1): if n & 1: if swaplist[n] <= swaplist[n-1]: swaplist[n-1] = swaplist[n] else: if swaplist[n] >= swaplist[n-1]: swaplist[n-1] = swaplist[n] return swaplist[0] xray = (False, True, False, True, True, True, False) def addXrayPiece (board, tcord, fcord, color, ours, theirs): """ This is used by swapOff. The purpose of this routine is to find a piece which attack through another piece (e.g. two rooks, Q+B, B+P, etc.) Color is the side attacking the square where the swapping is to be done. """ dir = directions[tcord][fcord] a = rays[fcord][dir] & board.blocker if not a: return ours, theirs if tcord < fcord: ncord = firstBit(a) else: ncord = lastBit(a) piece = board.arBoard[ncord] if piece == QUEEN or (piece == ROOK and dir > 3) or \ (piece == BISHOP and dir < 4): bit = bitPosArray[ncord] if bit & board.friends[color]: ours |= bit else: theirs |= bit return ours, theirs def defends (board, fcord, tcord): """ Could fcord attack tcord if the piece on tcord wasn't on the team of fcord? Doesn't test check. """ # Work on a board copy, as we are going to change some stuff board = board.clone() if board.friends[WHITE] & bitPosArray[fcord]: color = WHITE else: color = BLACK opcolor = 1-color boards = board.boards[color] opboards = board.boards[opcolor] # To see if we now defend the piece, we have to "give" it to the other team piece = board.arBoard[tcord] #backup = boards[piece] #opbackup = opboards[piece] boards[piece] &= notBitPosArray[tcord] opboards[piece] |= bitPosArray[tcord] board.friends[color] &= notBitPosArray[tcord] board.friends[opcolor] |= bitPosArray[tcord] # Can we "attack" the piece now? backupColor = board.color board.setColor(color) from lmovegen import newMove from validator import validateMove islegal = validateMove (board, newMove(fcord, tcord)) board.setColor(backupColor) # We don't need to set the board back, as we work on a copy #boards[piece] = backup #opboards[piece] = opbackup #board.friends[color] |= bitPosArray[tcord] #board.friends[opcolor] &= notBitPosArray[tcord] return islegal pychess-0.12beta3/lib/pychess/Utils/lutils/lmovegen.py0000755000175000017470000005175312176547360022146 0ustar tamasusers from bitboard import * from attack import * from pychess.Utils.const import * ################################################################################ # The format of a move is as follows - from left: # # 4 bits: Descriping the type of the move # # 6 bits: cord to move from # # 6 bits: cord to move to # ################################################################################ shiftedFromCords = [] for i in range(64): shiftedFromCords.append(i << 6) shiftedFlags = [] for i in NORMAL_MOVE, QUEEN_CASTLE, KING_CASTLE, ENPASSANT, \ KNIGHT_PROMOTION, BISHOP_PROMOTION, ROOK_PROMOTION, QUEEN_PROMOTION, NULL_MOVE, DROP: shiftedFlags.append(i << 12) def newMove (fromcord, tocord, flag=NORMAL_MOVE): return shiftedFlags[flag] + shiftedFromCords[fromcord] + tocord ################################################################################ # Generate all moves # ################################################################################ def genCastles (board): def generateOne (color, side, king_after, rook_after): if side == 0: castle = QUEEN_CASTLE else: castle = KING_CASTLE king = board.ini_kings[color] rook = board.ini_rooks[color][side] blocker = clearBit(clearBit(board.blocker, king), rook) stepover = fromToRay[king][king_after] | fromToRay[rook][rook_after] if not stepover & blocker: for cord in xrange(min(king,king_after), max(king,king_after)+1): if isAttacked (board, cord, 1-color): return if FILE(king) == 3 and board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): castle = QUEEN_CASTLE if castle == KING_CASTLE else KING_CASTLE return newMove (king, king_after, castle) king = board.ini_kings[board.color] wildcastle = FILE(king) == 3 and board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS) if board.color == WHITE: if board.castling & W_OO: side = 0 if wildcastle else 1 move = generateOne (WHITE, side, board.fin_kings[WHITE][side], board.fin_rooks[WHITE][side]) if move: yield move if board.castling & W_OOO: side = 1 if wildcastle else 0 move = generateOne (WHITE, side, board.fin_kings[WHITE][side], board.fin_rooks[WHITE][side]) if move: yield move else: if board.castling & B_OO: side = 0 if wildcastle else 1 move = generateOne (BLACK, side, board.fin_kings[BLACK][side], board.fin_rooks[BLACK][side]) if move: yield move if board.castling & B_OOO: side = 1 if wildcastle else 0 move = generateOne (BLACK, side, board.fin_kings[BLACK][side], board.fin_rooks[BLACK][side]) if move: yield move def genPieceMoves(board, piece, tcord): """" Used by parseSAN only to accelerate it a bit """ moves = set() friends = board.friends[board.color] notfriends = ~friends if piece == KNIGHT: knights = board.boards[board.color][KNIGHT] knightMoves = moveArray[KNIGHT] for fcord in iterBits(knights): if tcord in iterBits(knightMoves[fcord] & notfriends): moves.add(newMove(fcord, tcord)) return moves if piece == BISHOP: blocker = board.blocker bishops = board.boards[board.color][BISHOP] for fcord in iterBits(bishops): attackBoard = attack45 [fcord][ray45 [fcord] & blocker] | \ attack135[fcord][ray135[fcord] & blocker] if tcord in iterBits(attackBoard & notfriends): moves.add(newMove(fcord, tcord)) return moves if piece == ROOK: blocker = board.blocker rooks = board.boards[board.color][ROOK] for fcord in iterBits(rooks): attackBoard = attack00[fcord][ray00[fcord] & blocker] | \ attack90[fcord][ray90[fcord] & blocker] if tcord in iterBits(attackBoard & notfriends): moves.add(newMove(fcord, tcord)) return moves if piece == QUEEN: blocker = board.blocker queens = board.boards[board.color][QUEEN] for fcord in iterBits(queens): attackBoard = attack45 [fcord][ray45 [fcord] & blocker] | \ attack135[fcord][ray135[fcord] & blocker] if tcord in iterBits(attackBoard & notfriends): moves.add(newMove(fcord, tcord)) attackBoard = attack00[fcord][ray00[fcord] & blocker] | \ attack90[fcord][ray90[fcord] & blocker] if tcord in iterBits(attackBoard & notfriends): moves.add(newMove(fcord, tcord)) return moves def genAllMoves (board, drops=True): blocker = board.blocker notblocker = ~blocker enpassant = board.enpassant friends = board.friends[board.color] notfriends = ~friends enemies = board.friends[1- board.color] pawns = board.boards[board.color][PAWN] knights = board.boards[board.color][KNIGHT] bishops = board.boards[board.color][BISHOP] rooks = board.boards[board.color][ROOK] queens = board.boards[board.color][QUEEN] kings = board.boards[board.color][KING] # Knights knightMoves = moveArray[KNIGHT] for cord in iterBits(knights): for c in iterBits(knightMoves[cord] & notfriends): yield newMove(cord, c) # King kingMoves = moveArray[KING] cord = firstBit( kings ) for c in iterBits(kingMoves[cord] & notfriends): yield newMove(cord, c) # Rooks and Queens for cord in iterBits(rooks | queens): attackBoard = attack00[cord][ray00[cord] & blocker] | \ attack90[cord][ray90[cord] & blocker] for c in iterBits(attackBoard & notfriends): yield newMove(cord, c) # Bishops and Queens for cord in iterBits(bishops | queens): attackBoard = attack45 [cord][ray45 [cord] & blocker] | \ attack135[cord][ray135[cord] & blocker] for c in iterBits(attackBoard & notfriends): yield newMove(cord, c) # White pawns pawnEnemies = enemies | (enpassant != None and bitPosArray[enpassant] or 0) if board.color == WHITE: # One step movedpawns = (pawns >> 8) & notblocker # Move all pawns one step forward for cord in iterBits(movedpawns): if cord >= 56: for p in PROMOTIONS: yield newMove(cord-8, cord, p) else: #if (cord-8, cord) == (33, 41): # print repr(board) #print toString(pawns) yield newMove (cord-8, cord) # Two steps seccondrow = pawns & rankBits[1] # Get seccond row pawns movedpawns = (seccondrow >> 8) & notblocker # Move two steps forward, while movedpawns = (movedpawns >> 8) & notblocker # ensuring middle cord is clear for cord in iterBits(movedpawns): yield newMove (cord-16, cord) # Capture left capLeftPawns = pawns & ~fileBits[0] capLeftPawns = (capLeftPawns >> 7) & pawnEnemies for cord in iterBits(capLeftPawns): if cord >= 56: for p in PROMOTIONS: yield newMove(cord-7, cord, p) elif cord == enpassant: yield newMove (cord-7, cord, ENPASSANT) else: yield newMove (cord-7, cord) # Capture right capRightPawns = pawns & ~fileBits[7] capRightPawns = (capRightPawns >> 9) & pawnEnemies for cord in iterBits(capRightPawns): if cord >= 56: for p in PROMOTIONS: yield newMove(cord-9, cord, p) elif cord == enpassant: yield newMove (cord-9, cord, ENPASSANT) else: yield newMove (cord-9, cord) # Black pawns else: # One step movedpawns = (pawns << 8) & notblocker movedpawns &= 0xffffffffffffffff # contrain to 64 bits for cord in iterBits(movedpawns): if cord <= 7: for p in PROMOTIONS: yield newMove(cord+8, cord, p) else: yield newMove (cord+8, cord) # Two steps seccondrow = pawns & rankBits[6] # Get seventh row pawns # Move two steps forward, while ensuring middle cord is clear movedpawns = seccondrow << 8 & notblocker movedpawns = movedpawns << 8 & notblocker for cord in iterBits(movedpawns): yield newMove (cord+16, cord) # Capture left capLeftPawns = pawns & ~fileBits[7] capLeftPawns = capLeftPawns << 7 & pawnEnemies for cord in iterBits(capLeftPawns): if cord <= 7: for p in PROMOTIONS: yield newMove(cord+7, cord, p) elif cord == enpassant: yield newMove (cord+7, cord, ENPASSANT) else: yield newMove (cord+7, cord) # Capture right capRightPawns = pawns & ~fileBits[0] capRightPawns = capRightPawns << 9 & pawnEnemies for cord in iterBits(capRightPawns): if cord <= 7: for p in PROMOTIONS: yield newMove(cord+9, cord, p) elif cord == enpassant: yield newMove (cord+9, cord, ENPASSANT) else: yield newMove (cord+9, cord) # Castling for move in genCastles(board): yield move if drops and board.variant == CRAZYHOUSECHESS: for move in genDrops(board): yield move ################################################################################ # Generate capturing moves # ################################################################################ def genCaptures (board): blocker = board.blocker notblocker = ~blocker enpassant = board.enpassant friends = board.friends[board.color] notfriends = ~friends enemies = board.friends[1- board.color] pawns = board.boards[board.color][PAWN] knights = board.boards[board.color][KNIGHT] bishops = board.boards[board.color][BISHOP] rooks = board.boards[board.color][ROOK] queens = board.boards[board.color][QUEEN] kings = board.boards[board.color][KING] # Knights knightMoves = moveArray[KNIGHT] for cord in iterBits(knights): for c in iterBits(knightMoves[cord] & enemies): yield newMove(cord, c) # King kingMoves = moveArray[KING] cord = firstBit( kings ) for c in iterBits(kingMoves[cord] & enemies): yield newMove(cord, c) # Rooks and Queens for cord in iterBits(rooks|queens): attackBoard = attack00[cord][ray00[cord] & blocker] | \ attack90[cord][ray90[cord] & blocker] for c in iterBits(attackBoard & enemies): yield newMove(cord, c) # Bishops and Queens for cord in iterBits(bishops|queens): attackBoard = attack45 [cord][ray45 [cord] & blocker] | \ attack135[cord][ray135[cord] & blocker] for c in iterBits(attackBoard & enemies): yield newMove(cord, c) # White pawns pawnEnemies = enemies | (enpassant != None and bitPosArray[enpassant] or 0) if board.color == WHITE: # Promotes movedpawns = (pawns >> 8) & notblocker & rankBits[7] #for cord in iterBits(movedpawns): # for p in PROMOTIONS: # yield newMove(cord-8, cord, p) # Capture left capLeftPawns = pawns & ~fileBits[0] capLeftPawns = (capLeftPawns >> 7) & pawnEnemies for cord in iterBits(capLeftPawns): if cord >= 56: for p in PROMOTIONS: yield newMove(cord-7, cord, p) elif cord == enpassant: yield newMove (cord-7, cord, ENPASSANT) else: yield newMove (cord-7, cord) # Capture right capRightPawns = pawns & ~fileBits[7] capRightPawns = (capRightPawns >> 9) & pawnEnemies for cord in iterBits(capRightPawns): if cord >= 56: for p in PROMOTIONS: yield newMove(cord-9, cord, p) elif cord == enpassant: yield newMove (cord-9, cord, ENPASSANT) else: yield newMove (cord-9, cord) # Black pawns else: # One step movedpawns = pawns << 8 & notblocker & rankBits[0] #for cord in iterBits(movedpawns): # for p in PROMOTIONS: # yield newMove(cord+8, cord, p) # Capture left capLeftPawns = pawns & ~fileBits[7] capLeftPawns = capLeftPawns << 7 & pawnEnemies for cord in iterBits(capLeftPawns): if cord <= 7: for p in PROMOTIONS: yield newMove(cord+7, cord, p) elif cord == enpassant: yield newMove (cord+7, cord, ENPASSANT) else: yield newMove (cord+7, cord) # Capture right capRightPawns = pawns & ~fileBits[0] capRightPawns = capRightPawns << 9 & pawnEnemies for cord in iterBits(capRightPawns): if cord <= 7: for p in PROMOTIONS: yield newMove(cord+9, cord, p) elif cord == enpassant: yield newMove (cord+9, cord, ENPASSANT) else: yield newMove (cord+9, cord) def genNonCaptures (board): blocker = board.blocker notblocker = ~blocker enpassant = board.enpassant friends = board.friends[board.color] notfriends = ~friends enemies = board.friends[1- board.color] pawns = board.boards[board.color][PAWN] knights = board.boards[board.color][KNIGHT] bishops = board.boards[board.color][BISHOP] rooks = board.boards[board.color][ROOK] queens = board.boards[board.color][QUEEN] kings = board.boards[board.color][KING] # Knights knightMoves = moveArray[KNIGHT] for cord in iterBits(knights): for c in iterBits(knightMoves[cord] & notblocker): yield newMove(cord, c) # King kingMoves = moveArray[KING] cord = firstBit( kings ) for c in iterBits(kingMoves[cord] & notblocker): yield newMove(cord, c) # Rooks and Queens for cord in iterBits(rooks): attackBoard = attack00[cord][ray00[cord] & blocker] | \ attack90[cord][ray90[cord] & blocker] for c in iterBits(attackBoard & notblocker): yield newMove(cord, c) # Bishops and Queens for cord in iterBits(bishops): attackBoard = attack45 [cord][ray45 [cord] & blocker] | \ attack135[cord][ray135[cord] & blocker] for c in iterBits(attackBoard & notblocker): yield newMove(cord, c) # White pawns if board.color == WHITE: # One step movedpawns = (pawns >> 8) & ~rankBits[7] for cord in iterBits(movedpawns): yield newMove (cord-8, cord) # Two steps seccondrow = pawns & rankBits[1] # Get seccond row pawns movedpawns = (seccondrow >> 8) & notblocker # Move two steps forward, while movedpawns = (movedpawns >> 8) & notblocker # ensuring middle cord is clear for cord in iterBits(movedpawns): yield newMove (cord-16, cord) # Black pawns else: # One step movedpawns = pawns << 8 & notblocker & ~rankBits[0] for cord in iterBits(movedpawns): yield newMove (cord+8, cord) # Two steps seccondrow = pawns & rankBits[6] # Get seventh row pawns # Move two steps forward, while ensuring middle cord is clear movedpawns = seccondrow << 8 & notblocker movedpawns = movedpawns << 8 & notblocker for cord in iterBits(movedpawns): yield newMove (cord+16, cord) # Castling for move in genCastles(board): yield move if board.variant == CRAZYHOUSECHESS: for move in genDrops(board): yield move ################################################################################ # Generate escapes from check # ################################################################################ def genCheckEvasions (board): color = board.color opcolor = 1-color kcord = board.kings[color] kings = board.boards[color][KING] pawns = board.boards[color][PAWN] checkers = getAttacks (board, kcord, opcolor) arBoard = board.arBoard if bin(checkers).count("1") == 1: # Captures of checking pieces (except by king, which we will test later) chkcord = firstBit (checkers) b = getAttacks (board, chkcord, color) & ~kings for cord in iterBits(b): if not pinnedOnKing (board, cord, color): if arBoard[cord] == PAWN and \ (chkcord <= H1 or chkcord >= A8): for p in PROMOTIONS: yield newMove(cord, chkcord, p) else: yield newMove (cord, chkcord) # Maybe enpassant can help if board.enpassant: ep = board.enpassant if ep + (color == WHITE and -8 or 8) == chkcord: bits = moveArray[color == WHITE and BPAWN or PAWN][ep] & pawns for cord in iterBits (bits): if not pinnedOnKing (board, cord, color): yield newMove (cord, ep, ENPASSANT) # Lets block/capture the checking piece if sliders[arBoard[chkcord]]: bits = clearBit(fromToRay[kcord][chkcord], chkcord) for cord in iterBits (bits): b = getAttacks (board, cord, color) b &= ~(kings | pawns) # Add in pawn advances if color == WHITE and cord > H2: if bitPosArray[cord-8] & pawns: b |= bitPosArray[cord-8] if cord >> 3 == 3 and arBoard[cord-8] == EMPTY and \ bitPosArray[cord-16] & pawns: b |= bitPosArray[cord-16] elif color == BLACK and cord < H7: if bitPosArray[cord+8] & pawns: b |= bitPosArray[cord+8] if cord >> 3 == 4 and arBoard[cord+8] == EMPTY and \ bitPosArray[cord+16] & pawns: b |= bitPosArray[cord+16] for fcord in iterBits (b): # If the piece is blocking another attack, we cannot move it if pinnedOnKing (board, fcord, color): continue if arBoard[fcord] == PAWN and (cord > H7 or cord < A2): for p in PROMOTIONS: yield newMove(fcord, cord, p) else: yield newMove (fcord, cord) if board.variant == CRAZYHOUSECHESS: holding = board.holding[color] for piece in holding: if holding[piece] > 0: if piece == PAWN: if cord >= 56 or cord <= 7: continue yield newMove (piece, cord, DROP) # If more than one checkers, move king to get out of check if checkers: escapes = moveArray[KING][kcord] & ~board.friends[color] else: escapes = 0 for chkcord in iterBits (checkers): dir = directions[chkcord][kcord] if sliders[arBoard[chkcord]]: escapes &= ~rays[chkcord][dir] for cord in iterBits (escapes): if not isAttacked (board, cord, opcolor): yield newMove (kcord, cord) def genDrops (board): color = board.color arBoard = board.arBoard holding = board.holding[color] for piece in holding: if holding[piece] > 0: for cord, elem in enumerate(arBoard): if elem == EMPTY: if piece == PAWN: if cord >= 56 or cord <= 7: continue yield newMove(piece, cord, DROP) pychess-0.12beta3/lib/pychess/Utils/lutils/egtb_gaviota.py0000755000175000017470000002175112161415524022746 0ustar tamasusersimport os import re import sys import platform from ctypes import * from bitboard import firstBit, clearBit from lmovegen import genAllMoves, genCheckEvasions from pychess.Utils.const import * from pychess.System import conf from pychess.System.prefix import addDataPrefix, getDataPrefix from pychess.System.Log import log class TB_STATS(Structure): _fields_ = [ ( 'wdl_easy_hits' , c_ulong*2 ), ( 'wdl_hard_prob' , c_ulong*2 ), ( 'wdl_soft_prob' , c_ulong*2 ), ( 'wdl_cachesize' , c_size_t ), ( 'wdl_occupancy' , c_double ), ( 'dtm_easy_hits' , c_ulong*2 ), ( 'dtm_hard_prob' , c_ulong*2 ), ( 'dtm_soft_prob' , c_ulong*2 ), ( 'dtm_cachesize' , c_size_t ), ( 'dtm_occupancy' , c_double ), ( 'total_hits' , c_ulong*2 ), ( 'memory_hits' , c_ulong*2 ), ( 'drive_hits' , c_ulong*2 ), ( 'drive_miss' , c_ulong*2 ), ( 'bytes_read' , c_ulong*2 ), ( 'files_opened' , c_ulong ), ( 'memory_efficiency', c_double ), ] class egtb_gaviota: def __init__ (self): self.libgtb = None self.initialized = False # Get a list of files in the tablebase folder. configuredTbPath = conf.get("egtb_path", "") tbPath = configuredTbPath or getDataPrefix() try: tbPathContents = os.listdir(tbPath) except OSError, e: if configuredTbPath: log.warn("Unable to open Gaviota TB folder: %s" % repr(e)) return # Find files named *.gtb.cp# and pick the most common "#". # (This is the compression scheme; the library currently only uses one at a time.) schemeCount = [0] * 10 for filename in tbPathContents: match = re.search("\.gtb\.cp(\d)$", filename) if match: schemeCount[int(match.group(1))] += 1 compressionScheme = max(zip(schemeCount, range(10))) if compressionScheme[0] == 0: if configuredTbPath: log.warn("Could not find any Gaviota TB files in %s" % configuredTbPath) return compressionScheme = compressionScheme[1] # Locate and load the library. if not self._loadLibrary(): return self._setupFunctionPrototypes() self.pathList = self.tbpaths_init() self.pathList = self.tbpaths_add(self.pathList, tbPath) initInfo = self.tb_init(True, compressionScheme, self.pathList) self.initialized = ( self.tb_is_initialized() != 0 ) if not self.initialized: log.warn(initInfo or "Failed to initialize Gaviota EGTB library") self.pathList = self.tbpaths_done(self.pathList) return elif initInfo: log.info(initInfo) # TODO: Set up a WDL cache area once the engine can use it. self.initialized &= self.tbcache_init(4*1024*1024, 0) if not self.initialized: log.warn("Failed to initialize Gaviota EGTB cache") self.tb_done() self.pathList = self.tbpaths_done(self.pathList) return self.availability = self.tb_availability() def __del__ (self): if self.initialized: self.tb_done() self.pathList = self.tbpaths_done(self.pathList) def supports (self, size): return self.initialized and ( \ sum(size) <= 2 or \ (self.availability & (3 << (2*sum(size)-6))) != 0 ) def scoreAllMoves (self, board): result, depth = self.scoreGame(board, False, False) if result is None: return [] scores = [] gen = board.isChecked() and genCheckEvasions or genAllMoves for move in gen(board): board.applyMove(move) if not board.opIsChecked(): result, depth = self.scoreGame(board, False, False) if result is None: log.warn("An EGTB file does not have all its dependencies") board.popMove() return [] scores.append( (move, result, depth) ) board.popMove() def mateScore(mrd): if mrd[1] == DRAW: return 0 absScore = 32767 - mrd[2] if (board.color == WHITE) ^ (mrd[1] == WHITEWON): return absScore return -absScore scores.sort(key=mateScore) return scores def scoreGame(self, board, omitDepth, probeSoft): stm = board.color epsq = board.enpassant or 64 # 64 is tb_NOSQUARE castles = (board.castling >> 2 & 3) | (board.castling << 2 & 12) tbinfo = c_uint() depth = c_uint() SqArray= c_uint * 65 PcArray= c_byte * 65 pc, sq = [], [] for color in (WHITE, BLACK): sq.append(SqArray()) pc.append(PcArray()) i = 0 bb = board.friends[color] while bb: b = firstBit(bb) bb = clearBit(bb, b) sq[-1][i] = b pc[-1][i] = board.arBoard[b] i += 1 sq[-1][i] = 64 # tb_NOSQUARE, terminates the list pc[-1][i] = 0 # tb_NOPIECE, terminates the list if omitDepth and probeSoft: ok = self.tb_probe_WDL_soft(stm, epsq, castles, sq[WHITE], sq[BLACK], pc[WHITE], pc[BLACK], byref(tbinfo)) elif omitDepth and not probeSoft: ok = self.tb_probe_WDL_hard(stm, epsq, castles, sq[WHITE], sq[BLACK], pc[WHITE], pc[BLACK], byref(tbinfo)) elif not omitDepth and probeSoft: ok = self.tb_probe_soft (stm, epsq, castles, sq[WHITE], sq[BLACK], pc[WHITE], pc[BLACK], byref(tbinfo), byref(depth)) elif not omitDepth and not probeSoft: ok = self.tb_probe_hard (stm, epsq, castles, sq[WHITE], sq[BLACK], pc[WHITE], pc[BLACK], byref(tbinfo), byref(depth)) resultMap = [ DRAW, WHITEWON, BLACKWON ] if not ok or not 0 <= tbinfo.value <= 2: return None, None result = resultMap[tbinfo.value] if omitDepth or result == DRAW: depth = None else: depth = depth.value return result, depth def _loadLibrary (self): libName = "libgaviotatb.so.1.0.1" try: self.libgtb = CDLL(libName) except OSError: log.warn("Failed to load Gaviota EGTB library %s" % libName) return None return self.libgtb # Prototypes from gtb-probe.h follow. def _setupFunctionPrototypes (self): def proto(name, returnType, *args): argTypes = map(lambda x: x[0], args) argNames = map(lambda x: x[1], args) funcType = CFUNCTYPE(returnType, *argTypes) paramFlags = tuple(zip([1] * len(args), argNames)) setattr(self, name, funcType((name, self.libgtb), paramFlags)) paths_t = POINTER(c_char_p) uip = POINTER(c_uint) ucp = POINTER(c_byte) proto("tb_init" , c_char_p, (c_int, "verbosity"), (c_int, "compression_scheme"), (paths_t, "paths")) proto("tb_restart", c_char_p, (c_int, "verbosity"), (c_int, "compression_scheme"), (paths_t, "paths")) proto("tb_done", None) proto("tb_probe_hard", c_int, (c_uint, "stm"), (c_uint, "epsq"), (c_uint, "castles"), (uip, "wSQ"), (uip, "bSQ"), (ucp, "wPC"), (ucp, "bPC"), (uip, "tbinfo"), (uip, "plies")) proto("tb_probe_soft", c_int, (c_uint, "stm"), (c_uint, "epsq"), (c_uint, "castles"), (uip, "wSQ"), (uip, "bSQ"), (ucp, "wPC"), (ucp, "bPC"), (uip, "tbinfo"), (uip, "plies")) proto("tb_probe_WDL_hard", c_int, (c_uint, "stm"), (c_uint, "epsq"), (c_uint, "castles"), (uip, "wSQ"), (uip, "bSQ"), (ucp, "wPC"), (ucp, "bPC"), (uip, "tbinfo")) proto("tb_probe_WDL_soft", c_int, (c_uint, "stm"), (c_uint, "epsq"), (c_uint, "castles"), (uip, "wSQ"), (uip, "bSQ"), (ucp, "wPC"), (ucp, "bPC"), (uip, "tbinfo")) proto("tb_is_initialized", c_int) proto("tb_availability", c_uint) proto("tb_indexmemory", c_size_t) proto("tbcache_init" , c_int, (c_size_t, "cache_mem"), (c_int, "wdl_fraction")) proto("tbcache_restart", c_int, (c_size_t, "cache_mem"), (c_int, "wdl_fraction")) proto("tbcache_done", None) proto("tbcache_is_on", c_int) proto("tbcache_flush", None) proto("tbstats_reset", None) proto("tbstats_get", None, (POINTER(TB_STATS), "stats")) proto("tbpaths_init", paths_t) proto("tbpaths_add", paths_t, (paths_t, "ps"), (c_char_p, "newpath")) proto("tbpaths_done", paths_t, (paths_t, "ps")) proto("tbpaths_getmain", c_char_p) pychess-0.12beta3/lib/pychess/Utils/lutils/lmove.py0000755000175000017470000005050212176543573021445 0ustar tamasusers# -*- coding: UTF-8 -*- from ldata import * from bitboard import firstBit from validator import validateMove from pychess.Utils.const import * from pychess.Utils.repr import reprPiece, localReprSign from pychess.Utils.lutils.lmovegen import genAllMoves, genPieceMoves, newMove def RANK (cord): return cord >> 3 def FILE (cord): return cord & 7 def TCORD (move): return move & 63 def FCORD (move): return move >> 6 & 63 def FLAG (move): return move >> 12 def PROMOTE_PIECE (flag): return flag -2 def FLAG_PIECE (piece): return piece +2 class ParsingError (Exception): """ Please raise this with a 3-tupple: (move, reason, board.asFen()) The reason should be usable in the context: 'Move was not parseable because %s' % reason """ pass ################################################################################ # parseAny # ################################################################################ def parseAny (board, algnot): type = determineAlgebraicNotation (algnot) if type == SAN: return parseSAN (board, algnot) if type == AN: return parseAN (board, algnot) if type == LAN: return parseLAN (board, algnot) return parseFAN (board, algnot) def determineAlgebraicNotation (algnot): upnot = algnot.upper() if upnot in ("O-O", "O-O-O", "0-0", "0-0-0"): return SAN # Test for e2-e4 if "-" in algnot: return LAN # Test for b4xc5 if "x" in algnot and algnot.split('x')[0] in cordDic: return LAN # Test for e2e4 or a7a8q or a7a8=q if algnot[:2] in cordDic and algnot[2:4] in cordDic: return AN if algnot[0] in FAN_PIECES[WHITE] or algnot[0] in FAN_PIECES[BLACK]: return FAN return SAN ################################################################################ # listToSan # ################################################################################ def listToSan (board, moves): # Work on a copy to ensure we don't break things board = board.clone() sanmoves = [] for move in moves: san = toSAN (board, move) sanmoves.append(san) board.applyMove(move) return sanmoves ################################################################################ # listToMoves # ################################################################################ def listToMoves (board, movstrs, type=None, testvalidate=False, ignoreErrors=False): # Work on a copy to ensure we don't break things board = board.clone() moves = [] for mstr in movstrs: try: if type == None: move = parseAny (board, mstr) elif type == SAN: move = parseSAN (board, mstr) elif type == AN: move = parseAN (board, mstr) elif type == LAN: move = parseLAN (board, mstr) except ParsingError: if ignoreErrors: break raise if testvalidate: if not validateMove (board, move): if not ignoreErrors: raise ParsingError, (mstr, 'Validation', board.asFen()) break moves.append(move) board.applyMove(move) return moves ################################################################################ # toSan # ################################################################################ def toSAN (board, move, localRepr=False): """ Returns a Short/Abbreviated Algebraic Notation string of a move The board should be prior to the move """ # Has to be importet at calltime, as lmovegen imports lmove #from lmovegen import genAllMoves def check_or_mate(): board_clone = board.clone() board_clone.applyMove(move) sign = "" if board_clone.isChecked(): for altmove in genAllMoves (board_clone): board_clone.applyMove(altmove) if board_clone.opIsChecked(): board_clone.popMove() continue sign = "+" break else: sign = "#" return sign flag = move >> 12 if flag == NULL_MOVE: return "--" fcord = (move >> 6) & 63 if flag == KING_CASTLE: return "O-O%s" % check_or_mate() elif flag == QUEEN_CASTLE: return "O-O-O%s" % check_or_mate() tcord = move & 63 fpiece = fcord if flag == DROP else board.arBoard[fcord] tpiece = board.arBoard[tcord] part0 = "" part1 = "" if fpiece != PAWN or flag == DROP: if localRepr: part0 += localReprSign[fpiece] else: part0 += reprSign[fpiece] part1 = reprCord[tcord] if flag == DROP: return "%s@%s%s" % (part0, part1, check_or_mate()) if not fpiece in (PAWN, KING): xs = [] ys = [] board_clone = board.clone() for altmove in genAllMoves(board_clone, drops=False): mfcord = FCORD(altmove) if board_clone.arBoard[mfcord] == fpiece and \ mfcord != fcord and \ TCORD(altmove) == tcord: board_clone.applyMove(altmove) if not board_clone.opIsChecked(): xs.append(FILE(mfcord)) ys.append(RANK(mfcord)) board_clone.popMove() x = FILE(fcord) y = RANK(fcord) if ys or xs: if y in ys and not x in xs: # If we share rank with another piece, but not file part0 += reprFile[x] elif x in xs and not y in ys: # If we share file with another piece, but not rank part0 += reprRank[y] elif x in xs and y in ys: # If we share both file and rank with other pieces part0 += reprFile[x] + reprRank[y] else: # If we doesn't share anything, it is standard to put file part0 += reprFile[x] if tpiece != EMPTY or flag == ENPASSANT: part1 = "x" + part1 if fpiece == PAWN: part0 += reprFile[FILE(fcord)] notat = part0 + part1 if flag in PROMOTIONS: if localRepr: notat += "="+localReprSign[PROMOTE_PIECE(flag)] else: notat += "="+reprSign[PROMOTE_PIECE(flag)] return "%s%s" % (notat, check_or_mate()) ################################################################################ # parseSan # ################################################################################ def parseSAN (board, san): """ Parse a Short/Abbreviated Algebraic Notation string """ notat = san color = board.color if notat == "--": return newMove(board.kings[color], board.kings[color], NULL_MOVE) if notat[-1] in ("+", "#"): notat = notat[:-1] # If '++' was used in place of # if notat[-1] == "+": notat = notat[:-1] flag = NORMAL_MOVE # If last char is a piece char, we assue it the promote char c = notat[-1] if c in ("Q", "R", "B", "N", "q", "r", "b", "n"): c = c.lower() flag = chr2Sign[c] + 2 if notat[-2] == "=": notat = notat[:-2] else: notat = notat[:-1] if len(notat) < 2: raise ParsingError, (san, _("the move needs a piece and a cord"), board.asFen()) if notat[0] in "O0o": fcord = board.ini_kings[color] flag = KING_CASTLE if notat == "O-O" or notat == "0-0" or notat == "o-o" else QUEEN_CASTLE side = flag -QUEEN_CASTLE if FILE(fcord) == 3 and board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): side = 0 if side == 1 else 1 if board.variant == FISCHERRANDOMCHESS: tcord = board.ini_rooks[color][side] else: tcord = board.fin_kings[color][side] return newMove (fcord, tcord, flag) # LAN is not allowed in pgn spec, but sometimes it occures if "-" in notat: notat = notat.replace("-", "") if "@" in notat: tcord = cordDic[notat[-2:]] if notat[0].islower(): # Sjeng-ism piece = chr2Sign[notat[0]] else: piece = chrU2Sign[notat[0]] return newMove(piece, tcord, DROP) if notat[0] in ("Q", "R", "B", "K", "N"): piece = chrU2Sign[notat[0]] notat = notat[1:] else: piece = PAWN if notat[-1] in ("1", "8") and flag == NORMAL_MOVE: raise ParsingError, ( san, _("promotion move without promoted piece is incorrect"), board.asFen()) if "x" in notat: notat, tcord = notat.split("x") if not tcord in cordDic: raise ParsingError, ( san, _("the captured cord (%s) is incorrect") % tcord, board.asFen()) tcord = cordDic[tcord] if piece == PAWN: # If a pawn is attacking an empty cord, we assue it an enpassant if board.arBoard[tcord] == EMPTY: flag = ENPASSANT else: if not notat[-2:] in cordDic: raise ParsingError, ( san, "the end cord (%s) is incorrect" % notat[-2:], board.asFen()) tcord = cordDic[notat[-2:]] notat = notat[:-2] if piece == KING: return newMove(board.kings[color], tcord, flag) # If there is any extra location info, like in the move Bexd1 or Nh3f4 we # want to know frank = None ffile = None if notat and notat[0] in reprRank: frank = int(notat[0])-1 notat = notat[1:] if notat and notat[0] in reprFile: ffile = ord(notat[0]) - ord("a") notat = notat[1:] if notat and notat[0] in reprRank: frank = int(notat[0])-1 notat = notat[1:] # we know all we want return newMove(frank*8+ffile, tcord, flag) if piece == PAWN: if (ffile is not None) and ffile != FILE(tcord): # capture if color == WHITE: fcord = tcord-7 if ffile > FILE(tcord) else tcord-9 else: fcord = tcord+7 if ffile < FILE(tcord) else tcord+9 else: if color == WHITE: pawns = board.boards[WHITE][PAWN] fcord = tcord-16 if RANK(tcord)==3 and not (pawns & fileBits[FILE(tcord)] & rankBits[2]) else tcord-8 else: pawns = board.boards[BLACK][PAWN] fcord = tcord+16 if RANK(tcord)==4 and not (pawns & fileBits[FILE(tcord)] & rankBits[5]) else tcord+8 return newMove(fcord, tcord, flag) else: if board.pieceCount[color][piece] == 1: # we have only one from this kind if piece, so: fcord = firstBit(board.boards[color][piece]) return newMove(fcord, tcord, flag) else: # We find all pieces who could have done it. (If san was legal, there should # never be more than one) moves = genPieceMoves(board, piece, tcord) if len(moves) == 1: return moves.pop() else: for move in moves: f = FCORD(move) if frank != None and frank != RANK(f): continue if ffile != None and ffile != FILE(f): continue board_clone = board.clone() board_clone.applyMove(move) if board_clone.opIsChecked(): continue return move errstring = "no %s is able to move to %s" % (reprPiece[piece], reprCord[tcord]) raise ParsingError, (san, errstring, board.asFen()) ################################################################################ # toLan # ################################################################################ def toLAN (board, move): """ Returns a Long/Expanded Algebraic Notation string of a move board should be prior to the move """ fcord = FCORD(move) tcord = TCORD(move) s = "" if board.arBoard[fcord] != PAWN: s = reprSign[board.arBoard[fcord]] s += reprCord[FCORD(move)] if board.arBoard[tcord] == EMPTY: s += "-" else: s += "x" s += reprCord[tcord] flag = FLAG(move) if flag in PROMOTIONS: s += "=" + reprSign[PROMOTE_PIECE(flag)] return s ################################################################################ # parseLan # ################################################################################ def parseLAN (board, lan): """ Parse a Long/Expanded Algebraic Notation string """ # To parse LAN pawn moves like "e2-e4" as SAN moves, we have to remove a few # fields if len(lan) == 5: if "x" in lan: # e4xd5 -> exd5 return parseSAN (board, lan[0]+lan[3:]) else: # e2-e4 -> e4 return parseSAN (board, lan[3:]) # We want to use the SAN parser for LAN moves like "Nb1-c3" or "Rd3xd7" # The san parser should be able to handle most stuff, as long as we remove # the slash if not lan.upper().startswith("O-O"): lan = lan.replace("-","") return parseSAN (board, lan) ################################################################################ # toAN # ################################################################################ def toAN (board, move, short=False, castleNotation=CASTLE_SAN): """ Returns a Algebraic Notation string of a move board should be prior to the move short -- returns the short variant, e.g. f7f8q rather than f7f8=Q """ fcord = (move >> 6) & 63 tcord = move & 63 flag = move >> 12 if flag in (KING_CASTLE, QUEEN_CASTLE): if castleNotation == CASTLE_SAN: return flag == KING_CASTLE and "O-O" or "O-O-O" elif castleNotation == CASTLE_KR: rooks = board.ini_rooks[board.color] tcord = rooks[flag == KING_CASTLE and 1 or 0] # No treatment needed for CASTLE_KK if flag == DROP: s = "%s@%s" % (reprSign[fcord], reprCord[tcord]) else: s = reprCord[fcord] + reprCord[tcord] if flag in PROMOTIONS: if short: s += reprSign[PROMOTE_PIECE(flag)].lower() else: s += "=" + reprSign[PROMOTE_PIECE(flag)] return s ################################################################################ # parseAN # ################################################################################ def parseAN (board, an): """ Parse an Algebraic Notation string """ if not 4 <= len(an) <= 6: raise ParsingError, (an, "the move must be 4 or 6 chars long", board.asFen()) try: fcord = cordDic[an[:2]] tcord = cordDic[an[2:4]] except KeyError, e: raise ParsingError, (an, "the cord (%s) is incorrect" % e.args[0], board.asFen()) flag = NORMAL_MOVE if len(an) > 4 and not an[-1] in ("Q", "R", "B", "N", "q", "r", "b", "n"): raise ParsingError, (an, "invalid promoted piece", board.asFen()) if len(an) == 5: #The a7a8q variant flag = chr2Sign[an[4].lower()] + 2 elif len(an) == 6: #The a7a8=q variant flag = chr2Sign[an[5].lower()] + 2 elif board.arBoard[fcord] == KING: if board.variant == FISCHERRANDOMCHESS and board.arBoard[tcord] == ROOK: color = board.color friends = board.friends[color] if bitPosArray[tcord] & friends: if board.ini_rooks[color][0] == tcord: flag = QUEEN_CASTLE else: flag = KING_CASTLE elif fcord - tcord == 2: flag = QUEEN_CASTLE elif fcord - tcord == -2: flag = KING_CASTLE else: flag = NORMAL_MOVE elif board.arBoard[fcord] == PAWN and board.arBoard[tcord] == EMPTY and \ FILE(fcord) != FILE(tcord) and RANK(fcord) != RANK(tcord): flag = ENPASSANT elif board.arBoard[fcord] == PAWN and an[3] in ("1", "8"): raise ParsingError, ( an, _("promotion move without promoted piece is incorrect"), board.asFen()) return newMove (fcord, tcord, flag) ################################################################################ # toFAN # ################################################################################ san2WhiteFanDic = { ord(u"K"): FAN_PIECES[WHITE][KING], ord(u"Q"): FAN_PIECES[WHITE][QUEEN], ord(u"R"): FAN_PIECES[WHITE][ROOK], ord(u"B"): FAN_PIECES[WHITE][BISHOP], ord(u"N"): FAN_PIECES[WHITE][KNIGHT], ord(u"+"): u"†", ord(u"#"): u"‡" } san2BlackFanDic = { ord(u"K"): FAN_PIECES[BLACK][KING], ord(u"Q"): FAN_PIECES[BLACK][QUEEN], ord(u"R"): FAN_PIECES[BLACK][ROOK], ord(u"B"): FAN_PIECES[BLACK][BISHOP], ord(u"N"): FAN_PIECES[BLACK][KNIGHT], ord(u"+"): u"†", ord(u"#"): u"‡" } def toFAN (board, move): """ Returns a Figurine Algebraic Notation string of a move """ san = unicode(toSAN (board, move)) if board.color == WHITE: return san.translate(san2WhiteFanDic) else: return san.translate(san2BlackFanDic) ################################################################################ # parseFAN # ################################################################################ fan2SanDic = {} for k, v in san2WhiteFanDic.iteritems(): fan2SanDic[ord(v)] = unichr(k) for k, v in san2BlackFanDic.iteritems(): fan2SanDic[ord(v)] = unichr(k) def parseFAN (board, fan): """ Parse a Figurine Algebraic Notation string """ san = fan.translate(fan2SanDic) return parseSAN (board, san) ################################################################################ # toPolyglot # ################################################################################ def toPolyglot (board, move): """ Returns a 16-bit Polyglot-format move board should be prior to the move """ pg = move & 4095 if FLAG(move) in PROMOTIONS: pg |= ( PROMOTE_PIECE(FLAG(move)) - 1 ) << 12 elif FLAG(move) == QUEEN_CASTLE: pg = (pg & 4032) | board.ini_rooks[board.color][0] elif FLAG(move) == KING_CASTLE: pg = (pg & 4032) | board.ini_rooks[board.color][1] return pg ################################################################################ # parsePolyglot # ################################################################################ def parsePolyglot (board, pg): """ Parse a 16-bit Polyglot-format move """ tcord = TCORD(pg) fcord = FCORD(pg) flag = NORMAL_MOVE if pg >> 12: flag = FLAG_PIECE( (pg >> 12) + 1 ) elif board.arBoard[fcord] == KING: if board.arBoard[tcord] == ROOK: color = board.color friends = board.friends[color] if bitPosArray[tcord] & friends: if board.ini_rooks[color][0] == tcord: flag = QUEEN_CASTLE if board.variant == NORMALCHESS: # Want e1c1/e8c8 tcord += 2 else: flag = KING_CASTLE if board.variant == NORMALCHESS: # Want e1g1/e8g8 tcord -= 1 elif board.arBoard[fcord] == PAWN and board.arBoard[tcord] == EMPTY and \ FILE(fcord) != FILE(tcord) and RANK(fcord) != RANK(tcord): flag = ENPASSANT return newMove (fcord, tcord, flag) pychess-0.12beta3/lib/pychess/Utils/lutils/lsearch.py0000755000175000017470000002340012176405755021740 0ustar tamasusersfrom time import time from random import random from heapq import heappush, heappop from lmovegen import genAllMoves, genCheckEvasions, genCaptures from pychess.Utils.const import * from pychess.Utils.Move import Move from leval import evaluateComplete from lsort import getCaptureValue, getMoveValue from lmove import toSAN from ldata import MATE_VALUE, VALUE_AT_PLY from TranspositionTable import TranspositionTable import ldraw TIMECHECK_FREQ = 500 table = TranspositionTable(32 * 1024 * 1024) skipPruneChance = 0 searching = False nodes = 0 endtime = 0 timecheck_counter = TIMECHECK_FREQ egtb = None def alphaBeta (board, depth, alpha=-MATE_VALUE, beta=MATE_VALUE, ply=0): """ This is a alphabeta/negamax/quiescent/iterativedeepend search algorithm Based on moves found by the validator.py findmoves2 function and evaluated by eval.py. The function recalls itself "depth" times. If the last move in range depth was a capture, it will continue calling itself, only searching for captures. It returns a tuple of * a list of the path it found through the search tree (last item being the deepest) * a score of your standing the the last possition. """ global searching, nodes, table, endtime, timecheck_counter foundPv = False hashf = hashfALPHA amove = [] ############################################################################ # Mate distance pruning ############################################################################ MATED = -MATE_VALUE+ply MATE_IN_1 = MATE_VALUE-ply-1 if beta <= MATED: return [], MATED if beta >= MATE_IN_1: beta = MATE_IN_1 if alpha >= beta: return [], MATE_IN_1 ############################################################################ # Look in the end game table ############################################################################ global egtb if egtb: tbhits = egtb.scoreAllMoves(board) if tbhits: move, state, steps = tbhits[0] if state == DRAW: score = 0 elif board.color == WHITE: if state == WHITEWON: score = MATE_VALUE-steps else: score = -MATE_VALUE+steps else: if state == WHITEWON: score = -MATE_VALUE+steps else: score = MATE_VALUE-steps return [move.move], score ########################################################################### # We don't save repetition in the table, so we need to test draw before # # table. # ########################################################################### # We don't adjudicate draws. Clients may have different rules for that. if ply > 0: if ldraw.test(board): return [], 0 ############################################################################ # Look up transposition table # ############################################################################ # TODO: add holder to hash if board.variant != CRAZYHOUSECHESS: if ply == 0: table.newSearch() table.setHashMove (depth, -1) probe = table.probe (board, depth, alpha, beta) hashmove = None if probe: move, score, hashf = probe score = VALUE_AT_PLY(score, ply) hashmove = move table.setHashMove (depth, move) if hashf == hashfEXACT: return [move], score elif hashf == hashfBETA: beta = min(score, beta) elif hashf == hashfALPHA: alpha = score if hashf != hashfBAD and alpha >= beta: return [move], score ############################################################################ # Cheking the time # ############################################################################ timecheck_counter -= 1 if timecheck_counter == 0: if time() > endtime: searching = False timecheck_counter = TIMECHECK_FREQ ############################################################################ # Break itereation if interupted or if times up # ############################################################################ if not searching: return [], -evaluateComplete(board, 1-board.color) ############################################################################ # Go for quiescent search # ############################################################################ isCheck = board.isChecked() if depth <= 0: if isCheck: # Being in check is that serious, that we want to take a deeper look depth += 1 else: mvs, val = quiescent(board, alpha, beta, ply) return mvs, val ############################################################################ # Find and sort moves # ############################################################################ if isCheck: moves = [(-getMoveValue(board,table,depth,m),m) for m in genCheckEvasions(board)] else: moves = [(-getMoveValue(board,table,depth,m),m) for m in genAllMoves(board)] moves.sort() # This is needed on checkmate catchFailLow = None ############################################################################ # Loop moves # ############################################################################ for moveValue, move in moves: nodes += 1 board.applyMove(move) if not isCheck: if board.opIsChecked(): board.popMove() continue catchFailLow = move if foundPv: mvs, val = alphaBeta (board, depth-1, -alpha-1, -alpha, ply+1) val = -val if val > alpha and val < beta: mvs, val = alphaBeta (board, depth-1, -beta, -alpha, ply+1) val = -val else: mvs, val = alphaBeta (board, depth-1, -beta, -alpha, ply+1) val = -val board.popMove() if val > alpha: if val >= beta: if searching and move>>12 != DROP: table.record (board, move, VALUE_AT_PLY(beta, -ply), hashfBETA, depth) # We don't want to use our valuable killer move spaces for # captures and promotions, as these are searched early anyways. if board.arBoard[move&63] == EMPTY and \ not move>>12 in PROMOTIONS: table.addKiller (depth, move) table.addButterfly(move, depth) return [move]+mvs, beta alpha = val amove = [move]+mvs hashf = hashfEXACT foundPv = True ############################################################################ # Return # ############################################################################ if amove: if searching: table.record (board, amove[0], VALUE_AT_PLY(alpha, -ply), hashf, depth) if board.arBoard[amove[0]&63] == EMPTY: table.addKiller (depth, amove[0]) return amove, alpha if catchFailLow: if searching: table.record (board, catchFailLow, VALUE_AT_PLY(alpha, -ply), hashf, depth) return [catchFailLow], alpha # If no moves were found, this must be a mate or stalemate if isCheck: return [], MATED return [], 0 def quiescent (board, alpha, beta, ply): if skipPruneChance and random() < skipPruneChance: return [], (alpha+beta)/2 global nodes if ldraw.test(board): return [], 0 isCheck = board.isChecked() # no stand-pat when in check if not isCheck: value = evaluateComplete(board, board.color) if value >= beta: return [], beta if value > alpha: alpha = value amove = [] heap = [] if isCheck: someMove = False for move in genCheckEvasions(board): someMove = True # Heap.append is fine, as we don't really do sorting on the few moves heap.append((0, move)) if not someMove: return [], -MATE_VALUE+ply else: for move in genCaptures (board): heappush(heap, (-getCaptureValue (board, move), move)) while heap: nodes += 1 v, move = heappop(heap) board.applyMove(move) if not isCheck: if board.opIsChecked(): board.popMove() continue mvs, val = quiescent(board, -beta, -alpha, ply+1) val = -val board.popMove() if val >= beta: return [move]+mvs, beta if val > alpha: alpha = val amove = [move]+mvs if amove: return amove, alpha else: return [], alpha def enableEGTB(): from pychess.Utils.EndgameTable import EndgameTable global egtb egtb = EndgameTable() pychess-0.12beta3/lib/pychess/Utils/lutils/__init__.py0000755000175000017470000000000012161415524022032 0ustar tamasuserspychess-0.12beta3/lib/pychess/Utils/lutils/validator.py0000755000175000017470000001512212176032527022277 0ustar tamasusersfrom pychess.Utils.const import * from pychess.Utils.lutils.attack import isAttacked from pychess.Utils.lutils.bitboard import bitPosArray, clearBit from pychess.Utils.lutils.ldata import moveArray, fromToRay from pychess.Utils.lutils.lmovegen import genCastles ################################################################################ # Validate move # ################################################################################ def validateMove (board, move): flag = move >> 12 fcord = (move >> 6) & 63 tcord = move & 63 if flag == DROP: tpiece = board.arBoard[tcord] if tpiece != EMPTY: return False else: if fcord == PAWN: rank = tcord >> 3 return rank > 0 and rank < 7 else: return True fpiece = board.arBoard[fcord] # Empty from square if fpiece == EMPTY: return False color = board.color friends = board.friends[color] # Piece is not right color if not bitPosArray[fcord] & friends: return False # TO square is a friendly piece, so illegal move if bitPosArray[tcord] & board.friends[color]: if board.variant == FISCHERRANDOMCHESS: if not flag in (KING_CASTLE, QUEEN_CASTLE): return False else: return False # If promotion move, piece must be pawn if (flag in PROMOTIONS or flag == ENPASSANT) and fpiece != PAWN: return False # If enpassant, then the enpassant square must be correct if flag == ENPASSANT and tcord != board.enpassant: return False # If castling, then make sure its the king if flag in (KING_CASTLE, QUEEN_CASTLE) and fpiece != KING: return False blocker = board.blocker tpiece = board.arBoard[tcord] # Pawn moves need to be handled specially if fpiece == PAWN: enemies = board.friends[1-color] if flag == ENPASSANT: enemies |= bitPosArray[board.enpassant] if color == WHITE: if not moveArray[PAWN][fcord] & bitPosArray[tcord] & enemies and \ not (tcord - fcord == 8 and tpiece == EMPTY) and \ not (tcord - fcord == 16 and fcord >> 3 == 1 and \ not fromToRay[fcord][tcord] & blocker): return False else: if not moveArray[BPAWN][fcord] & bitPosArray[tcord] & enemies and \ not (tcord - fcord == -8 and tpiece == EMPTY) and \ not (tcord - fcord == -16 and fcord >> 3 == 6 and \ not fromToRay[fcord][tcord] & blocker): return False # King moves are also special, especially castling elif fpiece == KING: if board.variant == FISCHERRANDOMCHESS: from pychess.Variants.fischerandom import frc_castling_move if not (moveArray[fpiece][fcord] & bitPosArray[tcord] and \ not flag in (KING_CASTLE, QUEEN_CASTLE)) and \ not frc_castling_move(board, fcord, tcord, flag): return False elif board.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): if not (moveArray[fpiece][fcord] & bitPosArray[tcord] and \ not flag in (KING_CASTLE, QUEEN_CASTLE)) and \ not move in genCastles(board): return False else: if not (moveArray[fpiece][fcord] & bitPosArray[tcord] and \ not flag in (KING_CASTLE, QUEEN_CASTLE)) and \ not move in genCastles(board): return False # Other pieces are more easy else: if not moveArray[fpiece][fcord] & bitPosArray[tcord]: return False # If there is a blocker on the path from fcord to tcord, illegal move if sliders [fpiece]: if clearBit(fromToRay[fcord][tcord], tcord) & blocker: return False return True ################################################################################ # Validate board # ################################################################################ def validateBoard (board): """ Check the board to make sure that its valid. Some things to check are a. Both sides have max 1 king and max 8 pawns b. Side not on the move must not be in check. c. If en passant square is set, check it is possible. d. Check if castling status are all correct. """ # # TODO: This functions hasn't yet been translated from C to Python # Not fully at least # # You must place both a Black King and White King on the board if nbits (board.b[WHITE][KING]) != 1: return False if nbits (board.b[BLACK][KING]) != 1: return False # You can't place a pawn on the eight rank if board.b[WHITE][PAWN] & rankBits[7]: return False if board.b[BLACK][PAWN] & rankBits[0]: return False # You can't set up a position in which a side has more than eight pawns if nbits(board.b[WHITE][PAWN]) > 8: return False if nbits(board.b[BLACK][PAWN]) > 8: return False # You can't set up a position in which one side's King is in check and the # other side is to move (otherwise it's a position in which mate has # already been delivered) side = board.side; xside = 1^side; if SqAtakd (board.king[xside], side): return False if board.ep > -1: sq = board.ep + (xside == WHITE and 8 or -8) if not BitPosArray[sq] & board.b[xside][PAWN]: return False # TODO: use self.ini_rooks and self.ini_kings # TODO: instead of hardcoded E1/H1 etc. if board.flag & WKINGCASTLE: if not(BitPosArray[E1] & board.b[WHITE][KING]): return False if not(BitPosArray[H1] & board.b[WHITE][ROOK]): return False if board.flag & WQUEENCASTLE: if not(BitPosArray[E1] & board.b[WHITE][KING]): return False if not(BitPosArray[A1] & board.b[WHITE][ROOK]): return False if board.flag & BKINGCASTLE: if not(BitPosArray[E8] & board.b[BLACK][KING]): return False if not(BitPosArray[H8] & board.b[BLACK][ROOK]): return False if board.flag & BQUEENCASTLE: if not(BitPosArray[E8] & board.b[BLACK][KING]): return False if not(BitPosArray[A8] & board.b[BLACK][ROOK]): return False return True pychess-0.12beta3/lib/pychess/Utils/lutils/LBoard.py0000755000175000017470000007002412176546503021463 0ustar tamasusersfrom pychess.Utils.const import * from pychess.Utils.repr import reprColor from ldata import * from attack import isAttacked from bitboard import * from PolyglotHash import * ################################################################################ # FEN # ################################################################################ # This will cause applyFen to raise an exception, if halfmove clock and fullmove # number is not specified STRICT_FEN = False ################################################################################ # LBoard # ################################################################################ class LBoard: ini_kings = (E1, E8) ini_rooks = ((A1, H1), (A8, H8)) # Final positions of castled kings and rooks fin_kings = ((C1,G1),(C8,G8)) fin_rooks = ((D1,F1),(D8,F8)) holding = ({PAWN:0, KNIGHT:0, BISHOP:0, ROOK:0, QUEEN:0}, {PAWN:0, KNIGHT:0, BISHOP:0, ROOK:0, QUEEN:0}) def __init__ (self, variant=NORMALCHESS): self.variant = variant self.nags = [] # children can contain comments and variations # variations are lists of lboard objects self.children = [] # the next and prev lboard objects in the variation list self.next = None self.prev = None # The high level owner Board (with Piece objects) in gamemodel self.pieceBoard = None # Last player's remaining time in seconds self.clock = None @property def lastMove (self): return self.hist_move[-1] if len(self.hist_move) > 0 else None def repetitionCount (self, drawThreshold=3): rc = 1 for ply in xrange(4, 1+min(len(self.hist_hash), self.fifty), 2): if self.hist_hash[-ply] == self.hash: rc += 1 if rc >= drawThreshold: break return rc def iniCrazy(self): self.promoted = [0]*64 self.capture_promoting = False self.hist_capture_promoting = [] self.holding = ({PAWN:0, KNIGHT:0, BISHOP:0, ROOK:0, QUEEN:0}, {PAWN:0, KNIGHT:0, BISHOP:0, ROOK:0, QUEEN:0}) def applyFen (self, fenstr): """ Applies the fenstring to the board. If the string is not properly written a SyntaxError will be raised, having its message ending in Pos(%d) specifying the string index of the problem. if an error is found, no changes will be made to the board. """ assert not hasattr(self, "boards"), "The applyFen() method can be used on new LBoard objects only!" # Set board to empty on Black's turn (which Polyglot-hashes to 0) self.blocker = 0 self.friends = [0]*2 self.kings = [-1]*2 self.boards = [[0]*7 for i in range(2)] self.enpassant = None # cord which can be captured by enpassant or None self.color = BLACK self.castling = 0 # The castling availability in the position self.hasCastled = [False, False] self.fifty = 0 # A ply counter for the fifty moves rule self.plyCount = 0 self.checked = None self.opchecked = None self.arBoard = [0]*64 self.hash = 0 self.pawnhash = 0 # Data from the position's history: self.hist_move = [] # The move that was applied to get the position self.hist_tpiece = [] # The piece the move captured, == EMPTY for normal moves self.hist_enpassant = [] self.hist_castling = [] self.hist_hash = [] self.hist_fifty = [] self.hist_checked = [] self.hist_opchecked = [] # piece counts self.pieceCount = [[0]*6, [0]*6] # initial cords of rooks and kings for castling in Chess960 if self.variant == FISCHERRANDOMCHESS: self.ini_kings = [None, None] self.ini_rooks = ([None, None], [None, None]) elif self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): self.ini_kings = [None, None] self.fin_kings = ([None, None], [None, None]) self.fin_rooks = ([None, None], [None, None]) elif self.variant == CRAZYHOUSECHESS: self.iniCrazy() # Get information parts = fenstr.split() if len(parts) > 6: raise SyntaxError, "Can't have more than 6 fields in fenstr. "+ \ "Pos(%d)" % fenstr.find(parts[6]) if STRICT_FEN and len(parts) != 6: raise SyntaxError, "Needs 6 fields in fenstr. Pos(%d)" % len(fenstr) elif len(parts) < 4: raise SyntaxError, "Needs at least 6 fields in fenstr. Pos(%d)" % \ len(fenstr) elif len(parts) >= 6: pieceChrs, colChr, castChr, epChr, fiftyChr, moveNoChr = parts[:6] elif len(parts) == 5: pieceChrs, colChr, castChr, epChr, fiftyChr = parts moveNoChr = "1" else: pieceChrs, colChr, castChr, epChr = parts fiftyChr = "0" moveNoChr = "1" # Try to validate some information # TODO: This should be expanded and perhaps moved slashes = len([c for c in pieceChrs if c == "/"]) if slashes < 7: raise SyntaxError, "Needs 7 slashes in piece placement field. "+ \ "Pos(%d)" % fenstr.rfind("/") if not colChr.lower() in ("w", "b"): raise SyntaxError, "Active color field must be one of w or b. "+ \ "Pos(%d)" % fenstr.find(len(pieceChrs), colChr) if epChr != "-" and not epChr in cordDic: raise SyntaxError, ("En passant cord %s is not legal. "+ \ "Pos(%d) - %s") % (epChr, fenstr.rfind(epChr), \ fenstr) if (not 'k' in pieceChrs) or (not 'K' in pieceChrs): raise SyntaxError, "FEN needs at least 'k' and 'K' in piece placement field." # Parse piece placement field promoted = False for r, rank in enumerate(pieceChrs.split("/")): cord = (7-r)*8 for char in rank: if r > 7: # After the 8.rank BFEN can contain holdings (captured pieces) # "~" after a piece letter denotes promoted piece if r == 8 and self.variant == CRAZYHOUSECHESS: color = char.islower() and BLACK or WHITE piece = reprSign.index(char.upper()) self.holding[color][piece] += 1 continue else: break if char.isdigit(): cord += int(char) elif char == "~": promoted = True else: color = char.islower() and BLACK or WHITE piece = reprSign.index(char.upper()) self._addPiece(cord, piece, color) if piece != KING: self.pieceCount[color][piece] += 1 if self.variant == CRAZYHOUSECHESS and promoted: self.promoted[cord] = 1 promoted = False cord += 1 if self.variant == FISCHERRANDOMCHESS: # Save ranks fo find outermost rooks # if KkQq was used in castling rights if r == 0: rank8 = rank elif r == 7: rank1 = rank # Parse active color field if colChr.lower() == "w": self.setColor (WHITE) else: self.setColor (BLACK) # Parse castling availability castling = 0 for char in castChr: if self.variant == FISCHERRANDOMCHESS: if char in reprFile: if char < reprCord[self.kings[BLACK]][0]: castling |= B_OOO self.ini_rooks[1][0] = reprFile.index(char) + 56 else: castling |= B_OO self.ini_rooks[1][1] = reprFile.index(char) + 56 elif char in [c.upper() for c in reprFile]: if char < reprCord[self.kings[WHITE]][0].upper(): castling |= W_OOO self.ini_rooks[0][0] = reprFile.index(char.lower()) else: castling |= W_OO self.ini_rooks[0][1] = reprFile.index(char.lower()) elif char == "K": castling |= W_OO self.ini_rooks[0][1] = rank1.rfind('R') elif char == "Q": castling |= W_OOO self.ini_rooks[0][0] = rank1.find('R') elif char == "k": castling |= B_OO self.ini_rooks[1][1] = rank8.rfind('r') + 56 elif char == "q": castling |= B_OOO self.ini_rooks[1][0] = rank8.find('r') + 56 else: if char == "K": castling |= W_OO elif char == "Q": castling |= W_OOO elif char == "k": castling |= B_OO elif char == "q": castling |= B_OOO if self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS, FISCHERRANDOMCHESS): self.ini_kings[WHITE] = self.kings[WHITE] self.ini_kings[BLACK] = self.kings[BLACK] if self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): if self.ini_kings[WHITE] == D1 and self.ini_kings[BLACK] == D8: self.fin_kings = ([B1,F1],[B8,F8]) self.fin_rooks = ([C1,E1],[C8,E8]) elif self.ini_kings[WHITE] == D1: self.fin_kings = ([B1,F1],[C8,G8]) self.fin_rooks = ([C1,E1],[D8,F8]) elif self.ini_kings[BLACK] == D8: self.fin_kings = ([C1,G1],[B8,F8]) self.fin_rooks = ([D1,F1],[C8,E8]) else: self.fin_kings = ([C1,G1],[C8,G8]) self.fin_rooks = ([D1,F1],[D8,F8]) self.setCastling(castling) # Parse en passant target sqaure if epChr == "-": self.setEnpassant (None) else: self.setEnpassant(cordDic[epChr]) # Parse halfmove clock field self.fifty = max(int(fiftyChr),0) # Parse fullmove number movenumber = int(moveNoChr)*2 -2 if self.color == BLACK: movenumber += 1 self.plyCount = movenumber def isChecked (self): if self.checked == None: kingcord = self.kings[self.color] self.checked = isAttacked (self, kingcord, 1-self.color) return self.checked def opIsChecked (self): if self.opchecked == None: kingcord = self.kings[1-self.color] self.opchecked = isAttacked (self, kingcord, self.color) return self.opchecked def willLeaveInCheck (self, move): board_clone = self.clone() board_clone.applyMove(move) return board_clone.opIsChecked() def _addPiece (self, cord, piece, color): _setBit = setBit self.boards[color][piece] = _setBit(self.boards[color][piece], cord) self.friends[color] = _setBit(self.friends[color], cord) self.blocker = _setBit(self.blocker, cord) if piece == PAWN: self.pawnhash ^= pieceHashes[color][PAWN][cord] elif piece == KING: self.kings[color] = cord self.hash ^= pieceHashes[color][piece][cord] self.arBoard[cord] = piece def _removePiece (self, cord, piece, color): _clearBit = clearBit self.boards[color][piece] = _clearBit(self.boards[color][piece], cord) self.friends[color] = _clearBit(self.friends[color], cord) self.blocker = _clearBit(self.blocker, cord) if piece == PAWN: self.pawnhash ^= pieceHashes[color][PAWN][cord] self.hash ^= pieceHashes[color][piece][cord] self.arBoard[cord] = EMPTY def setColor (self, color): if color == self.color: return self.color = color self.hash ^= colorHash def setCastling (self, castling): if self.castling == castling: return if castling & W_OO != self.castling & W_OO: self.hash ^= W_OOHash if castling & W_OOO != self.castling & W_OOO: self.hash ^= W_OOOHash if castling & B_OO != self.castling & B_OO: self.hash ^= B_OOHash if castling & B_OOO != self.castling & B_OOO: self.hash ^= B_OOOHash self.castling = castling def setEnpassant (self, epcord): # Strip the square if there's no adjacent enemy pawn to make the capture if epcord != None: sideToMove = (epcord >> 3 == 2 and BLACK or WHITE) fwdPawns = self.boards[sideToMove][PAWN] if sideToMove == WHITE: fwdPawns >>= 8 else: fwdPawns <<= 8 pawnTargets = (fwdPawns & ~fileBits[0]) << 1; pawnTargets |= (fwdPawns & ~fileBits[7]) >> 1; if not pawnTargets & bitPosArray[epcord]: epcord = None if self.enpassant == epcord: return if self.enpassant != None: self.hash ^= epHashes[self.enpassant & 7] if epcord != None: self.hash ^= epHashes[epcord & 7] self.enpassant = epcord #@profile def applyMove (self, move): flag = move >> 12 fcord = (move >> 6) & 63 tcord = move & 63 fpiece = fcord if flag==DROP else self.arBoard[fcord] tpiece = self.arBoard[tcord] color = self.color opcolor = 1-self.color self.hist_move.append(move) self.hist_enpassant.append(self.enpassant) self.hist_castling.append(self.castling) self.hist_hash.append(self.hash) self.hist_fifty.append(self.fifty) self.hist_checked.append(self.checked) self.hist_opchecked.append(self.opchecked) if self.variant == CRAZYHOUSECHESS: self.hist_capture_promoting.append(self.capture_promoting) self.opchecked = None self.checked = None if flag == NULL_MOVE: self.setColor(opcolor) return move # Castling moves can be represented strangely, so normalize them. if flag in (KING_CASTLE, QUEEN_CASTLE): side = flag - QUEEN_CASTLE fpiece = KING tpiece = EMPTY # In FRC, there may be a rook there, but the king doesn't capture it. fcord = self.ini_kings[color] if FILE(fcord) == 3 and self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): side = 0 if side == 1 else 1 tcord = self.fin_kings[color][side] rookf = self.ini_rooks[color][side] rookt = self.fin_rooks[color][side] # Capture if tpiece != EMPTY: self._removePiece(tcord, tpiece, opcolor) self.pieceCount[opcolor][tpiece] -= 1 if self.variant == CRAZYHOUSECHESS: if self.promoted[tcord]: self.holding[color][PAWN] += 1 self.capture_promoting = True else: self.holding[color][tpiece] += 1 self.capture_promoting = False self.hist_tpiece.append(tpiece) # Remove moving piece(s), then add them at their destination. if flag == DROP: assert self.holding[color][fpiece] > 0 self.holding[color][fpiece] -= 1 self.pieceCount[color][fpiece] += 1 else: self._removePiece(fcord, fpiece, color) if flag in (KING_CASTLE, QUEEN_CASTLE): self._removePiece (rookf, ROOK, color) self._addPiece (rookt, ROOK, color) self.hasCastled[color] = True if flag == ENPASSANT: takenPawnC = tcord + (color == WHITE and -8 or 8) self._removePiece (takenPawnC, PAWN, opcolor) self.pieceCount[opcolor][PAWN] -= 1 if self.variant == CRAZYHOUSECHESS: self.holding[color][PAWN] += 1 elif flag in PROMOTIONS: # Pretend the pawn changes into a piece before reaching its destination. fpiece = flag - 2 self.pieceCount[color][fpiece] += 1 self.pieceCount[color][PAWN] -=1 if self.variant == CRAZYHOUSECHESS: if tpiece == EMPTY: self.capture_promoting = False if flag in PROMOTIONS: self.promoted[tcord] = 1 elif flag != DROP: if self.promoted[fcord]: self.promoted[fcord] = 0 self.promoted[tcord] = 1 elif tpiece != EMPTY: self.promoted[tcord] = 0 self._addPiece(tcord, fpiece, color) if fpiece == PAWN and abs(fcord-tcord) == 16: self.setEnpassant ((fcord + tcord) / 2) else: self.setEnpassant (None) if tpiece == EMPTY and fpiece != PAWN: self.fifty += 1 else: self.fifty = 0 # Clear castle flags castling = self.castling king = self.ini_kings[color] wildcastle = FILE(king) == 3 and self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS) if fpiece == KING: castling &= ~CAS_FLAGS[color][0] castling &= ~CAS_FLAGS[color][1] elif fpiece == ROOK: if fcord == self.ini_rooks[color][0]: side = 1 if wildcastle else 0 castling &= ~CAS_FLAGS[color][side] elif fcord == self.ini_rooks[color][1]: side = 0 if wildcastle else 1 castling &= ~CAS_FLAGS[color][side] if tpiece == ROOK: if tcord == self.ini_rooks[opcolor][0]: side = 1 if wildcastle else 0 castling &= ~CAS_FLAGS[opcolor][side] elif tcord == self.ini_rooks[opcolor][1]: side = 0 if wildcastle else 1 castling &= ~CAS_FLAGS[opcolor][side] self.setCastling(castling) self.setColor(opcolor) self.plyCount += 1 def popMove (self): # Note that we remove the last made move, which was not made by boards # current color, but by its opponent color = 1 - self.color opcolor = self.color move = self.hist_move.pop() cpiece = self.hist_tpiece.pop() flag = move >> 12 if flag == NULL_MOVE: self.setColor(color) return fcord = (move >> 6) & 63 tcord = move & 63 tpiece = self.arBoard[tcord] # Castling moves can be represented strangely, so normalize them. if flag in (KING_CASTLE, QUEEN_CASTLE): side = flag - QUEEN_CASTLE tpiece = KING fcord = self.ini_kings[color] if FILE(fcord) == 3 and self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): side = 0 if side == 1 else 1 tcord = self.fin_kings[color][side] rookf = self.ini_rooks[color][side] rookt = self.fin_rooks[color][side] self._removePiece (tcord, tpiece, color) self._removePiece (rookt, ROOK, color) self._addPiece (rookf, ROOK, color) self.hasCastled[color] = False else: self._removePiece (tcord, tpiece, color) # Put back captured piece if cpiece != EMPTY: self._addPiece (tcord, cpiece, opcolor) self.pieceCount[opcolor][cpiece] += 1 if self.variant == CRAZYHOUSECHESS: if self.capture_promoting: assert self.holding[color][PAWN] > 0 self.holding[color][PAWN] -= 1 else: assert self.holding[color][cpiece] > 0 self.holding[color][cpiece] -= 1 # Put back piece captured by enpassant if flag == ENPASSANT: epcord = color == WHITE and tcord - 8 or tcord + 8 self._addPiece (epcord, PAWN, opcolor) self.pieceCount[opcolor][PAWN] += 1 if self.variant == CRAZYHOUSECHESS: assert self.holding[color][PAWN] > 0 self.holding[color][PAWN] -= 1 # Un-promote pawn if flag in PROMOTIONS: tpiece = PAWN self.pieceCount[color][flag-2] -= 1 self.pieceCount[color][PAWN] +=1 # Put back moved piece if flag == DROP: self.holding[color][tpiece] += 1 self.pieceCount[color][tpiece] -= 1 else: self._addPiece (fcord, tpiece, color) if self.variant == CRAZYHOUSECHESS: if flag != DROP: if self.promoted[tcord] and (not flag in PROMOTIONS): self.promoted[fcord] = 1 if self.capture_promoting: self.promoted[tcord] = 1 else: self.promoted[tcord] = 0 self.capture_promoting = self.hist_capture_promoting.pop() self.setColor(color) self.checked = self.hist_checked.pop() self.opchecked = self.hist_opchecked.pop() self.enpassant = self.hist_enpassant.pop() self.castling = self.hist_castling.pop() self.hash = self.hist_hash.pop() self.fifty = self.hist_fifty.pop() self.plyCount -= 1 def __hash__ (self): return self.hash def reprCastling (self): if not self.castling: return "-" else: strs = [] if self.variant == FISCHERRANDOMCHESS: if self.castling & W_OO: strs.append(reprCord[self.ini_rooks[0][1]][0].upper()) if self.castling & W_OOO: strs.append(reprCord[self.ini_rooks[0][0]][0].upper()) if self.castling & B_OO: strs.append(reprCord[self.ini_rooks[1][1]][0]) if self.castling & B_OOO: strs.append(reprCord[self.ini_rooks[1][0]][0]) else: if self.castling & W_OO: strs.append("K") if self.castling & W_OOO: strs.append("Q") if self.castling & B_OO: strs.append("k") if self.castling & B_OOO: strs.append("q") return "".join(strs) def __repr__ (self): b = "#" + reprColor[self.color] + " " b += self.reprCastling() + " " b += self.enpassant != None and reprCord[self.enpassant] or "-" b += "\n# " rows = [self.arBoard[i:i+8] for i in range(0,64,8)][::-1] for r, row in enumerate(rows): for i, piece in enumerate(row): if piece != EMPTY: if bitPosArray[(7-r)*8+i] & self.friends[WHITE]: sign = FAN_PIECES[WHITE][piece] else: sign = FAN_PIECES[BLACK][piece] b += sign else: b += "." b += " " b += "\n# " return b def asFen (self, enable_bfen=True): fenstr = [] rows = [self.arBoard[i:i+8] for i in range(0,64,8)][::-1] for r, row in enumerate(rows): empty = 0 for i, piece in enumerate(row): if piece != EMPTY: if empty > 0: fenstr.append(str(empty)) empty = 0 sign = reprSign[piece] if bitPosArray[(7-r)*8+i] & self.friends[WHITE]: sign = sign.upper() else: sign = sign.lower() fenstr.append(sign) if self.variant == CRAZYHOUSECHESS: if self.promoted[r*8+i]: fenstr.append("~") else: empty += 1 if empty > 0: fenstr.append(str(empty)) if r != 7: fenstr.append("/") if self.variant == CRAZYHOUSECHESS: holding_pieces = [] for color in (BLACK, WHITE): holding = self.holding[color] for piece in holding: if holding[piece] > 0: sign = reprSign[piece] sign = sign.upper() if color == WHITE else sign.lower() holding_pieces.append(sign*holding[piece]) if holding_pieces: if enable_bfen: fenstr.append("/") fenstr += holding_pieces else: fenstr.append("[") fenstr += holding_pieces fenstr.append("]") fenstr.append(" ") fenstr.append(self.color == WHITE and "w" or "b") fenstr.append(" ") fenstr.append(self.reprCastling()) fenstr.append(" ") if not self.enpassant: fenstr.append("-") else: fenstr.append(reprCord[self.enpassant]) fenstr.append(" ") fenstr.append(str(self.fifty)) fenstr.append(" ") fullmove = (self.plyCount)/2 + 1 fenstr.append(str(fullmove)) return "".join(fenstr) def clone (self): copy = LBoard(self.variant) copy.blocker = self.blocker copy.friends = self.friends[:] copy.kings = self.kings[:] copy.boards = [self.boards[WHITE][:], self.boards[BLACK][:]] copy.arBoard = self.arBoard[:] copy.pieceCount = [self.pieceCount[WHITE][:], self.pieceCount[BLACK][:]] copy.color = self.color copy.plyCount = self.plyCount copy.hasCastled = self.hasCastled[:] copy.enpassant = self.enpassant copy.castling = self.castling copy.hash = self.hash copy.pawnhash = self.pawnhash copy.fifty = self.fifty copy.checked = self.checked copy.opchecked = self.opchecked copy.hist_move = self.hist_move[:] copy.hist_tpiece = self.hist_tpiece[:] copy.hist_enpassant = self.hist_enpassant[:] copy.hist_castling = self.hist_castling[:] copy.hist_hash = self.hist_hash[:] copy.hist_fifty = self.hist_fifty[:] copy.hist_checked = self.hist_checked[:] copy.hist_opchecked = self.hist_opchecked[:] if self.variant == FISCHERRANDOMCHESS: copy.ini_kings = self.ini_kings[:] copy.ini_rooks = (self.ini_rooks[0][:], self.ini_rooks[1][:]) elif self.variant in (WILDCASTLECHESS, WILDCASTLESHUFFLECHESS): copy.ini_kings = self.ini_kings[:] copy.fin_kings = (self.fin_kings[0][:], self.fin_kings[1][:]) copy.fin_rooks = (self.fin_rooks[0][:], self.fin_rooks[1][:]) elif self.variant == CRAZYHOUSECHESS: copy.promoted = self.promoted[:] copy.holding = (self.holding[0].copy(), self.holding[1].copy()) copy.capture_promoting = self.capture_promoting copy.hist_capture_promoting = self.hist_capture_promoting[:] return copy pychess-0.12beta3/lib/pychess/Utils/lutils/leval.py0000755000175000017470000004772112161415524021423 0ustar tamasusers ################################################################################ # The purpose of this module, is to give a certain position a score. The # # greater the score, the better the position # ################################################################################ from pychess.Utils.const import * from ldata import * from LBoard import LBoard from lsort import staticExchangeEvaluate from lmovegen import newMove from ctypes import create_string_buffer, memset from struct import Struct, pack_into, unpack_from #from random import randint randomval = 0 #randint(8,12)/10. def evaluateComplete (board, color): """ A detailed evaluation function, taking into account several positional factors """ s, phase = evalMaterial (board, color) s += evalBishops (board, color, phase) - evalBishops (board, 1-color, phase) s += evalRooks (board, color, phase) - evalRooks (board, 1-color, phase) s += evalKing (board, color, phase) - evalKing (board, 1-color, phase) s += evalKingTropism (board, color, phase) - evalKingTropism (board, 1-color, phase) s += evalDoubleQR7 (board, color, phase) - evalDoubleQR7 (board, 1-color, phase) s += evalDev (board, color, phase) - evalDev (board, 1-color, phase) pawnScore, passed, weaked = cacheablePawnInfo (board, phase) s += pawnScore if color == WHITE else -pawnScore s += evalPawnStructure (board, color, phase, passed, weaked) - evalPawnStructure (board, 1-color, phase, passed, weaked) s += evalTrappedBishops (board, color) s += randomval return s ################################################################################ # evalMaterial # ################################################################################ def evalMaterial (board, color): pieceCount = board.pieceCount opcolor = 1-color material = [0, 0] if board.variant == CRAZYHOUSECHESS: for piece in xrange(PAWN, KING): material[WHITE] += CRAZY_PIECE_VALUES[piece] * pieceCount[WHITE][piece] material[BLACK] += CRAZY_PIECE_VALUES[piece] * pieceCount[BLACK][piece] material[WHITE] += CRAZY_PIECE_VALUES[piece] * board.holding[WHITE][piece] material[BLACK] += CRAZY_PIECE_VALUES[piece] * board.holding[BLACK][piece] else: for piece in xrange(PAWN, KING): material[WHITE] += PIECE_VALUES[piece] * pieceCount[WHITE][piece] material[BLACK] += PIECE_VALUES[piece] * pieceCount[BLACK][piece] phase = max(1, 8 - (material[WHITE] + material[BLACK]) / 1150) # If both sides are equal, we don't need to compute anything! if material[BLACK] == material[WHITE]: return 0, phase matTotal = sum(material) # Who is leading the game, material-wise? if material[color] > material[opcolor]: leading = color else: leading = opcolor pawns = pieceCount[leading][PAWN] matDiff = material[leading] - material[1-leading] val = min(2400, matDiff) + \ (matDiff * (12000-matTotal) * pawns) / (6400 * (pawns+1)) if leading == color: return val, phase return -val, phase ################################################################################ # evalKingTropism # ################################################################################ pawnTropism = [[0]*64 for i in xrange(64)] bishopTropism = [[0]*64 for i in xrange(64)] knightTropism = [[0]*64 for i in xrange(64)] rookTropism = [[0]*64 for i in xrange(64)] queenTropism = [[0]*64 for i in xrange(64)] for pcord in xrange(64): for kcord in xrange(pcord+1, 64): pawnTropism[pcord][kcord] = pawnTropism[kcord][pcord] = \ (14 - taxicab[pcord][kcord])**2 * 10/169 # 0 - 10 knightTropism[pcord][kcord] = knightTropism[kcord][pcord] = \ (6-distance[KNIGHT][pcord][kcord])**2 * 2 # 0 - 50 bishopTropism[pcord][kcord] = bishopTropism[kcord][pcord] = \ (14 - distance[BISHOP][pcord][kcord] * sdistance[pcord][kcord])**2 * 30/169 # 0 - 30 rookTropism[pcord][kcord] = rookTropism[kcord][pcord] = \ (14 - distance[ROOK][pcord][kcord] * sdistance[pcord][kcord])**2 * 40/169 # 0 - 40 queenTropism[pcord][kcord] = queenTropism[kcord][pcord] = \ (14 - distance[QUEEN][pcord][kcord] * sdistance[pcord][kcord])**2 * 50/169 # 0 - 50 tropisms = { PAWN: pawnTropism, KNIGHT: knightTropism, BISHOP: bishopTropism, ROOK: rookTropism, QUEEN: queenTropism } def evalKingTropism (board, color, phase): """ All other things being equal, having your Knights, Queens and Rooks close to the opponent's king is a good thing """ _tropisms = tropisms _lsb = lsb opcolor = 1-color pieces = board.boards[color] oppieces = board.boards[opcolor] opking = board.kings[opcolor] #if phase >= 4 or not oppieces[QUEEN]: #opking = board.kings[opcolor] #else: #opking = firstBit(oppieces[QUEEN]) score = 0 for piece in xrange(KNIGHT, KING): # for piece in xrange(PAWN, KING): bitboard = pieces[piece] tropism = _tropisms[piece] # inlined iterBits() while bitboard: bit = bitboard & -bitboard score += tropism[_lsb[bit]][opking] bitboard -= bit return score ################################################################################ # evalPawnStructure # ################################################################################ # For pawn hash, don't use buckets. Store: # key high 16 bits of pawn hash key # score score from white's point of view # passed bitboard of passed pawns # weaked bitboard of weak pawns pawnEntryType = Struct('=H h Q Q') PAWN_HASH_SIZE = 16384 PAWN_PHASE_KEY = (0x343d, 0x055d, 0x3d3c, 0x1a1c, 0x28aa, 0x19ee, 0x1538, 0x2a99) pawntable = create_string_buffer(PAWN_HASH_SIZE * pawnEntryType.size) def clearPawnTable(): memset(pawntable, 0, PAWN_HASH_SIZE * pawnEntryType.size) def probePawns (board, phase): index = (board.pawnhash % PAWN_HASH_SIZE) ^ PAWN_PHASE_KEY[phase-1] key, score, passed, weaked = pawnEntryType.unpack_from(pawntable, index * pawnEntryType.size) if key == (board.pawnhash >> 14) & 0xffff: return score, passed, weaked return None def recordPawns (board, phase, score, passed, weaked): index = (board.pawnhash % PAWN_HASH_SIZE) ^ PAWN_PHASE_KEY[phase-1] key = (board.pawnhash >> 14) & 0xffff pawnEntryType.pack_into(pawntable, index * pawnEntryType.size, key, score, passed, weaked) def cacheablePawnInfo (board, phase): entry = probePawns (board, phase) if entry: return entry score = 0 passed = 0 weaked = 0 for color in WHITE, BLACK: opcolor = 1-color pawns = board.boards[color][PAWN] oppawns = board.boards[opcolor][PAWN] nfile = [0]*8 pScoreBoard = pawnScoreBoard[color] for cord in iterBits(pawns): score += pScoreBoard[cord] * 2 # Passed pawns if not oppawns & passedPawnMask[color][cord]: if (color == WHITE and not fromToRay[cord][cord|56] & pawns) or\ (color == BLACK and not fromToRay[cord][cord&7] & pawns): passed |= bitPosArray[cord] score += (passedScores[color][cord>>3] * phase) / 12 # Backward pawns backward = False if color == WHITE: i = cord + 8 else: i = cord - 8 ptype = color == WHITE and PAWN or BPAWN opptype = color == BLACK and PAWN or BPAWN if not (passedPawnMask[opcolor][i] & ~fileBits[cord&7] & pawns) and\ board.arBoard[i] != PAWN: n1 = bin(pawns & moveArray[opptype][i]).count("1") n2 = bin(oppawns & moveArray[ptype][i]).count("1") if n1 < n2: backward = True if not backward and bitPosArray[cord] & brank7[opcolor]: i = i + (color == WHITE and 8 or -8) if not (passedPawnMask[opcolor][i] & ~fileBits[1] & pawns): n1 = bin(pawns & moveArray[opptype][i]).count("1") n2 = bin(oppawns & moveArray[ptype][i]).count("1") if n1 < n2: backward = True if not backward and bitPosArray[cord] & brank7[opcolor]: i = i + (color == WHITE and 8 or -8) if not (passedPawnMask[opcolor][i] & ~fileBits[1] & pawns): n1 = bin(pawns & moveArray[opptype][i]).count("1") n2 = bin(oppawns & moveArray[ptype][i]).count("1") if n1 < n2: backward = True if backward: weaked |= bitPosArray[cord] score += -(8+phase) # Backward pawn penalty # Pawn base under attack if moveArray[ptype][cord] & oppawns and \ moveArray[ptype][cord] & pawns: score += -18 # Increment file count for isolani & doubled pawn evaluation nfile[cord&7] += 1 for i in xrange(8): # Doubled pawns if nfile[i] > 1: score += -(8+phase) # Isolated pawns if nfile[i] and not pawns & isolaniMask[i]: if not fileBits[i] & oppawns: # Isolated on a half-open file score += isolani_weaker[i] * nfile[i] else: # Normal isolated pawn score += isolani_normal[i] * nfile[i] weaked |= pawns & fileBits[i] # Penalize having eight pawns if board.pieceCount[color][PAWN] == 8: score -= 10 # Detect stonewall formation in our pawns if stonewall[color] & pawns == stonewall[color]: score += 10 # Penalize Locked pawns n = bin((pawns >> 8) & oppawns & lbox).count("1") score -= n * 10 # Switch point of view when switching colors score = -score recordPawns (board, phase, score, passed, weaked) return score, passed, weaked def evalPawnStructure (board, color, phase, passed, weaked): """ Pawn evaluation is based on the following factors: 1. Pawn square tables. 2. Passed pawns. 3. Backward pawns. 4. Pawn base under attack. 5. Doubled pawns 6. Isolated pawns 7. Connected passed pawns on 6/7th rank. 8. Unmoved & blocked d, e pawn 9. Passed pawn which cannot be caught. 10. Pawn storms. Notice: The function has better precicion for current player """ boards = board.boards[color] if not boards[PAWN]: return 0 king = board.kings[color] pawns = boards[PAWN] opcolor = 1-color opking = board.kings[opcolor] opboards = board.boards[opcolor] oppawns = opboards[PAWN] score = 0 passed &= pawns weaked &= pawns ############################################################################ # This section of the pawn code cannot be saved into the pawn hash as # # they depend on the position of other pieces. So they have to be # # calculated again. # ############################################################################ if passed: # Connected passed pawns on 6th or 7th rank t = passed & brank67[color] opMajorCount = 0 for p in xrange(KNIGHT, KING): opMajorCount += board.pieceCount[opcolor][p] if t and opMajorCount == 1: n1 = FILE(opking) n2 = RANK(opking) for f in xrange(7): if t & fileBits[f] and t & fileBits[f+1] and \ (n1 < f-1 or n1 > f+1 or (color == WHITE and n2 < 4) or \ (color == BLACK and n2 > 3)): score += 50 # Enemy has no pieces & King is outcolor of passed pawn square if not opMajorCount: for cord in iterBits(passed): if board.color == color: if not squarePawnMask[color][cord] & opboards[KING]: score += passedScores[color][RANK(cord)] else: if not moveArray[KING][opking] & squarePawnMask[color][cord]: score += passedScores[color][RANK(cord)] # Estimate if any majors are able to hunt us down for pawn in iterBits(passed): found_hunter = False if color == WHITE: prom_cord = 7 << 3 | FILE(pawn) else: prom_cord = FILE(pawn) distance_to_promotion = distance[PAWN][pawn][prom_cord] for piece in xrange(KNIGHT, KING+1): for cord in iterBits(opboards[piece]): hunter_distance = distance[piece][cord][prom_cord] if hunter_distance <= distance_to_promotion: found_hunter = True break if found_hunter: break if not found_hunter: score += passedScores[color][RANK(pawn)] / 5 # Penalize Pawn on d2,e2/d7,e7 is blocked blocker = board.blocker if color == WHITE and ((pawns & d2e2[WHITE]) >> 8) & blocker: score -= 48 elif color == BLACK and ((pawns & d2e2[BLACK]) << 8) & blocker: score -= 48 # If both colors are castled on different colors, bonus for pawn storms if abs(FILE(king)-FILE(opking)) >= 4 and phase < 6: n1 = FILE(opking) p = (isolaniMask[n1] | fileBits[n1]) & pawns score += sum(10 * (5 - distance[KING][c][opking]) for c in iterBits(p)) return score ################################################################################ # evalBateries # ################################################################################ def evalDoubleQR7 (board, color, phase): """ Tests for QR, RR, QB and BB combos on the 7th rank. These are dangerous to kings, and good at killing pawns """ opcolor = 1-board.color boards = board.boards[color] opboards = board.boards[opcolor] if bin((boards[QUEEN] | boards[ROOK]) & brank7[color]).count("1") >= 2 and \ (opboards[KING] & brank8[color] or opboards[PAWN] & brank7[color]): return 30 return 0 def evalKing (board, color, phase): # Should avoid situations like those: # r - - - n K - - # which makes forks more easy # and # R - - - K - - - # and # - - - - - - - - # - - - K - - - - # - - - - - - - - # - - - - - - - - # - - - - - - B - # which might turn bad # Also being check should be avoided, like # - q - - - K - r # and # - - - - - n - - # - - - K - - - R king = board.kings[color] # If we are in endgame, we want our king in the center, and theirs far away if phase >= 6: return endingKing[king] # else if castled, prefer having some pawns in front elif FILE(king) not in (3,4) and RANK(king) in (0,8): if color == WHITE: if FILE(king) < 3: wall1 = frontWall[color][B1] else: wall1 = frontWall[color][G1] wall2 = wall1 >> 8 else: if FILE(king) < 3: wall1 = frontWall[color][B8] else: wall1 = frontWall[color][G8] wall2 = wall1 << 8 pawns = board.boards[color][PAWN] total_in_front = bin(wall1|wall2&pawns).count("1") numbermod = (0,3,6,9,7,5,3)[total_in_front] s = bin(wall1&pawns).count("1") * 2 + bin(wall2&pawns).count("1") return (s * numbermod * 5) / 6 return 0 def evalDev (board, color, phase): """ Calculate the development score for side (for opening only). Penalize the following. . Uncastled and cannot castled . Early queen move. - bad wing pawns """ # If we are castled or beyond the 20th move, no more evalDev if board.plyCount >= 38: return 0 score = 0 if not board.hasCastled[color]: boards = board.boards[color] pawns = boards[PAWN] # We don't encourage castling, but it should always be possible if not board.castling & CAS_FLAGS[color][0]: score -= 40 if not board.castling & CAS_FLAGS[color][1]: score -= 50 # Should keep queen home cord = firstBit(boards[QUEEN]) if cord != D1 + 56*color: score -= 30 qpawns = max(qwingpawns1[color] & pawns, qwingpawns2[color] & pawns) kpawns = max(kwingpawns1[color] & pawns, kwingpawns2[color] & pawns) if qpawns != 2 and kpawns != 2: # Structure destroyed in both sides score -= 35 else: # Discourage any wing pawn moves score += (qpawns+kpawns) *6 return score def evalBishops (board, color, phase): opcolor = 1-color bishops = board.boards[color][BISHOP] if not bishops: return 0 pawns = board.boards[color][PAWN] oppawns = board.boards[opcolor][PAWN] arBoard = board.arBoard score = 0 # Avoid having too many pawns on you bishop's color. # In late game phase, add a bonus for enemy pieces on your bishop's color. if board.pieceCount[color][BISHOP] == 1: squareMask = WHITE_SQUARES if (bishops & WHITE_SQUARES) else BLACK_SQUARES score = - bin(pawns & squareMask).count("1") \ - bin(oppawns & squareMask).count("1")/2 if phase > 6: score += bin(board.friends[1-color] & squareMask).count("1") return score def evalTrappedBishops (board, color): """ Check for bishops trapped at A2/H2/A7/H7 """ _bitPosArray = bitPosArray wbishops = board.boards[WHITE][BISHOP] bbishops = board.boards[BLACK][BISHOP] wpawns = board.boards[WHITE][PAWN] bpawns = board.boards[BLACK][PAWN] score = 0 if bbishops: if bbishops & _bitPosArray[A2] and wpawns & _bitPosArray[B3]: see = staticExchangeEvaluate(board, newMove(A2,B3)) if see < 0: score -= see if bbishops & _bitPosArray[H2] and wpawns & _bitPosArray[G3]: see = staticExchangeEvaluate(board, newMove(H2,G3)) if see < 0: score -= see if wbishops: if wbishops & _bitPosArray[A7] and bpawns & _bitPosArray[B6]: see = staticExchangeEvaluate(board, newMove(A7,B6)) if see < 0: score += see if wbishops & _bitPosArray[H7] and bpawns & _bitPosArray[G6]: see = staticExchangeEvaluate(board, newMove(H7,G6)) if see < 0: score += see return score if color == WHITE else -score def evalRooks (board, color, phase): """ rooks on open/half-open files """ opcolor = 1-color boards = board.boards[color] rooks = boards[ROOK] if not rooks: return 0 opboards = board.boards[opcolor] opking = board.kings[opcolor] score = 0 if phase < 7: for cord in iterBits(rooks): file = cord & 7 if not boards[PAWN] & fileBits[file]: if file == 5 and opking & 7 >= 4: score += 40 score += 5 if not boards[PAWN] & fileBits[file]: score += 6 return score pychess-0.12beta3/lib/pychess/Utils/lutils/ldata.py0000755000175000017470000005105412161415524021377 0ustar tamasusersfrom operator import or_ from pychess.Utils.const import * #from pychess.Utils.lutils.lmove import RANK, FILE from bitboard import * def RANK (cord): return cord >> 3 def FILE (cord): return cord & 7 ################################################################################ ################################################################################ ## Evaluating constants ## ################################################################################ ################################################################################ PAWN_VALUE = 100 KNIGHT_VALUE = 300 BISHOP_VALUE = 330 ROOK_VALUE = 500 QUEEN_VALUE = 900 KING_VALUE = 2000 PIECE_VALUES = [0, PAWN_VALUE, KNIGHT_VALUE, BISHOP_VALUE, ROOK_VALUE, QUEEN_VALUE, KING_VALUE] CRAZY_PIECE_VALUES = (0, 100, 210, 240, 250, 420, 2000) # Maximum possible search depth. The hash structure only allows 8-bit depths. MAXPLY = 10 # Maximum possible score. Mate in n ply is +/- (MATE_VALUE-n). # The hash structure only allows signed 16-bit scores. MATE_VALUE = MAXVAL = 32767 def VALUE_AT_PLY(val, ply): """ Return the value of scoring val a given number of plies into the future. """ if val >= +32512: return val - ply if val <= -32512: return val + ply return val # How many points does it give to have the piece standing i cords from the # opponent king pawnTScale = [0, 40, 20, 12, 9, 6, 4, 2, 1, 0] bishopTScale = [0, 50, 25, 15, 7, 5, 3, 2, 2, 1] knightTScale = [0, 100, 50, 35, 10, 3, 2, 2, 1, 1] rookTScale = [0, 50, 40, 15, 5, 2, 1, 1, 1, 0] queenTScale = [0, 100, 60, 20, 10, 7, 5, 4, 3, 2] passedScores = ( ( 0, 48, 48, 120, 144, 192, 240, 0 ), ( 0, 240, 192, 144, 120, 48, 48, 0 ) ) # Penalties for one or more isolated pawns on a given file isolani_normal = ( -8, -10, -12, -14, -14, -12, -10, -8 ) # Penalties if the file is half-open (i.e. no enemy pawns on it) isolani_weaker = ( -22, -24, -26, -28, -28, -26, -24, -22 ) ############################################################################### # Distance boards for different pieces # ############################################################################### taxicab = [[0]*64 for i in range(64)] sdistance = [[0]*64 for i in range(64)] for fcord in xrange(64): for tcord in xrange(fcord+1, 64): fx = FILE(fcord) fy = RANK(fcord) tx = FILE(tcord) ty = RANK(tcord) taxicab[fcord][tcord] = taxicab[fcord][tcord] = abs(fx-tx) + abs(fy-ty) sdistance[fcord][tcord] = sdistance[fcord][tcord] = min(abs(fx-tx), abs(fy-ty)) distance = [[[0]*64 for i in xrange(64)] for j in xrange(KING+1)] distance[EMPTY] = None distance[KING] = sdistance distance[PAWN] = sdistance # Special table for knightdistances knightDistance = [ 6, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 6, 5, 4, 5, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 5, 4, 5, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 2, 3, 4, 5, 4, 3, 4, 3, 2, 1, 2, 3, 2, 1, 2, 3, 4, 3, 4, 5, 4, 3, 2, 3, 2, 3, 0, 3, 2, 3, 2, 3, 4, 5, 4, 3, 4, 3, 2, 1, 2, 3, 2, 1, 2, 3, 4, 3, 4, 5, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 2, 3, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 5, 4, 5, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 5, 6, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 6, ] # Calculate for fcord in xrange(64): frank = RANK(fcord) ffile = FILE(fcord) for tcord in xrange(fcord+1, 64): # Notice, that we skip fcord == tcord, as all fields are zero from # scratch in anyway trank = RANK(tcord) tfile = FILE(tcord) # Knight field = (7-frank+trank)*15 + 7-ffile+tfile distance[KNIGHT][tcord][fcord] = distance[KNIGHT][fcord][tcord] = \ knightDistance[field] # Rook if frank == trank or ffile == tfile: distance[ROOK][tcord][fcord] = distance[ROOK][fcord][tcord] = 1 else: distance[ROOK][tcord][fcord] = distance[ROOK][fcord][tcord] = 2 # Bishop if abs(frank-trank) == abs(ffile-tfile): distance[BISHOP][tcord][fcord] = distance[BISHOP][fcord][tcord] = 1 else: distance[BISHOP][tcord][fcord] = distance[BISHOP][fcord][tcord] = 2 # Queen if frank == trank or ffile == tfile or abs(frank-trank) == abs(ffile-tfile): distance[QUEEN][tcord][fcord] = distance[QUEEN][fcord][tcord] = 1 else: distance[QUEEN][tcord][fcord] = distance[QUEEN][fcord][tcord] = 2 # Special cases for knights in corners distance[KNIGHT][A1][B2] = distance[KNIGHT][B2][A1] = 4 distance[KNIGHT][H1][G2] = distance[KNIGHT][G2][H1] = 4 distance[KNIGHT][A8][B7] = distance[KNIGHT][B7][A8] = 4 distance[KNIGHT][H8][G7] = distance[KNIGHT][G7][H8] = 4 ############################################################################### # Boards used for evaluating ############################################################################### pawnScoreBoard = ( (0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5,-10,-10, 5, 5, 5, -2, -2, -2, 6, 6, -2, -2, -2, 0, 0, 0, 25, 25, 0, 0, 0, 2, 2, 12, 16, 16, 12, 2, 2, 4, 8, 12, 16, 16, 12, 4, 4, 4, 8, 12, 16, 16, 12, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 12, 16, 16, 12, 4, 4, 4, 8, 12, 16, 16, 12, 4, 4, 2, 2, 12, 16, 16, 12, 2, 2, 0, 0, 0, 25, 25, 0, 0, 0, -2, -2, -2, 6, 6, -2, -2, -2, 5, 5, 5,-10,-10, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0) ) outpost = ( (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) ) normalKing = ( 24, 24, 24, 16, 16, 0, 32, 32, 24, 20, 16, 12, 12, 16, 20, 24, 16, 12, 8, 4, 4, 8, 12, 16, 12, 8, 4, 0, 0, 4, 8, 12, 12, 8, 4, 0, 0, 4, 8, 12, 16, 12, 8, 4, 4, 8, 12, 16, 24, 20, 16, 12, 12, 16, 20, 24, 24, 24, 24, 16, 16, 0, 32, 32 ) endingKing = ( 0, 6, 12, 18, 18, 12, 6, 0, 6, 12, 18, 24, 24, 18, 12, 6, 12, 18, 24, 32, 32, 24, 18, 12, 18, 24, 32, 48, 48, 32, 24, 18, 18, 24, 32, 48, 48, 32, 24, 18, 12, 18, 24, 32, 32, 24, 18, 12, 6, 12, 18, 24, 24, 18, 12, 6, 0, 6, 12, 18, 18, 12, 6, 0 ) ############################################################################### # Maps for bitboards ############################################################################### d2e2 = (0x0018000000000000, 0x0000000000001800) brank7 = (0x000000000000FF00, 0x00FF000000000000) brank8 = (0x00000000000000FF, 0xFF00000000000000) brank67 = (0x0000000000FFFF00, 0x00FFFF0000000000) brank58 = (0x00000000FFFFFFFF, 0xFFFFFFFF00000000) brank48 = (0x000000FFFFFFFFFF, 0xFFFFFFFFFF000000) # Penalties if the file is half-open (i.e. no enemy pawns on it) isolani_weaker = (-22, -24, -26, -28, -28, -26, -24, -22) stonewall = [0, 0] # D4, E3, F4 # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - # - # - - # - - - - # - - - # - - - - - - - - # - - - - - - - - stonewall[WHITE] = 0x81400000000 # D5, E6, F5 # - - - - - - - - # - - - - - - - - # - - - - # - - - # - - - # - # - - # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - stonewall[BLACK] = 0x81400000000 # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - # - # - - - - # - # # # - - - - # # # - - - - - - - - qwingpawns1 = ( bitPosArray[A2] | bitPosArray[B2], bitPosArray[A7] | bitPosArray[B7] ) qwingpawns2 = ( bitPosArray[A2] | bitPosArray[B3], bitPosArray[A7] | bitPosArray[B6] ) kwingpawns1 = ( bitPosArray[G2] | bitPosArray[H2], bitPosArray[G7] | bitPosArray[H7] ) kwingpawns2 = ( bitPosArray[G3] | bitPosArray[H2], bitPosArray[G6] | bitPosArray[H7] ) ################################################################################ # Ranks and files # ################################################################################ rankBits = [255 << i*8 for i in xrange(7,-1,-1)] fileBits = [0x0101010101010101 << i for i in xrange(7,-1,-1)] ################################################################################ ################################################################################ ## Bit boards ## ################################################################################ ################################################################################ WHITE_SQUARES = 0x55AA55AA55AA55AA BLACK_SQUARES = 0xAA55AA55AA55AA55 # - - - - - - - - # - - - - - - - - # - - - - - - - - # - - - # # - - - # - - - # # - - - # - - - - - - - - # - - - - - - - - # - - - - - - - - CENTER_FOUR = 0x0000001818000000 # - - - - - - - - # - - - - - - - - # - - # # # # - - # - - # # # # - - # - - # # # # - - # - - # # # # - - # - - - - - - - - # - - - - - - - - sbox = 0x00003C3C3C3C0000 # - - - - - - - - # - # # # # # # - # - # # # # # # - # - # # # # # # - # - # # # # # # - # - # # # # # # - # - # # # # # # - # - - - - - - - - lbox = 0x007E7E7E7E7E7E00 # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # right = fileBits[5] | fileBits[6] | fileBits[7] # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - # # # # - - - - - left = fileBits[0] | fileBits[1] | fileBits[2] ################################################################################ # Generate the move bitboards. For e.g. the bitboard for all # # the moves of a knight on f3 is given by MoveArray[knight][21]. # ################################################################################ dir = [ None, [ 9, 11 ], # Only capture moves are included [ -21, -19, -12, -8, 8, 12, 19, 21 ], [ -11, -9, 9, 11 ], [ -10, -1, 1, 10 ], [ -11, -10, -9, -1, 1, 9, 10, 11 ], [ -11, -10, -9, -1, 1, 9, 10, 11 ], [ -9, -11 ], # Following are for front and back walls. Will be removed from list after # the loop [ 9, 10, 11], [ -9, -10, -11] ] sliders += [False, False] map = [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, 8, 9, 10, 11, 12, 13, 14, 15, -1, -1, 16, 17, 18, 19, 20, 21, 22, 23, -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, 40, 41, 42, 43, 44, 45, 46, 47, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ] moveArray = [[0]*64 for i in xrange(len(dir))] # moveArray[8][64] for piece in xrange(1,len(dir)): for fcord in xrange(120): f = map[fcord] if f == -1: # We only generate moves for squares inside the board continue # Create a new bitboard b = 0 for d in dir[piece]: tcord = fcord while True: tcord += d t = map[tcord] if t == -1: # If we landed outside of board, there is no more to look # for break b = setBit (b, t) if not sliders[piece]: # If we are a slider, we should not break, but add the dir # value once again break moveArray[piece][f] = b frontWall = (moveArray[8], moveArray[9]) del moveArray[9]; del moveArray[8] del dir[9]; del dir[8] del sliders[9]; del sliders[8] ################################################################################ # For each square, there are 8 rays. The first 4 rays are diagonals # # for the bishops and the next 4 are file/rank for the rooks. # # The queen uses all 8 rays. # # These rays are used for move generation rather than MoveArray[]. # # Also initialize the directions[][] array. directions[f][t] returns # # the index into rays[f] array allow us to find the ray in that direction. # ################################################################################ directions = [[-1]*64 for i in xrange(64)] # directions[64][64] rays = [[0]*8 for i in xrange(64)] # rays[64][8] for fcord in xrange(120): f = map[fcord] if f == -1: continue ray = -1 for piece in BISHOP, ROOK: for d in dir[piece]: ray += 1 b = 0 tcord = fcord while True: tcord += d t = map[tcord] if t == -1: break rays[f][ray] = setBit (rays[f][ray], t) directions[f][t] = ray ################################################################################ # The FromToRay[b2][f6] gives the diagonal ray from c3 to f6; # # It also produces horizontal/vertical rays as well. If no # # ray is possible, then a 0 is returned. # ################################################################################ fromToRay = [[0]*64 for i in xrange(64)] # fromToRay[64][64] for piece in BISHOP, ROOK: for fcord in xrange (120): f = map[fcord] if f == -1: continue for d in dir[piece]: tcord = fcord t = map[tcord] while True: b = fromToRay[f][t] tcord += d t = map[tcord] if t == -1: break fromToRay[f][t] = setBit (fromToRay[f][t], t) fromToRay[f][t] |= b ################################################################################ # The PassedPawnMask variable is used to determine if a pawn is passed. # # This mask is basically all 1's from the square in front of the pawn to # # the promotion square, also duplicated on both files besides the pawn # # file. Other bits will be set to zero. # # E.g. PassedPawnMask[white][b3] = 1's in a4-c4-c8-a8 rect, 0 otherwise. # ################################################################################ passedPawnMask = [[0]*64, [0]*64] # Do for white pawns first for cord in xrange(64): passedPawnMask[WHITE][cord] = rays[cord][7] passedPawnMask[BLACK][cord] = rays[cord][4] if cord & 7 != 0: # If file is not left most passedPawnMask[WHITE][cord] |= rays[cord-1][7] passedPawnMask[BLACK][cord] |= rays[cord-1][4] if cord & 7 != 7: # If file is not right most passedPawnMask[WHITE][cord] |= rays[cord+1][7] passedPawnMask[BLACK][cord] |= rays[cord+1][4] ################################################################################ # The IsolaniMask variable is used to determine if a pawn is an isolani. # # This mask is basically all 1's on files beside the file the pawn is on. # # Other bits will be set to zero. # # E.g. isolaniMask[d-file] = 1's in c-file & e-file, 0 otherwise. # ################################################################################ isolaniMask = [0]*8 isolaniMask[0] = fileBits[1] isolaniMask[7] = fileBits[6] for i in xrange (1, 7): isolaniMask[i] = fileBits[i-1] | fileBits[i+1] #=============================================================================== # The SquarePawnMask is used to determine if a king is in the square of # the passed pawn and is able to prevent it from queening. # Caveat: Pawns on 2nd rank have the same mask as pawns on the 3rd rank # as they can advance 2 squares. #=============================================================================== squarePawnMask = [[0]*64, [0]*64] for cord in xrange(64): # White mask l = 7 - RANK(cord) i = max(cord & 56, cord-l) j = min(cord | 7, cord+l) for k in xrange(i, j+1): squarePawnMask[WHITE][cord] |= bitPosArray[k] | fromToRay[k][k|56] # Black mask l = RANK(cord) i = max(cord & 56, cord-l) j = min(cord | 7, cord+l) for k in xrange(i, j+1): squarePawnMask[BLACK][cord] |= bitPosArray[k] | fromToRay[k][k&7] # For pawns on 2nd rank, they have same mask as pawns on 3rd rank for cord in xrange(A2, H2+1): squarePawnMask[WHITE][cord] = squarePawnMask[WHITE][cord+8] for cord in xrange(A7, H7+1): squarePawnMask[BLACK][cord] = squarePawnMask[BLACK][cord-8] ################################################################################ # These tables are used to calculate rook, queen and bishop moves # ################################################################################ ray00 = [rays[cord][5] | rays[cord][6] | 1<<(63-cord) for cord in xrange(64)] ray45 = [rays[cord][0] | rays[cord][3] | 1<<(63-cord) for cord in xrange(64)] ray90 = [rays[cord][4] | rays[cord][7] | 1<<(63-cord) for cord in xrange(64)] ray135 = [rays[cord][1] | rays[cord][2] | 1<<(63-cord) for cord in xrange(64)] attack00 = [{} for i in xrange(64)] attack45 = [{} for i in xrange(64)] attack90 = [{} for i in xrange(64)] attack135 = [{} for i in xrange(64)] cmap = [ 128, 64, 32, 16, 8, 4, 2, 1 ] rot1 = [ A1, A2, A3, A4, A5, A6, A7, A8 ] rot2 = [ A1, B2, C3, D4, E5, F6, G7, H8 ] rot3 = [ A8, B7, C6, D5, E4, F3, G2, H1 ] # To save time, we init a main line for each of the four directions, and next # we will translate it for each possible cord for cord in xrange(8): for map in xrange(1, 256): # Skip entries without cord set, as cord will always be set if not map & cmap[cord]: continue # Find limits inclusive cord1 = cord2 = cord while cord1 > 0: cord1 -= 1 if cmap[cord1] & map: break while cord2 < 7: cord2 += 1 if cmap[cord2] & map: break # Remember A1 is the left most bit map00 = map << 56 attack00[cord][map00] = \ fromToRay[cord][cord1] | \ fromToRay[cord][cord2] map90 = reduce(or_, (1 << 63-rot1[c] for c in iterBits(map00))) attack90[rot1[cord]][map90] = \ fromToRay[rot1[cord]][rot1[cord1]] | \ fromToRay[rot1[cord]][rot1[cord2]] map45 = reduce(or_, (1 << 63-rot2[c] for c in iterBits(map00))) attack45[rot2[cord]][map45] = \ fromToRay[rot2[cord]][rot2[cord1]] | \ fromToRay[rot2[cord]][rot2[cord2]] map135 = reduce(or_, (1 << 63-rot3[c] for c in iterBits(map00))) attack135[rot3[cord]][map135] = \ fromToRay[rot3[cord]][rot3[cord1]] | \ fromToRay[rot3[cord]][rot3[cord2]] MAXBITBOARD = (1<<64)-1 for r in xrange(A2,A8+1,8): for cord in iterBits(ray00[r]): attack00[cord] = dict((map >> 8, ray >> 8) for map,ray in attack00[cord-8].iteritems()) for r in xrange(B1,H1+1): for cord in iterBits(ray90[r]): attack90[cord] = dict((map >> 1, ray >> 1) for map,ray in attack90[cord-1].iteritems()) # Bottom right for r in xrange(B1,H1+1): for cord in iterBits(ray45[r]): attack45[cord] = dict((map << 8 & MAXBITBOARD, ray << 8 & MAXBITBOARD) for map,ray in attack45[cord+8].iteritems()) # Top left for r in reversed(xrange(A8,H8)): for cord in iterBits(ray45[r]): attack45[cord] = dict((map >> 8, ray >> 8) for map,ray in attack45[cord-8].iteritems()) # Top right for r in xrange(B8,H8+1): for cord in iterBits(ray135[r]): attack135[cord] = dict((map >> 8, ray >> 8) for map,ray in attack135[cord-8].iteritems()) # Bottom left for r in reversed(xrange(A1,H1)): for cord in iterBits(ray135[r]): attack135[cord] = dict((map << 8 & MAXBITBOARD, ray << 8 & MAXBITBOARD) for map,ray in attack135[cord+8].iteritems()) pychess-0.12beta3/lib/pychess/Utils/lutils/ldraw.py0000755000175000017470000000455712161415524021431 0ustar tamasusersfrom ldata import BLACK_SQUARES from pychess.Utils.const import * def testFifty (board): if board.fifty >= 100: return True return False drawSet = set(( (0, 0, 0, 0, 0, 0, 0, 0), #KK (0, 1, 0, 0, 0, 0, 0, 0), #KBK (1, 0, 0, 0, 0, 0, 0, 0), #KNK (0, 0, 0, 0, 0, 1, 0, 0), #KKB (0, 0, 0, 0, 1, 0, 0, 0), #KNK (1, 0, 0, 0, 0, 1, 0, 0), #KNKB (0, 1, 0, 0, 1, 0, 0, 0), #KBKN )) # Contains not 100% sure ones drawSet2 = set(( (2, 0, 0, 0, 0, 0, 0, 0), #KNNK (0, 0, 0, 0, 2, 0, 0, 0), #KKNN (2, 0, 0, 0, 1, 0, 0, 0), #KNNKN (1, 0, 0, 0, 2, 0, 0, 0), #KNKNN (2, 0, 0, 0, 0, 1, 0, 0), #KNNKB (0, 1, 0, 0, 2, 0, 0, 0), #KBKNN (2, 0, 0, 0, 0, 0, 1, 0), #KNNKR (0, 0, 1, 0, 2, 0, 0, 0) #KRKNN )) def testMaterial (board): """ Tests if no players are able to win the game from the current position """ whitePieceCount = board.pieceCount[WHITE] blackPieceCount = board.pieceCount[BLACK] if whitePieceCount[PAWN] or blackPieceCount[PAWN]: return False if whitePieceCount[QUEEN] or blackPieceCount[QUEEN]: return False wn = whitePieceCount[KNIGHT] wb = whitePieceCount[BISHOP] wr = whitePieceCount[ROOK] bn = blackPieceCount[KNIGHT] bb = blackPieceCount[BISHOP] br = blackPieceCount[ROOK] if (wn, wb, wr, 0, bn, bb, br, 0) in drawSet: return True # Tests KBKB. Draw if bishops are of same color if not wn + wr + bn + wr and wb == 1 and bb == 1: if board.boards[WHITE][BISHOP] & BLACK_SQUARES and True != \ board.boards[BLACK][BISHOP] & BLACK_SQUARES and True: return True def testPlayerMatingMaterial (board, color): """ Tests if given color has enough material to mate on board """ pieceCount = board.pieceCount[color] if pieceCount[PAWN] or pieceCount[QUEEN] or pieceCount[ROOK] \ or (pieceCount[KNIGHT] + pieceCount[BISHOP] > 1): return True return False # This could be expanded by the fruit kpk draw function, which can test if a # certain king verus king and pawn posistion is winable. def test (board): """ Test if the position is drawn. Two-fold repetitions are counted. """ return board.repetitionCount (drawThreshold=2) > 1 or \ testFifty (board) or \ testMaterial (board) pychess-0.12beta3/lib/pychess/Utils/lutils/TranspositionTable.py0000755000175000017470000001001512161415524024126 0ustar tamasusersfrom pychess.Utils.const import hashfALPHA, hashfBETA, hashfEXACT, hashfBAD from pychess.Utils.lutils.ldata import MATE_VALUE, MAXPLY from ctypes import create_string_buffer, memset from struct import Struct, pack_into, unpack_from # Store hash entries in buckets of 4. An entry consists of: # key 32 bits derived from the board hash # search_id counter used to determine entry's age # hashf bound type (one of the hashf* constants) # depth search depth # score search score # move best move (or cutoff move) entryType = Struct('=I B B H h H') class TranspositionTable: def __init__ (self, maxSize): assert maxSize > 0 self.buckets = maxSize / (4 * entryType.size) self.data = create_string_buffer(self.buckets * 4 * entryType.size) self.search_id = 0 self.killer1 = [-1]*80 self.killer2 = [-1]*80 self.hashmove = [-1]*80 self.butterfly = [0]*(64*64) def clear (self): memset(self.data, 0, self.buckets * 4 * entryType.size) self.killer1 = [-1]*80 self.killer2 = [-1]*80 self.hashmove = [-1]*80 self.butterfly = [0]*(64*64) def newSearch (self): self.search_id = (self.search_id + 1) & 0xff #TODO: consider clearing butterfly table def probe (self, board, depth, alpha, beta): baseIndex = (board.hash % self.buckets) * 4 key = (board.hash / self.buckets) & 0xffffffff for i in xrange(baseIndex, baseIndex + 4): tkey, search_id, hashf, tdepth, score, move = entryType.unpack_from(self.data, i * entryType.size) if tkey == key: # Mate score bounds are guaranteed to be accurate at any depth. if tdepth < depth and abs(score) < MATE_VALUE-MAXPLY: return move, score, hashfBAD if hashf == hashfEXACT: return move, score, hashf if hashf == hashfALPHA and score <= alpha: return move, alpha, hashf if hashf == hashfBETA and score >= beta: return move, beta, hashf def record (self, board, move, score, hashf, depth): baseIndex = (board.hash % self.buckets) * 4 key = (board.hash / self.buckets) & 0xffffffff # We always overwrite *something*: an empty slot, this position's last entry, or else the least relevant. staleIndex = baseIndex staleRelevance = 0xffff for i in xrange(baseIndex, baseIndex + 4): tkey, search_id, thashf, tdepth, tscore, tmove = entryType.unpack_from(self.data, i * entryType.size) if tkey == 0 or tkey == key: staleIndex = i break relevance = (0x8000 if search_id != self.search_id and thashf == hashfEXACT else 0) + \ (0x4000 if ((self.search_id - search_id) & 0xff) > 1 else 0) + \ tdepth if relevance < staleRelevance: staleIndex = i staleRelevance = relevance entryType.pack_into(self.data, staleIndex * entryType.size, key, self.search_id, hashf, depth, score, move) def addKiller (self, ply, move): if self.killer1[ply] == -1: self.killer1[ply] = move elif move != self.killer1[ply]: self.killer2[ply] = move def isKiller (self, ply, move): if self.killer1[ply] == move: return 10 elif self.killer2[ply] == move: return 8 if ply >= 2: if self.killer1[ply-2] == move: return 6 elif self.killer2[ply-2] == move: return 4 return 0 def setHashMove (self, ply, move): self.hashmove[ply] = move def isHashMove (self, ply, move): return self.hashmove[ply] == move def addButterfly (self, move, depth): self.butterfly[move & 0xfff] += 1 << depth def getButterfly (self, move): return self.butterfly[move & 0xfff] pychess-0.12beta3/lib/pychess/Utils/lutils/Benchmark.py0000644000175000017470000000464012161415524022200 0ustar tamasusersfrom pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.leval import clearPawnTable from pychess.Utils.lutils.lmove import listToSan from pychess.Utils.lutils import lsearch from pychess.Utils.const import * import sys from time import time # For now, we use the benchmark positions from Stockfish. benchmarkPositions = [ "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 10", "8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 11", "4rrk1/pp1n3p/3q2pQ/2p1pb2/2PP4/2P3N1/P2B2PP/4RRK1 b - - 7 19", "rq3rk1/ppp2ppp/1bnpb3/3N2B1/3NP3/7P/PPPQ1PP1/2KR3R w - - 7 14", "r1bq1r1k/1pp1n1pp/1p1p4/4p2Q/4Pp2/1BNP4/PPP2PPP/3R1RK1 w - - 2 14", "r3r1k1/2p2ppp/p1p1bn2/8/1q2P3/2NPQN2/PPP3PP/R4RK1 b - - 2 15", "r1bbk1nr/pp3p1p/2n5/1N4p1/2Np1B2/8/PPP2PPP/2KR1B1R w kq - 0 13", "r1bq1rk1/ppp1nppp/4n3/3p3Q/3P4/1BP1B3/PP1N2PP/R4RK1 w - - 1 16", "4r1k1/r1q2ppp/ppp2n2/4P3/5Rb1/1N1BQ3/PPP3PP/R5K1 w - - 1 17", "2rqkb1r/ppp2p2/2npb1p1/1N1Nn2p/2P1PP2/8/PP2B1PP/R1BQK2R b KQ - 0 11", "r1bq1r1k/b1p1npp1/p2p3p/1p6/3PP3/1B2NN2/PP3PPP/R2Q1RK1 w - - 1 16", "3r1rk1/p5pp/bpp1pp2/8/q1PP1P2/b3P3/P2NQRPP/1R2B1K1 b - - 6 22", "r1q2rk1/2p1bppp/2Pp4/p6b/Q1PNp3/4B3/PP1R1PPP/2K4R w - - 2 18", "4k2r/1pb2ppp/1p2p3/1R1p4/3P4/2r1PN2/P4PPP/1R4K1 b - - 3 22", "3q2k1/pb3p1p/4pbp1/2r5/PpN2N2/1P2P2P/5PP1/Q2R2K1 b - - 4 26" ] def benchmark (): """ Times a search of a static list of positions. """ suite_time = time() suite_nodes = lsearch.nodes lsearch.endtime = sys.maxint lsearch.searching = True for i, fen in enumerate(benchmarkPositions): lsearch.table.clear() clearPawnTable() board = LBoard(NORMALCHESS) board.applyFen(fen) pos_start_time = time() pos_start_nodes = lsearch.nodes for depth in xrange (1, 6): mvs, scr = lsearch.alphaBeta (board, depth) pos_time = time() - pos_start_time pos_nodes = lsearch.nodes - pos_start_nodes pv = " ".join(listToSan(board, mvs)) time_cs = int(100 * pos_time) print depth, scr, time_cs, pos_nodes, pv print "Searched position", i, "at", int(pos_nodes / pos_time), "n/s" suite_time = time() - suite_time suite_nodes = lsearch.nodes - suite_nodes print "Total:", suite_nodes, "nodes in", suite_time, "s: ", suite_nodes / suite_time, "n/s" lsearch.nodes = 0 pychess-0.12beta3/lib/pychess/Utils/lutils/egtb_k4it.py0000755000175000017470000001064612161415524022170 0ustar tamasusersimport urllib import re from pychess.Utils.lutils.lmovegen import newMove from pychess.Utils.lutils.lmove import FILE, RANK from pychess.Utils.const import * from pychess.Utils.repr import reprColor from pychess.System.Log import log from pychess.System import conf URL = "http://www.k4it.de/egtb/fetch.php?action=egtb&fen=" expression = re.compile("(\d+)-(\d+)-?(\d+)?: (Win in \d+|Draw|Lose in \d+)") PROMOTION_FLAGS = { 2: QUEEN_PROMOTION, 3: ROOK_PROMOTION, 4: BISHOP_PROMOTION, 5: KNIGHT_PROMOTION } class egtb_k4it: def __init__ (self): self.table = {} def supports (self, size): return size[0] < 5 and size[1] < 5 and sum(size) < 7 def scoreAllMoves (self, board, probeSoft=False): global URL, expression, PROMOTION_FLAGS fen = board.asFen().split()[0] + " w - - 0 1" if (fen,board.color) in self.table: return self.table[(fen,board.color)] if probeSoft or not conf.get("online_egtb_check", True): return [] # Request the page url = (URL + fen).replace(" ", "%20") try: f = urllib.urlopen(url) except IOError, e: log.warn("Unable to read endgame tablebase from the Internet: %s" % repr(e)) return [] data = f.read() # Parse for color, move_data in enumerate(data.split("\nNEXTCOLOR\n")): try: moves = [] for fcord, tcord, promotion, result in expression.findall(move_data): fcord = int(fcord) tcord = int(tcord) if promotion: flag = PROMOTION_FLAGS[int(promotion)] elif RANK(fcord) != RANK(tcord) and FILE(fcord) != FILE(tcord) and \ board.arBoard[fcord] == PAWN and board.arBoard[tcord] == EMPTY: flag = ENPASSANT else: flag = NORMAL_MOVE move = newMove(fcord, tcord, flag) if result == "Draw": state = DRAW steps = 0 else: s, steps = result.split(" in ") steps = int(steps) if result.startswith("Win"): if color == WHITE: state = WHITEWON else: state = BLACKWON elif result.startswith("Lose"): if color == WHITE: state = BLACKWON else: state = WHITEWON moves.append( (move,state,steps) ) if moves: self.table[(fen,color)] = moves elif color == board.color and board.opIsChecked(): log.warn("Asked endgametable for a won position: %s" % fen) elif color == board.color: log.warn("Couldn't get %s data for position %s.\nData was: %s" % (reprColor[color], fen, repr(data))) except (KeyError, ValueError): log.warn("Couldn't parse %s data for position %s.\nData was: %s" % (reprColor[color], fen, repr(data))) self.table[(fen, color)] = [] # Don't try again. if (fen,board.color) in self.table: return self.table[(fen,board.color)] return [] def scoreGame(self, board, omitDepth, probeSoft): scores = self.scoreAllMoves(board, probeSoft) if scores: return scores[0][1], scores[0][2] return None, None if __name__ == "__main__": from pychess.Utils.lutils.LBoard import LBoard from pychess.Utils.lutils.lmove import listToSan board = LBoard(NORMALCHESS) board.applyFen("8/k2P4/8/8/8/8/8/4K2R w - - 0 1") moves = probeEndGameTable(board) assert len(moves) == 18, listToSan(board, (move[0] for move in moves)) board.applyFen("8/p7/6kp/3K4/6PP/8/8/8 b - - 0 1") moves = probeEndGameTable(board) assert len(moves) == 7, listToSan(board, (move[0] for move in moves)) board.applyFen("8/p6k/2K5/7R/6PP/8/8/8 b - - 0 66") moves = probeEndGameTable(board) assert len(moves) == 3, listToSan(board, (move[0] for move in moves)) pychess-0.12beta3/lib/pychess/Utils/lutils/strateval.py0000755000175000017470000006072212161415524022321 0ustar tamasusers""" This module differs from leval in that it is not optimized for speed. It checks differences between last and current board, and returns not scores, but strings describing the differences. Can be used for commenting on board changes. """ from ldata import * from pychess.Utils.const import * from pychess.Utils.lutils.attack import staticExchangeEvaluate, getAttacks, \ defends from pychess.Utils.lutils.lmove import TCORD, FCORD, FLAG, PROMOTE_PIECE, toSAN from pychess.Utils.lutils.lmovegen import genCaptures, genAllMoves, newMove from pychess.Utils.lutils.validator import validateMove from pychess.Utils.repr import reprColor, reprPiece import leval def join(items): if len(items) == 1: return items[0] else: s = "%s %s %s" % (items[-2], _("and"), items[-1]) if len(items) > 2: s = ", ".join(items[:-2]+[s]) return s # # Functions can be of types: # * Final: Will be shown alone: "mates", "draws" # * Moves (s): Will always be shown: "put into *" # * Prefix: Will always be shown: "castles", "promotes" # * Attack: Will always be shown: "threaten", "preassures", "defendes" # * Simple: (s) Max one will be shown: "develops", "activity" # * State: (s) Will always be shown: "new *" # * Tip: (s) Will sometimes be shown: "pawn storm", "cramped position" # def final_status (model, ply, phase): if ply == model.ply: if model.status == DRAW: yield _("draws") elif model.status in (WHITEWON,BLACKWON): yield _("mates") def offencive_moves_check (model, ply, phase): if model.getBoardAtPly(ply).board.isChecked(): yield _("puts opponent in check") def defencive_moves_safety (model, ply, phase): board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply-1).board if board.arBoard[TCORD(model.getMoveAtPly(ply-1).move)] != KING: return color = oldboard.color opcolor = 1-color delta_eval_king = leval.evalKing(board, color, phase) - \ leval.evalKing(oldboard, color, phase) # PyChess points tropism to queen for phase <= 3. Thus we set a high phase delta_eval_tropism = leval.evalKingTropism(board, opcolor, 10) - \ leval.evalKingTropism(oldboard, opcolor, 10) # Notice, that tropism was negative delta_score = delta_eval_king - delta_eval_tropism/2 if delta_score > 35: yield _("improves king safety") elif delta_score > 15: yield _("slightly improves king safety") def offencive_moves_rook (model, ply, phase): move = model.getMoveAtPly(ply-1).move fcord = FCORD(move) tcord = TCORD(move) board = model.getBoardAtPly(ply).board color = 1-board.color opcolor = 1-color # We also detect rook-to-open castlings if board.arBoard[tcord] == KING: if FLAG(move) == QUEEN_CASTLE: fcord = board.ini_rooks[color][0] tcord = tcord+1 elif FLAG(move) == KING_CASTLE: fcord = board.ini_rooks[color][1] tcord = tcord-1 if board.arBoard[tcord] != ROOK: return color = 1-board.color opcolor = 1-color pawns = board.boards[color][PAWN] oppawns = board.boards[opcolor][PAWN] ffile = fileBits[FILE(FCORD(move))] tfile = fileBits[FILE(tcord)] if ffile & pawns and not tfile & pawns and bin(pawns).count("1") >= 3: if not tfile & oppawns: yield _("moves a rook to an open file") else: yield _("moves an rook to a half-open file") def offencive_moves_fianchetto (model, ply, phase): board = model.getBoardAtPly(ply).board tcord = TCORD(model.getMoveAtPly(ply-1).move) movingcolor = 1-board.color if movingcolor == WHITE: if board.castling & W_OO and tcord == G2: yield _("moves bishop into fianchetto: %s") % "g2" elif board.castling & W_OOO and tcord == B2: yield _("moves bishop into fianchetto: %s") % "b2" else: if board.castling & B_OO and tcord == G7: yield _("moves bishop into fianchetto: %s") % "g7" elif board.castling & B_OOO and tcord == B7: yield _("moves bishop into fianchetto: %s") % "b7" def prefix_type (model, ply, phase): flag = FLAG(model.getMoveAtPly(ply-1).move) if flag in PROMOTIONS: yield _("promotes a Pawn to a %s") % reprPiece[PROMOTE_PIECE(flag)] elif flag in (KING_CASTLE, QUEEN_CASTLE): yield _("castles") def attack_type (model, ply, phase): # We set bishop value down to knight value, as it is what most people expect bishopBackup = PIECE_VALUES[BISHOP] PIECE_VALUES[BISHOP] = PIECE_VALUES[KNIGHT] board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply-1).board if ply - model.lowply >= 2: oldmove = model.getMoveAtPly(ply-2).move oldboard3 = model.getBoardAtPly(ply-2).board else: oldmove = None move = model.getMoveAtPly(ply-1).move tcord = TCORD(move) if oldboard.arBoard[tcord] != EMPTY: if not (board.variant == FISCHERRANDOMCHESS and \ FLAG(move) in (KING_CASTLE, QUEEN_CASTLE)): if oldmove and oldboard3.arBoard[TCORD(oldmove)] != EMPTY and \ TCORD(oldmove) == tcord: yield _("takes back material") else: see = staticExchangeEvaluate(oldboard, move) if see < 0: yield _("sacrifies material") elif see == 0: yield _("exchanges material") elif see > 0: yield _("captures material") PIECE_VALUES[BISHOP] = bishopBackup def defencive_moves_tactic (model, ply, phase): # ------------------------------------------------------------------------ # # Test if we threat something, or at least put more pressure on it # # ------------------------------------------------------------------------ # # We set bishop value down to knight value, as it is what most people expect bishopBackup = PIECE_VALUES[BISHOP] PIECE_VALUES[BISHOP] = PIECE_VALUES[KNIGHT] board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply-1).board move = model.getMoveAtPly(ply-1).move fcord = FCORD(move) tcord = TCORD(move) piece = board.arBoard[tcord] found_threatens = [] found_increases = [] # What do we attack now? board.setColor(1-board.color) for ncap in genCaptures(board): # getCaptures also generate promotions if FLAG(ncap) in PROMOTIONS: continue # We are only interested in the attacks of the piece we just moved if FCORD(ncap) != TCORD (move): continue # We don't want to move back if TCORD(ncap) == FCORD(move): continue # We don't thread the king. We check him! (in another function) if board.arBoard[TCORD(ncap)] == KING: continue # If we also was able to attack that cord last time, we don't care if validateMove(oldboard, newMove(FCORD(move), TCORD(ncap))): continue # Test if we threats our enemy, at least more than before see0 = staticExchangeEvaluate(oldboard, TCORD(ncap), 1-oldboard.color) see1 = staticExchangeEvaluate(board, TCORD(ncap), 1-oldboard.color) if see1 > see0: # If a new winning capture has been created if see1 > 0: # Find the easiest attack attacks = getAttacks (board, TCORD(ncap), board.color) v, cord = min((PIECE_VALUES[board.arBoard[fc]],fc) for fc in iterBits(attacks)) easiestAttack = newMove(cord, TCORD(ncap)) found_threatens.append(toSAN(board,easiestAttack, True)) # Even though we might not yet be strong enough, we might still # have strengthened another friendly attack else: found_increases.append(reprCord[TCORD(ncap)]) board.setColor(1-board.color) # -------------------------------------------------------------------- # # Test if we defend a one of our pieces # # -------------------------------------------------------------------- # found_defends = [] # Test which pieces were under attack used = [] for ncap in genCaptures(board): # getCaptures also generate promotions if FLAG(ncap) in PROMOTIONS: continue # We don't want to know about the same cord more than once if TCORD(ncap) in used: continue used.append(TCORD(ncap)) # If the attack was poining on the piece we just moved, we ignore it if TCORD(ncap) == FCORD(move) or TCORD(ncap) == TCORD(move): continue # If we were already defending the piece, we don't send a new # message if defends(oldboard, FCORD(move), TCORD(ncap)): continue # If the attack was not strong, we ignore it see = staticExchangeEvaluate(oldboard, ncap) if see < 0: continue v = defends(board, TCORD(move), TCORD(ncap)) # If the defend didn't help, it doesn't matter. Like defending a # bishop, threatened by a pawn, with a queen. # But on the other hand - it might still be a defend... # newsee = staticExchangeEvaluate(board, ncap) # if newsee <= see: continue if v: found_defends.append(reprCord[TCORD(ncap)]) # ------------------------------------------------------------------------ # # Test if we are rescuing an otherwise exposed piece # # ------------------------------------------------------------------------ # # Rescuing is only an option, if our own move wasn't an attack if oldboard.arBoard[tcord] == EMPTY: see0 = staticExchangeEvaluate(oldboard, fcord, oldboard.color) see1 = staticExchangeEvaluate(board, tcord, oldboard.color) if see1 > see0 and see1 > 0: yield _("rescues a %s") % reprPiece[board.arBoard[tcord]].lower() if found_threatens: yield _("threatens to win material by %s") % join(found_threatens) if found_increases: yield _("increases the pressure on %s") % join(found_increases) if found_defends: yield _("defends %s") % join(found_defends) PIECE_VALUES[BISHOP] = bishopBackup def offencive_moves_pin (model, ply, phase): board = model.getBoardAtPly(ply).board move = model.getMoveAtPly(ply-1).move fcord = FCORD(move) tcord = TCORD(move) piece = board.arBoard[tcord] ray = 0 if piece in (BISHOP, QUEEN): ray |= (ray45[tcord] | ray135[tcord]) & ~(ray45[fcord] | ray135[fcord]) if piece in (ROOK, QUEEN): ray |= (ray00[tcord] | ray90[tcord]) & ~(ray00[fcord] | ray90[fcord]) if ray: for c in iterBits(ray & board.friends[board.color]): # We don't pin on pieces that are less worth than us if not PIECE_VALUES[piece] < PIECE_VALUES[board.arBoard[c]]: continue # There should be zero friendly pieces in between ray = fromToRay[tcord][c] if ray & board.friends[1-board.color]: continue # There should be exactly one opponent piece in between op = clearBit(ray & board.friends[board.color], c) if bin(op).count("1") != 1: continue # The king can't be pinned pinned = lastBit(op) oppiece = board.arBoard[pinned] if oppiece == KING: continue # Yield yield _("pins an enemy %(oppiece)s on the %(piece)s at %(cord)s") % { 'oppiece': reprPiece[oppiece].lower(), 'piece': reprPiece[board.arBoard[c]].lower(), 'cord': reprCord[c]} def state_outpost (model, ply, phase): if phase >= 6: # Doesn't make sense in endgame return board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply-1).board color = 1-board.color opcolor = 1-color wpawns = board.boards[WHITE][PAWN] oldwpawns = oldboard.boards[WHITE][PAWN] bpawns = board.boards[BLACK][PAWN] oldbpawns = oldboard.boards[BLACK][PAWN] wpieces = board.boards[WHITE][BISHOP] | board.boards[WHITE][KNIGHT] oldwpieces = oldboard.boards[WHITE][BISHOP] | oldboard.boards[WHITE][KNIGHT] bpieces = board.boards[BLACK][BISHOP] | board.boards[BLACK][KNIGHT] oldbpieces = oldboard.boards[BLACK][BISHOP] | oldboard.boards[BLACK][KNIGHT] for cord in iterBits(wpieces): sides = isolaniMask[FILE(cord)] front = passedPawnMask[WHITE][cord] if outpost[WHITE][cord] and not bpawns & sides & front and \ (not oldwpieces & bitPosArray[cord] or \ oldbpawns & sides & front): yield 35, _("White has a new piece in outpost: %s") % reprCord[cord] for cord in iterBits(bpieces): sides = isolaniMask[FILE(cord)] front = passedPawnMask[BLACK][cord] if outpost[BLACK][cord] and not wpawns & sides & front and \ (not oldbpieces & bitPosArray[cord] or \ oldwpawns & sides & front): yield 35, _("Black has a new piece in outpost: %s") % reprCord[cord] def state_pawn (model, ply, phase): board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply-1).board color = 1-board.color opcolor = 1-color move = model.getMoveAtPly(ply-1).move pawns = board.boards[color][PAWN] oppawns = board.boards[opcolor][PAWN] oldpawns = oldboard.boards[color][PAWN] oldoppawns = oldboard.boards[opcolor][PAWN] # Passed pawns for cord in iterBits(pawns): if not oppawns & passedPawnMask[color][cord]: if color == WHITE: frontCords = fromToRay[cord][cord|56] else: frontCords = fromToRay[cord][cord&7] if frontCords & pawns: continue # Was this a passed pawn before? if oldpawns & bitPosArray[cord] and \ not oldoppawns & passedPawnMask[color][cord] and \ not frontCords & oldpawns: continue # Is this just a passed pawn that has been moved? if TCORD(move) == cord: frontCords |= bitPosArray[cord] if not frontCords & oldpawns and \ not oldoppawns & passedPawnMask[color][FCORD(move)]: continue score = (passedScores[color][cord>>3] * phase) yield score, _("%(color)s has a new passed pawn on %(cord)s") % { 'color': reprColor[color], 'cord': reprCord[cord]} # Double pawns found_doubles = [] found_halfopen_doubles = [] found_white_isolates = [] found_black_isolates = [] for file in range(8): bits = fileBits[file] count = bin(pawns & bits).count("1") oldcount = bin(oldpawns & bits).count("1") opcount = bin(oppawns & bits).count("1") oldopcount = bin(oldoppawns & bits).count("1") # Single pawn -> double pawns if count > oldcount >= 1: if not opcount: found_halfopen_doubles.append(reprFile[file]) else: found_doubles.append(reprFile[file]) # Closed file double pawn -> half-open file double pawn elif count > 1 and opcount == 0 and oldopcount > 0: found_halfopen_doubles.append(reprFile[file]) # Isolated pawns if color == WHITE: wpawns = pawns oldwpawns = oldpawns bpawns = oppawns oldbpawns = oldoppawns else: bpawns = pawns oldbpawns = oldpawns wpawns = oppawns oldwpawns = oldoppawns if wpawns & bits and not wpawns & isolaniMask[file] and \ (not oldwpawns & bits or oldwpawns & isolaniMask[file]): found_white_isolates.append(reprFile[file]) if bpawns & bits and not bpawns & isolaniMask[file] and \ (not oldbpawns & bits or oldbpawns & isolaniMask[file]): found_black_isolates.append(reprFile[file]) # We need to take care of 'worstcases' like: "got new double pawns in the a # file, in the half-open b, c and d files and in the open e and f files" doubles_count = len(found_doubles) + len(found_halfopen_doubles) if doubles_count > 0: parts = [] for type_, list_ in (("", found_doubles), (_("half-open")+" ", found_halfopen_doubles)): if len(list_) == 1: parts.append(_("in the %(x)s%(y)s file") % {'x': type_, 'y': list_[0]}) elif len(list_) >= 2: parts.append(_("in the %(x)s%(y)s files") % {'x': type_, 'y': join(list_)}) if doubles_count == 1: s = _("%(color)s got a double pawn %(place)s") else: s = _("%(color)s got new double pawns %(place)s") yield (8+phase)*2*doubles_count, s % {'color': reprColor[color], 'place': join(parts)} for (color_, list_) in ((WHITE, found_white_isolates), (BLACK, found_black_isolates)): if list_: yield 20*len(list_), ngettext("%(color)s got an isolated pawn in the %(x)s file", "%(color)s got isolated pawns in the %(x)s files", len(list_)) % {'color': reprColor[color_], 'x': join(list_)} # Stone wall if stonewall[color] & pawns == stonewall[color] and \ stonewall[color] & oldpawns != stonewall[color]: yield 10, _("%s moves pawns into stonewall formation") % reprColor[color] def state_destroysCastling (model, ply, phase): """ Does the move destroy the castling ability of the opponent """ # If the move is a castling, nobody will every care if the castling # possibilities has changed if FLAG(model.getMoveAtPly(ply-1).move) in (QUEEN_CASTLE, KING_CASTLE): return oldcastling = model.getBoardAtPly(ply-1).board.castling castling = model.getBoardAtPly(ply).board.castling if oldcastling & W_OOO and not castling & W_OOO: if oldcastling & W_OO and not castling & W_OO: yield 900/phase, _("%s can no longer castle") % reprColor[WHITE] else: yield 400/phase, _("%s can no longer castle in queenside") % reprColor[WHITE] elif oldcastling & W_OO and not castling & W_OO: yield 500/phase, _("%s can no longer castle in kingside") % reprColor[WHITE] if oldcastling & B_OOO and not castling & B_OOO: if oldcastling & B_OO and not castling & B_OO: yield 900/phase, _("%s can no longer castle") % reprColor[BLACK] else: yield 400/phase, _("%s can no longer castle in queenside") % reprColor[BLACK] elif oldcastling & B_OO and not castling & B_OO: yield 500/phase, _("%s can no longer castle in kingside") % reprColor[BLACK] def state_trappedBishops (model, ply, phase): """ Check for bishops trapped at A2/H2/A7/H7 """ board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply-1).board opcolor = board.color color = 1-opcolor move = model.getMoveAtPly(ply-1).move tcord = TCORD(move) # Only a pawn is able to trap a bishop if board.arBoard[tcord] != PAWN: return if tcord == B3: cord = A2 elif tcord == G3: cord = H2 elif tcord == B6: cord = A7 elif tcord == G6: cord = H7 else: return s = leval.evalTrappedBishops (board, opcolor) olds = leval.evalTrappedBishops (oldboard, opcolor) # We have got more points -> We have trapped a bishop if s > olds: yield 300/phase, _("%(opcolor)s has a new trapped bishop on %(cord)s") % { 'opcolor': reprColor[opcolor], 'cord': reprCord[cord]} def simple_tropism (model, ply, phase): board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply-1).board color = oldboard.color move = model.getMoveAtPly(ply-1).move fcord = FCORD(move) tcord = TCORD(move) arBoard = board.arBoard if arBoard[tcord] != PAWN: score = leval.evalKingTropism(board, color, phase) oldscore = leval.evalKingTropism(oldboard, color, phase) else: if color == WHITE: rank23 = brank67[BLACK] else: rank23 = brank67[WHITE] if bitPosArray[fcord] & rank23: yield 2, _("develops a pawn: %s") % reprCord[tcord] else: yield 1, _("brings a pawn closer to the backrow: %s") % \ reprCord[tcord] return king = board.kings[color] opking = board.kings[1-color] if score > oldscore: # in FISCHERRANDOMCHESS unusual casting case the tcord is # the involved rook's position, not the king's destination! flag = move >> 12 if flag in (KING_CASTLE, QUEEN_CASTLE): piece = KING else: piece = arBoard[tcord] if phase >= 5 or distance[piece][fcord][opking] < \ distance[piece][fcord][king]: yield score-oldscore, _("brings a %(piece)s closer to enemy king: %(cord)s") % { 'piece': reprPiece[piece], 'cord': reprCord[tcord]} else: yield (score-oldscore)*2, _("develops a %(piece)s: %(cord)s") % { 'piece': reprPiece[piece].lower(), 'cord': reprCord[tcord]} def simple_activity (model, ply, phase): board = model.getBoardAtPly(ply).board oldboard = model.getBoardAtPly(ply-1).board color = 1-board.color move = model.getMoveAtPly(ply-1).move fcord = FCORD(move) tcord = TCORD(move) board.setColor(1-board.color) moves = len([m for m in genAllMoves(board) if FCORD(m) == tcord]) board.setColor(1-board.color) oldmoves = len([m for m in genAllMoves(oldboard) if FCORD(m) == fcord]) if moves > oldmoves: yield (moves-oldmoves)/2, _("places a %(piece)s more active: %(cord)s") % { 'piece': reprPiece[board.arBoard[tcord]].lower(), 'cord': reprCord[tcord]} def tip_pawnStorm (model, ply, phase): """ If players are castled in different directions we should storm in opponent side """ if phase >= 6: # We don't use this in endgame return board = model.getBoardAtPly(ply).board #if not board.hasCastled[WHITE] or not board.hasCastled[BLACK]: # # Only applies after castling for both sides # return wking = board.boards[WHITE][KING] bking = board.boards[BLACK][KING] wleft = bin(board.boards[WHITE][PAWN] & left).count("1") wright = bin(board.boards[WHITE][PAWN] & right).count("1") bleft = bin(board.boards[BLACK][PAWN] & left).count("1") bright = bin(board.boards[BLACK][PAWN] & right).count("1") if wking & left and bking & right: if wright > bright: yield (wright+3-bright)*10, _("White should do pawn storm in right") elif bleft > wleft: yield (bright+3-wright)*10, _("Black should do pawn storm in left") if wking & right and bking & left: if wleft > bleft: yield (wleft+3-bleft)*10, _("White should do pawn storm in left") if bright > wright: yield (bleft+3-wleft)*10, _("Black should do pawn storm in right") def tip_mobility (model, ply, phase): board = model.getBoardAtPly(ply).board colorBackup = board.color # People need a chance to get developed #if model.ply < 16: # return board.setColor(WHITE) wmoves = len([move for move in genAllMoves(board) if \ KNIGHT <= board.arBoard[FCORD(move)] <= QUEEN and \ bitPosArray[TCORD(move)] & brank48[WHITE] and \ staticExchangeEvaluate(board, move) >= 0]) board.setColor(BLACK) bmoves = len([move for move in genAllMoves(board) if \ KNIGHT <= board.arBoard[FCORD(move)] <= QUEEN and \ bitPosArray[TCORD(move)] & brank48[BLACK] and \ staticExchangeEvaluate(board, move) >= 0]) board.setColor(colorBackup) if wmoves-phase >= (bmoves+1)*7: yield wmoves-bmoves, _("Black has a rather cramped position") elif wmoves-phase >= (bmoves+1)*3: yield wmoves-bmoves, _("Black has a slightly cramped position") elif bmoves-phase >= (wmoves+1)*7: yield wmoves-bmoves, _("White has a rather cramped position") elif bmoves-phase >= (wmoves+1)*3: yield wmoves-bmoves, _("White has a slightly cramped position") pychess-0.12beta3/lib/pychess/Utils/const.py0000755000175000017470000002311212175760273020127 0ustar tamasusers# -*- coding: UTF-8 -*- ################################################################################ # PyChess information # ################################################################################ NAME = "PyChess" ENGINES_XML_API_VERSION = "0.12" ################################################################################ # Player info # ################################################################################ # Player types LOCAL, ARTIFICIAL, REMOTE = range(3) # Engine strengths EASY, INTERMEDIATE, EXPERT = range(3) # Player colors WHITE, BLACK = range(2) ################################################################################ # Game values # ################################################################################ # Game states WAITING_TO_START, PAUSED, RUNNING, DRAW, WHITEWON, BLACKWON, KILLED, \ ADJOURNED, ABORTED, UNKNOWN_STATE = range(10) reprResult = ["*", "*", "*", "1/2-1/2", "1-0", "0-1", "?", "*", "?", "?"] UNDOABLE_STATES = (DRAW, WHITEWON, BLACKWON) UNFINISHED_STATES = (WAITING_TO_START, PAUSED, RUNNING, UNKNOWN_STATE) # Chess variants NORMALCHESS, CORNERCHESS, SHUFFLECHESS, FISCHERRANDOMCHESS, RANDOMCHESS, \ ASYMMETRICRANDOMCHESS, UPSIDEDOWNCHESS, PAWNSPUSHEDCHESS, PAWNSPASSEDCHESS, \ LOSERSCHESS, PAWNODDSCHESS, KNIGHTODDSCHESS, ROOKODDSCHESS, QUEENODDSCHESS, \ BLINDFOLDCHESS, HIDDENPAWNSCHESS, HIDDENPIECESCHESS, ALLWHITECHESS, \ ATOMICCHESS, BUGHOUSECHESS, CRAZYHOUSECHESS, SUICIDECHESS, \ WILDCASTLECHESS, WILDCASTLESHUFFLECHESS = range(24) UNSUPPORTED = (ATOMICCHESS, BUGHOUSECHESS, SUICIDECHESS) # Chess variant groups VARIANTS_BLINDFOLD, VARIANTS_ODDS, VARIANTS_SHUFFLE, VARIANTS_OTHER = range(4) # Action errors ACTION_ERROR_NOT_OUT_OF_TIME, \ ACTION_ERROR_CLOCK_NOT_STARTED, ACTION_ERROR_SWITCH_UNDERWAY, \ ACTION_ERROR_CLOCK_NOT_PAUSED, ACTION_ERROR_TOO_LARGE_UNDO, \ ACTION_ERROR_NONE_TO_ACCEPT, ACTION_ERROR_NONE_TO_WITHDRAW, \ ACTION_ERROR_NONE_TO_DECLINE, = range(8) # Game state reasons ABORTED_ADJUDICATION, ABORTED_AGREEMENT, ABORTED_COURTESY, ABORTED_EARLY, \ ABORTED_SERVER_SHUTDOWN, ADJOURNED_COURTESY, \ ADJOURNED_AGREEMENT, ADJOURNED_LOST_CONNECTION, ADJOURNED_SERVER_SHUTDOWN, \ ADJOURNED_COURTESY_WHITE, ADJOURNED_COURTESY_BLACK, \ ADJOURNED_LOST_CONNECTION_WHITE, ADJOURNED_LOST_CONNECTION_BLACK, \ DRAW_50MOVES, DRAW_ADJUDICATION, DRAW_AGREE, DRAW_CALLFLAG, DRAW_INSUFFICIENT, \ DRAW_LENGTH, DRAW_REPITITION, DRAW_STALEMATE, \ DRAW_BLACKINSUFFICIENTANDWHITETIME, DRAW_WHITEINSUFFICIENTANDBLACKTIME, \ WON_ADJUDICATION, WON_CALLFLAG, WON_DISCONNECTION, WON_MATE, WON_RESIGN, \ WON_NOMATERIAL, \ WHITE_ENGINE_DIED, BLACK_ENGINE_DIED, DISCONNECTED, UNKNOWN_REASON = range(33) UNDOABLE_REASONS = (DRAW_50MOVES, DRAW_INSUFFICIENT, DRAW_LENGTH, DRAW_REPITITION, DRAW_STALEMATE, DRAW_AGREE, DRAW_CALLFLAG, \ DRAW_BLACKINSUFFICIENTANDWHITETIME, \ DRAW_WHITEINSUFFICIENTANDBLACKTIME, \ WON_MATE, WON_NOMATERIAL, WON_CALLFLAG, WON_RESIGN) UNRESUMEABLE_REASONS = (DRAW_50MOVES, DRAW_INSUFFICIENT, DRAW_LENGTH, \ DRAW_REPITITION, DRAW_STALEMATE, WON_MATE, WON_NOMATERIAL) # Player actions RESIGNATION = "resignation" FLAG_CALL = "flag call" DRAW_OFFER = "draw offer" ABORT_OFFER = "abort offer" ADJOURN_OFFER = "adjourn offer" PAUSE_OFFER = "pause offer" RESUME_OFFER = "resume offer" SWITCH_OFFER = "switch offer" TAKEBACK_OFFER = "takeback offer" MATCH_OFFER = "match offer" HURRY_ACTION = "hurry action" CHAT_ACTION = "chat action" ACTIONS = (RESIGNATION, FLAG_CALL, DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, \ PAUSE_OFFER, RESUME_OFFER, SWITCH_OFFER, TAKEBACK_OFFER, \ MATCH_OFFER, HURRY_ACTION, CHAT_ACTION) OFFERS = (DRAW_OFFER, ABORT_OFFER, ADJOURN_OFFER, PAUSE_OFFER, \ RESUME_OFFER, SWITCH_OFFER, TAKEBACK_OFFER, MATCH_OFFER) INGAME_ACTIONS = (RESIGNATION, FLAG_CALL, DRAW_OFFER, ABORT_OFFER, \ ADJOURN_OFFER, PAUSE_OFFER, SWITCH_OFFER, HURRY_ACTION) # A few nice to have boards FEN_EMPTY = "4k3/8/8/8/8/8/8/4K3 w - - 0 1" FEN_START = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" ################################################################################ # Search values # ################################################################################ hashfALPHA, hashfBETA, hashfEXACT, hashfBAD = range(4) # Engine modes NORMAL, ANALYZING, INVERSE_ANALYZING = range(3) ################################################################################ # Piece types # ################################################################################ # BPAWN is a pawn that moves in the opposite direction EMPTY, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, BPAWN = range(8) # Is sliding piece sliders = [ False, False, False, True, True, True, False, False ] # Piece signs reprSign = ["", "P", "N", "B", "R", "Q", "K"] chr2Sign = {"k":KING, "q": QUEEN, "r": ROOK, "b": BISHOP, "n": KNIGHT, "p":PAWN} chrU2Sign = {"K":KING, "Q": QUEEN, "R": ROOK, "B": BISHOP, "N": KNIGHT, "P":PAWN} ################################################################################ # Move values # ################################################################################ NORMAL_MOVE, QUEEN_CASTLE, KING_CASTLE, ENPASSANT, \ KNIGHT_PROMOTION, BISHOP_PROMOTION, ROOK_PROMOTION, QUEEN_PROMOTION, NULL_MOVE, DROP = range(10) PROMOTIONS = (QUEEN_PROMOTION, ROOK_PROMOTION, BISHOP_PROMOTION, KNIGHT_PROMOTION) # Algebraic notation types: Short, Long, Figure and Simpe SAN, LAN, FAN, AN = range(4) # Castling notation types: e.g., O-O, e1g1, e1h1 CASTLE_SAN, CASTLE_KK, CASTLE_KR = range(3) FAN_PIECES = [ ["", u"♙", u"♘", u"♗", u"♖", u"♕", u"♔", ""], ["", u"♟", u"♞", u"♝", u"♜", u"♛", u"♚", ""] ] ################################################################################ # Castling values # ################################################################################ W_OO, W_OOO, B_OO, B_OOO = [2**i for i in range(4)] CAS_FLAGS = ((W_OOO,W_OO),(B_OOO,B_OO)) W_CASTLED, B_CASTLED = [2**i for i in range(2)] ################################################################################ # Cords types # ################################################################################ A1, B1, C1, D1, E1, F1, G1, H1, \ A2, B2, C2, D2, E2, F2, G2, H2, \ A3, B3, C3, D3, E3, F3, G3, H3, \ A4, B4, C4, D4, E4, F4, G4, H4, \ A5, B5, C5, D5, E5, F5, G5, H5, \ A6, B6, C6, D6, E6, F6, G6, H6, \ A7, B7, C7, D7, E7, F7, G7, H7, \ A8, B8, C8, D8, E8, F8, G8, H8 = range (64) reprCord = [ "a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1", "a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2", "a3", "b3", "c3", "d3", "e3", "f3", "g3", "h3", "a4", "b4", "c4", "d4", "e4", "f4", "g4", "h4", "a5", "b5", "c5", "d5", "e5", "f5", "g5", "h5", "a6", "b6", "c6", "d6", "e6", "f6", "g6", "h6", "a7", "b7", "c7", "d7", "e7", "f7", "g7", "h7", "a8", "b8", "c8", "d8", "e8", "f8", "g8", "h8" ] reprFile = ["a", "b", "c", "d", "e", "f", "g", "h"] reprRank = ["1", "2", "3", "4", "5", "6", "7", "8"] cordDic = {} for cord, name in enumerate(reprCord): cordDic[name] = cord ################################################################################ # Internet Chess # ################################################################################ IC_CONNECTED, IC_DISCONNECTED = range(2) IC_POS_ISOLATED, IC_POS_OBSERVING_EXAMINATION, IC_POS_EXAMINATING, \ IC_POS_OP_TO_MOVE, IC_POS_ME_TO_MOVE, IC_POS_OBSERVING, IC_POS_INITIAL = range(7) # Rating deviations DEVIATION_NONE, DEVIATION_ESTIMATED, DEVIATION_PROVISIONAL = range(3) IC_STATUS_PLAYING, IC_STATUS_ACTIVE, IC_STATUS_BUSY, IC_STATUS_OFFLINE, \ IC_STATUS_AVAILABLE, IC_STATUS_NOT_AVAILABLE, IC_STATUS_EXAMINING, \ IC_STATUS_IDLE, IC_STATUS_IN_TOURNAMENT, IC_STATUS_RUNNING_SIMUL_MATCH, \ IC_STATUS_UNKNOWN = range(11) ################################################################################ # User interface # ################################################################################ # Hint modes OPENING, ENDGAME, HINT, SPY = ["opening", "endgame", "hint", "spy"] # Sound settings SOUND_MUTE, SOUND_BEEP, SOUND_SELECT, SOUND_URI = range(4) # Brush types. Send piece object for Piece brush CLEAR, ENPAS = range(2) # Main menu items GAME_MENU_ITEMS = ("save_game1", "save_game_as1", "export_position1", "properties1", "close1") ACTION_MENU_ITEMS = ("abort", "adjourn", "draw", "pause1", "resume1", "undo1", "call_flag", "resign", "ask_to_move") VIEW_MENU_ITEMS = ("rotate_board1", "show_sidepanels", "hint_mode", "spy_mode") MENU_ITEMS = GAME_MENU_ITEMS + ACTION_MENU_ITEMS + VIEW_MENU_ITEMS ################################################################################ # Subprocess # ################################################################################ SUBPROCESS_PTY, SUBPROCESS_SUBPROCESS, SUBPROCESS_FORK = range(3) LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR = range(4) STANDARD_LOGGING = False pychess-0.12beta3/lib/pychess/Utils/logic.py0000755000175000017470000001043712161415524020073 0ustar tamasusers""" This module contains chess logic functins for the pychess client. They are based upon the lutils modules, but supports standard object types and is therefore not as fast. """ from lutils import lmovegen from lutils.validator import validateMove from lutils.lmove import FCORD, TCORD from lutils import ldraw from Cord import Cord from Move import Move from const import * from lutils.bitboard import iterBits from lutils.attack import getAttacks from pychess.Variants.losers import testKingOnly def getDestinationCords (board, cord): tcords = [] for move in lmovegen.genAllMoves (board.board): if FCORD(move) == cord.cord: if not board.board.willLeaveInCheck(move): tcords.append(Cord(TCORD(move))) return tcords def isClaimableDraw (board): lboard = board.board if lboard.repetitionCount () >= 3: return True if ldraw.testFifty (lboard): return True return False def playerHasMatingMaterial (board, playercolor): lboard = board.board return ldraw.testPlayerMatingMaterial(lboard, playercolor) def getStatus (board): lboard = board.board if board.variant == LOSERSCHESS: if testKingOnly(lboard): if board.color == WHITE: status = WHITEWON else: status = BLACKWON return status, WON_NOMATERIAL else: if ldraw.testMaterial (lboard): return DRAW, DRAW_INSUFFICIENT hasMove = False for move in lmovegen.genAllMoves (lboard): lboard.applyMove(move) if lboard.opIsChecked(): lboard.popMove() continue lboard.popMove() hasMove = True break if not hasMove: if lboard.isChecked(): if board.variant == LOSERSCHESS: if board.color == WHITE: status = WHITEWON else: status = BLACKWON else: if board.color == WHITE: status = BLACKWON else: status = WHITEWON return status, WON_MATE else: if board.variant == LOSERSCHESS: if board.color == WHITE: status = WHITEWON else: status = BLACKWON return status, DRAW_STALEMATE else: return DRAW, DRAW_STALEMATE if lboard.repetitionCount () >= 3: return DRAW, DRAW_REPITITION if ldraw.testFifty (lboard): return DRAW, DRAW_50MOVES return RUNNING, UNKNOWN_REASON def standard_validate (board, move): return validateMove (board.board, move.move) and \ not board.board.willLeaveInCheck(move.move) def validate (board, move): if board.variant == LOSERSCHESS: capture = move.flag == ENPASSANT or board[move.cord1] != None if capture: return standard_validate (board, move) else: can_capture = False can_escape = False ischecked = board.board.isChecked() for c in lmovegen.genCaptures(board.board): can_capture = True if ischecked: if not board.board.willLeaveInCheck(c): can_escape = True break else: break if can_capture: if ischecked and not can_escape: return standard_validate (board, move) else: return False else: return standard_validate (board, move) else: return standard_validate (board, move) def getMoveKillingKing (board): """ Returns a move from the current color, able to capture the opponent king """ lboard = board.board color = lboard.color opking = lboard.kings[1-color] for cord in iterBits (getAttacks(lboard, opking, color)): return Move(Cord(cord), Cord(opking), board) def genCastles (board): for move in lmovegen.genCastles(board.board): yield Move(move) def legalMoveCount (board): moves = 0 for move in lmovegen.genAllMoves (board.board): if not board.board.willLeaveInCheck(move): moves += 1 return moves pychess-0.12beta3/lib/pychess/Utils/eco.py0000644000175000017470000000166512161415524017544 0ustar tamasusersimport os import atexit import gettext import sqlite3 import struct from pychess.System.prefix import addDataPrefix, isInstalled db_path = os.path.join(addDataPrefix("eco.db")) if os.path.exists(db_path): conn = sqlite3.connect(db_path, check_same_thread = False) atexit.register(conn.close) ECO_OK = True else: print "Warning: eco.db not find, run pgn2ecodb.sh" ECO_OK = False if isInstalled(): mofile = gettext.find('pychess') else: mofile = gettext.find('pychess', localedir=addDataPrefix("lang")) if mofile is None: lang = "en" else: lang = mofile.split(os.sep)[-3] # big-endian, unsigned long long (uint64) hash_struct = struct.Struct('>Q') def get_eco(hash): if not ECO_OK: return None cur = conn.cursor() select = "select eco, opening, variation from openings where hash=? and lang=?" cur.execute(select, (buffer(hash_struct.pack(hash)), lang)) return cur.fetchone() pychess-0.12beta3/lib/pychess/Utils/EndgameTable.py0000644000175000017470000000452212161415524021301 0ustar tamasusersfrom gobject import GObject, SIGNAL_RUN_FIRST from Move import Move from lutils.egtb_k4it import egtb_k4it from lutils.egtb_gaviota import egtb_gaviota providers = [] class EndgameTable(GObject): """ Wrap the low-level providers of exact endgame knowledge. """ __gsignals__ = { "scored": (SIGNAL_RUN_FIRST, None, (object,)), } def __init__ (self): GObject.__init__(self) global providers if not providers: providers = [ egtb_gaviota(), egtb_k4it() ] self.providers = providers def _pieceCounts (self, board): return sorted([ bin(board.friends[i]).count("1") for i in range(2) ]) def scoreGame (self, lBoard, omitDepth=False, probeSoft=False): """ Return result and depth to mate. (Intended for engine use.) lBoard: A low-level board structure omitDepth: Look up only the game's outcome (may save time) probeSoft: Fail if the probe would require disk or network access. Return value: game_result: Either WHITEWON, DRAW, BLACKWON, or (on failure) None depth: Depth to mate, or (if omitDepth or the game is drawn) None """ pc = self._pieceCounts(lBoard) for provider in self.providers: if provider.supports(pc): result, depth = provider.scoreGame(lBoard, needDepth, probeSoft) if result is not None: return result, depth return None, None def scoreAllMoves (self, lBoard): """ Return each move's result and depth to mate. lBoard: A low-level board structure Return value: a list, with best moves first, of: move: A high-level move structure game_result: Either WHITEWON, DRAW, BLACKWON depth: Depth to mate """ pc = self._pieceCounts(lBoard) for provider in self.providers: if provider.supports(pc): results = provider.scoreAllMoves(lBoard) if results: ret = [] for lMove, result, depth in results: ret.append( (Move(lMove), result, depth) ) self.emit("scored", (lBoard, ret)) return ret return [] pychess-0.12beta3/lib/pychess/Utils/Cord.py0000755000175000017470000000445412161415524017667 0ustar tamasusersfrom lutils.lmove import FILE, RANK class CordFormatException(Exception): pass class Cord: def __init__ (self, var1, var2 = None): """ Inits a new highlevel cord object. The cord B3 can be inited in the folowing ways: Cord(17), Cord("b3"), Cord(1,2), Cord("b",3) """ if var2 == None: if type(var1) == int: # We assume the format Cord(17) self.x = FILE(var1) self.y = RANK(var1) else: # We assume the format Cord("b3") self.x = self.charToInt(var1[0]) self.y = int(var1[1]) - 1 else: if type(var1) == str: # We assume the format Cord("b",3) self.x = self.charToInt(var1) self.y = var2 -1 else: # We assume the format Cord(1,2) self.x = var1 self.y = var2 def _get_cord (self): return self.y*8+self.x cord = property(_get_cord) def _get_cx (self): return self.intToChar(self.x) cx = property(_get_cx) def _get_cy (self): return str(self.y+1) cy = property(_get_cy) def intToChar (self, x): #assert 0 <= x <= 7 return chr(x + ord('a')) def charToInt (self, char): a = ord(char) if ord('A') <= a <= ord('H'): a -= ord('A'); elif ord('a') <= a <= ord('h'): a -= ord('a'); else: raise CordFormatException, "x < 0 || x > 7 (%s, %d)" % (char, a) return a def _set_cords (self, (x, y)): self.x, self.y = x, y def _get_cords (self): return (self.x, self.y) cords = property(_get_cords, _set_cords) def __cmp__ (self, other): if other == None: return 1 if cmp (self.x, other.x): return cmp (self.x, other.x) if cmp (self.y, other.y): return cmp (self.y, other.y) return 0 def __eq__ (self, other): return other != None and other.x == self.x and other.y == self.y def __ne__ (self, other): return not self.__eq__(other) def __repr__ (self): return self.cx + self.cy def __hash__ (self): return self.x*8+self.y pychess-0.12beta3/lib/pychess/Utils/IconLoader.py0000755000175000017470000000070612161415524021013 0ustar tamasusersfrom gtk import icon_theme_get_default, ICON_LOOKUP_USE_BUILTIN from pychess.System.Log import log it = icon_theme_get_default() def load_icon(size, *alternatives): alternatives = list(alternatives) name = alternatives.pop(0) try: return it.load_icon(name, size, ICON_LOOKUP_USE_BUILTIN) except: if alternatives: return load_icon(size, *alternatives) log.warn("no %s icon in icon-theme-gnome" % name) pychess-0.12beta3/lib/pychess/Utils/repr.py0000755000175000017470000000614112161415524017743 0ustar tamasusersfrom const import * import __builtin__ if '_' not in __builtin__.__dict__: __builtin__.__dict__['_'] = lambda s: s reprColor = [_("White"), _("Black")] reprPiece = ["Empty", _("Pawn"), _("Knight"), _("Bishop"), _("Rook"), _("Queen"), _("King"), "BPawn"] localReprSign = ["", _("P"), _("N"), _("B"), _("R"), _("Q"), _("K")] reprResult_long = { DRAW: _("The game ended in a draw"), WHITEWON: _("%(white)s won the game"), BLACKWON: _("%(black)s won the game"), KILLED: _("The game has been killed"), ADJOURNED: _("The game has been adjourned"), ABORTED: _("The game has been aborted"), } reprReason_long = { DRAW_INSUFFICIENT: _("Because neither player has got sufficient material to mate"), DRAW_REPITITION: _("Because the same position was repeated three times in a row"), DRAW_50MOVES: _("Because the last 50 moves brought nothing new"), DRAW_CALLFLAG: _("Because both players ran out of time"), DRAW_STALEMATE: _("Because %(mover)s stalemated"), DRAW_AGREE: _("Because the players agreed to"), DRAW_ADJUDICATION: _("Because of adjudication by an admin"), DRAW_LENGTH: _("Because the game exceed the max length"), DRAW_BLACKINSUFFICIENTANDWHITETIME: _("Because %(white)s ran out of time and %(black)s hasn't got insufficient material to mate"), DRAW_WHITEINSUFFICIENTANDBLACKTIME: _("Because %(black)s ran out of time and %(white)s hasn't got insufficient material to mate"), WON_RESIGN: _("Because %(loser)s resigned"), WON_CALLFLAG: _("Because %(loser)s ran out of time"), WON_MATE: _("Because %(loser)s has been checkmated"), WON_DISCONNECTION: _("Because %(loser)s disconnected"), WON_ADJUDICATION: _("Because of adjudication by an admin"), WON_NOMATERIAL: _("Because %(loser)s lost all pieces but the king"), ADJOURNED_LOST_CONNECTION: _("Because a player lost connection"), ADJOURNED_AGREEMENT: _("Because both players agreed to adjourn the game"), ADJOURNED_SERVER_SHUTDOWN: _("Because the server was shut down"), ADJOURNED_COURTESY: _("Because a player lost connection and the other player requested adjournment"), ADJOURNED_COURTESY_WHITE: _("Because %(black)s lost connection to the server and %(white)s requested adjournment"), ADJOURNED_COURTESY_BLACK: _("Because %(white)s lost connection to the server and %(black)s requested adjournment"), ADJOURNED_LOST_CONNECTION_WHITE: _("Because %(white)s lost connection to the server"), ADJOURNED_LOST_CONNECTION_BLACK: _("Because %(black)s lost connection to the server"), ABORTED_ADJUDICATION: _("Because of adjudication by an admin"), ABORTED_AGREEMENT: _("Because both players agreed to"), ABORTED_COURTESY: _("Because of courtesy by a player"), ABORTED_EARLY: _("Because a player quit. No winner was found due to the early phase of the game"), ABORTED_SERVER_SHUTDOWN: _("Because the server was shut down"), WHITE_ENGINE_DIED: _("Because the %(white)s engine died"), BLACK_ENGINE_DIED: _("Because the %(black)s engine died"), DISCONNECTED: _("Because the connection to the server was lost"), UNKNOWN_REASON: _("The reason is unknown") } pychess-0.12beta3/lib/pychess/Utils/GameModel.py0000644000175000017470000010013512174451010020612 0ustar tamasusersfrom collections import defaultdict from threading import RLock import traceback import cStringIO import datetime import Queue from gobject import SIGNAL_RUN_FIRST, TYPE_NONE, GObject from pychess.Savers.ChessFile import LoadingError from pychess.Players.Player import PlayerIsDead, TurnInterrupt from pychess.System.ThreadPool import PooledThread, pool from pychess.System.protoopen import protoopen, protosave, isWriteable from pychess.System.Log import log from pychess.Utils.Move import Move, toSAN from pychess.Utils.eco import get_eco from pychess.Variants.normal import NormalChess from pychess.Variants import variants from logic import getStatus, isClaimableDraw, playerHasMatingMaterial from const import * def undolocked (f): def newFunction(*args, **kw): self = args[0] log.debug("undolocked: adding func to queue: %s %s %s\n" % \ (repr(f), repr(args), repr(kw))) self.undoQueue.put((f, args, kw)) locked = self.undoLock.acquire(blocking=False) if locked: try: while True: try: func, args, kw = self.undoQueue.get_nowait() log.debug("undolocked: running queued func: %s %s %s\n" % \ (repr(func), repr(args), repr(kw))) func(*args, **kw) except Queue.Empty: break finally: self.undoLock.release() return newFunction def inthread (f): def newFunction(*args, **kw): pool.start(f, *args, **kw) return newFunction class GameModel (GObject, PooledThread): """ GameModel contains all available data on a chessgame. It also has the task of controlling players actions and moves """ __gsignals__ = { # game_started is emitted when control is given to the players for the # first time. Notice this is after players.start has been called. "game_started": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), # game_changed is emitted when a move has been made. "game_changed": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), # moves_undoig is emitted when a undoMoves call has been accepted, but # before anywork has been done to execute it. "moves_undoing": (SIGNAL_RUN_FIRST, TYPE_NONE, (int,)), # moves_undone is emitted after n moves have been undone in the # gamemodel and the players. "moves_undone": (SIGNAL_RUN_FIRST, TYPE_NONE, (int,)), # game_unended is emitted if moves have been undone, such that the game # which had previously ended, is now again active. "game_unended": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), # game_loading is emitted if the GameModel is about to load in a chess # game from a file. "game_loading": (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), # game_loaded is emitted after the chessformat handler has loaded in # all the moves from a file to the game model. "game_loaded": (SIGNAL_RUN_FIRST, TYPE_NONE, (object,)), # game_saved is emitted in the end of model.save() "game_saved": (SIGNAL_RUN_FIRST, TYPE_NONE, (str,)), # game_ended is emitted if the models state has been changed to an # "ended state" "game_ended": (SIGNAL_RUN_FIRST, TYPE_NONE, (int,)), # game_terminated is emitted if the game was terminated. That is all # players and clocks were stopped, and it is no longer possible to # resume the game, even by undo. "game_terminated": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), # game_paused is emitted if the game was successfully paused. "game_paused": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), # game_paused is emitted if the game was successfully resumed from a # pause. "game_resumed": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), # action_error is currently only emitted by ICGameModel, in the case # the "web model" didn't accept the action you were trying to do. "action_error": (SIGNAL_RUN_FIRST, TYPE_NONE, (object, int)), # players_changed is emitted if the players list was changed. "players_changed": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), "analyzer_added": (SIGNAL_RUN_FIRST, None, (object, str)), "analyzer_removed": (SIGNAL_RUN_FIRST, None, (object, str)), "analyzer_paused": (SIGNAL_RUN_FIRST, None, (object, str)), "analyzer_resumed": (SIGNAL_RUN_FIRST, None, (object, str)), # opening_changed is emitted if the move changed the opening. "opening_changed": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), # variations_changed is emitted if a variation was added/deleted. "variations_changed": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), } def __init__ (self, timemodel=None, variant=NormalChess): GObject.__init__(self) self.variant = variant self.boards = [variant.board(setup=True)] self.moves = [] self.players = [] self.gameno = 0 self.variations = [self.boards] self.status = WAITING_TO_START self.reason = UNKNOWN_REASON self.timemodel = timemodel self.connections = defaultdict(list) # mainly for IC subclasses now = datetime.datetime.now() self.tags = { "Event": _("Local Event"), "Site": _("Local Site"), "Round": 1, "Year": now.year, "Month": now.month, "Day": now.day, "Time": "%02d:%02d:00" % (now.hour, now.minute), "Result": "*", } if self.timemodel: self.tags["TimeControl"] = \ "%d+%d" % (self.timemodel.minutes*60, self.timemodel.gain) # Notice: tags["WhiteClock"] and tags["BlackClock"] are never set # on the gamemodel, but simply written or read during saving/ # loading from pgn. If you want to know the time left for a player, # check the time model. # Keeps track of offers, so that accepts can be spotted self.offers = {} # True if the game has been changed since last save self.needsSave = False # The uri the current game was loaded from, or None if not a loaded game self.uri = None self.spectators = {} self.applyingMoveLock = RLock() self.undoLock = RLock() self.undoQueue = Queue.Queue() def __repr__ (self): s = " 0: s += ", move=%s" % self.moves[-1] s += ", variant=%s" % self.variant.name s += ", status=%s, reason=%s" % (str(self.status), str(self.reason)) s += ", players=%s" % str(self.players) s += ", tags=%s" % str(self.tags) if len(self.boards) > 0: s += "\nboard=%s" % self.boards[-1] return s + ")>" @property def display_text (self): if self.variant == NormalChess and self.timemodel is None: return "[ " + _("Untimed") + " ]" else: t = "[ " if self.variant != NormalChess: t += self.variant.name + " " if self.timemodel is not None: t += self.timemodel.display_text + " " return t + "]" def setPlayers (self, players): assert self.status == WAITING_TO_START self.players = players for player in self.players: self.connections[player].append(player.connect("offer", self.offerRecieved)) self.connections[player].append(player.connect("withdraw", self.withdrawRecieved)) self.connections[player].append(player.connect("decline", self.declineRecieved)) self.connections[player].append(player.connect("accept", self.acceptRecieved)) self.tags["White"] = str(self.players[WHITE]) self.tags["Black"] = str(self.players[BLACK]) self.emit("players_changed") def start_analyzer (self, analyzer_type): from pychess.Players.engineNest import init_engine analyzer = init_engine(analyzer_type, self) if analyzer is None: return analyzer.setOptionInitialBoard(self) self.spectators[analyzer_type] = analyzer self.emit("analyzer_added", analyzer, analyzer_type) return analyzer def remove_analyzer (self, analyzer_type): try: analyzer = self.spectators[analyzer_type] except KeyError: return analyzer.end(KILLED, UNKNOWN_REASON) self.emit("analyzer_removed", analyzer, analyzer_type) del self.spectators[analyzer_type] def resume_analyzer (self, analyzer_type): try: analyzer = self.spectators[analyzer_type] except KeyError: analyzer = self.start_analyzer(analyzer_type) if analyzer is None: return analyzer.resume() analyzer.setOptionInitialBoard(self) self.emit("analyzer_resumed", analyzer, analyzer_type) def pause_analyzer (self, analyzer_type): try: analyzer = self.spectators[analyzer_type] except KeyError: return analyzer.pause() self.emit("analyzer_paused", analyzer, analyzer_type) def restart_analyzer (self, analyzer_type): self.remove_analyzer(analyzer_type) self.start_analyzer(analyzer_type) if self.isPlayingICSGame(): self.pause_analyzer(analyzer_type) def setOpening(self): if self.ply > 40: return if self.ply > 0: opening = get_eco(self.getBoardAtPly(self.ply).board.hash) else: opening = ("", "", "") if opening is not None: self.tags["ECO"] = opening[0] self.tags["Opening"] = opening[1] self.tags["Variation"] = opening[2] self.emit("opening_changed") ############################################################################ # Board stuff # ############################################################################ def _get_ply (self): return self.boards[-1].ply ply = property(_get_ply) def _get_lowest_ply (self): return self.boards[0].ply lowply = property(_get_lowest_ply) def _get_curplayer (self): try: return self.players[self.getBoardAtPly(self.ply).color] except IndexError: log.error("%s %s\n" % (self.players, self.getBoardAtPly(self.ply).color)) raise curplayer = property(_get_curplayer) def _get_waitingplayer (self): try: return self.players[1 - self.getBoardAtPly(self.ply).color] except IndexError: log.error("%s %s\n" % (self.players, 1 - self.getBoardAtPly(self.ply).color)) raise waitingplayer = property(_get_waitingplayer) def _plyToIndex (self, ply): index = ply - self.lowply if index < 0: raise IndexError, "%s < %s\n" % (ply, self.lowply) return index def getBoardAtPly (self, ply, variation=0): try: return self.variations[variation][self._plyToIndex(ply)] except: log.error("%d\t%d\t%d\t%d\n" % (self.lowply, ply, self.ply, len(self.variations[variation]))) raise def getMoveAtPly (self, ply, variation=0): try: return Move(self.variations[variation][self._plyToIndex(ply)+1].board.lastMove) except IndexError: log.error("%d\t%d\t%d\t%d\n" % (self.lowply, ply, self.ply, len(self.moves))) raise def isObservationGame (self): if self.players[0].__type__ == LOCAL or self.players[1].__type__ == LOCAL: return False else: return True def isEngine2EngineGame (self): if self.players[0].__type__ == ARTIFICIAL and self.players[1].__type__ == ARTIFICIAL: return True else: return False def isPlayingICSGame(self): if self.players and self.status in (WAITING_TO_START, PAUSED, RUNNING): if self.players[0].__type__ == LOCAL and self.players[1].__type__ == REMOTE or \ self.players[1].__type__ == LOCAL and self.players[0].__type__ == REMOTE: return True return False ############################################################################ # Offer management # ############################################################################ def offerRecieved (self, player, offer): log.debug("GameModel.offerRecieved: offerer=%s %s\n" % (repr(player), offer)) if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer.type == HURRY_ACTION: opPlayer.hurry() elif offer.type == CHAT_ACTION: opPlayer.putMessage(offer.param) elif offer.type == RESIGNATION: if player == self.players[WHITE]: self.end(BLACKWON, WON_RESIGN) else: self.end(WHITEWON, WON_RESIGN) elif offer.type == FLAG_CALL: assert self.timemodel is not None if self.timemodel.getPlayerTime(player.color) <= 0: if self.timemodel.getPlayerTime(1-player.color) <= 0: self.end(DRAW, DRAW_CALLFLAG) elif not playerHasMatingMaterial(self.boards[-1], 1-player.color): if player.color == WHITE: self.end(DRAW, DRAW_BLACKINSUFFICIENTANDWHITETIME) else: self.end(DRAW, DRAW_WHITEINSUFFICIENTANDBLACKTIME) else: if player == self.players[BLACK]: self.end(WHITEWON, WON_CALLFLAG) else: self.end(BLACKWON, WON_CALLFLAG) else: player.offerError(offer, ACTION_ERROR_NOT_OUT_OF_TIME) elif offer.type == DRAW_OFFER and isClaimableDraw(self.boards[-1]): reason = getStatus(self.boards[-1])[1] self.end(DRAW, reason) elif offer.type == TAKEBACK_OFFER and offer.param < self.lowply: player.offerError(offer, ACTION_ERROR_TOO_LARGE_UNDO) elif offer.type in OFFERS: if offer not in self.offers: log.debug("GameModel.offerRecieved: doing %s.offer(%s)\n" % \ (repr(opPlayer), offer)) self.offers[offer] = player opPlayer.offer(offer) # If we updated an older offer, we want to delete the old one for offer_ in self.offers.keys(): if offer.type == offer_.type and offer != offer_: del self.offers[offer_] def withdrawRecieved (self, player, offer): log.debug("GameModel.withdrawRecieved: withdrawer=%s %s\n" % \ (repr(player), offer)) if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer in self.offers and self.offers[offer] == player: del self.offers[offer] opPlayer.offerWithdrawn(offer) else: player.offerError(offer, ACTION_ERROR_NONE_TO_WITHDRAW) def declineRecieved (self, player, offer): log.debug("GameModel.declineRecieved: decliner=%s %s\n" % (repr(player), offer)) if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer in self.offers and self.offers[offer] == opPlayer: del self.offers[offer] log.debug("GameModel.declineRecieved: declining %s\n" % offer) opPlayer.offerDeclined(offer) else: player.offerError(offer, ACTION_ERROR_NONE_TO_DECLINE) def acceptRecieved (self, player, offer): log.debug("GameModel.acceptRecieved: accepter=%s %s\n" % (repr(player), offer)) if player == self.players[WHITE]: opPlayer = self.players[BLACK] else: opPlayer = self.players[WHITE] if offer in self.offers and self.offers[offer] == opPlayer: if offer.type == DRAW_OFFER: self.end(DRAW, DRAW_AGREE) elif offer.type == TAKEBACK_OFFER: log.debug("GameModel.acceptRecieved: undoMoves(%s)\n" % \ (self.ply - offer.param)) self.undoMoves(self.ply - offer.param) elif offer.type == ADJOURN_OFFER: self.end(ADJOURNED, ADJOURNED_AGREEMENT) elif offer.type == ABORT_OFFER: self.end(ABORTED, ABORTED_AGREEMENT) elif offer.type == PAUSE_OFFER: self.pause() elif offer.type == RESUME_OFFER: self.resume() del self.offers[offer] else: player.offerError(offer, ACTION_ERROR_NONE_TO_ACCEPT) ############################################################################ # Data stuff # ############################################################################ def loadAndStart (self, uri, loader, gameno, position): assert self.status == WAITING_TO_START uriIsFile = type(uri) != str if not uriIsFile: chessfile = loader.load(protoopen(uri)) else: chessfile = loader.load(uri) self.gameno = gameno self.emit("game_loading", uri) try: chessfile.loadToModel(gameno, position, self) #Postpone error raising to make games loadable to the point of the error except LoadingError, e: error = e else: error = None if self.players: self.players[WHITE].setName(self.tags["White"]) self.players[BLACK].setName(self.tags["Black"]) self.emit("game_loaded", uri) self.needsSave = False if not uriIsFile: self.uri = uri else: self.uri = None # Even if the game "starts ended", the players should still be moved # to the last position, so analysis is correct, and a possible "undo" # will work as expected. for spectator in self.spectators.values(): spectator.setOptionInitialBoard(self) for player in self.players: player.setOptionInitialBoard(self) if self.timemodel: self.timemodel.setMovingColor(self.boards[-1].color) if self.status == RUNNING: if self.timemodel and self.ply >= 2: self.timemodel.start() self.status = WAITING_TO_START self.start() if error: raise error def save (self, uri, saver, append, position=None): if type(uri) == str: fileobj = protosave(uri, append) self.uri = uri else: fileobj = uri self.uri = None saver.save(fileobj, self, position) self.needsSave = False self.emit("game_saved", uri) ############################################################################ # Run stuff # ############################################################################ def run (self): log.debug("GameModel.run: Starting. self=%s\n" % self) # Avoid racecondition when self.start is called while we are in self.end if self.status != WAITING_TO_START: return self.status = RUNNING for player in self.players + self.spectators.values(): player.start() log.debug("GameModel.run: emitting 'game_started' self=%s\n" % self) self.emit("game_started") # Let GameModel end() itself on games started with loadAndStart() self.checkStatus() while self.status in (PAUSED, RUNNING, DRAW, WHITEWON, BLACKWON): curColor = self.boards[-1].color curPlayer = self.players[curColor] if self.timemodel: log.debug("GameModel.run: id=%s, players=%s, self.ply=%s: updating %s's time\n" % \ (id(self), str(self.players), str(self.ply), str(curPlayer))) curPlayer.updateTime(self.timemodel.getPlayerTime(curColor), self.timemodel.getPlayerTime(1-curColor)) try: log.debug("GameModel.run: id=%s, players=%s, self.ply=%s: calling %s.makeMove()\n" % \ (id(self), str(self.players), self.ply, str(curPlayer))) if self.ply > self.lowply: move = curPlayer.makeMove(self.boards[-1], self.moves[-1], self.boards[-2]) else: move = curPlayer.makeMove(self.boards[-1], None, None) log.debug("GameModel.run: id=%s, players=%s, self.ply=%s: got move=%s from %s\n" % \ (id(self), str(self.players), self.ply, move, str(curPlayer))) except PlayerIsDead, e: if self.status in (WAITING_TO_START, PAUSED, RUNNING): stringio = cStringIO.StringIO() traceback.print_exc(file=stringio) error = stringio.getvalue() log.error("GameModel.run: A Player died: player=%s error=%s\n%s" % (curPlayer, error, e)) if curColor == WHITE: self.kill(WHITE_ENGINE_DIED) else: self.kill(BLACK_ENGINE_DIED) break except TurnInterrupt: log.debug("GameModel.run: id=%s, players=%s, self.ply=%s: TurnInterrupt\n" % \ (id(self), str(self.players), self.ply)) continue log.debug("GameModel.run: id=%s, players=%s, self.ply=%s: acquiring self.applyingMoveLock\n" % \ (id(self), str(self.players), self.ply)) assert isinstance(move, Move), "%s" % repr(move) self.applyingMoveLock.acquire() try: log.debug("GameModel.run: id=%s, players=%s, self.ply=%s: applying move=%s\n" % \ (id(self), str(self.players), self.ply, str(move))) self.needsSave = True newBoard = self.boards[-1].move(move) newBoard.board.prev = self.boards[-1].board # Variation on next move can exist from the hint panel... if self.boards[-1].board.next is not None: newBoard.board.children = self.boards[-1].board.next.children self.boards = self.variations[0] self.boards[-1].board.next = newBoard.board self.boards.append(newBoard) self.moves.append(move) if self.timemodel: self.timemodel.tap() newBoard.board.clock = self.timemodel.getPlayerTime(curColor) self.checkStatus() self.emit("game_changed") for spectator in self.spectators.values(): spectator.putMove(self.boards[-1], self.moves[-1], self.boards[-2]) self.setOpening() finally: log.debug("GameModel.run: releasing self.applyingMoveLock\n") self.applyingMoveLock.release() def checkStatus (self): """ Updates self.status so it fits with what getStatus(boards[-1]) would return. That is, if the game is e.g. check mated this will call mode.end(), or if moves have been undone from an otherwise ended position, this will call __resume and emit game_unended. """ log.debug("GameModel.checkStatus:\n") status, reason = getStatus(self.boards[-1]) if status != RUNNING and self.status in (WAITING_TO_START, PAUSED, RUNNING): engine_engine = self.players[WHITE].__type__ == ARTIFICIAL and self.players[BLACK].__type__ == ARTIFICIAL if status == DRAW and reason in (DRAW_REPITITION, DRAW_50MOVES): if engine_engine: self.end(status, reason) return else: self.end(status, reason) return if status != self.status and self.status in UNDOABLE_STATES \ and self.reason in UNDOABLE_REASONS: self.__resume() self.status = status self.reason = UNKNOWN_REASON self.emit("game_unended") def __pause (self): log.debug("GameModel.__pause: %s\n" % self) for player in self.players: player.pause() if self.timemodel: self.timemodel.pause() @inthread def pause (self): """ Players will raise NotImplementedError if they doesn't support pause. Spectators will be ignored. """ self.applyingMoveLock.acquire() try: self.__pause() self.status = PAUSED finally: self.applyingMoveLock.release() self.emit("game_paused") def __resume (self): for player in self.players: player.resume() if self.timemodel: self.timemodel.resume() self.emit("game_resumed") @inthread def resume (self): self.applyingMoveLock.acquire() try: self.status = RUNNING self.__resume() finally: self.applyingMoveLock.release() def end (self, status, reason): if self.status not in UNFINISHED_STATES: log.info("GameModel.end: Can't end a game that's already ended: %s %s\n" % (status, reason)) return if self.status not in (WAITING_TO_START, PAUSED, RUNNING): self.needsSave = True #log.debug("Ending a game with status %d for reason %d\n%s" % (status, reason, # "".join(traceback.format_list(traceback.extract_stack())).strip())) log.debug("GameModel.end: players=%s, self.ply=%s: Ending a game with status %d for reason %d\n" % \ (repr(self.players), str(self.ply), status, reason)) self.status = status self.reason = reason self.emit("game_ended", reason) self.__pause() def kill (self, reason): log.debug("GameModel.kill: players=%s, self.ply=%s: Killing a game for reason %d\n%s" % \ (repr(self.players), str(self.ply), reason, "".join(traceback.format_list(traceback.extract_stack())).strip())) self.status = KILLED self.reason = reason for player in self.players: player.end(self.status, reason) for spectator in self.spectators.values(): spectator.end(self.status, reason) if self.timemodel: self.timemodel.end() self.emit("game_ended", reason) def terminate (self): if self.status != KILLED: #self.resume() for player in self.players: player.end(self.status, self.reason) for spectator in self.spectators.values(): spectator.end(self.status, self.reason) if self.timemodel: self.timemodel.end() self.emit("game_terminated") ############################################################################ # Other stuff # ############################################################################ @inthread @undolocked def undoMoves (self, moves): """ Undo and remove moves number of moves from the game history from the GameModel, players, and any spectators """ if self.ply < 1 or moves < 1: return if self.ply - moves < 0: # There is no way in the current threaded/asynchronous design # for the GUI to know that the number of moves it requests to takeback # will still be valid once the undo is actually processed. So, until # we either add some locking or get a synchronous design, we quietly # "fix" the takeback request rather than cause AssertionError or IndexError moves = 1 log.debug("GameModel.undoMoves: players=%s, self.ply=%s, moves=%s, board=%s" % \ (repr(self.players), self.ply, moves, self.boards[-1])) log.debug("GameModel.undoMoves: acquiring self.applyingMoveLock\n") self.applyingMoveLock.acquire() log.debug("GameModel.undoMoves: self.applyingMoveLock acquired\n") try: self.emit("moves_undoing", moves) self.needsSave = True self.boards = self.variations[0] del self.boards[-moves:] del self.moves[-moves:] self.boards[-1].board.next = None for player in self.players: player.playerUndoMoves(moves, self) for spectator in self.spectators.values(): spectator.spectatorUndoMoves(moves, self) log.debug("GameModel.undoMoves: undoing timemodel\n") if self.timemodel: self.timemodel.undoMoves(moves) self.checkStatus() self.setOpening() finally: log.debug("GameModel.undoMoves: releasing self.applyingMoveLock\n") self.applyingMoveLock.release() self.emit("moves_undone", moves) def isChanged (self): if self.ply == 0: return False if self.needsSave: return True if not self.uri or not isWriteable (self.uri): return True return False def add_variation(self, board, moves): board0 = board board = board0.clone() board.board.prev = None variation = [board] for move in moves: new = board.move(move) if len(variation) == 1: new.board.prev = board0.board variation[0].board.next = new.board else: new.board.prev = board.board board.board.next = new.board variation.append(new) board = new if board0.board.next is None: from pychess.Utils.lutils.LBoard import LBoard null_board = LBoard() null_board.prev = board0.board board0.board.next = null_board board0.board.next.children.append([board.board for board in variation]) head = None for vari in self.variations: if board0 in vari: head = vari break variation[0] = board0 self.variations.append(head[:board0.ply-self.lowply] + variation) self.needsSave = True self.emit("variations_changed") return self.variations[-1] def add_move2variation(self, board, move, variationIdx): new = board.move(move) new.board.prev = board.board board.board.next = new.board # Find the variation (low level lboard list) to append cur_board = board.board vari = None while cur_board.prev is not None: for child in cur_board.prev.next.children: if isinstance(child, list) and cur_board in child: vari = child break if vari is None: cur_board = cur_board.prev else: break vari.append(new.board) self.variations[variationIdx].append(new) self.needsSave = True self.emit("variations_changed") pychess-0.12beta3/lib/pychess/Utils/Rating.py0000755000175000017470000000431112161415524020214 0ustar tamasusersfrom pychess.Utils.const import * import gobject class Rating (gobject.GObject): def __init__(self, ratingtype, elo, deviation=DEVIATION_NONE, wins=0, losses=0, draws=0, bestElo=0, bestTime=0): gobject.GObject.__init__(self) self.type = ratingtype for v in (elo, deviation, wins, losses, draws, bestElo, bestTime): assert v == None or type(v) == int, v self.elo = elo self.deviation = deviation self.wins = wins self.losses = losses self.draws = draws self.bestElo = bestElo self.bestTime = bestTime def get_elo (self): return self._elo def set_elo (self, elo): self._elo = elo elo = gobject.property(get_elo, set_elo) def __repr__ (self): r = "type=%s, elo=%s" % (self.type, self.elo) if self.deviation != None: r += ", deviation=%s" % str(self.deviation) if self.wins > 0: r += ", wins=%s" % str(self.wins) if self.losses > 0: r += ", losses=%s" % str(self.losses) if self.draws > 0: r += ", draws=%s" % str(self.draws) if self.bestElo > 0: r += ", bestElo=%s" % str(self.bestElo) if self.bestTime > 0: r += ", bestTime=%s" % str(self.bestTime) return r def copy (self): return Rating(self.type, self.elo, deviation=self.deviation, wins=self.wins, losses=self.losses, draws=self.draws, bestElo=self.bestElo, bestTime=self.bestTime) def update (self, rating): if self.type != rating.type: raise TypeError elif self.elo != rating.elo: self.elo = rating.elo elif self.deviation != rating.deviation: self.deviation = rating.deviation elif self.wins != rating.wins: self.wins = rating.wins elif self.losses != rating.losses: self.losses = rating.losses elif self.draws != rating.draws: self.draws = rating.draws elif self.bestElo != rating.bestElo: self.bestElo = rating.bestElo elif self.bestTime != rating.bestTime: self.bestTime = rating.bestTime pychess-0.12beta3/lib/pychess/Utils/book.py0000755000175000017470000000446212161415524017731 0ustar tamasusersimport os from struct import Struct from collections import namedtuple from pychess.Utils.const import * from pychess.System import conf from pychess.System.prefix import addDataPrefix from pychess.Utils.lutils.lmove import parsePolyglot # The book probing code is based on that of PolyGlot by Fabien Letouzey. # PolyGlot is available under the GNU GPL from http://wbec-ridderkerk.nl BookEntry = namedtuple('BookEntry', 'key move weight games score') # 'key' c_uint64 the position's hash # 'move' c_uint16 the candidate move # 'weight' c_uint16 proportional to prob. we should play it # The following terms are not always available: # 'games' c_uint16 the number of times it's been tried # 'score' c_uint16 2 for each win, 1 for each draw entrystruct = Struct(">QHHHH") entrysize = entrystruct.size def getOpenings (board): """ Return a tuple (move, weight, games, score) for each opening move in the given position. The weight is proportional to the probability that a move should be played. By convention, games is the number of times a move has been tried, and score the number of points it has scored (with 2 per victory and 1 per draw). However, opening books aren't required to keep this information. """ default_path = os.path.join(addDataPrefix("pychess_book.bin")) path = conf.get("opening_file_entry", default_path) openings = [] if not os.path.isfile(path): return openings with open(path, "rb") as bookFile: key = board.hash # Find the first entry whose key is >= the position's hash bookFile.seek(0, os.SEEK_END) lo, hi = 0, bookFile.tell() / 16 - 1 if hi < 0: return openings while lo < hi: mid = (lo + hi) / 2 bookFile.seek(mid * 16) entry = BookEntry._make(entrystruct.unpack(bookFile.read(entrysize))) if entry.key < key: lo = mid + 1 else: hi = mid bookFile.seek(lo * 16) while True: entry = BookEntry._make(entrystruct.unpack(bookFile.read(entrysize))) if entry.key != key: break mv = parsePolyglot(board, entry.move) openings.append( ( mv, entry.weight, entry.games, entry.score ) ) return openings pychess-0.12beta3/lib/pychess/Utils/TimeModel.py0000755000175000017470000002052612161415524020655 0ustar tamasusersimport heapq from time import time from gobject import SIGNAL_RUN_FIRST, TYPE_NONE, GObject from pychess.Utils.const import WHITE, BLACK from pychess.System import repeat from pychess.System.Log import log class TimeModel (GObject): __gsignals__ = { "player_changed": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), "time_changed": (SIGNAL_RUN_FIRST, TYPE_NONE, ()), "zero_reached": (SIGNAL_RUN_FIRST, TYPE_NONE, (int,)), "pause_changed": (SIGNAL_RUN_FIRST, TYPE_NONE, (bool,)) } ############################################################################ # Initing # ############################################################################ def __init__ (self, secs, gain, bsecs=-1, minutes=-1): GObject.__init__(self) if bsecs < 0: bsecs = secs if minutes < 0: minutes = secs / 60 self.minutes = minutes # The number of minutes for the original starting # time control (not necessarily where the game was resumed, # i.e. self.intervals[0][0]) self.intervals = [[secs],[bsecs]] self.gain = gain self.paused = False # The left number of secconds at the time pause was turned on self.pauseInterval = 0 self.counter = None self.started = False self.ended = False self.movingColor = WHITE self.connect('time_changed', self.__zerolistener, 'time_changed') self.connect('player_changed', self.__zerolistener, 'player_changed') self.connect('pause_changed', self.__zerolistener, 'pause_changed') self.heap = [] def __repr__ (self): s = "" % \ (id(self), str(self.getPlayerTime(WHITE)), str(self.getPlayerTime(BLACK))) return s def __zerolistener(self, *args): # If we are called by a sleeper (rather than a signal) we need to pop # at least one time, as we might otherwise end up with items in the # heap, but no sleepers. if len(args) == 0 and self.heap: self.heap.pop() # Pop others (could this give a problem where too many are popped?) # No I don't think so. If a sleeper is too slow, so a later sleeper # comes before him and pops him, then it is most secure not to rely on # mr late, and start a new one. # We won't be 'one behind' always, because the previous pop doesnt # happen if the heap is empty. while self.heap and self.heap[-1] <= time(): self.heap.pop() if self.getPlayerTime(WHITE) <= 0: #print 'emit for white' self.emit('zero_reached', WHITE) if self.getPlayerTime(BLACK) <= 0: #print 'emit for black' self.emit('zero_reached', BLACK) #print 'heap is now', self.heap t1 = time() + self.getPlayerTime(WHITE) t2 = time() + self.getPlayerTime(BLACK) t = min(t1,t2) if not self.heap or t < self.heap[-1]: s = t-time()+0.01 if s > 0: self.heap.append(t) # Because of recur, we wont get callback more than once. repeat.repeat_sleep(self.__zerolistener, s, recur=True) #print 'repeat on', s ############################################################################ # Interacting # ############################################################################ def setMovingColor (self, movingColor): self.movingColor = movingColor self.emit("player_changed") def tap (self): if self.paused: return if self.started: t = self.intervals[self.movingColor][-1] + self.gain if self.counter != None: t -= time() - self.counter self.intervals[self.movingColor].append(t) else: self.intervals[self.movingColor].append ( self.intervals[self.movingColor][-1] ) if len(self.intervals[0]) + len(self.intervals[1]) >= 4: self.started = True self.movingColor = 1-self.movingColor if self.started: self.counter = time() self.emit("time_changed") self.emit("player_changed") def start (self): if self.started: return self.started = True self.counter = time() self.emit("time_changed") def end (self): self.pause() self.ended = True def pause (self): log.debug("TimeModel.pause: self=%s\n" % self) if self.paused: return self.paused = True if self.counter != None: self.pauseInterval = time()-self.counter self.counter = None self.emit("time_changed") self.emit("pause_changed", True) def resume (self): log.debug("TimeModel.resume: self=%s\n" % self) if not self.paused: return self.paused = False self.counter = time() - self.pauseInterval self.emit("pause_changed", False) ############################################################################ # Undo and redo in TimeModel # ############################################################################ def undoMoves (self, moves): """ Sets time and color to move, to the values they were having in the beginning of the ply before the current. his move. Example: White intervals (is thinking): [120, 130, ...] Black intervals: [120, 115] Is undoed to: White intervals: [120, 130] Black intervals (is thinking): [120, ...] """ if not self.started: self.start() for i in xrange(moves): self.movingColor = 1-self.movingColor del self.intervals[self.movingColor][-1] if len(self.intervals[0]) + len(self.intervals[1]) >= 4: self.counter = time() else: self.started = False self.counter = None self.emit("time_changed") self.emit("player_changed") ############################################################################ # Updating # ############################################################################ def updatePlayer (self, color, secs): if color == self.movingColor and self.started: self.counter = secs + time() - self.intervals[color][-1] else: self.intervals[color][-1] = secs self.emit("time_changed") def syncClock (self, wsecs, bsecs): """ Syncronize clock to e.g. fics time """ if self.movingColor == WHITE: if self.started: self.counter = wsecs + time() - self.intervals[WHITE][-1] else: self.intervals[WHITE][-1] = wsecs self.intervals[BLACK][-1] = bsecs else: if self.started: self.counter = bsecs + time() - self.intervals[BLACK][-1] else: self.intervals[BLACK][-1] = bsecs self.intervals[WHITE][-1] = wsecs self.emit("time_changed") ############################################################################ # Info # ############################################################################ def getPlayerTime (self, color): if color == self.movingColor and self.started: if self.paused: return self.intervals[color][-1] - self.pauseInterval elif self.counter: return self.intervals[color][-1] - (time() - self.counter) return self.intervals[color][-1] def getInitialTime (self): return self.intervals[WHITE][0] @property def display_text (self): t = ("%d " % self.minutes) + _("min") if self.gain != 0: t += (" + %d " % self.gain) + _("sec") return t pychess-0.12beta3/lib/pychess/Utils/Offer.py0000755000175000017470000000165712161415524020043 0ustar tamasusersfrom pychess.Utils.const import ACTIONS class Offer: def __init__(self, type_, param=None, index=None): assert type_ in ACTIONS, "Offer.__init__(): type not in ACTIONS: %s" % repr(type_) assert index is None or type(index) is int, \ "Offer.__init__(): index not int: %s" % repr(index) self.type = type_ self.param = param self.index = index # for IC games def __hash__(self): return hash((self.type, self.param, self.index)) def __cmp__(self, other): assert type(other) is type(self), "Offer.__cmp__(): not of type Offer: %s" % repr(other) return cmp(hash(self), hash(other)) def __repr__(self): s = "type=\"%s\"" % self.type if self.param is not None: s += ", param=%s" % str(self.param) if self.index is not None: s += ", index=%s" % str(self.index) return "Offer(" + s + ")" pychess-0.12beta3/lib/pychess/Utils/Move.py0000755000175000017470000001467112176165726017724 0ustar tamasusersfrom pychess.Utils.Cord import Cord from pychess.Utils.const import * from pychess.Utils.lutils.lmovegen import newMove from lutils import lmove class Move: def __init__ (self, cord0, cord1=None, board=None, promotion=None): """ Inits a new highlevel Move object. The object can be initialized in the follow ways: Move(cord0, cord1, board, [promotionPiece]) Move(lovLevelMoveInt) """ if not cord1: self.move = cord0 self.flag = self.move >> 12 if self.flag in PROMOTIONS: self.promotion = lmove.PROMOTE_PIECE (self.move) else: self.promotion = QUEEN self.cord0 = None if self.flag == DROP else Cord(lmove.FCORD(self.move)) self.cord1 = Cord(lmove.TCORD(self.move)) else: assert cord0 != None and cord1 != None, "cord0=%s, cord1=%s, board=%s" % (cord0, cord1, board) assert board[cord0] != None, "cord0=%s, cord1=%s, board=%s" % (cord0, cord1, board) self.cord0 = cord0 self.cord1 = cord1 if not board: raise ValueError, "Move needs a Board object in order to investigate flags" self.flag = NORMAL_MOVE if board[self.cord0].piece == PAWN and self.cord1.y in (0,7): if promotion == None: promotion = QUEEN self.flag = lmove.FLAG_PIECE(promotion) elif board[self.cord0].piece == KING: if self.cord0 == self.cord1: self.flag = NULL_MOVE elif board.variant == FISCHERRANDOMCHESS: if (abs(self.cord0.x - self.cord1.x) > 1 and self.cord1.x==C1) or \ \ (board.board.ini_rooks[board.color][0] == self.cord1.cord and \ ((board.board.color == WHITE and board.board.castling & W_OOO) or \ (board.board.color == BLACK and board.board.castling & B_OOO))): self.flag = QUEEN_CASTLE elif (abs(self.cord0.x - self.cord1.x) > 1 and self.cord1.x==G1) or \ \ (board.board.ini_rooks[board.color][1] == self.cord1.cord and \ ((board.board.color == WHITE and board.board.castling & W_OO) or \ (board.board.color == BLACK and board.board.castling & B_OO))): self.flag = KING_CASTLE else: if self.cord0.x - self.cord1.x == 2: self.flag = QUEEN_CASTLE if self.cord0.x == 4 else KING_CASTLE elif self.cord0.x - self.cord1.x == -2: self.flag = KING_CASTLE if self.cord0.x == 4 else QUEEN_CASTLE elif board[self.cord0].piece == PAWN and \ board[self.cord1] == None and \ self.cord0.x != self.cord1.x and \ self.cord0.y != self.cord1.y: self.flag = ENPASSANT self.move = newMove(self.cord0.cord, self.cord1.cord, self.flag) def _get_cords (self): return (self.cord0, self.cord1) cords = property(_get_cords) def _get_promotion (self): if self.flag in PROMOTIONS: return lmove.PROMOTE_PIECE(self.flag) return None promotion = property(_get_promotion) def __repr__ (self): promotion = "="+reprSign[lmove.PROMOTE_PIECE(self.flag)] if self.flag in PROMOTIONS else "" if self.flag == DROP: piece = reprSign[lmove.FCORD(self.move)] return piece + "@" + str(self.cord1) + promotion else: return str(self.cord0) + str(self.cord1) + promotion def __eq__ (self, other): if isinstance(other, Move): return self.move == other.move def __hash__ (self): return hash(self.cords) def is_capture (self, board): return self.flag == ENPASSANT or \ board[self.cord1] != None and \ self.flag != QUEEN_CASTLE and self.flag != KING_CASTLE ################################################################################ # Parsers # ################################################################################ def listToMoves (board, mstrs, type=None, validate=False, ignoreErrors=False): return [Move(move) for move in lmove.listToMoves(board.board, mstrs, type, validate, ignoreErrors)] def parseAny (board, algnot): return Move(lmove.parseAny (board.board, algnot)) def parseSAN (board, san): """ Parse a Short/Abbreviated Algebraic Notation string """ return Move (lmove.parseSAN (board.board, san)) def parseLAN (board, lan): """ Parse a Long/Expanded Algebraic Notation string """ return Move (lmove.parseLAN (board.board, lan)) def parseFAN (board, lan): """ Parse a Long/Expanded Algebraic Notation string """ return Move (lmove.parseFAN (board.board, lan)) def parseAN (board, an): """ Parse an Algebraic Notation string """ return Move(lmove.parseAN (board.board, an)) ################################################################################ # Exporters # ################################################################################ def listToSan (board, moves): return lmove.listToSan(board.board, (m.move for m in moves)) def toAN (board, move, short=False, castleNotation=CASTLE_SAN): """ Returns a Algebraic Notation string of a move board should be prior to the move """ return lmove.toAN (board.board, move.move, short=short, castleNotation=castleNotation) def toSAN (board, move, localRepr=False): """ Returns a Short/Abbreviated Algebraic Notation string of a move The board should be prior to the move, board2 past. If not board2, toSAN will not test mate """ return lmove.toSAN (board.board, move.move, localRepr) def toLAN (board, move): """ Returns a Long/Expanded Algebraic Notation string of a move board should be prior to the move """ return lmove.toLAN (board.board, move.move) def toFAN (board, move): """ Returns a Figurine Algebraic Notation string of a move """ return lmove.toFAN (board.board, move.move) pychess-0.12beta3/lib/pychess/Main.py0000755000175000017470000004467412164246315016577 0ustar tamasusers# -*- coding: UTF-8 -*- import os import webbrowser import math import atexit import signal import subprocess import urllib from urlparse import urlparse import gobject, gtk from gtk import DEST_DEFAULT_MOTION, DEST_DEFAULT_HIGHLIGHT, DEST_DEFAULT_DROP from gtk.gdk import keyval_from_name from pychess.System import conf, glock, uistuff, prefix, SubProcess, Log from pychess.System.uistuff import POSITION_NONE, POSITION_CENTER, POSITION_GOLDEN from pychess.System.Log import log from pychess.System.debug import start_thread_dump from pychess.Utils.const import HINT, NAME, SPY from pychess.widgets import enginesDialog from pychess.widgets import newGameDialog from pychess.widgets import tipOfTheDay from pychess.widgets import LogDialog from pychess.widgets.discovererDialog import DiscovererDialog from pychess.widgets.BorderBox import BorderBox from pychess.widgets import gamewidget from pychess.widgets import gamenanny from pychess.widgets import ionest from pychess.widgets import preferencesDialog, gameinfoDialog, playerinfoDialog from pychess.widgets.TaskerManager import TaskerManager from pychess.widgets.TaskerManager import NewGameTasker from pychess.widgets.TaskerManager import InternetGameTasker from pychess.Players.engineNest import discoverer from pychess.ic import ICLogon #from pychess.Database.gamelist import GameList from pychess import VERSION, VERSION_NAME leftkeys = map(keyval_from_name, ("Left", "KP_Left")) rightkeys = map(keyval_from_name, ("Right", "KP_Right")) upkeys = map(keyval_from_name, ("Up", "KP_Up")) downkeys = map(keyval_from_name, ("Down", "KP_Down")) homekeys = map(keyval_from_name, ("Home", "KP_Home")) endkeys = map(keyval_from_name, ("End", "KP_End")) ################################################################################ # gameDic - containing the gamewidget:gamemodel of all open games # ################################################################################ gameDic = {} ######################## # For Racent Chooser ######################## recentManager = gtk.recent_manager_get_default() class GladeHandlers: def on_window_key_press (window, event): # Tabbing related shortcuts if not gamewidget.getheadbook(): pagecount = 0 else: pagecount = gamewidget.getheadbook().get_n_pages() if pagecount > 1: if event.state & gtk.gdk.CONTROL_MASK: page_num = gamewidget.getheadbook().get_current_page() # Move selected if event.state & gtk.gdk.SHIFT_MASK: child = gamewidget.getheadbook().get_nth_page(page_num) if event.keyval == gtk.keysyms.Page_Up: gamewidget.getheadbook().reorder_child(child, (page_num-1)%pagecount) return True elif event.keyval == gtk.keysyms.Page_Down: gamewidget.getheadbook().reorder_child(child, (page_num+1)%pagecount) return True # Change selected else: if event.keyval == gtk.keysyms.Page_Up: gamewidget.getheadbook().set_current_page((page_num-1)%pagecount) return True elif event.keyval == gtk.keysyms.Page_Down: gamewidget.getheadbook().set_current_page((page_num+1)%pagecount) return True gmwidg = gamewidget.cur_gmwidg() if gmwidg is not None: for panel in gmwidg.panels: focused = panel.get_focus_child() # Do nothing in chat panel if focused is not None and isinstance(focused, BorderBox): return False # Navigate on boardview with arrow keys if event.keyval in leftkeys: if event.state & gtk.gdk.CONTROL_MASK: gmwidg.board.view.backToMainLine() return True else: gmwidg.board.view.showPrev() return True elif event.keyval in rightkeys: gmwidg.board.view.showNext() return True elif event.keyval in upkeys: gmwidg.board.view.showPrev(step=2) return True elif event.keyval in downkeys: gmwidg.board.view.showNext(step=2) return True elif event.keyval in homekeys: gmwidg.board.view.showFirst() return True elif event.keyval in endkeys: gmwidg.board.view.showLast() return True if (not event.state & gtk.gdk.CONTROL_MASK) and \ (not event.state & gtk.gdk.MOD1_MASK): # Enter moves with keyboard board_control = gmwidg.board keyname = gtk.gdk.keyval_name(event.keyval) board_control.key_pressed(keyname) gmwidg.status(board_control.keybuffer) return True return False def on_gmwidg_created (handler, gmwidg, gamemodel): gameDic[gmwidg] = gamemodel # Bring playing window to the front gamewidget.getWidgets()["window1"].present() gamemodel.connect("game_loaded", GladeHandlers.__dict__["on_recent_game_activated"]) gamemodel.connect("game_saved", GladeHandlers.__dict__["on_recent_game_activated"]) # Make sure we can remove gamewidgets from gameDic later gmwidg.connect("closed", GladeHandlers.__dict__["on_gmwidg_closed"]) def on_recent_game_activated (gamemodel, uri): if isinstance(uri, basestring): o = urlparse(uri) recent_data = { 'mime_type':'application/x-chess-pgn', 'app_name':'pychess', 'app_exec':'pychess', 'group':'pychess'} recentManager.add_full("file://" + o.path, recent_data) def on_gmwidg_closed (gmwidg): del gameDic[gmwidg] if not gameDic: for widget in gamewidget.MENU_ITEMS: gamewidget.getWidgets()[widget].set_property('sensitive', False) # Drag 'n' Drop # def on_drag_received (wi, context, x, y, selection, target_type, timestamp): uri = selection.data.strip() uris = uri.split() if len(uris) > 1: log.warn("%d files were dropped. Only loading the first" % len(uris)) uri = uris[0] newGameDialog.LoadFileExtension.run(uri) # Game Menu # def on_new_game1_activate (widget): newGameDialog.NewGameMode.run() def on_play_internet_chess_activate (widget): ICLogon.run() def on_load_game1_activate (widget): newGameDialog.LoadFileExtension.run(None) def on_set_up_position_activate (widget): # Not implemented yet pass def on_open_database_activate (widget): #GameList().load_games() pass def on_enter_game_notation_activate (widget): newGameDialog.EnterNotationExtension.run() def on_save_game1_activate (widget): ionest.saveGame (gameDic[gamewidget.cur_gmwidg()]) def on_save_game_as1_activate (widget): ionest.saveGameAs (gameDic[gamewidget.cur_gmwidg()]) def on_export_position_activate (widget): gmwidg = gamewidget.cur_gmwidg() position = gmwidg.board.view.shown ionest.saveGameAs (gameDic[gmwidg], position) def on_properties1_activate (widget): gameinfoDialog.run(gamewidget.getWidgets(), gameDic) def on_player_rating1_activate (widget): playerinfoDialog.run(gamewidget.getWidgets()) def on_close1_activate (widget): gmwidg = gamewidget.cur_gmwidg() response = ionest.closeGame(gmwidg, gameDic[gmwidg]) def on_quit1_activate (widget, *args): if ionest.closeAllGames(gameDic.items()) in (gtk.RESPONSE_OK, gtk.RESPONSE_YES): gtk.main_quit() else: return True # View Menu # def on_rotate_board1_activate (widget): gmwidg = gamewidget.cur_gmwidg() if gmwidg.board.view.rotation: gmwidg.board.view.rotation = 0 else: gmwidg.board.view.rotation = math.pi def on_fullscreen1_activate (widget): gamewidget.getWidgets()["window1"].fullscreen() gamewidget.getWidgets()["fullscreen1"].hide() gamewidget.getWidgets()["leave_fullscreen1"].show() def on_leave_fullscreen1_activate (widget): gamewidget.getWidgets()["window1"].unfullscreen() gamewidget.getWidgets()["leave_fullscreen1"].hide() gamewidget.getWidgets()["fullscreen1"].show() def on_about1_activate (widget): gamewidget.getWidgets()["aboutdialog1"].show() def on_log_viewer1_activate (widget): if widget.get_active(): LogDialog.show() else: LogDialog.hide() def on_show_sidepanels_activate (widget): gamewidget.zoomToBoard(not widget.get_active()) def on_hint_mode_activate (widget): for gmwidg in gameDic.keys(): if gmwidg.isInFront(): if widget.get_active(): gmwidg.gamemodel.resume_analyzer(HINT) else: gmwidg.gamemodel.pause_analyzer(HINT) def on_spy_mode_activate (widget): for gmwidg in gameDic.keys(): if gmwidg.isInFront(): if widget.get_active(): gmwidg.gamemodel.resume_analyzer(SPY) else: gmwidg.gamemodel.pause_analyzer(SPY) # Edit menu # def on_manage_engines_activate (widget): enginesDialog.run(gamewidget.getWidgets()) def on_preferences_activate (widget): preferencesDialog.run(gamewidget.getWidgets()) # Help menu # def on_about_chess1_activate (widget): webbrowser.open(_("http://en.wikipedia.org/wiki/Chess")) def on_how_to_play1_activate (widget): webbrowser.open(_("http://en.wikipedia.org/wiki/Rules_of_chess")) def translate_this_application_activate(widget): webbrowser.open("http://code.google.com/p/pychess/wiki/TransifexTranslates") def on_TipOfTheDayMenuItem_activate (widget): tipOfTheDay.TipOfTheDay.show() # Other # def on_notebook2_switch_page (widget, page, page_num): gamewidget.getWidgets()["notebook3"].set_current_page(page_num) dnd_list = [ ('application/x-chess-pgn', 0, 0xbadbeef), ('application/da-chess-pgn', 0, 0xbadbeef), ('text/plain', 0, 0xbadbeef) ] class PyChess: def __init__(self, chess_file): self.hg_rev = "" self.hg_date = "" self.initGlade() self.handleArgs(chess_file) def initGlade(self): #======================================================================= # Init glade and the 'GladeHandlers' #======================================================================= gtk.about_dialog_set_url_hook(self.website) widgets = uistuff.GladeWidgets("PyChess.glade") widgets.getGlade().connect_signals(GladeHandlers.__dict__) tasker = TaskerManager() tasker.packTaskers (NewGameTasker(), InternetGameTasker()) widgets["Background"].add(tasker) #------------------------------------------------------ Redirect widgets gamewidget.setWidgets(widgets) def on_sensitive_changed (widget, prop): name = widget.get_property('name') sensitive = widget.get_property('sensitive') #print "'%s' changed to '%s'" % (name, sensitive) widgets['pause1'].connect("notify::sensitive", on_sensitive_changed) widgets['resume1'].connect("notify::sensitive", on_sensitive_changed) #-------------------------- Main.py still needs a minimum of information ionest.handler.connect("gmwidg_created", GladeHandlers.__dict__["on_gmwidg_created"]) #---------------------- The only menuitems that need special initing for widget in ("hint_mode", "spy_mode"): widgets[widget].set_sensitive(False) uistuff.keep(widgets["hint_mode"], "hint_mode") uistuff.keep(widgets["spy_mode"], "spy_mode") uistuff.keep(widgets["show_sidepanels"], "show_sidepanels") uistuff.keep(widgets["auto_call_flag"], "autoCallFlag") #======================================================================= # Show main window and init d'n'd #======================================================================= widgets["window1"].set_title('%s - PyChess' % _('Welcome')) widgets["window1"].connect("key-press-event", GladeHandlers.__dict__["on_window_key_press"]) uistuff.keepWindowSize("main", widgets["window1"], (575,479), POSITION_GOLDEN) widgets["window1"].show() widgets["Background"].show_all() flags = DEST_DEFAULT_MOTION | DEST_DEFAULT_HIGHLIGHT | DEST_DEFAULT_DROP # To get drag in the whole window, we add it to the menu and the # background. If it can be gotten to work, the drag_dest_set_proxy # method is very interesting. widgets["menubar1"].drag_dest_set(flags, dnd_list, gtk.gdk.ACTION_COPY) widgets["Background"].drag_dest_set(flags, dnd_list, gtk.gdk.ACTION_COPY) # TODO: http://code.google.com/p/pychess/issues/detail?id=737 # The following two should really be set in the glade file #widgets["menubar1"].set_events(widgets["menubar1"].get_events() | gtk.gdk.DRAG_STATUS) #widgets["Background"].set_events(widgets["Background"].get_events() | gtk.gdk.DRAG_STATUS) #======================================================================= # Init 'minor' dialogs #======================================================================= #------------------------------------------------------------ Log dialog LogDialog.add_destroy_notify(lambda: widgets["log_viewer1"].set_active(0)) #---------------------------------------------------------- About dialog aboutdialog = widgets["aboutdialog1"] clb = aboutdialog.get_child().get_children()[1].get_children()[2] aboutdialog.set_name(NAME) #aboutdialog.set_position(gtk.WIN_POS_CENTER) #aboutdialog.set_website_label(_("PyChess Homepage")) link = aboutdialog.get_website() aboutdialog.set_copyright("Copyright © 2006-2013") aboutdialog.set_version(VERSION_NAME+" "+VERSION) if os.path.isdir(prefix.addDataPrefix(".hg")): cmd = ["hg", "tip", "--cwd", prefix.getDataPrefix(), "--template", "{node|short} {date|isodate}"] process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) out = process.stdout.readline().split() if len(out)>=2: comments = aboutdialog.get_comments() self.hg_rev = out[0] self.hg_date = out[1] aboutdialog.set_comments("rev. %s\n%s\n%s" % (self.hg_rev, self.hg_date, comments)) with open(prefix.addDataPrefix("ARTISTS")) as f: aboutdialog.set_artists(f.read().splitlines()) with open(prefix.addDataPrefix("AUTHORS")) as f: aboutdialog.set_authors(f.read().splitlines()) with open(prefix.addDataPrefix("DOCUMENTERS")) as f: aboutdialog.set_documenters(f.read().splitlines()) with open(prefix.addDataPrefix("TRANSLATORS")) as f: aboutdialog.set_translator_credits(f.read()) def callback(button, *args): aboutdialog.hide() return True clb.connect("activate", callback) clb.connect("clicked", callback) aboutdialog.connect("delete-event", callback) #---------------------------------------------------- RecentChooser def recent_item_activated (self): uri = self.get_current_uri() try: urllib.urlopen(uri).close() newGameDialog.LoadFileExtension.run(self.get_current_uri()) except (IOError, OSError): #shomething wrong whit the uri recentManager.remove_item(uri) self.menu_recent = gtk.RecentChooserMenu(recentManager) self.menu_recent.set_show_tips(True) self.menu_recent.set_sort_type(gtk.RECENT_SORT_MRU) self.menu_recent.set_limit(10) self.menu_recent.set_name("menu_recent") self.file_filter = gtk.RecentFilter() self.file_filter.add_mime_type("application/x-chess-pgn") self.menu_recent.set_filter(self.file_filter) self.menu_recent.connect("item-activated", recent_item_activated) widgets["load_recent_game1"].set_submenu(self.menu_recent) #----------------------------------------------------- Discoverer dialog def discovering_started (discoverer, binnames): gobject.idle_add(DiscovererDialog.show, discoverer, widgets["window1"]) discoverer.connect("discovering_started", discovering_started) DiscovererDialog.init(discoverer) discoverer.start() #------------------------------------------------- Tip of the day dialog if conf.get("show_tip_at_startup", False): tipOfTheDay.TipOfTheDay.show() def website(self, clb, link): webbrowser.open(link) def handleArgs (self, chess_file): if chess_file: def do (discoverer): newGameDialog.LoadFileExtension.run(chess_file) glock.glock_connect_after(discoverer, "all_engines_discovered", do) def run (no_debug, glock_debug, thread_debug, chess_file, ics_host, ics_port): pychess = PyChess(chess_file) signal.signal(signal.SIGINT, gtk.main_quit) def cleanup (): SubProcess.finishAllSubprocesses() atexit.register(cleanup) gtk.gdk.threads_init() # Start logging Log.DEBUG = False if no_debug is True else True glock.debug = glock_debug log.debug("PyChess %s %s rev. %s %s started\n" % (VERSION_NAME, VERSION, pychess.hg_rev, pychess.hg_date)) if thread_debug: start_thread_dump() if ics_host: ICLogon.host = ics_host if ics_port: ICLogon.port = ics_port gtk.main() pychess-0.12beta3/lib/pychess/Variants/0000755000175000017470000000000012176727272017117 5ustar tamasuserspychess-0.12beta3/lib/pychess/Variants/randomchess.py0000755000175000017470000000244012161415524021766 0ustar tamasusers# Random Chess import random from pychess.Utils.const import * from pychess.Utils.Board import Board class RandomBoard(Board): variant = RANDOMCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=self.random_start()) else: Board.__init__(self, setup=setup) def random_start(self): tmp = random.sample(('r', 'n', 'b', 'q')*16, 7) tmp.append('k') random.shuffle(tmp) tmp = ''.join(tmp) tmp = tmp + '/pppppppp/8/8/8/8/PPPPPPPP/' + tmp.upper() + ' w - - 0 1' return tmp class RandomChess: __desc__ = _("FICS wild/3: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "* Randomly chosen pieces (two queens or three rooks possible)\n" + "* Exactly one king of each color\n" + "* Pieces placed randomly behind the pawns\n" + "* No castling\n" + "* Black's arrangement mirrors white's") name = _("Random") cecp_name = "unknown" board = RandomBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_SHUFFLE if __name__ == '__main__': Board = RandomBoard(True) for i in range(10): print Board.random_start() pychess-0.12beta3/lib/pychess/Variants/wildcastle.py0000644000175000017470000000224012175252765021621 0ustar tamasusers# Wildcastle Chess from pychess.Utils.const import * from pychess.Utils.Board import Board WILDCASTLESTART = "rnbkqbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" class WildcastleBoard(Board): variant = WILDCASTLECHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=WILDCASTLESTART) else: Board.__init__(self, setup=setup) class WildcastleChess: __desc__ = _("xboard wildcastle http://home.hccnet.nl/h.g.muller/engine-intf.html#8\n"+ "FICS wild/0: http://www.freechess.org/Help/HelpFiles/wild.html\n"+ "* White has the typical set-up at the start.\n"+ "* Black's pieces are the same, except that the King and Queen are reversed,\n"+ "* so they are not on the same files as White's King and Queen.\n"+ "* Castling is done similarly to normal chess:\n"+ "* o-o-o indicates long castling and o-o short castling.") name = _("Wildcastle") cecp_name = "wildcastle" board = WildcastleBoard need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER pychess-0.12beta3/lib/pychess/Variants/atomic.py0000755000175000017470000000063312161415524020736 0ustar tamasusers# Atomic Chess from pychess.Utils.const import * from pychess.Utils.Board import Board class AtomicBoard(Board): variant = ATOMICCHESS class AtomicChess: __desc__ = _("FICS atomic: http://www.freechess.org/Help/HelpFiles/atomic.html") name = _("Atomic") cecp_name = "atomic" board = AtomicBoard need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER pychess-0.12beta3/lib/pychess/Variants/pawnspassed.py0000755000175000017470000000142112161415524022006 0ustar tamasusers# Pawns Passed Chess from pychess.Utils.const import * from pychess.Utils.Board import Board PAWNSPASSEDSTART = "rnbqkbnr/8/8/PPPPPPPP/pppppppp/8/8/RNBQKBNR w - - 0 1" class PawnsPassedBoard(Board): variant = PAWNSPASSEDCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=PAWNSPASSEDSTART) else: Board.__init__(self, setup=setup) class PawnsPassedChess: __desc__ = _("FICS wild/8a: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "White pawns start on 5th rank and black pawns on the 4th rank") name = _("Pawns Passed") cecp_name = "normal" board = PawnsPassedBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_OTHER pychess-0.12beta3/lib/pychess/Variants/blindfold.py0000644000175000017470000000315012161415524021411 0ustar tamasusersfrom pychess.Utils.const import * from pychess.Utils.Board import Board class BlindfoldBoard(Board): variant = BLINDFOLDCHESS class BlindfoldChess: __desc__ = _("Classic chess rules with hidden figurines\n" + "http://en.wikipedia.org/wiki/Blindfold_chess") name = _("Blindfold") cecp_name = "normal" board = BlindfoldBoard need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD class HiddenPawnsBoard(Board): variant = HIDDENPAWNSCHESS class HiddenPawnsChess: __desc__ = _("Classic chess rules with hidden pawns\n" + "http://en.wikipedia.org/wiki/Blindfold_chess") name = _("Hidden pawns") cecp_name = "normal" board = HiddenPawnsBoard need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD class HiddenPiecesBoard(Board): variant = HIDDENPIECESCHESS class HiddenPiecesChess: __desc__ = _("Classic chess rules with hidden pieces\n" + "http://en.wikipedia.org/wiki/Blindfold_chess") name = _("Hidden pieces") cecp_name = "normal" board = HiddenPiecesBoard need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD class AllWhiteBoard(Board): variant = ALLWHITECHESS class AllWhiteChess: __desc__ = _("Classic chess rules with all pieces white\n" + "http://en.wikipedia.org/wiki/Blindfold_chess") name = _("All white") cecp_name = "normal" board = AllWhiteBoard need_initial_board = False standard_rules = True variant_group = VARIANTS_BLINDFOLD pychess-0.12beta3/lib/pychess/Variants/wildcastleshuffle.py0000644000175000017470000000461412176277430023202 0ustar tamasusers# Wildcastle shuffle Chess import random from pychess.Utils.const import * from pychess.Utils.Board import Board class WildcastleShuffleBoard(Board): variant = WILDCASTLESHUFFLECHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=self.shuffle_start()) else: Board.__init__(self, setup=setup) def shuffle_start(self): def get_shuffle(): positions = [2, 3, 4, 5, 6, 7] tmp = ['r'] + ([''] * 6) + ['r'] king = random.choice((4, 5)) tmp[king-1] = 'k' positions.remove(king) bishop = random.choice(positions) tmp[bishop-1] = 'b' positions.remove(bishop) color = bishop%2 bishop = random.choice([i for i in positions if i%2!=color]) tmp[bishop-1] = 'b' positions.remove(bishop) queen = random.choice(positions) tmp[queen-1] = 'q' positions.remove(queen) knight = random.choice(positions) tmp[knight-1] = 'n' positions.remove(knight) knight = random.choice(positions) tmp[knight-1] = 'n' positions.remove(knight) return ''.join(tmp) tmp = get_shuffle() + '/pppppppp/8/8/8/8/PPPPPPPP/' + get_shuffle().upper() + ' w KQkq - 0 1' return tmp class WildcastleShuffleChess: __desc__ = _("xboard wildcastle http://home.hccnet.nl/h.g.muller/engine-intf.html#8\n"+ "FICS wild/1: http://www.freechess.org/Help/HelpFiles/wild.html\n"+ "* In this variant both sides have the same set of pieces as in normal chess.\n"+ "* The white king starts on d1 or e1 and the black king starts on d8 or e8,\n"+ "* and the rooks are in their usual positions.\n"+ "* Bishops are always on opposite colors.\n"+ "* Subject to these constraints the position of the pieces on their first ranks is random.\n"+ "* Castling is done similarly to normal chess:\n"+ "* o-o-o indicates long castling and o-o short castling.") name = _("Wildcastle shuffle") cecp_name = "wildcastle" board = WildcastleShuffleBoard need_initial_board = True standard_rules = False variant_group = VARIANTS_OTHER pychess-0.12beta3/lib/pychess/Variants/shuffle.py0000755000175000017470000000234212175252123021114 0ustar tamasusers# Shuffle Chess import random from pychess.Utils.const import * from pychess.Utils.Board import Board class ShuffleBoard(Board): variant = SHUFFLECHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=self.shuffle_start()) else: Board.__init__(self, setup=setup) def shuffle_start(self): tmp = ['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'] random.shuffle(tmp) tmp = ''.join(tmp) tmp = tmp + '/pppppppp/8/8/8/8/PPPPPPPP/' + tmp.upper() + ' w - - 0 1' return tmp class ShuffleChess: __desc__ = _("xboard nocastle: http://home.hccnet.nl/h.g.muller/engine-intf.html#8\n" + "FICS wild/2: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "* Random arrangement of the pieces behind the pawns\n" + "* No castling\n" + "* Black's arrangement mirrors white's") name = _("Shuffle") cecp_name = "nocastle" board = ShuffleBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_SHUFFLE if __name__ == '__main__': Board = ShuffleBoard(True) for i in range(10): print Board.shuffle_start() pychess-0.12beta3/lib/pychess/Variants/corner.py0000755000175000017470000000264712161415524020761 0ustar tamasusers# Corner Chess import random from pychess.Utils.const import * from pychess.Utils.Board import Board class CornerBoard(Board): variant = CORNERCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=self.shuffle_start()) else: Board.__init__(self, setup=setup) def shuffle_start(self): b1 = b2 = 0 tmp = ['r', 'n', 'b', 'q', 'b', 'n', 'r'] while (b1%2 == b2%2): random.shuffle(tmp) b1 = tmp.index('b') b2 = tmp.index('b', b1+1) tmp = ''.join(tmp) tmp = 'k' + tmp + '/pppppppp/8/8/8/8/PPPPPPPP/' + tmp[::-1].upper() + 'K w - - 0 1' return tmp class CornerChess: __desc__ = \ _("http://brainking.com/en/GameRules?tp=2\n" + "* Placement of the pieces on the 1st and 8th row are randomized\n" + "* The king is in the right hand corner\n" + "* Bishops must start on opposite color squares\n" + "* Black's starting position is obtained by rotating white's position 180 degrees around the board's center\n" + "* No castling") name = _("Corner") cecp_name = "nocastle" board = CornerBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_SHUFFLE if __name__ == '__main__': Board = CornerBoard(True) for i in range(10): print Board.shuffle_start() pychess-0.12beta3/lib/pychess/Variants/fischerandom.py0000755000175000017470000004012412161415524022123 0ustar tamasusers# Chess960 (Fischer Random Chess) import random from copy import copy from pychess.Utils.const import * from pychess.Utils.Cord import Cord from pychess.Utils.Board import Board from pychess.Utils.Piece import Piece from pychess.Utils.lutils.bitboard import * from pychess.Utils.lutils.attack import * from pychess.Utils.lutils.lmove import FLAG, PROMOTE_PIECE class FRCBoard(Board): variant = FISCHERRANDOMCHESS def __init__ (self, setup=False, lboard=None): if setup == True: Board.__init__(self, setup=self.shuffle_start(), lboard=lboard) else: Board.__init__(self, setup=setup, lboard=lboard) def simulateMove (self, board1, move): moved = [] new = [] dead = [] cord0, cord1 = move.cords moved.append( (self[cord0], cord0) ) if self[cord1]: if not move.flag in (QUEEN_CASTLE, KING_CASTLE): dead.append( self[cord1] ) if move.flag == QUEEN_CASTLE: if self.color == WHITE: r1 = self.board.ini_rooks[0][0] moved.append( (self[Cord(r1)], Cord(r1)) ) else: r8 = self.board.ini_rooks[1][0] moved.append( (self[Cord(r8)], Cord(r8)) ) elif move.flag == KING_CASTLE: if self.color == WHITE: r1 = self.board.ini_rooks[0][1] moved.append( (self[Cord(r1)], Cord(r1)) ) else: r8 = self.board.ini_rooks[1][1] moved.append( (self[Cord(r8)], Cord(r8)) ) elif move.flag in PROMOTIONS: newPiece = board1[cord1] moved.append( (newPiece, cord0) ) new.append( newPiece ) newPiece.opacity=1 dead.append( self[cord0] ) elif move.flag == ENPASSANT: if self.color == WHITE: dead.append( self[Cord(cord1.x, cord1.y-1)] ) else: dead.append( self[Cord(cord1.x, cord1.y+1)] ) return moved, new, dead def simulateUnmove (self, board1, move): moved = [] new = [] dead = [] cord0, cord1 = move.cords if not move.flag in (QUEEN_CASTLE, KING_CASTLE): moved.append( (self[cord1], cord1) ) if board1[cord1]: if not move.flag in (QUEEN_CASTLE, KING_CASTLE): dead.append( board1[cord1] ) if move.flag == QUEEN_CASTLE: if board1.color == WHITE: moved.append( (self[Cord(C1)], Cord(C1)) ) moved.append( (self[Cord(D1)], Cord(D1)) ) else: moved.append( (self[Cord(C8)], Cord(C8)) ) moved.append( (self[Cord(D8)], Cord(D8)) ) elif move.flag == KING_CASTLE: if board1.color == WHITE: moved.append( (self[Cord(F1)], Cord(F1)) ) moved.append( (self[Cord(G1)], Cord(G1)) ) else: moved.append( (self[Cord(F8)], Cord(F8)) ) moved.append( (self[Cord(G8)], Cord(G8)) ) elif move.flag in PROMOTIONS: newPiece = board1[cord0] moved.append( (newPiece, cord1) ) new.append( newPiece ) newPiece.opacity=1 dead.append( self[cord1] ) elif move.flag == ENPASSANT: if board1.color == WHITE: new.append( board1[Cord(cord1.x, cord1.y-1)] ) else: new.append( board1[Cord(cord1.x, cord1.y+1)] ) return moved, new, dead def move (self, move, lboard=None): assert self[move.cord0], "%s %s" % (move, self.asFen()) newBoard = self.clone(lboard=lboard) if lboard is None: newBoard.board.applyMove (move.move) cord0, cord1 = move.cords flag = FLAG(move.move) # in frc there are unusual castling positions where # king will move on top of the castling rook, so... if flag in (KING_CASTLE, QUEEN_CASTLE): # don't put on the castling king yet king = newBoard[cord0] else: newBoard[cord1] = newBoard[cord0] newBoard[cord0] = None # move castling rook if self.color == WHITE: if flag == QUEEN_CASTLE: if self.board.ini_rooks[0][0] != D1: newBoard[Cord(D1)] = newBoard[Cord(self.board.ini_rooks[0][0])] newBoard[Cord(self.board.ini_rooks[0][0])] = None elif flag == KING_CASTLE: if self.board.ini_rooks[0][1] != F1: newBoard[Cord(F1)] = newBoard[Cord(self.board.ini_rooks[0][1])] newBoard[Cord(self.board.ini_rooks[0][1])] = None else: if flag == QUEEN_CASTLE: if self.board.ini_rooks[1][0] != D8: newBoard[Cord(D8)] = newBoard[Cord(self.board.ini_rooks[1][0])] newBoard[Cord(self.board.ini_rooks[1][0])] = None elif flag == KING_CASTLE: if self.board.ini_rooks[1][1] != F8: newBoard[Cord(F8)] = newBoard[Cord(self.board.ini_rooks[1][1])] newBoard[Cord(self.board.ini_rooks[1][1])] = None # put the castling king now if flag in (KING_CASTLE, QUEEN_CASTLE): if self.color == WHITE: if flag == QUEEN_CASTLE: newBoard[Cord(C1)] = king elif flag == KING_CASTLE: newBoard[Cord(G1)] = king else: if flag == QUEEN_CASTLE: newBoard[Cord(C8)] = king elif flag == KING_CASTLE: newBoard[Cord(G8)] = king if flag in PROMOTIONS: newBoard[cord1] = Piece(self.color, PROMOTE_PIECE(flag)) elif flag == ENPASSANT: newBoard[Cord(cord1.x, cord0.y)] = None return newBoard def shuffle_start(self): """ Create a random initial position. The king is placed somewhere between the two rooks. The bishops are placed on opposite-colored squares.""" positions = [1, 2, 3, 4, 5, 6, 7, 8] tmp = [''] * 8 castl = '' bishop = random.choice((1, 3, 5, 7)) tmp[bishop-1] = 'b' positions.remove(bishop) bishop = random.choice((2, 4, 6, 8)) tmp[bishop-1] = 'b' positions.remove(bishop) queen = random.choice(positions) tmp[queen-1] = 'q' positions.remove(queen) knight = random.choice(positions) tmp[knight-1] = 'n' positions.remove(knight) knight = random.choice(positions) tmp[knight-1] = 'n' positions.remove(knight) rook = positions[0] tmp[rook-1] = 'r' castl += reprFile[rook-1] king = positions[1] tmp[king-1] = 'k' rook = positions[2] tmp[rook-1] = 'r' castl += reprFile[rook-1] tmp = ''.join(tmp) tmp = tmp + '/pppppppp/8/8/8/8/PPPPPPPP/' + tmp.upper() + ' w ' + castl.upper() + castl +' - 0 1' #tmp = "rnqbbknr/pppppppp/8/8/8/8/PPPPPPPP/RNQBBKNR w AHah - 0 1" return tmp class FischerRandomChess: __desc__ = _("http://en.wikipedia.org/wiki/Chess960\n" + "FICS wild/fr: http://www.freechess.org/Help/HelpFiles/wild.html") name = _("Fischer Random") cecp_name = "fischerandom" board = FRCBoard need_initial_board = True standard_rules = False variant_group = VARIANTS_SHUFFLE def frc_castling_move(board, fcord, tcord, flag): if board.color == WHITE: if board.castling & W_OO and flag == KING_CASTLE and \ (tcord == G1 or tcord == board.ini_rooks[WHITE][1]): blocker = clearBit(board.blocker, board.ini_rooks[WHITE][1]) if fcord == B1 and not fromToRay[B1][G1] & blocker and \ not isAttacked (board, B1, BLACK) and \ not isAttacked (board, C1, BLACK) and \ not isAttacked (board, D1, BLACK) and \ not isAttacked (board, E1, BLACK) and \ not isAttacked (board, F1, BLACK) and \ not isAttacked (board, G1, BLACK): return True if fcord == C1 and not fromToRay[C1][G1] & blocker and \ not isAttacked (board, C1, BLACK) and \ not isAttacked (board, D1, BLACK) and \ not isAttacked (board, E1, BLACK) and \ not isAttacked (board, F1, BLACK) and \ not isAttacked (board, G1, BLACK): return True if fcord == D1 and not fromToRay[D1][G1] & blocker and \ not isAttacked (board, D1, BLACK) and \ not isAttacked (board, E1, BLACK) and \ not isAttacked (board, F1, BLACK) and \ not isAttacked (board, G1, BLACK): return True if fcord == E1 and not fromToRay[E1][G1] & blocker and \ not isAttacked (board, E1, BLACK) and \ not isAttacked (board, F1, BLACK) and \ not isAttacked (board, G1, BLACK): return True if fcord == F1 and not fromToRay[F1][G1] & blocker and \ not isAttacked (board, F1, BLACK) and \ not isAttacked (board, G1, BLACK): return True if fcord == G1 and board.arBoard[F1] == EMPTY and \ not isAttacked (board, G1, BLACK): return True if board.castling & W_OOO and flag == QUEEN_CASTLE and \ (tcord == C1 or tcord == board.ini_rooks[WHITE][0]): blocker = clearBit(board.blocker, board.ini_rooks[WHITE][0]) if fcord == G1 and not fromToRay[G1][C1] & blocker and \ not (board.ini_rooks[WHITE][0]==A1 and board.arBoard[B1] != EMPTY) and \ not isAttacked (board, C1, BLACK) and \ not isAttacked (board, D1, BLACK) and \ not isAttacked (board, E1, BLACK) and \ not isAttacked (board, F1, BLACK) and \ not isAttacked (board, G1, BLACK): return True if fcord == F1 and not fromToRay[F1][C1] & blocker and \ not (board.ini_rooks[WHITE][0]==A1 and board.arBoard[B1] != EMPTY) and \ not isAttacked (board, C1, BLACK) and \ not isAttacked (board, D1, BLACK) and \ not isAttacked (board, E1, BLACK) and \ not isAttacked (board, F1, BLACK): return True if fcord == E1 and not fromToRay[E1][C1] & blocker and \ not (board.ini_rooks[WHITE][0]==A1 and board.arBoard[B1] != EMPTY) and \ not isAttacked (board, C1, BLACK) and \ not isAttacked (board, D1, BLACK) and \ not isAttacked (board, E1, BLACK): return True if fcord == D1 and not fromToRay[D1][C1] & blocker and \ not (board.ini_rooks[WHITE][0]==A1 and board.arBoard[B1] != EMPTY) and \ not isAttacked (board, C1, BLACK) and \ not isAttacked (board, D1, BLACK): return True if fcord == C1 and \ board.arBoard[D1] == EMPTY and \ not (board.ini_rooks[WHITE][0]==A1 and board.arBoard[B1] != EMPTY) and \ not isAttacked (board, C1, BLACK): return True if fcord == B1 and \ board.arBoard[C1] == EMPTY and \ board.arBoard[D1] == EMPTY and \ not isAttacked (board, B1, BLACK) and \ not isAttacked (board, C1, BLACK): return True else: if board.castling & B_OO and flag == KING_CASTLE and \ (tcord == G8 or tcord == board.ini_rooks[BLACK][1]): blocker = clearBit(board.blocker, board.ini_rooks[BLACK][1]) if fcord == B8 and not fromToRay[B8][G8] & blocker and \ not isAttacked (board, B8, WHITE) and \ not isAttacked (board, C8, WHITE) and \ not isAttacked (board, D8, WHITE) and \ not isAttacked (board, E8, WHITE) and \ not isAttacked (board, F8, WHITE) and \ not isAttacked (board, G8, WHITE): return True if fcord == C8 and not fromToRay[C8][G8] & blocker and \ not isAttacked (board, C8, WHITE) and \ not isAttacked (board, D8, WHITE) and \ not isAttacked (board, E8, WHITE) and \ not isAttacked (board, F8, WHITE) and \ not isAttacked (board, G8, WHITE): return True if fcord == D8 and not fromToRay[D8][G8] & blocker and \ not isAttacked (board, D8, WHITE) and \ not isAttacked (board, E8, WHITE) and \ not isAttacked (board, F8, WHITE) and \ not isAttacked (board, G8, WHITE): return True if fcord == E8 and not fromToRay[E8][G8] & blocker and \ not isAttacked (board, E8, WHITE) and \ not isAttacked (board, F8, WHITE) and \ not isAttacked (board, G8, WHITE): return True if fcord == F8 and not fromToRay[F8][G8] & blocker and \ not isAttacked (board, F8, WHITE) and \ not isAttacked (board, G8, WHITE): return True if fcord == G8 and board.arBoard[F8] == EMPTY and \ not isAttacked (board, G8, WHITE): return True if board.castling & B_OOO and flag == QUEEN_CASTLE and \ (tcord == C8 or tcord == board.ini_rooks[BLACK][0]): blocker = clearBit(board.blocker, board.ini_rooks[BLACK][0]) if fcord == G8 and not fromToRay[G8][C8] & blocker and \ not (board.ini_rooks[BLACK][0]==A8 and board.arBoard[B8] != EMPTY) and \ not isAttacked (board, C8, WHITE) and \ not isAttacked (board, D8, WHITE) and \ not isAttacked (board, E8, WHITE) and \ not isAttacked (board, F8, WHITE) and \ not isAttacked (board, G8, WHITE): return True if fcord == F8 and not fromToRay[F8][C8] & blocker and \ not (board.ini_rooks[BLACK][0]==A8 and board.arBoard[B8] != EMPTY) and \ not isAttacked (board, C8, WHITE) and \ not isAttacked (board, D8, WHITE) and \ not isAttacked (board, E8, WHITE) and \ not isAttacked (board, F8, WHITE): return True if fcord == E8 and not fromToRay[E8][C8] & blocker and \ not (board.ini_rooks[BLACK][0]==A8 and board.arBoard[B8] != EMPTY) and \ not isAttacked (board, C8, WHITE) and \ not isAttacked (board, D8, WHITE) and \ not isAttacked (board, E8, WHITE): return True if fcord == D8 and not fromToRay[D8][C8] & blocker and \ not (board.ini_rooks[BLACK][0]==A8 and board.arBoard[B8] != EMPTY) and \ not isAttacked (board, C8, WHITE) and \ not isAttacked (board, D8, WHITE): return True if fcord == C8 and \ board.arBoard[D8] == EMPTY and \ not (board.ini_rooks[BLACK][0]==A8 and board.arBoard[B8] != EMPTY) and \ not isAttacked (board, C8, WHITE): return True if fcord == B8 and not fromToRay[B8][C8] & blocker and \ board.arBoard[C8] == EMPTY and \ board.arBoard[D8] == EMPTY and \ not isAttacked (board, B8, WHITE) and \ not isAttacked (board, C8, WHITE): return True return False if __name__ == '__main__': frcBoard = FRCBoard(True) for i in range(10): print frcBoard.shuffle_start() pychess-0.12beta3/lib/pychess/Variants/__init__.py0000755000175000017470000000372612175211666021235 0ustar tamasusersfrom pychess.Utils.const import * from normal import NormalChess from corner import CornerChess from shuffle import ShuffleChess from fischerandom import FischerRandomChess from randomchess import RandomChess from asymmetricrandom import AsymmetricRandomChess from upsidedown import UpsideDownChess from pawnspushed import PawnsPushedChess from pawnspassed import PawnsPassedChess from atomic import AtomicChess from bughouse import BughouseChess from crazyhouse import CrazyhouseChess from losers import LosersChess from suicide import SuicideChess from pawnodds import PawnOddsChess from knightodds import KnightOddsChess from rookodds import RookOddsChess from queenodds import QueenOddsChess from wildcastle import WildcastleChess from wildcastleshuffle import WildcastleShuffleChess from blindfold import BlindfoldChess, HiddenPawnsChess, \ HiddenPiecesChess, AllWhiteChess variants = {NORMALCHESS : NormalChess, CORNERCHESS : CornerChess, SHUFFLECHESS : ShuffleChess, FISCHERRANDOMCHESS : FischerRandomChess, RANDOMCHESS: RandomChess, ASYMMETRICRANDOMCHESS: AsymmetricRandomChess, UPSIDEDOWNCHESS : UpsideDownChess, PAWNSPUSHEDCHESS : PawnsPushedChess, PAWNSPASSEDCHESS : PawnsPassedChess, ATOMICCHESS: AtomicChess, BUGHOUSECHESS: BughouseChess, CRAZYHOUSECHESS: CrazyhouseChess, LOSERSCHESS : LosersChess, SUICIDECHESS: SuicideChess, PAWNODDSCHESS : PawnOddsChess, KNIGHTODDSCHESS : KnightOddsChess, ROOKODDSCHESS : RookOddsChess, QUEENODDSCHESS : QueenOddsChess, ALLWHITECHESS : AllWhiteChess, BLINDFOLDCHESS : BlindfoldChess, HIDDENPAWNSCHESS : HiddenPawnsChess, HIDDENPIECESCHESS : HiddenPiecesChess, WILDCASTLECHESS: WildcastleChess, WILDCASTLESHUFFLECHESS: WildcastleShuffleChess, } pychess-0.12beta3/lib/pychess/Variants/pawnodds.py0000755000175000017470000000117612161415524021304 0ustar tamasusersfrom pychess.Utils.const import * from pychess.Utils.Board import Board PAWNODDSSTART = "rnbqkbnr/ppppp1pp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" class PawnOddsBoard(Board): variant = PAWNODDSCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=PAWNODDSSTART) else: Board.__init__(self, setup=setup) class PawnOddsChess: __desc__ = _("One player starts with one less pawn piece") name = _("Pawn odds") cecp_name = "normal" board = PawnOddsBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_ODDS pychess-0.12beta3/lib/pychess/Variants/rookodds.py0000755000175000017470000000117412161415524021307 0ustar tamasusersfrom pychess.Utils.const import * from pychess.Utils.Board import Board ROOKODDSSTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/1NBQKBNR w Kkq - 0 1" class RookOddsBoard(Board): variant = ROOKODDSCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=ROOKODDSSTART) else: Board.__init__(self, setup=setup) class RookOddsChess: __desc__ = _("One player starts with one less rook piece") name = _("Rook odds") cecp_name = "normal" board = RookOddsBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_ODDS pychess-0.12beta3/lib/pychess/Variants/crazyhouse.py0000755000175000017470000000067712161415524021666 0ustar tamasusers# Crazyhouse Chess from pychess.Utils.const import * from pychess.Utils.Board import Board class CrazyhouseBoard(Board): variant = CRAZYHOUSECHESS class CrazyhouseChess: __desc__ = _("FICS crazyhouse: http://www.freechess.org/Help/HelpFiles/crazyhouse.html") name = _("Crazyhouse") cecp_name = "crazyhouse" board = CrazyhouseBoard need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER pychess-0.12beta3/lib/pychess/Variants/bughouse.py0000755000175000017470000000065512161415524021307 0ustar tamasusers# Bughouse Chess from pychess.Utils.const import * from pychess.Utils.Board import Board class BughouseBoard(Board): variant = BUGHOUSECHESS class BughouseChess: __desc__ = _("FICS bughouse: http://www.freechess.org/Help/HelpFiles/bughouse.html") name = _("Bughouse") cecp_name = "bughouse" board = BughouseBoard need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER pychess-0.12beta3/lib/pychess/Variants/losers.py0000755000175000017470000000077012161415524020773 0ustar tamasusers# Losers Chess from pychess.Utils.const import * from pychess.Utils.Board import Board class LosersBoard(Board): variant = LOSERSCHESS class LosersChess: __desc__ = _("FICS losers: http://www.freechess.org/Help/HelpFiles/losers_chess.html") name = _("Losers") cecp_name = "losers" board = LosersBoard need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER def testKingOnly(board): return bin(board.friends[board.color]).count("1") == 1 pychess-0.12beta3/lib/pychess/Variants/knightodds.py0000755000175000017470000000121612161415524021616 0ustar tamasusersfrom pychess.Utils.const import * from pychess.Utils.Board import Board KNIGHTODDSSTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/R1BQKBNR w KQkq - 0 1" class KnightOddsBoard(Board): variant = KNIGHTODDSCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=KNIGHTODDSSTART) else: Board.__init__(self, setup=setup) class KnightOddsChess: __desc__ = _("One player starts with one less knight piece") name = _("Knight odds") cecp_name = "normal" board = KnightOddsBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_ODDS pychess-0.12beta3/lib/pychess/Variants/pawnspushed.py0000755000175000017470000000141212161415524022017 0ustar tamasusers# Pawns Pushed Chess from pychess.Utils.const import * from pychess.Utils.Board import Board PAWNSPUSHEDSTART = "rnbqkbnr/8/8/pppppppp/PPPPPPPP/8/8/RNBQKBNR w - - 0 1" class PawnsPushedBoard(Board): variant = PAWNSPUSHEDCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=PAWNSPUSHEDSTART) else: Board.__init__(self, setup=setup) class PawnsPushedChess: __desc__ = _("FICS wild/8: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "Pawns start on 4th and 5th ranks rather than 2nd and 7th") name = _("Pawns Pushed") cecp_name = "normal" board = PawnsPushedBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_OTHER pychess-0.12beta3/lib/pychess/Variants/upsidedown.py0000755000175000017470000000155412161415524021646 0ustar tamasusers# Upside-down Chess from pychess.Utils.const import * from pychess.Utils.Board import Board UPSIDEDOWNSTART = "RNBQKBNR/PPPPPPPP/8/8/8/8/pppppppp/rnbqkbnr w - - 0 1" class UpsideDownBoard(Board): variant = UPSIDEDOWNCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=UPSIDEDOWNSTART) else: Board.__init__(self, setup=setup) class UpsideDownChess: __desc__ = _("FICS wild/5: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "http://en.wikipedia.org/wiki/Chess_variant#Chess_with_different_starting_positions\n" + "Pawns start on their 7th rank rather than their 2nd rank!") name = _("Upside Down") cecp_name = "normal" board = UpsideDownBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_OTHER pychess-0.12beta3/lib/pychess/Variants/queenodds.py0000755000175000017470000000120612161415524021446 0ustar tamasusersfrom pychess.Utils.const import * from pychess.Utils.Board import Board QUEENODDSSTART = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNB1KBNR w KQkq - 0 1" class QueenOddsBoard(Board): variant = QUEENODDSCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=QUEENODDSSTART) else: Board.__init__(self, setup=setup) class QueenOddsChess: __desc__ = _("One player starts with one less queen piece") name = _("Queen odds") cecp_name = "normal" board = QueenOddsBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_ODDS pychess-0.12beta3/lib/pychess/Variants/normal.py0000755000175000017470000000043012161415524020745 0ustar tamasusersfrom pychess.Utils.Board import Board class NormalChess: __desc__ = _("Classic chess rules\n" + "http://en.wikipedia.org/wiki/Chess") name = _("Normal") cecp_name = "normal" board = Board need_initial_board = False standard_rules = True pychess-0.12beta3/lib/pychess/Variants/asymmetricrandom.py0000755000175000017470000000775112161415524023050 0ustar tamasusers# AsymmetricRandom Chess import random from pychess.Utils.const import * from pychess.Utils.Board import Board class AsymmetricRandomBoard(Board): variant = ASYMMETRICRANDOMCHESS def __init__ (self, setup=False): if setup is True: Board.__init__(self, setup=self.asymmetricrandom_start()) else: Board.__init__(self, setup=setup) def asymmetricrandom_start(self): white = random.sample(('r', 'n', 'b', 'q')*16, 7) white.append('k') black = white[:] random.shuffle(white) random.shuffle(black) # balance the bishops (put them on equal numbers of dark and light squares) whitedarkbishops = 0 whitelightbishops = 0 for index, piece in enumerate(white): if piece == 'b': if index % 2 == 0: # even numbered square on the A rank are dark whitedarkbishops += 1 else: whitelightbishops += 1 blackdarkbishops = 0 blacklightbishops = 0 blackbishoprandomindexstack = [] for index, piece in enumerate(black): if piece == 'b': if index % 2 == 1: # odd numbered squares on the H rank are dark blackdarkbishops += 1 else: blacklightbishops += 1 blackbishoprandomindexstack.append(index) random.shuffle(blackbishoprandomindexstack) class RandomEnumeratePieces: def __init__ (self, pieces): self.pieces = pieces[:] self.randomindexstack = range(8) random.shuffle(self.randomindexstack) def __iter__ (self): return self def next(self): if not self.randomindexstack: raise StopIteration else: randomindex = self.randomindexstack.pop() return randomindex, self.pieces[randomindex] while (whitedarkbishops != blackdarkbishops) or \ (whitelightbishops != blacklightbishops): bishopindex = blackbishoprandomindexstack.pop() for index, piece in RandomEnumeratePieces(black): if piece != 'b': if ((blackdarkbishops > whitedarkbishops) and \ (bishopindex % 2 == 1) and (index % 2 == 0)): black[bishopindex] = piece black[index] = 'b' blacklightbishops += 1 blackdarkbishops = blackdarkbishops > 0 and (blackdarkbishops-1) or 0 break elif ((blacklightbishops > whitelightbishops) and \ (bishopindex % 2 == 0) and (index % 2 == 1)): black[bishopindex] = piece black[index] = 'b' blackdarkbishops += 1 blacklightbishops = blacklightbishops > 0 and (blacklightbishops-1) or 0 break tmp = ''.join(black) + '/pppppppp/8/8/8/8/PPPPPPPP/' + \ ''.join(white).upper() + ' w - - 0 1' return tmp class AsymmetricRandomChess: __desc__ = \ _("FICS wild/4: http://www.freechess.org/Help/HelpFiles/wild.html\n" + "* Randomly chosen pieces (two queens or three rooks possible)\n" + "* Exactly one king of each color\n" + "* Pieces placed randomly behind the pawns, SUBJECT TO THE CONSTRAINT THAT THE BISHOPS ARE BALANCED\n" + "* No castling\n" + "* Black's arrangement DOES NOT mirrors white's") name = _("Asymmetric Random") cecp_name = "unknown" board = AsymmetricRandomBoard need_initial_board = True standard_rules = True variant_group = VARIANTS_SHUFFLE if __name__ == '__main__': Board = AsymmetricRandomBoard(True) for i in range(10): print Board.asymmetricrandom_start() pychess-0.12beta3/lib/pychess/Variants/suicide.py0000755000175000017470000000065212161415524021110 0ustar tamasusers# Suicide Chess from pychess.Utils.const import * from pychess.Utils.Board import Board class SuicideBoard(Board): variant = SUICIDECHESS class SuicideChess: __desc__ = _("FICS suicide: http://www.freechess.org/Help/HelpFiles/suicide_chess.html") name = _("Suicide") cecp_name = "suicide" board = SuicideBoard need_initial_board = False standard_rules = False variant_group = VARIANTS_OTHER pychess-0.12beta3/pieces/0000755000175000017470000000000012176727272014354 5ustar tamasuserspychess-0.12beta3/pieces/chessmonk/0000755000175000017470000000000012176727272016346 5ustar tamasuserspychess-0.12beta3/pieces/chessmonk/wr.svg0000644000175000017470000002557412161415524017520 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/bq.svg0000644000175000017470000003563212161415524017466 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/bb.svg0000644000175000017470000002356612161415524017452 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/bn.svg0000644000175000017470000002524712161415524017464 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/bk.svg0000644000175000017470000002666112161415524017462 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/wp.svg0000644000175000017470000002070612161415524017506 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/wq.svg0000644000175000017470000005212112161415524017503 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/wn.svg0000644000175000017470000002760412161415524017510 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/br.svg0000644000175000017470000002327512161415524017467 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/wk.svg0000644000175000017470000003064412161415524017503 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/wb.svg0000644000175000017470000003101312161415524017461 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessmonk/bp.svg0000644000175000017470000001332612161415524017461 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Leipzig.png0000644000175000017470000004420512176710402016455 0ustar tamasusersPNG  IHDRMbKGD IDATxwXTg?S`)ґ"`A^[0h6T㚨R̚TM\Mkƚl$6b"Eޤa`f~R&FMԗ}-^XRŋ4e_Mg7=HKK@]"лwowRI\\\dѨjw[[[V7BWdܫYx we.]njjG8B޽{GRUUޯ_{E^@C+h=X@6?HMMEP4.h׵*UWW6yۑJoxۚAUJ+㤥57Cѐ}Akt Lr@M}Qys%L$MG}_Gq 233}p>>>Kކ  v-` pxX` op[R p1&LիWٳg'Oӳ} ףG{9jjCբjuäVB sYRSS ռi?&qľnL5D4 555zH$hZbU]]9 4lllػwnYߴZHRP*5ŋ6tcľ$_iLqq1 55UB/~~~:rp5ϟς 6lYYYj\B\\iiikd2<<<;v,M&\@@yyyĴZѫW/Z{~k}g#`E:6zlxٳG7jHHH <<ɓ'pΜ9B===$$$bHRjkk&!!dx |}}&H$bĉŸq6l]vcǎcll7$h4T*p ~wBCCԩ?xz#bԭǀ1f6@0\D8[ߺ/!Dll,;wD yg={6...brrr8u}7n >,cƌ!%%KrM6mDNXd 5k!$$V^[hO7|T*LLL022"99ܹ32tBPPO>$L4I\Bt6E8 nw"܌[ G 7lxBAhh(._g}VKbb"0c q|M믿oѢEK,^Zˣcǎtڕ+Vg}F!44///LMMux A2??ݻ#HPTj;ygtO#JTWWcmmY[nib[C^`mC$@nKL;ͱ?n޼̙3|8sss>#VXӧ=zgٲe(1x`~Ν˶m@Tuy@VJ[]l,\1cPQQAdd7n#<’%Kp9^~e0an{CCI$|||cǎOPPl۶$ݙ4ieee=LEEEܼys:hJ'. Y!x1,Muk[, k\emEǎqkggǬY(((y>s,,,ٳ',] **ɉgy~"@Xhddd`oo!!ꫯnnnr9d2aaaHRߩ?ݝ,ꫯۄ[?&M aQq{)@['r;!CM;\EݵkݺucƌQVV5ٿ?3bPw 4!\||<&L`ȑ\T*aԩS57nr>** p1,--;v!p}z E 54}oj8"Fֻ]ʕ+2##///>uƂ xO)--ȑ#?~ѵ{1 \e˖ArrHCC:Rff&:PQQAPTsSNlCXm^`I=7Hmq+u>YcKáCP߿fΜɸq͛l۶R܈p"ŋckk%FB$!X|9;vয়~ԩSsR)>>>zy( :ub֬Yt֍wyٰaVVVlذnݺ… ڵ+sa֬Y)*'Mb  /v۫;Czrr2˗/`̘1 >V9z(L>ru\\\P(,[bccիj>}0|p@0 ]\\\?~<1~xϟH$",,5kйsg?Nuu5:u={bmmh5NO8fZۚ[!C ONNƍ׏aÆc022=zpE}!-- Z͛7j >#GPXXA$1xFmyhœO>믿F*曷4֮]X,W_;‚QFa E Lӿ]*,--MnqZVP(*%ǎGEEyj׮ZG;v_/XXX]֖\E$ѻwo^~e֬YòeիNN i4:4\5AiڶF 8fhѢ~9;;;I.4 .PT9Rnݺyyy ƍBЙD㩭Ս,\Ln(xuƍbn߾BBB 99^^^L8v<[CMM 'OF$ٳ'SLAPh"D"ܼy#Glu88nM?x?ˋi!6m:ԩSh4h4ϟOnppp\AkZ*++Q(瓕EBBw&11Q!\lʔ)ͺ CҹsgyN<ɚ5kX`ݻwʕ+lڴ*>|8FsbDD;ZH$r*++cbbIIIFZVlnn.277W=<<4www\̙>Ab &˗/gĈXZZ6:VRZ\)--#!"\bb"{fL:U~'._ĉuUVq.\˗fۉdʔ)3ccc:wX,.?h& iH$ؘ#G2i$***t111DFF7(--mtt ???v튯.xȑ#w |hWg"꿝(JyVERں T@Dzy=""b87oޡ7x'|RqƱQϞ='$$TWW;k4111b@J;b^zsNxb6{3gyf;Frr2ɜ:uJwD"gϞпZ-̛7\]]ٿ?.]B,5'NĉT*ڵ-2ܷ8СCXZZٳTݻ?(˛7nQ\\lرGΟ?[pp'O>SZZ>|kG 8s /JiŢEx7Ō?իW^dD˜1c㫯BѴ(R'܍78z(T*rrrZF.SQQ9x )FFF$$$p R)$%%n:}Q=O;5?<&}ԨQw܉Ή{Y`իW)--}Ziii]D666+W566v 0q.#rNq>СCc,Yy iyO>SNֲb  E#qC/^_u2q1N<)rcǎwޫP(QUUsUUU1|p}ѻnLFjMuuí} "V"՚"MiiBZ@&eD"Je'HQܥsSլ\2\\\Pi SSSHOO‚7|##;p%%%ӧ133nP( 8"JKK\Z`#0N$>S̙S,{"D4Z$&%%~'}i R;v<<b1R]l\ff&oo3f&YYY.((?uT~bbٜڪ*]L&S8;;Kuҥt̓JJJNrF"FW_}Ō3HMM%55*++BHNpp0o6m>WY}],ggg=c{Ovvr6mRJJKKdKK]nݺS?t}Lpp0->?007Bdd$II-x `faƍ|IIPO?e2YɓMJKK;RiӦuOh/օ gժU"SXj;v]%x xb _< ''^xNy _QcǎҒp8Цk|71f ҢshUUU57 D85%0GܺҀ!1X,fС 0_NZZZooowޢBX=ڐQP;b (ú!pCj4H<SBVii)z#RsssjkXnB{p}ss?¯Cb7 gR/^#\VV-<QVVFjj..1?Áv/Z-w&::LFuu5cĉ~萗Omm-vvv̙3py@C4hПJâ=ܥK"&&tIKK#::{3=T*ÛR0݄KNNfԩt+++|||2e.o4///zݺuZ3 ۍvN&mC<555T*\Ɔ^z&uX`СnӇ]vb Ξ=7|޽{[WFɓZJŧ~JEE;v=,ǹcO`%-sС-### Pz C1}t|IFܹs,?6Of_|m"٣,,,lV_*M65K6O>#GvZJnz`PHL9sk׮ p"lrv.""N:1|pr9X M}΍7Xr% z-jkk ҥKh-8")voj]޼y|Ϟ=ccc999 jE2Ν;uƼۜ9sFO &dXZZ6rϞ=zJB t&M4)366cժU'E"ѷ:u-pjjjb̙3dV{_srr=S͝h3f̘{ HJJRv֭ !%+6R ٳ'=z*н{wƍ\.;;@UUNӤzOccc" 60@՛o9p/t+V#[e˖qdc1`BCC8|0 h$X'Son:hР3{@F022*D7g׮]C>bԩSZ`n9ܮ]ڵ+ӧOor3<vj-5"Mvv6))):Qee%)))kō^vBPoܸxڵOlmL||1TgϞ~M_KHH ))oY-0ccc֮]Kbb^_FFFmj)f*oaÆ٦YDA>uT?V[ܷozq\h.]O
}x܀=ztsFx{{;>o޼º}[lɻu&GpL2Esӧ{a:|w:ΆpqqC9ax䙘d4ܾhѢ󮮮/#_|}~;ann~&:p*Jq}788849iK.M>˗/}v.]y K9 ]2N>bĈrܹD/^tڳgϾaINNZ]]/\0|S#p:՜!%%^;KDVWܹ3ݻ7mj-%[ZZ6-ѣz=?_Xx{{w,_ܯ3yBwm"7n͛7ޖ`ȑMV$B&رcѣNNNH$4 $$$PVVƔ)MNڊ yw}WgHWG6`ʕfȑen@R)seŊ̘1kkkrssپ};eQ{ĉYbDEEBpp0˗sQCYPСCǤRӺu__kz!k977W%OGv'ckk?OFFΝ#//W_}UWo#!!Gk.J%)))瓚JMM `ݺu$%%R? (p:DTX!8O6og|]5^WW׳x!**G66l#GÃ=z4qh4?RŋdĉhZΜ9C׮]`ܹeq1_ z5!lRPӸmJmp/_fl۶٥~@@[nCJ/Djkk0`'JGTp Ȇ-y$I1f @`ddT7ZMH˗_~ԩ IDATSxia…?# dTRRbh  8 V-D"f weŋy㍖ΝKEEJjJJJDXYY]]]7odee퍧'NNNtԩdMM %%%h4,-- +b "ܼ B/YI[ WPP={xx[%xwHOOg֭899:OGUUDGG%H$ 9R)nnnQ[[G8&())):u4=UJ;;;zM>}tm -b`ٲeRFӽ{w>;'l R˗sxgZuxv0VuˠADΞ=˿/BCCyY|9:t{RXXŋpBÄ3a„LYc@^zϖӧ̭:uhsrssINN&44r/`(`V˅ $-- u% Օ~qѯ_?N޽{[<==߿5x @0;wsέR"aii/@ciiI\\#Fh57D"^xΜ9իW`PUUEFFW\iҞfaaAFF/NNN7ŋEBB㒨FFFf#{!"dggSQQa{JzD /^Hݙ}:M.4i&L͛T*dxyy(W^$''[YYx0S ʴ-^m Z JqqqȏiF"?oQqO![fnCs_oS%W7Rl"//~ݻo>4}RR$K!P.77Sr!uaaalٲ~pҥFephxyy{nzN~Μ94}JB{׉ۆþg@`dd4}TTМaa!, ?wb`Noeɒ%>}kגOLL nnn4}޽{7 y953春r\>_~ ٳqMSʫغu+@V-T#[n݂3@3buEDD=z'"""JV^^N^pppk j5Kj*_~E/h Ymnu3HNN'Ƥ2gN:ŋ/\.?̛7OgSz~)M@@vGwH$"??Bk?^xb+Wjɓ'>x[_=t+ 6Iw[ϸ2rrrPPZZ7_FPkIԕBxYZ-O<J-%r|Lxx Wn lZ È#+u~mjuě=<z;v511 4;355uAPԵa BHSP'M?w\;"hZT*Wu4h- تu vO>H$}=wyxx)0XH$v7tD(Si[LN*LLLر#t 9PW ȑ#w==Z~! _~g֭[7߿Rf$֏=zt| m*+XLO"11 dȐ [[AhH\%!!rT*g޼yTTTpeHOO74C $sssg~AIMIٿՑ#GZQS/MOXs &QXXȯʬYٳ'd2jjj 11{R]]mhi111wM˫mwJĺX,|ԩ~l4 H=JLL_fʕͪA֕mo&K! Z6BhkfffcD6.]4(m7\\\ؾ};.\`[suN8ӧWA])hj~6Bh-Dssiiii[yO?uomRRAAA驓74}Rh4޽եZK d2Yзoߑٳf/MVquuL(M?f+/^̙3g(MNNNP( !M_"//ݻw9TѰsN[͗JOfff&d2C9ekÃRwrr",,=z&KJJ8x >###ټy3j7xIid,Y"Gx'#Mw-|7rСBh)211yͭkZm $֡4ҥKDDEEȑ#ygٲeʁraJKK2e ׯ+:iz[[[S]]͎;عs' kkkn4}R[\ OnOj_ӚEMMMM% 4+>|b틍 {ח 2l0^JII Đ!C`СpJJJ;уm۶aiiI߾})++#$$*x饗 P ϸ^K{GKJJZ9QQQQT-ܚC Nyyy={["HpssCѐImm4/1hZ222LJYfZ"[znIee!@Q}mի] GJ߷J!pz}<-RDŽo<0Kӷ s[xoS<*Gɸ7LKKӓCH$[]T6iJ[yV`kk+njxϪW^|8P(NPw^llld(J#@.Mv5IMM5@ ϟ'F!'ڵklܸcBCCIMM%44c6nȵk#yO㤥ѹsgLLL&99OO%ά*55UեKUrrA2잣^9۷*m C?8K.fǎlkA2"X}V'Nd!AJIn °tpp%ϛ=aA'pY ĴiXt)˗߳ 7~WWtzb>* 8qĉΝZ[[;H5dY`ԩ]y"i4jjj&QYY-QcccCM[z'N2dA `}6 ZIĀݝ.]`mm5buFb~:6 bccٹs^H$gggvlܸccc$ ?#>>>3pM6mDmm-RoooIOO3VS8haaa/j6@0\;ut<33SUsƲx+|k׮ȑ4 TUIGWGGG׼l?''a!Ҫ###~ioWw^(..ՕRػw/111TUUU022bƌ͆P=H bcc>gfŊ\x5jB]wNϞ= Mo_]oc&NӧamN$ES[[+Aȕ5#lqaXWR76̇jc0D P LJR Z$j[/122"<<\Vy뭷Z1XD@TT'O~hxT_P"{1wބ0) 6nΝ;>|pG* ⒒@@P=lذ]u QQr׮]D r.'2226Rj"UPՔeH$ < & @G6DY=6_HbggvvvѩSS%}tM6g&@ ʴ@J2B~qky*mbB*Ves}AӤ~8% .//_X]]PH$xyyj*Q*dzl2K())!99e˖@UU,_.],FFF<ӯ_? s_@p\"̽*/rqjkk Ury娩kkkF{{{r&LMMqrrʊ:D"qN#V ,A0g֬YG%Ktt. mA[lQ hDNطoǏ… ZT)++cҥªU۷ 4Z2D7A]f x9<0sL"""Ke2fff\p'ၭ-;w䭷TJmm-} Z]+VG})\rEofaaAQQٔMAAqqq!8xNW^mI;T\\l3iҤߓm***;w\ٯ_c 333lX,0~rss>iiiIIIʕ+rYΝ+у)Sesf隭[5Ĥ>>>̞= ]f͵6!b1_bϢwjW"IDATE011AMJJ o&5558::III VgϞIb &E||<+WdܸqXYYf7oСCۈD CC1Dʣv׮]f\KJ1Wf<Ӭ\r,YBdd$䣏>B.ev / \lD#0c  .\ҥK\z233J6C޽ѣ>,`޽P"^RR^[[+HS#""jO:%ؔjj5"kkkyua߾}U#F0`qΝD"QMvvvw klܸV˹sذaE1bݻwgΝ:!I&ܹsu<,#b1z"44@ ڲtRFž}ϸqFڥ={C AT@kooV(:Z\X\hѢcs1OWZ5R"dmٲkƍurI*Lv3iw h4bjkkMLLJz^$lĈ\p8~WLLLxwӥKt邝={MOmޞիWcoo?4$ZP3f1R):yd@hhѣG?s& ,⋌]IIICw=ccO~\;yʵZ-l޼Jӧ={6(J~GJ%&L^@"p9^ƍJ8;;FJ:;UUU$%%XqYFIt~#<ellr֭[g'{1..nBm܍78z(ϦM@njjʼy7on5H`` \zt֭[ǣ>s'>ZfʕzDСC aȐ!ҩS't.JEII \zP.^ hRA!Z "#MLLZVRX!Pծ1`w܎;ӧyWxwKeee_~zʣ>zg1p1cưctҥKyGMHcW\SMB q1bD$Y$bg"ݸEZ7B4e"ʐBW H%BFLE4hۙDm->p{=OV9>>F[Rvuuu8NBcccdˑKRoooἶ6n0JU83rI֖lmmME,3\=#yN'''jeddLJQ677Eh4F5rړ١׋``rr1Al6S^^JB&JEp8Q\.h4 olK S[[@]dV^fmT>^p;[?UtY\\l&$I""I-kO VzW7MQ.HE6T{S#sZ}c?b?xM? 1y*IENDB`pychess-0.12beta3/pieces/chessicons/0000755000175000017470000000000012176727272016515 5ustar tamasuserspychess-0.12beta3/pieces/chessicons/wr.svg0000644000175000017470000002621212161415524017655 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/bq.svg0000644000175000017470000002175612161415524017637 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/bb.svg0000644000175000017470000001652212161415524017613 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/bn.svg0000644000175000017470000002530712161415524017630 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/license.txt0000644000175000017470000000006212161415524020662 0ustar tamasusersPermission of author http://www.virtualpieces.net/pychess-0.12beta3/pieces/chessicons/bk.svg0000644000175000017470000001753512161415524017631 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/wp.svg0000644000175000017470000002165012161415524017654 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/wq.svg0000644000175000017470000003103312161415524017651 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/wn.svg0000644000175000017470000003524112161415524017653 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/br.svg0000644000175000017470000002612212161415524017630 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/wk.svg0000644000175000017470000002643112161415524017651 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/wb.svg0000644000175000017470000002424012161415524017634 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/chessicons/bp.svg0000644000175000017470000001506612161415524017633 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Fantasy_alt.png0000644000175000017470000005410712176710402017321 0ustar tamasusersPNG  IHDRMbKGD IDATx}yUsj}}dCBB;" "^*WT>HІ킟zW.WA!$% ٷIf&KOW}TwŌƒ'uΙO{H04q1`0H> Oi3=n'݁BuȊ 4>aAW~r?@tRǖ@y\r۸qߓ~8%HP g& ┖p?Q04h2y`Y#k7 rwDYHׯuj y `jDIiPTX\ k$&Ӫz$II<@UV3JJE0te[PTQزnsXy-o8RX<ͣu-yS݋fxANhZCc!炬h้II8ӎ+/9wWͭA%Ԁ%J:FfcQp p\U nEQ` iGjm0>/sCx EQ֭[s$cjPU i)<B QZ]7rP)g,b&(B@Q 32IK8X7]9TUko(P5EAd&@S(BhPa,hMSp < 54@7{5/z5Sk|yK%~}hI;LDz1UbI |ڠ dWnpAk;dE]V`F C7o}0$I$ <\WWϽ}N'4䨪>04][^ATE}`˶=熷jZPw*%tU$SiC,ZYpPCP5cȘ.Cx<$EaiR &X0M0Ehi5Mi~P]v9]xyW}c"DQ)I3 #W[E *;v!ڵb<nBUyQecg4@9(B@4K 0uR)LÄ(󁢲XVESXp2vhF$* HJ(rvf;Ox\ľAgLOb=s=q˟h6a[tذ1Ϭi?@p(.귧l 'Ǖ{=.o7^{ *P,HASs^6#4xLf0?׮:W]_g̙Sipcg=z3Fbisp#.J Ms@Uݽao/n D4(fuKDQ??'"DbqBf#غ}qNG~9~W,CôrqH Ä=(kN=Ԋlb' @gw{e+jZ1y<6D{q"s9 c:'iD!ɪ- CͅP96F0,cM,Cqwo 14EAt(\L*18~1N,&r!떎ft:; C4wN74dYi9A9 I)3^|?5uRmD~SzPD8tq]w}i)Bvq,g#"! h`I^=x!Lp4},-BBE`YvE9n TMlP^糞QB PnΦ)麎@KZ[*4- cPiG%g뮻B~.QذyǂvWN575m\`AJgvOu kOܣ=j@Q{C^<"E2z#EB @$kJ HТ"ASFB׭w&彃xoQ+0>M)x]҅{ڙ[w&r:3-MMͻwsLA$*6IȊԍrY֞hn -$&`ɘ!j[MבHTփ$R}S7$ْ,UPl6 ؽ <ӎrnp:u  ()aum?7sEQ M ,e>U4}ecsߪְ-bMQ7s 6[F~ !!xo}/IXLBcs/dE$Pu݈,JﰎSfJ% (K@M E`@yIhmOO812Zٞ__wDI Rf:S <ςI]0/]_ۚ6R+o@Ei!.wE,&lEm<),f>z  WYhOhP2n"vwɷַA?؀"E5k>0cBPRBu#3Z@AK[7bw2 PoASs(+,7 rqO)ղlp$B ׋? }8h@^#%B9a4F]rvp̋S K )y.7+ܫMq ɨv FAYw|ZRua)4U, 4euD"fDͩ8y80NǙFP 7 ya1sjk ij hM(FC2M|<2(1l~oҢϝ-U3D23G2x"NߧTQܕCSr<(Yy$:3E n&10Y֩hTQV3sE'oyp"2Ǣ G~=7#v ҷ,gXLA4@,wKe RN BSk/xGR)J4,0SM{kعK}'EȒʈ0eh&&$I,`9e8&OT8BXE DZb={&(BVUeI9UO(0L>I^;$ɀ}tNɊ| xUM~!T*"Ʉ‰!渉0R'J"(:l勧sxPU| XyxOEum38!u'$PNe6 [@_2߈&nظu5$Lf!9|?2=-7n?ˠ!c^yEg-m!\r\QR!+Q%@Qr|N̘_nxEiQ.~-Hf0eE6tepyBZBxbB # :sG'DȊjQs x:N@Lڜi*=Ŧns0ԨWg€e4v=+,C' pxi矙KXk섳۸}nץL ehEڃ€ah )r:HQq+݆OW > S'x'N4   ?u4>Ȋ IZoZQU^ q! .J4 s{C1ŏӄ%?V5{;j>>pݽ #{C5w}ak\uM֬Y,HqJ,V?24s+101=!\>k-0?/}ۣ]VpEiFbQ,E߿wfڝ6`03ڶNKO&Nַd̪oC; &bxy6$D݆@8vbO`pzo_u|r'kX%3v;>\v5K瞨,+0zzReՇypmK:΁QQR$h\B8Cu]#r'\+067i !3< " @PsV]z1MS峦4q}?am&EհBd*wj,^0<ǁa0v0} jzPR̝1i@{lͽB4C0.kܿ{n>^ 1 cׁHN=oi`hWLZQS!0Ǖ/aC_(jL$m^QRn ·U=ֽSLøxN(~l۶ ooٌcIVIYQݝ$HVI+*u 8Q ?׏ Hl# %8R׌iU%HHrV{t ) XpZڐ󣥭ʼ@A msQPw>8f YV3dH$ɖ9wե X r7&wӸqX{ǭX~bH(Dr" Ib4tYj@ ׉umPbJU\8p:&No} 0MHb HFŤ5teif Ek{Sj?-9b<1@LXMUKF'BIxB}GU3pT ͆SJ1wF r@Q&U桦 t$ՎiP܊BȒۉh\o`08=5lc2`oH MpĔe Wqf*_u֥`6 O1eRT|k_ x * > ]H5 u]!nͲJuDWOᨈg͂()8t4nq hl ؏NB*U͘JE眉7ٙem砪z+dExAUw8"{th]1UenÜ%uIrEkFLh4FO󠼸S*PV p,/P ,BSdر^ڼ IUU",TeIЭ} ðOIM/< }0o`(Z IDAT G~;e iws.Æ;` p8{llzgߐJT,`i}9~m5Lh0} [iG:\_FL8˅F05+iUNh4֎.Ȫl)is#Iq8< ARsum\UïlV(yMq/Dgwo QRuApZ(3/T^/֎й]y4ENS,ieTSM?>0X,X4 U*2`j:T_`u2)x'IYx٪Щ*\ꚚQZPIҬbxBihC tMUxu6<[Uw U+j:{l6~aj\3lfIRn=9YCU5kz䑇f jii^y-\vRĄg ѰyA}eI er:?hJ^A@ nP!E ''xpc4Mrw/W܆.&uጹMom,=ʲT4  pTDIafO/m[Y(IV B6<29s6h MSk 64=٩' haE(brE)>;55%)u<2bvqaKԺV!ɺXs9M@I4&I8edhhXdE0L,K'W BS3. Dz,οb%P\.Yڇ*EX\-1wV1}Y:!&p𸝗]?h6NU'ϘV˲M`P&^s}}V7Q`e,UN@Qt(M3Uӆ˸FD0fSeiO36sgTaIymhBeID ͤӕRY$>/?.A0N\z͝ gO,c&Y}]OmБf7EhDcrz?p#4$:0WM3AU0\_D84gn4C__WD]C1gJX`GdeYg ,`ѼhiE"!gMagQRXtKK_x=(<`v;CG/?R.Ҙ6T%e4 #52&U<õ=*©Cȑj`hmiƃ?D2/Տ>[s "9sQXX8: Xy"lxkvWCW)Еv= &%p,LX!dEE(iXEӪJۋ|TnQN,$CVt&4M`q,*9NM٩V̕BU4P=d:͒tssxB065"I (MU`*tMC(ŻPdL~a{ ÚV :0k}#)M/Oχ{!!65[ñ~WKʊ.1MSHKJ/wH'Ĥi8koDˇ]P afɒ%J@&~aa1UDGq.O4FD8ktg9u&a "2 ܫ)b'6mf\lfUXESS p0 =4b"px]Sp㝷X="(f̚EMdNcFL⢂ii"Y$D.>vνXO=xw=U]룁iؾmYL&~y.BCS3پ*#()M,[r&$EEQQDu4˦NaH$xq&{!~e'{ g_H$dOňWXX}U)Dbqlؼ 9>/- gCM$D*|M1`Yn ,Ks0gfqz`X4*m<7(G%i4 xv7i?lwYQnݺ&- ,_0̆ zCC!+5 *egfX`Ό),?=^@SdCmF[Oמ7mx%hIG

{ia.* V׆6A_8sɼ.39OהAmEX?4M1IfzZXP>,ڦnt$\u,=LA,}ja}t9fN& @ $Dk;KcvaXzTh&NC~x.?ky^Wn8R%Vs\)}=nKMo|>B2KɊi/~9 )~"pp8 pyvtt`cXq dհ օv۩[`$ 7އi<[r/fPV3L:p!ظY!믹?SDTtĢQƬ|()b(Z!& r@ӳ-0%HU,ubrE1aLA 1٪]? %DC}K:vf~'Z;FIyTqVUc kV`bRE`eEx\hji<^xrRV\f/=\Xc[o,)&P%}3,qP%DDb1\X<1ln C׆H7Sװ| lڼp9+@2n[0t NA$]G;1y|041^4mȧieֶ˾Wx&&چPBs I1'xr|O)+_ C%bq$~ahV8ME}K4QB"`떷* K5r|~j#vم+ϝ=J4%SQ8U 8o\lxkh&`ެ2cܜ$ݡ=ɹO>=B Us问mhdB*ӕ iV33Sac@Qd'!?_/;?) Rixi8{CS,B5ԴFkKNYb)4MAӬ}&'lWo]~e+}t)a 1I<(J4LÖX ,8O?79|,K/FkO;sgA֛@aiXp@u#q~CQxN8c_1&.VГ"m\QNbd̉/E/ͭm8Zۀ.4ꫯS{ (`!iA3^:O hQqh9˅Rhi9K{P]ی\.: n<7Uc!uݦ-BR G,V ;OpwS0K ,XzM*/DWw ϖH4xwp*pȨ4Z•WM(-y7^";m)i dx싈hÖX-!3/ Xc;Bhk儤Q6K(ʦ*v@d{ 2,K[ds;mW=XMQ8stW3V;U50uT\kW^`h# lV2eps} [b}2u;zp1\~Ũ>zd`;n($| {O[YԉjOKWUe!z,+04kc:䍢*$ϱS sRMk[v;7^ lfpÍ-> ߟy9~? ]*% ne"_B!ں:=8\0p*<{H67_(k־ dEEv08NfxN*&CfY:mQϚ:ikGbQD;(dH;:]|$DQ|z/ygǞKhqF2J1& &M0`)*|9+Vۑ$ F4oƾqtCi1mt&MR_>lK_&Esy;|㝌KjzR6G0j+~#Av|*6>j6Ӫ_?;v픫ͻli.~4i`0h.+&dJuC, `9q80!=WM^]ŏv<3v'ݙ2&p rr@~#AA  PVDQ'ݟDQD(J)ᘐ)aE"o/ τi(ϟf#0;Әe<៯n:> NxzyPU Q$+klߺ%>---PC@'D#ػg7Xil6 %ض Q *"! IٓN:NzZo?;Y2[˩[ιs~fՎ&D+n- plTv|oqovwM+zq]K}%npՓAVxt׵2\vᩬV@S(xzhjjKǂ֗e" "I𶇰kP(1{bfɂ$hiH~|qx?-lXa<f\.:Zp8-bˎ}ЫiԀV)~gI(.>XeP\ފ0˂!t0-׉? '''a_MU9 VC NO&~1'3';\A88\iT݁'NVZ]-5\Mb`\tL7 ^![Rlw.]\n)8 VTC)zQYt.<4`(]?Du]] :MVH]a f(]F)zdش(9U/47˖A>>7xsHff(;wzoJUئ 'ndFԧ![~eY 삅 7`Όix{#Z*6 +NkŶEOJ=9ޣMǵKoшDQzp8`alpZ   a,> AK @mmm-:$J R [r*222ȧ8sg&d0Ztz jiCѽm7f(YW(OǯR9shlHgm.np, If`Cl7 "hN JHЩhh44*@8Rŭwu&RN8ңG00?fL2`M2CA*cO@C$q/=f$ 4r& 5CC"梼_ И0yi'*%E?vl%̟s|./Iŷ+gNLi@A3' F1 = "Ns7qznLZr_u*EQ藕yoNRƜfdADFX4DIƋDz"8VDNj=+ASœS /Xaz8Bo߆CņPDjC <]nPEFϱx{"p} G~,(|z\>w~c'nھZaJ swzoc$ sfM7ۚ g^0HQS[{hwnnv+; gIǬ~W?cfc EO0ؙ3/å{ D!xsv#D͘;*?zOM'=wcтxǡѨ#D(|6Wtt k03qt%$ -ze||Z+ru: PfIJɌI&#*eYY$ںlzccY6~_N}GVGьt{=5}^ǟ:޲fG  !yHG ybJ3R3el8R*RLJD5h9i#eX둔; Y&4 ˮwRnOw[a. !vСC0TWc׾1b|P!qkliBT#n$%%ℙtby(|h%͟]ؒ @uC#H_dOI@ts,IZdimIVqȶ^`qD4P`x`yE̙17.Y-/+Nj1gfR.==M"Х2!0dx: ` [ID.;`@).AA7D5v2'2AMs2NQ6;_]\NVf4V5e"!3Îkf &%(6e.3*VqB~) 2A'Qb[Y:5kV/d_t0! VF4A  .zT\IhuAVE092qj,|?a2QWWֶvL8z F|vD``?455jKFu}#lzZ^q.*cvܮVK{h#O=RTU]-4/\QQPɑrlLDppӺ϶^PB@[X0>OT49SĤjp8$ I[jq$BϛNr ǚw?p*,NN^$O}?,x z [l MidFwF8m Oۮ©S'orF;gKݟ~M 4%wu2ӒqÕG22P09ϵ+->pe97/?8^_{z|9dORⴛ.&:I ⋯vIxˡDl%p>q3Laxn %,Zō{vb,d8f{zΜ}<]\bY]zo/=3VH pJtA:H6+MZ4gJA&W$Iާ,w|>ZZ TCeMZ݉'QI+ Ea)x⅗ӏ&Lhx{J7/AI' Ңi(Cs3ftĎ;VlGrr3 w^1P987{؂w,%K!k`By/Ni=rY=^_%QQBA] <4*K_`UbT!׵l+î%8fD\!M;C&Mp|ьQbڰHtDtkG"e,nϖvVL:;~Μr!&11ᓻD+`u}ҳq$Cƈ֟~v+&ҵuq?RqJE$oN:R Ɛ. 5/-n6Vot.i ST58q{skkk F6Fd)R{,+n_B2$xLQVY}ar;=k8xΓI`@vϖX8wz|G}Y`  D*%ę?r_5m g9N?Q4QAEш#Gaߑ=lJq#1)Ȱ["%VLӃT;qdØ1yyp8oeyn-(XGՂH[aԪyܫADmc+jdXF_Xz#QzdIrH@0F*`I]fY%Uԗ$gXpFIzU~{J`eA M. Sr3cD^ -&OIE}%eU :_w> GpP_Cnv*-X95$x#lgT/++CeE9~;0㒉ќ.uoml!TCJ0~%:?5qM= u9tmx`Z0rH2Seǡd L*j[wswͅ,y:O i.iiklIok?0 ;B%M[R""}x ;&G49MD.M%Ӑv]` =(; S W- p<"E^BAi"A"$h$2S huyק6}C"26R2 PbHX,C:Sf=f!8op8eƏŸQ#Qa>{31ؽk NbIFSc#Y (j%Cx^,G4i/ģ=&7I}$o^077:4> ٨-&=e3e!48HDw "BaV8.Y@:Oǟ 0Gm_]㸳J0y ~س 0yOh_0PH (J 4 )(j߬x}h*Fò)6$ZD!2GTgkU AЙVK25G?]|SqOfIENDB`pychess-0.12beta3/pieces/fantasy/0000755000175000017470000000000012176727272016021 5ustar tamasuserspychess-0.12beta3/pieces/fantasy/fantasy.svg0000644000175000017470000067107512161415524020213 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Merida.png0000644000175000017470000004266512176710402016263 0ustar tamasusersPNG  IHDRMbKGD IDATxuxG?+eKؒ2Mp]|)^!&i_!I$Mfhd;f1-[-iw~V1M|'ٙ~_iقB0{lHs 5SY 0}a:b""""S}UU^e}j?4*e!DDFt88rPv=zB@BQQa㾾$#"z !A"^!OY,*Oz$zy&gj^$e@JjhNNQZF*++f%}w49e}\MM vno.:&cpػq)D^D$"mluQQQjԟH+@B"7}333;5V 3#ʊ R%.>ЩOk;6SH )/ok(BD6~ad(kz+sssnْ _9 (G]Pp+c%dt:LOEts49LEiΪR"""BTk"$ĹFUV^P M,u?dffVDu@ 8Wmq E0>"@PQQQ!G9B-YČYn3ᨡjjVYlpt༐ t-@Œ$IUׯm)| H"TS,7K< ~Cb^^^WյcT ״?3H$U4Sy+J%J/2~n\Y 1fHȱe-BVP(Rg#Fjp r?NN'IIGH:r/ofj™%+Taeq6V=GSP^ktl_PBuCRQAQ;N:Ŗ >|&Z/-Yl߼3Tߧ4MpUЍY_m!BsX FS}*kN(\aVoW4j̞ہ~!P ?zn6@IB ʲ]ֱ[HMIXI1. IRa0&.>oɇ-SO<,˨jr2͡ EhGҳOfpZNcYط=D&8ȸ\2,]ȲrgZ AC1`TOmӑd+$vKQYyEBP[g  "A;\L|#I2(Eٲq)ٓK.АPv;Ylڸ];MdT *[6rrKLL,LFZ*7`  8~8"h2={aqT VNk$c4ذf5?׬o `si2oo`bTKH7TB= $JT ĉfY'7HomHB6[K%w .IYu>c~Y6炋.9s8i >m72|Ht%{N֬^%e48iopuG`+/S(ȲwEQɦ76.7>E=1!:""aR%)b |NT%111AHΪ@Jp hriλ\pݳO>m[t8¤ɓ;[}>cOnݺʟቧaԘ1=e޽lxyyѷ_&MIQ|7k1:x)$҄%3::daNNs0-B$o s@ǚLqq\ju_u 4/kVs-7!'HO_SpsXlW^} }N+}C_5X*ll޴;s2b(6n\=u.Dih~*EG:K_I !T\H2tGj x >v>8y _y|4I미ʫ9j4 oq]pyF$IGQSsbqu!L;:sXDL 4~l/:6*lpIrWgF VsFizjj 9ʊ &NLQa!IIGZmŴ3H'8tu9Rsbh^@{dl\{jtդ @tt )IKqҭ[)нgu\ARkp'(/aymqqϟȨ(lJB=z=G F __fiZzQ{ -5/),=;El$9fzC|B1-$nr~PTXH~~>E呛CNv6ixj5ϙeKҋyWʫ),(`Ȱa܍O;ɎGZaʴ0 IMM5QXX0HHLd_odM 2c%ńgNQPp7r!DFG~j+-y${_,Ȩ816)^}t8OsԐ{y<&.V<ܿh4?~ԣGmN*VVV+ee[~uBBB·pzI}ay]&NWS'3lۼL>v}ࡇ?au8Fw!Glɴ  𡃤AYi)N*jBooo$ah4a4rRXXCSwⓡ8 ٷ{ kVVn߶c$jDŒǨէo7:cK>vƎm#5%I;aR.+hqlq]3^Ub+GjE(Pxyy!Xe)\ۑqT*Nrar7㋯/?H*=lTUUQmc[vw~'iop{wFxbb*B|pdd=".r|t>> Ѽo];irȀ0p ={OdTTx2V*++s9L:є$-\pp7򫫹[>rݻ֜***呕XJ[=iopE\tsomWeXطwoK_}}ov.{UvYF?Fzj-[oFHR@vL^n=w=v* ǰS]](t>xh4hZuDNBbw~YSmN{ؼi#_}eDŽ("*(?- ju]t[2Gnn.|}}51jX"#"ʊ l6  ۷nlѫ|\^N6!6[%'OᎻn{&{>fdYt(2N{nO?y;'HS}|}xW#}9q_[f"77y Nt h#00׮X9Y_XB#洺tZ\C`gĸ۞9oZMnȨСhK0lHM)ɡRJWUyZWxFM``EHBB"IIG!j>ʻp0utL0dY&;+#G(**8eeZgU!,j & 0@BBB  $0(=zoJK7poiipٰn]Ẃ| :oo{v"99@Xx >8;?Cռ܂|bKuuǥJOHKnΙop]9 4R, U<}YX$'9FٳS@)Ϗ/wW MT+ & Itb0 k| $!jE.DFpPzSQaV^&7IEo0), SXAA.7|zNjwdv#^&*Ix#I>HcD5B&7Xܾj+*n!t OrEWnu/Vuj4 *]rZ@N]\A4JW]{?Y!ʊg;ƩzfϞ-rrH!ƉܟLJvfVkSϑߋCѨdufl˸fڣM~1&S|WKEUUdgQYQ` :6_)%H>r[6( *cѫOvFU4؈! ob#"ͲXvwչ;}+g7_s4jI蛯iYE[=Gu ڟ5o[FshhX߾}0Fp-4ͺj285Č3Y~[4y kWܩM3GJ}\.&m/ %BZ[q=fa16jLΜS/<"tjFj46(^{fJ{ٸPRM}L2rfli[Lz:0%Nミr^SI7 Lq'7Sgǝ\*1cYfW^}M*oW~'Q$͏0m6NոΌ9[JlԠ|׮ߨzTtEQعm+v#۶=+ E>Ǽ_oc۶&].6',<+O-o*5Mk;epFx kNJxLj5c 3 !;n!#MfF:۷ljP'IYxReVVT0l`?nab}-,3et^ 4[Hnz-'񡢢CkIGPQaWOayp԰j 7/ |0Vhٕ&ROl¤:=cǍ`v]h5*~Y#WGTXXIdbbe]>EQ&{^+1˯1jTۊ Oꗟ[0p 1GʤףCmF1o,q9=޵[λxoǼ: eXI1˗.xd*QǠ4|++-e%ӕ$)oor]cEqĭ߉^-kr49^oR'At;p:y%&gh$Pm矚uIy=l߶kVa6{+{MeE\|aN׳-n" s;MApp0\vϏܜ6?E dqDyYS͎۷dX_|Ư;v4x\8p:m:fs+W,ofc >v>/dۤcfcymr ***0uiCssII}=6/cI)D.@p}Gu,]q߷IfAzVd0Nǐa#ϿC]r.Y{{!Gӂd_@dͅ9|vu=CBnGqˍlM_vY7` ;w@HuOT/ǜ7jR_W2|hzivGLl-H+)/=izKY ;T$FVnca sT*E߸^dIK=lL<ʓezXڠ`zS;]&v;ăY;%6^ ҫބ}+.*b5ȲM]l^dw$>̄SUh4L?wV&O5]^ZfQz8?.bAݘ2cfK&Dzǝ<̳> RtývīspIλ8| {wc;LqQe|"z^Dִt~>  93 >7G{ 23+NkTK#C 6Iq:NLD@V pt}v//o."C5L&%0'Mfd77r-M#(({0a$Rw2-EOFB..m^ \e@LXX_!* +'*Di.yI2fxK^_jAQd,y?VB'GYQ;V,KV`+@\P2r v3MJD=ORW*/gpE? t(*(KJ沫"rsfٽo"c&h$$-߸LHwp؃J:1z Z66[%fsdh4QՂNU r(=~ܳR0ˆ/;vx-3<*Vbb0iz#11ѳ1Dff[nc,Ҏ&woXWUtݿ$al]o[d 9ʊ1ЋF'O5$ɰnfyPff)#_~p^s?1.ui$ڝ3|Vlj5[/LID5m/ S;X'c=뾾/6^n]*TWWc4=/>4iG]*nH6=w!{Pս%7gs. .*T*մ.X xy{(-=N9iA^NNANNJNm38ù99lټj!x= & x :EQ<ʘI)6a GOq,[۷me {FߕwtVvUXWT|`>SNǟ~ae|`!_yu턄2 Oxg mzWti)<Ì?[7wDpw6Bk')!s?FC蹫 2w|d)'$q'0獷:lx$;$vn_f[o3qVK4DR!4GWB8&J4慗_csxowka~v(|w8$E׊<ucj+j{_ːN{&L:U|%E$qG}عmKW e-[c2: d' ޽ΪW2}L.2hї e+r\uЊz{ٱu "wۯc|)o f!LiarȑX###\F_FzQ^zluouA=;~c7odu( 7'n|kmW'~]wkFѴROHl$IL~rNるNdq8 Џ>I=z_|Cxч2m:JJMWQhR3tdMYsik}G HKMeVe=B[ yPa-' 0ˋ}7aaL>}{{A[s\B˺>逡Ib"LHH׿kRK*ȷ0٧2u m9[kVb=*+f;~<3ϝ@xDG$.lnO1#18^^jh:4i`p=CBw&OvP/gQR\n߽\+aQB7̔iӛ=$I]&sQ =t4BR=gZqt:,\0 ⢢v G^EF!f-JO?i%]N+̲Ѧ03>3zVZ-ǍosoF}@ƛoAQd.> }l=w1mxzq{FFzu}S1oo:&A1p0> }ަT67ܜlFSOp2: ,R'>b(>C9¦Vq8Xۯ!QQGa#o@<, λB(,,DQR֭$lRdEfs;qS -/M6۶v8$e 桇!0 tV3Zۮg7Xo/$1``bbͬ\>D@P dŤ$%o![SfI֧.B{XB\uk<3 o1??9wO<屬%ofFvfnIbh4vĄ&N^WW.B[rXfUR!4xi$鍏~eݻ~c{2vxTTX[X6|}OD^[9D٫55J'7'\V+3J]*[+B:xYjjjʫp,YEG?c4ZMR Xb#(LJ4v499MB݂1h.S ?ػkWTmNd/Nbf$ ͛^޲iZQ,M%'NsQk4 Ct!7;j;3e4FVr(/+#~21j_jI.BWr4HR!4y__b]P,M%֧ϘއnƂ{zG8~[l&;;>}j$((Aaa:DeE;VBdTLO ,y]U٦TFR$ֻv@t F~)Xq1kV€8z4DeE%U*O#Fw?K3!BCMwRJKSm#. ?GV),IG5Ϙ4~ \}}m.95S^^J ooo|z% ])_BhI*=zJmuWj 'n*ٙs;.G`AQ: p:Qk*m8^y۶bbM<ēۼ߷N|}}5QCjR6r `q;)說Җ'] N ]֍m{5?|ݻIIzZ:GWUѷ_?zCNv6lf?ǿ_x/doKPp&SM늋+/AA{Y>) ڲ.XW5dg#teN[Jt~=n6jx.o$;7=z$l&**ÆzQ\T?Q`XVZbqĚ͔QTTāͥY 5WmVt5`|nO>':L`P} 䵗_"2:@55߿ k%FC}0h:z.[4cJp<'rZ g;ƩzfϞ-regb8j H7#q#"": ] VYYANv6v8vኬ UuoJޣ&n^ &ѩ^P I*SyE:;&9CCBC=N#5iףg/TBQQÍv__ZWYQAfF 䔤#}O\%d2ʲX2n⤈Aݷ+?/\] z3n 3]8vD8#)pāgm#G*rXzz:x԰kvnFtLrs9tHcǎkc%dz63Shu#M^!#ef"y|z^yuCCСCPз/^̸K6}G '0;aZ@i|RA5!*Ez9_`kLyu ʚɪksէ7G/ir<*:^z/>gx6s18 Yd3f]@`PPW Ev8l谐~iH+|A#;8t`?Y;o;oF)PX !>G$ 6Z~()."77w\ll7d2Z%XrTB55S~]-;g5ڐ/~`٧?x!=GO;jېg[_ H2Gܛm)q(\fkW$x+3ߒ FsPQQ/rh7ab2(xn!!(,+Ȋ"gz餤s\ ~~]%hI%7D <5Y;cC>p:sRf}HB#jr.(g0^'WV,$QY^V(!+ t{Xu3N n\nQqSyiZe2Y&"2];sf̺KRd+J(a?w8ǏW 4կU;6dqqt1!'(qIR $$ACYL"ϤJ,kNͫq6d-o+/$MAdE(ݿ+dRONܖ >|&Z/-Yl߼3ߘ\fstGcNGW'HQ)\ <``ʏof#t= h.U,*+lYE@0UDґäҳWf!S 8{?Ep8N .ߒGjJ2Jq\H @DT4q  ?z=Np~z1dYFVcF^ne(F%<<}`4\?3j(PDR9@gBbxwR:/4pĉ,]xnê; ҵ!!!+)nlp"90Kfܤ)lZlkst :NNgGn%#=(&NޡR418Eٲq)ٓK.АPv;Ylڸ];Md ːNCQRSHK Bh}Jq8ӳwFעOZၔ)$. 7^_sDB}ιrq1)Eb#BSÒaaR ć>|H~iYGGD\-ĹNcYطKc3D>qEx@;NdKvy }ݻhv+2g|/+`u 2Sg l߲S$"2v^7p8ؼi#ȲIHVɲO$uP`ƍukVI0 TVV2_@O(v *YvekdbÚ\|vԙaR40Id;6kljQ0j֭]͒EAw -+?ggz޶ I5}Cl\|(Bd :))JC{V.]r)k׮$22ѼcѳZxl6 }IHINB7sU۞  1IOK\< ,<s46m.wmą8.£cFfA\|emjBޤVLInN6? ;O y^| 1!d:Axm2]İ'YRE]. eMvYZcpT&0m!.>3W4y'oj{Zzyos8RgFz:nj%FisG~?ݿo/_/\),d)lP2RT*.beyI:rSXqq \N 7mJXx 9:uWq:Oe˜UZf9Xl)r}MΙu,sap49B ())ʊ jj'7p^Z-:uOpp7#" s{[6m䛯" )gy]a///^|(B=^EDDGGIOո{p4%JD֖`་/es=ÇR^^` 6֌lGtt:|zYrQ^^F͆fVYIYY~| 555 "##IIN&*&SK޿Ck㾵W%;#9z4˗MiY)rʨAQ6ݞ*/z[!38sgB 1WBʲ}UXI1V+uL"'DgH]Yxyy#hun{N.d]lۺonݛmلv:`XzƎWa/Xӫ.#aZQՄb4닷7~_$2ՔRVZ(}}!%9 Y!'CLOcڌ7ǐعc;7cgѵ-R>>hZ4 Z>>>DDFjl߶"zeI `ΛoӝЗ&7'bl CբVPk4ً\Zξ{p8uY( <[oaߞ=d $!!NGjjj_%qq,{CZj*+)isALaؽ&IS^N6ǵVIzZ o{r!{gD]hm` @p,#AH|[yKBB1͖q,D\7Cvz^{z r?/\r> QVVUXJ&)j- x^> 䲔J:_5ӹDxߍI/NYN/ƈb|7V=y[ =sDF2%s|/\$Ykk(Zozw( l|^AJ$0}{ hٙga7V2iv qrki|j~a/zP8n9 W}MgZ].x;tZDW٧ܾutjv3GAh:y._f7T4]Y8Eg~בsLG;3v~ӺZ6 v4^/LO}k q1|>>jkr\ * hFVdeIX= :1vq8Tv{6:385|~' $`0XQA4%GVQ)zwŧ@ZT*m܏ݔZ X*e玚z4M}]|577khZK.؂ v鑳z۪$پaP055:}s`r t 0LX!%)?9D~^Ls&'ƙ[Rwaz/UE::tt|,\V+hkjժ8N'ÁjEgd2s|Rx{ApELh: - 3;9eC5=%Ŷ^]TU}$nf>Ӽ.QvIENDB`pychess-0.12beta3/pieces/kilfiger/0000755000175000017470000000000012176727272016150 5ustar tamasuserspychess-0.12beta3/pieces/kilfiger/wr.svg0000644000175000017470000001742112161415524017312 0ustar tamasusers White Rook image/svg+xml White Rook 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/bq.svg0000644000175000017470000001030612161415524017257 0ustar tamasusers Black Queenie image/svg+xml Black Queenie 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/bb.svg0000644000175000017470000000700112161415524017236 0ustar tamasusers Black Bishop image/svg+xml Black Bishop 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/bn.svg0000644000175000017470000001005712161415524017257 0ustar tamasusers Black Knight image/svg+xml Black Knight http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip 6.1.2013 James Kilfinger+alfons z! pychess-0.12beta3/pieces/kilfiger/bk.svg0000644000175000017470000000755112161415524017261 0ustar tamasusers Black King image/svg+xml Black King http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip James Kilfinger+alfons z! 6.1.2013 pychess-0.12beta3/pieces/kilfiger/wp.svg0000644000175000017470000001501512161415524017305 0ustar tamasusers White Pawn image/svg+xml White Pawn 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/wq.svg0000644000175000017470000002540112161415524017306 0ustar tamasusers White Queenie image/svg+xml White Queenie 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/wn.svg0000644000175000017470000002143312161415524017304 0ustar tamasusers White Knight image/svg+xml White Knight 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/br.svg0000644000175000017470000000725112161415524017265 0ustar tamasusers Black Rook image/svg+xml Black Rook 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/wk.svg0000644000175000017470000002154612161415524017306 0ustar tamasusers White King image/svg+xml White King 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/wb.svg0000644000175000017470000001567212161415524017300 0ustar tamasusers White Bishop image/svg+xml White Bishop 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/kilfiger/bp.svg0000644000175000017470000000652112161415524017262 0ustar tamasusers Black Pawn image/svg+xml Black Pawn 6.1.2013 James Kilfinger+alfons z! http://openfontlibrary.org/assets/downloads/chess/dd244e4b50bb954610bc0b2372ce2e18/chess.zip pychess-0.12beta3/pieces/ttf-Cases.png0000644000175000017470000003465712176710402016715 0ustar tamasusersPNG  IHDRMbKGD IDATxy\L_^SZo**-"J%YBk纈슸lE]BBIҦu{9F353E|czg}_o׮3÷+ˏE)NyV^}%JJJ}~:}󑛛 ===kpYYY]\\說tYYYyB~~>>~7Rn޼YC|?3f̠x"c'''\x t^k׮Ϟ=K8pUUUPÇeeeKK555pttիcǎ= ~~~~陙qTi6HOODzeKv؀UWW3=彬Guؽ{?Ν#8LJqTo߾tcbbs555ٳgUVׯ_M8QNo[j;~8]5/gx} \~JW\ԃ+**@322 @駟mmmEcc#2331zh̝;Wn߾-ϏDn޼N=yloo)MdeeÆ `ԨQÇbl^ZZ$// 6͍rzӴiw˗g||HPPdKa߿Or `BЁ‚>ᜂF1444lxxx˫gؽ{79066&. kLηfڟƛkTVVȈ<7`۷Xn]>>Gzz:ѷo_L<&&&dddh"s߅t 7 RӠϟ>{ svyC͛-|||.#-- ׯ;-Z8̛7VVVhhh@II >~-[ 11P(2d aÆaСj*;v t:6lQ0bnڵkزe j<HKLL6f̘ٝ8A\\>>>|ݲ$%%ARQSS///nE߱B^^¨gyM<)kϞ=[w2dȜ+W,ظq#}Ĉ<*--x,--QQQ5=޽{yV^kk+xH#""Bg UJJ :ӧOSJ H3`E58* 6jݻk֬AwFE̙3ӧx)\???w#Guuu 2B}}=*++QUUr| ڃmO5M6q49nܹsӧORضm틒{EEECee%AR!&&111˓_CTTOdڏUUUUqFBKK  .(,,ݻwd`XcE58V ~~~|@BROS677#77%%%qPXX"駟ȗT*8}1ܷNJJ O+..iy9994hRSSAѰgϞN/++.333o۷eddxV^Ã0ǏٺǶp...8tRʗŋ޽dddը@ee%ˡ X[[*"55 ֮],$%%!''䋈$$%%!##eee 6 JJJHMMkO5>}a-16dؠ񈏏gK޽{9SCCnwFoz\/_ʷxݫAmz\/_,ғR(//˗QQQiiiADDKVp_tڵ (++Cff&vѥk@}i???ɓ6'k׮}j}mp"""իWqQܺu EEEDLzDN f%,,K>gϞ2d͛`N999(--"3cƌׯ?28555#88t&G3d2QQRRի\]@]vijg\ Dz1 8;;CXX?~Xoo8k2 7oބ/^ UUUDGGC[[ptt T+DCCfϞ ["""8y$LZ<xBBBX~F/vY}3gʠz XXX@BBPTTD]]wu?WK4LuWם r۷o?z6߶m~c/ fLL MEEEܹs"""hս\!uzc*{ %gC2dGaժU000 cZϟ?vgoWׯ_?mAt=믿ѣG p9Ν;ͱӧq]8;;cذahii :&N]Fk8p0an1770v쬭yU%R w\~\*qEv#PRR3fĉYHNNs000ਫ댰ׯ_iCJJ 믿BOO:z ...իWy3… qMcl|@]tt4>~zrvJ***+r bӦM<˘s5ӧAPH`b\ѣGHKKHʴiXap~ϔaժUpttDUU6nARRUUUhll$7ϗ,Yd1ٳg'OOB PRRYf/^@ttѣ;r\aaaٳeeed 7|pk,YcGdd$V^2 S<}bbb\>yf͚'|ĠpvvؼydWbss3"""0}t 0 rԥ `֭(//NJ+իF0yd$&&bʔ)oߎϓbݺu͛7Q__O&ijnnF~~>͛-# R>|(.}TTT킣O)##GRcɓrJ^^oʕ+QWW={p{ߟ 騮fIAh4SxR/^P֮]N]_qqQF_xC B$v [ne[ 999{.bbb>Nzz:vvvMJtfM΂7l ǎwrrb{BuKL3Z8*bpwwg{ $$۷oP;6l؀#F 888`Ν<ٳMMMY`Zذa'6&|>[-+[|9XjjjrȬϟ.]ԁ ^EEC^n2uT*9SLApp0ӻ܇RRRx>}dD:(DEE}}}A^^CC&Ck׮R(u3go%{f222 )) MMM+"gffwgpl}x^Ԅիc޾011G4 :u*]OMM ]jWM|^ tuu1/;g;'O9:5ia+HWet [ȑ#_e.""gt ݻ- Ç%c[LJhQa6q222t= ---c;RWhXt)RyBIR[:0x`̜9JJJռy󠫫?ݻwHMMEnn.h4sŤyw)++S Vj -۸q#;b7oZ[[]]](((@^^JJJPTTȁ1SQQ 2*'O8p ؎u GGGEE 򈔔=zaaa5kVD4ږڗ˗/c\Շ!>|8YYFܼGkp|ao[fkׁw|[o z|׳TAAA吒‚ ..V2^xw•a۶mBYYc|ȑT/<6K.\R\x<%%%IJJgǎ111E^^bbbL),,,1.44tOcc#[[yy96mڄrկI|j * !--TWXLL hiC;f `ժU4hPbŊ\u KJJ:uj~~~$t-ҞsBXXHHHa;___c„ #JKKQSS!!L$&4իW䌟)))HJJڧ{.>;;,oljj,X>}`N&+)) }}}466"++<7Bpuuȑ#!##C`ff͛7#66~xZ?~!!!]Rkk+nܸst ;v\6 hnnƔ)Sp=.X`۷oP$1^x k"h&::S'|DEEqZZUSSÇp^#^-Ç)BGmaܻwN*?x СC3Ϟ=$**vMiii ׯ_Gxx8)C_[["33111+]ZZZͱuL NUUprrB`` m6<<BՆ1/󃎎ѿskk+***PUUZ˞4iOߓhiiAxx8O̕'N:L4 MMMD}}=sIOO4!!aopkOWל۷ocڵhnnƫW,ZDQQjkkIQF=E5669tknnnhvZfhhq>YXXcǞ%%%aʕ7n嶅300@^^*++!** aaa444>zM:ϟ 답kע!!!h;v,u P(hhh 11gvTɁ\ױ0{luܽ{5]ff1X1{N0m4̝;VVVdb[[[,\6668}JBVV߿?[[[?q9cX~=O>(//GNN|}}11. .66`'..Ζд;ZZZ0x`DGGt%/**«Wp\z6lRSS1vX=4i4440h [:cƌ-°tR 8 :w-qep[2yd$$$ ;;GSSҐbM}G ypsscR|/:즴ݝ(O֭[&*Ç1e@TT$_PTTDee% MlP($%%A]]6lL^"' \{F|ˬ]<  %C2>Ç^@DDzzzӃ>b p]ȟn^^vnx5ƌkl}O@EE封N@?[-Z'%%Eԩ͟)`aaAv_~IFpuuEEE}BXX]wD,رc?*>}zwMmC`` LMM;b̘1 : -hhjj+++n999KHH(}A*??ޞ P#GMSa8<˥K>'_|9ºmp#G@[[ZZZ믿}`РAC… BDD}YJJJtuu!$$>>><}bf722RhSФR000 QTUUC 8搕ŤIح36k,8:nܸ%%%\}+tjp}􁴴4pQ9r.]Baa!:IWY"Dχ93gɓ'PRRb+UAA!/HNN&Z7455̒9"""@Ѭ'1B\\&&& L ,,,/iӦ!88sẵXf ߏiӦ=!C`ӦMʐ'N`ʔ)ǫ˗/;'ÇLj#i&$%%uZс^PP5$$$---x6O^,Zሊ @F HRV͛7oVF1Lp ӧOgoء#GD>}pEիkt:q cРA<~0mᔕzjCMM ϟGzz:JKK 6J"((h߹sشiQZZ >BP0yd5C`吒bYܾ} 1^P(駟vׯ_ 7N8UVAUU1_ 555bѢEԄ4tuuo>:u|Oh ӱg@ZZ?MMM$''z m/55{ ڒʂJb ۷oc^zaÆAVV&L@BB9sǏ dddP__6w܁$%%ѷo_rݎ( dee@nܸm՗տ|?\ Ν;e`3jjjx5ѷo_<~+V.HJJ? )) Æ ˗K@SS&L/HUǏC@@_';JJJ􄭭-[CPPlTTT`%^~}G1;)Sp^QPPfff$7i4޾}  0$ۅ%L ¬Yj*Y'+K5u`˖-Ƕm66077o۵k^| oooRDCC4h~e@[^PPꐖ 9o} %%%%%HHHÇĉݪJǏ޿FFF]' 077Guu5O5ak'yF]]J傂PVV2yB2˚5k.^WTT#GrhDZcǞ*))$p@BB=ݻw926mv=L4 燉 Gco bm+v @xץ|IKK 8%%% t:IJJ޽{lݻIIIܺu /^(/`# )TܿQQQFNNN_{999@[[&Lq !!Asm ȸ@4 #P!!!PT BII 0`PZZw޽ ѝ:76m,}@BBa,Ԅb۷ 9xyy ??MFǖ}|||Zی3`eeuuuBVVCS___&]) swr h^9rFQx6mBll,nݺjjjalBիW;8Õܜ<?t 1dY&fhii!CCCLZhjj8RBxO*K\ɓ'q$w[cƌڵk; rrr"4PTTrrrc)9QVVIֳ}l\RR `ooO>͛7HMMEII Q^^NiATT Ammm ""ϐqqq$''yyy~AAAZZZ077Ϝ93`qpp+V.%Wf-@mmm寮@xJ{*&&vLAA=Oƺ}w泃u׿v=zHj/_oK}] IENDB`pychess-0.12beta3/pieces/Chessicons.png0000644000175000017470000003477212176710402017163 0ustar tamasusersPNG  IHDRMbKGD IDATxwXTǿwl+H J@bXALh$ƈ(ğHԨ AH ((bom^Dpsgs̙!I=4&kEmcx[3@MKK ME"$:]6!~!V.d2Μ9V ?KRNd4YBz PXX===A"Nc…(//Wo{kP(PHZZZ6Ю)T*u;L|߿̙3f!0qDĉp0sL|'*?ݾᴴ0o<׷q\"!!CCCTVV0Ld2<^ǏǫW4+_`,l6{Ab ɓ'=TwI >=A\p8?jDVUzjdgg`kkbX[[cʕ Q( z6?g͛7+Vh$wַ}74 /_8""x &ϰcݽ{7_~AO ,믿?sC>Z@&۷o+W`bb~ d*?AM>T*FDl$IB4JMdB3P /^X%H/_rĉuX,>̖N_c٥ nONNK$디Ǟ꾫ǏIIIʩB58M E,{޽{2RX`A}[|||#u7!I؂ FU&ipMÆC znΝE@P,]/^L4i5I5T˺&M'"==Xlp DEE!Z\L&S '֐$t$gs2p89<oIr8|6}P8$IZ>}:`XҤI}Y,.[wH$2H$ K. Jt: gggڵ  {޵kF 3*UP fff|>2é.h}}L==A(%CrrFrzzz|'N<Æ dj ILLD@@vڥܕ  11Q!sh2\n°a:h˫8Æ r/iB/(**,-- %8 d21r ajj ==&P(o;U $|>?xHqqt)b]«W?Fhh}L<W^UXX,FVVVPVVf &z$ǨQ:tHҨQ Ф^. uIcpxIPRRҢLyyylp8Æ ඪ}x{{S=̶l6&La NA>{TcKñc*m\xUvop1b 1slllPUU/_6{8{FCx***$izlU`2BpjyHlmmb0k,`XJ{svvƥK*s޽'|ؠ:P(3g|X]]K>L݈4jp ªUZt+>V^n͆JKKEUnݺsԩF<$IvӧmX @_@0f7@Irѿ܏\. `mrݻwC,k;wݻ>}:ܹ"D<oG߿M(͗_~?mڴ<ς~N_CYYkuB~~>0|p1lvkp>>>QXXmۆJ(//+** ܱc>',,ƦsYYYJ D޽d:?۷3Z`5h#@RiРB@,k|W$Ib+vP(lC!fNP(T333__ TiO T>!I\.Ѯrreڭ%$$fk<8CWW$)KjIRU,_y*++&>ǨVSܳgmrd@#s|Oc횄$Id)P}px)Opp0n i73/8vީ󇙘墲sο%H!P(I\' }X,. yopzzz>|8='O@$՟Op֭lQ1[ L@9}tǑ!j%hdHֆ@ @AAx} 777DDD ;;fffXbFǪrrr<,Xp@IHHLHHt]dI$r+۹CH$A|pttlĉ?#;u\ϱvZ5mI>kMM/^0L&ktVVV6`ϟ7) .33K.mUfɒ%J:*l6G͛JJJa 2&&jO$IB 쎈6sLڋ/kkkВs[Ϟ=yJ@P@$u֪NBzzz1b6lb4P7;wW?==h&.YڎRSSxъ>K%knm TIl6#GDhh(|~UUUİa\/;ɓl6;{Z[lih'Nak/b]^^fPG#I ƍ֭[9&/q)U5s'@ p>t L$խ[F!W$IRA#?^QEx<ޢ$ފ~q-|>Ir*1ݻ tDFF^Gtz쉴VrrJ?4 ^^^Xr%?ϖx|>իW9_x|8ZP===X<<<@ tM@ >w\]v ! #ɓ'BCM@޼yBPy}寐JpuuEQQ}vDGG#;;^^^Pb/ʋph4cƍu$$ RRRХKJsCCCm@ A ,EEE]XZZ6L|>7))iݻI[B<* 36mmvvv9L&UU4??ʌ3Not|k}ryd2x$듺x{{d_%/Nŵ1$ tuuufKTVVL&Sa'*']$"+? ˽JGGG\>>>{nmD" ^B*$)$22[|pqq666p \J@ff&~WN &{VCHĉ':YOR1p6#,v9rϑހBleQޣIRǣ˗/W>PӧO<$=dL&Q ARKܿW\Ѹ^|>6$>ϟ+5aѣG7$ 26=J\RR;XY hD"g})S H ,Pq[cxΝHOOW{/6M>*HN\fGQ\\ .T-uP(DMM xٷ^zprrR---xzzxOtqwwOPҍ$I7-pxRSSb`a!׿خqrrBMM 9RzWǏ}@yyyHNN~F lvjg``hkd5m4L<vvvvhe2۷SGFFbQyxR\\P;vGFF I2 Wr t:]c} p: 45}kjAcNuurlJ!uٲe @M':ZYYxWjUOOH$AyU\[ }9ImATCU ikZm΀{{7Acw$;yQH@bb>dHHji---d2";;YYY());ZO?7oz*%33KZZZx"( ϟ`|h(ZY  rƌ{ ߯_?9}̙K~26B&A"`hƠHNND"QLeGF__ݺu6c\İqGzyyU0$$dĉO>}pBB/#5$$䷡Cjȑb/P(AUU;h%h4>CPT9s|>l6ÇΟ?T- &L0PGG疓SO8p$%%|W,Xp_~Eg.1f̞=سg({k 0n88qn޼ [[[̟?ǎSُ$Ik׮}eee#Gtܹauxzz:Ξ2yoTPEt:.]QFG=Å Z=O7n ==}Gʕ+˖--@pU̝;WիWds:XN:)tgϞ*tU'fff~(/7Ixbsb+{ulݺ#FL&CTTnܸkѱ4fffJmJp ?{-qd0J IR썙9N277yoPTB̟?_ױi&@&ŋزe PVV)%7oބ f1g٢-\0oݶdSNikk+F311lF\xq"IСCiP o+WglÇIHHH `ooŋ#''~ˉb9s˖-Ø1c`dd&  :AAAHNNV+o7%%?::OEEE"hNNN^DDex ,(ݱcG}MMM)A6yF"KtttP]] [[V]~~zE_>%*˅ttt4VE ;v,{{{|8us:Zt$)裏֌5N$dՇ6)S<ԹsN$IAAAI ݻ[x<ŰlU&++ !!!=z4hblu/^фjKKK\rmT*j[4CgggO?3gn=zTo>Ow^.ϯIJJ*=uƠk׮VBE1cƐ˗'۷&0T/_ѫW&rL&Js0X,888L&O<̙ 055E=#dee)MZ4_}ϟ?f>|9rZXX(QLL ??=_u_)//'TF իVeu͛7#88֭k@ef{EKK C GZ[`&L\rE-ASD"Q8W> L*((믟{xxg2u0ft:q%>>ǏwL&J Uh^aoo/7ڣG_n{8r߿9ZdggԩSQVV7o*U/}ժUg>}W[¢j߾}K~9;wGDD BŊ;׬Y=|p_r :(...7o^_eg:::y-ݣ,}?m޼ ДJo=wݻwXfMoUV… HZ=~" 9>s->|AHfΜ9رcDFFfl!ϯ0<}*6mZ§~JRSS6t˕H$nT펺tl*I$dddDJ>Fэ:XXXؕ`yyy%f%k*Jdpvvɓ']t 8{ViRw̙~}zZ o0bĈ#FXqʩ2 K.СCcmNFGPHɓ'QDg)*O?Mܻw<fllRٍz㏼K^UJKDu P:T/_B*t "ǏWހ\~]L ܾ}l۶K]Rٳg\58DGG*UoŨQa$ñhѢVO#::cdee))dp+WvСn{yjllr\ʋ/]vܚ5kbU!Aؼy|5j[pp0bN7;Y?ޣjܣG Hhjc;T*R)6lP^ywѢEEEE{uAP9Fnn.PUU*ZiJ$%%ɍ mkV\9{ΧO^\\fv* --&:zfu?]ee%"""^{oԾ+V2>+<<' dP]]mзo_&Ջ '@Hϙ3gIvvv///ф.8ydP(D߾}ѩ4ϟ?GVVV-/_n~_֟6oތ<x)BCCծ(۷ow+V]xq0f̘#[l޽{w*ŋm x̯g޼y^.\P(*<<<-^|{#FhW]S~!EQZydeeY{{{'Nd͞=ްa. xifff%un߾m1c 'eՖz6tRP#"S;o___Z 냲8p)1{ 6ϟ?g ;wZVVֿay%8qNNNmZ)55˗s=GԩSʴm7pՈFbb"ƌGx}b̘1t4qA$$''S"Zlw~~~'d600HꫯeiiIh45yر`W oܸ7&&f.]yӦMBa';; s9sZqwwW(z=o8GGGܾ}...;'ga...@>}4&o߾!999cbb~g}u999g&k?z X ,bbb8KAVVVM6}5v^#}HSSktΝ.\2 ą SDex<$''?T9mYP(q$dTWWΝ;P(M7Ks"$>}z7;wo -..6;v>`+W~AcϞ=r ϙ3nΜ9#ϟ?OnڴIX]Ŧ/VZqTT4 RbŊ-}Q2 nnnCllZgW^3UZЬUUU r*OSN)t pܽ{wy͝;&&&湍M}@߾}dZieT*=ڭ111Cϟ~07o޽ & VVV(,,֭[UӦMSJht:M`DJx?`O%.]رo7mbb(6חnݺ +++ɓ'^ׯ9MFDu^ɋf3 "f NGG?Wx _5k, #G<~^^^2ٴt{=⋌A.]b:t={m되 .`Æ Md74rL6MmuH$dgg$Iܾ}[ٹN?.y3f !#--G_;Do8T .7oiTtE%΄&S|٫W5 "ٳg Mfk7X,nt=JߤE-°o߾6 _0tP"Nyxx%I$4x$IΝ;YSS;v4ik˃t ?V{EKŰ_I&iQQQݻa\.vZZ5Wjj=}}L===Uw/&~W1=ث DEE{nϞ=%%g޽&L=*X)0h ۷_ukJo> ؼ^ddd 772>@p֡j۶mÎ;ʹA$mۆj,?>{AY=ss-š _sBBձw^b̝;흙!JAPpu H3f$Ub2AUU?QCw ۷o5z@ ɓ~~~*>ݽ{7˖-EEEx1Hh^((lpbBP@ hf:2jĈ*/=*]zyUBoߖ+9spuumV(D San+ȑ#oу5uT]71Ihb޿-ʨmE)rg|{¼6oM7\uu}XX… 5[W_A9JKKAq̙f?{ 4 n \zz:[3R|^Zqȑ[n}X*Jϟ?k׮`>"PTũ׾}p}tUw(dpbS\QQ :]ЀgΜ)INNnBŋ֭zՋNÇđ#Gyyy(..]> -ફ!.#QFѣJjXwϾ[@())s΅-"##AR0Li ~}?Nt:״kҦL"pss%q}Ѳnnn7___qB?ϟ?lLј`0h68;; _|aioyy9BCC Ԅ8 yyyTUU̓$>Lxzzիd)Ԇ`Νl!$$?>3f̈o݋usI%>{xxHEDDdXXX˖-ijj涮#%%eeeEiiϭڵ+w`ʼnkgGԞb|vرyyy&PXXH^E]]6l)NKK3@ff&rrrEff& ݋/^^vvvA[ʞd#&&i”3\XXzaawuu5JKKѵkWy/N<6=RذaOݻ 5440w\l޼C a'::NNNLibHmjj N***+~mmm{?~&00tuu_T3-//`o_PP zFF:CCK|~~~ ǏaףKH͛ tMMMǵkF2bbbX`&O@LI +VYʴ]vFaÓ2?b8ݻ T*%%%xՓ6m'o+pEEELa^^" --B^ y&oNmkۋ-+˽{ hLwww:t:::,e@II G)l@G׮Zws2Q]t)z* fϞl 8~8SЃ?==R3//Ou޶Tr:"ph4 abbfQf@QQwѣnݺq,ӥK2IJJ;)"""@Pׯ*{UOJU.))r|۱cS PTqɰ[[۾ofJ1~%%Ņveff([dG=={W}O>-N:E}UUUE;uޝ*wѳg9/NNN4޹Zh;JMMN퍶Ü9s}vְ[0HDb7QZXYY𛷭iQ]]֭[m۶ Նȑ#tkk"C@DDDѣPWWgG= &LϟR@WZZnٳ'LMM]欖B_%K[d/hELL wޅ9#XzT*J?zX||p~WHJJ |@qY,]v5O۷Vppp۷CWWigx{{En FP~8yyy\vq4npTcܹz=VYFdSO>(iܰb9ŋ+p222{.CWWe %-??111ɓQYY).Z]t劋؈ݶD^x999]022bD8 ^~ oooܕ+WMMM%|/_O>|Ȁ1={8aiޥ ?3|h888]6..x%=ʷ~ݻ(A9QR"Z?1mmm%3cǎz-Zt[s̑Z޳gO֣QGMM `ذa9!mF`` >|\v_~Mrss״>\ZZaee%rss7)((l}jkkiM}h4*566 /iO}B@@W_s/00K!U]uuu,[|VD( fffSL5ә͏!*oO[}n~~~=UD"p066FabbcmJ-p&&&x"Oe˖aڴivڿf 044īWp…k;Ǝ[zqZVVU@(;`0;0 šLw3gÇHMMQ\\;w`߾}طon߾BZZY$߿%-XZĻph077ɓ;S:񰳳瑖}_@E^x3kkkgiv IIITWW3Y˪Guu5_|sfmm]ZQQrMCC 3K.tMM--7vvv9v1lK.,Glll ##M{EBBE0ñ`<ӧ+VwX`G7 h1_:{,Ξ=+PPeeeƨQ0cƌÇTeeeձ(Q__%tttXvQUUcԩSӧOCYYرcHƁ2s0l0$&&gΜÕgϞm]3B \zz:\\\0k,rLNNƬY`gg'2DL݈ݾ}T*qqq1c޾} o<HNN>Y ;gϞa˖-@ll,O.ꚿqFƻw[@C)QWW333ɑ222ػw/SÇ 5\oD~~> ",, NNNĀ-t۞ѣrj FsssL:4 شiv5ܹs ӦMHYܹxl۶ k֬#FɶP/ϟ1zh@SSNqA diKbrr< `0o>{7oĥK0ydٳ_:::vԬ,)**044DngGCP۷JMM͛;v,9: E[!6l˗/FlXp!dddrJStttN/_BMM˵orY s*I9rHǗ5֮]P{cÇ#==<"XRRf/˗/aooOQ(ŋT!NH;y^ vdgg4ƥK &&;W^ŋ q %pڨd4rx^&ݹ[𿡻xBeddpU8::bV]'--ciT*>5Vg$??cƌ+ 6n܈w"44mL4  B^eP\\.}ׯf̘UܖG"00)MBB32E444 * GGG;eǎ.L<==CrhǏ )))`Ĉ;w.rJ:tΌ̙YfkꅅlnܸÇ F~pA2\} $p2e  XVܘ3gN8V9ڙHIIA@@qExyyaڵLyJJJ-[<{l__Ƒ#GڽXڗP'±cȴm۶M8k9B` ==ktLd^¿u!A@@ZR4 )))غ- HIIvSS!1"$$iii绮&iӦaĉ $p>}K[ٳ:*>}ƍ1mڴv30 P(>}Zh4^J8q1onnѣG7nďSH ?>Ӹ ~p;2iiiLxAquuɓEO>&ϟ?_zQ/f͚EߵkWhӡWMMM/W^ 3w^C^^cOXXX@UU 'u& s{8455aXl.\K***3={"++ Dss3E憾#bnn.f+yzzBKK/uCC>~˂ދo`0PTTDǓAc1gooo:;w..^q]nΜ99s&V\ .M^^^7-`ee5uS7l]GG/HN__wx=pСoB__|-Z$P<$444!!!"n'Nx|  *Z/%''' >"L Bh6^,,,l9_u!onnn1Ψ(MMMxPBPXXLN;2z<ⅰfp[SSv55jjj7+4_㹍92W___h1rN·vw!*!mz"?J_Ev=MpM> _\t ( TUU!##UUUokUyر~777ɝ"fff8qrss1e7FUUGAbb" | ?w֭ `Ȑ! 6uw0AII ?~H 8p rssP^HHHѣL111P(;vPx \zzJE޽1yd={AAAkhh4hh222MeOHJJ֭[xVZM6+Wd#422ȑ#QSSϟ#((jjjXn|Uݻst<,ρ9:::"##Q^^gϞIII\paqi9;;RVVf̘1q-}󉤤$߿;v`Ϟ=ڵ+&L|NNNѣ222p &&3f |||pm&`1CA)pF?DII X~=bcc{x{{CZZ2229r$*++koo JOOj]غu+ ___2}吕=޼yO>ӧ2d ;v =Bzz:6mmp' v:LJk%8t2220aIDAT?HJJ-Ν+?lذ?ſ}: vbJqa@LL ĵkp=|Έ;TTT`׮]L3a;;;S.!!EEE =s̙"E/_Ύښ5kPXXUVزe T*0c񈌌9.^www|;=zuMMM_Ŕm6EEE 0Ij*:u ۶mXnܹĐ!C克/y^zڧO̓amm ???̟?u }prr¸qKKKXhnܸ777̙3ӧ$liXj׮]#?O4  `[^>|v\@̞={ >~ 6ׯ_ Ѷ޽{s7qD͛x9 ޽{~͛7q=uԄGM)++Cyy9_KYYm>A=r8CCCFPPy޽{033Ν;ollDdd$O>HLLԩS333߿^O/%bbbFyy9ɡcڵ֭C5zh\|Y ¢xU/^]___xxxՅ M6W`bUdccÔ>p@ 8gL$&&b…,TUUI555 N/T\%)''GpٳgCeNP`dd[[[xxx1JJJ@P %%95He;BLL\8FZZ\f8펶!W^~M&%%%:t(qQnÇJ@ ooؿ?FM-++#M,g򎈒Giii\/|#GnysAbb"n ̜9dž rokl燝;w"??iiid/^ГӧO^m.9\vv6۞&L@bb"ݻ5 `mmJH@NNfff rW@Ǐc˖-Xp!Xvvvhnn˗1hРvꨨ 4wI1.>>~uuu5K܌3fr \]]x/</^@MM ***oYpL^a„ R`$xCō7q3`0pu^0+++8 \IITu[\rwfמy&/_v1c<[i& 6 s[wT % zjՋ̺3`0(pR{'wZUUUuSwss3v sssLC @ӑGԩS(..… k.FϟGVVN8EtgG^^gΜa2Cٳg1k,8 |圜r2K K닙3gBKK Æ #$zzSx:tYYYpN:ŒG9r$|||h4lܸx%.^F퍂 ```={ݔ000H]h].]Faٲe+⊧'"""476m<==Un%WƍAqM())AFF b <222pԩv;X0 =sECGpfffiǏ:z7???Ə*_?wyJRRв@SSaddD^0`rrr9990NS$G8ͅ\]]6W燭Z-<<8x`Ϳl+++/uuu@^^3f̀F eeer!!!HIIʕ+QPPyyycѢE"Cj;wׯ_ǠA0h Q';w>1uTFrrryK,qKNNƊ+ ++1cȖx_,]1b_EK>Ç8x H[[~:>|+W4/**=qV5> 999CLL MMMPTTđ#GD*CBB fΜښ4kطo_]('OFrr2ӧK^jjj8y$N OOOÇ8\ZZ1puuuu(0MÛ)2dȏyp|xӧCBVu J7qqֲZZ ---ŅRĉGGGѣGի|ll,isY?T'O}#\r[lǙG4h)#G\]vpƼy󐑑]]]pss{Η[ᔒ Ap=1x)PZZ t lj'3 522"#ɓ~< t&2<<<(Ǐvӳ.]BOOL/Uii&СCXp!Ν;3fNPP>|8FKKK"++ HLLpvvFPPgϞ/^6ƍǏWƗ/_fšYYY(((3FJN3YP(tgΜVF!FRѭ[7`k]ƍAgϞصk6nH`44@CCh !,ߧO L.  22AAA8w>}*+** NNN4i\֖Lkss3F`~~~JCCCP(իWL+͸iӦh4矌 &0Hjjj bڒe?}tSZZvb̛7رc1b?~ mmm?|++**DRѳgO477#''ZZZ*ǏՅrrrЭ[7r:~xCˊ_!uС͛7Iac0شivIɁJBRRbbb߿?ST*rrr())?޼yK)))Z ۶mű{n&=XZZ*w1|||VHRRo߾ez%%%ު3gN<?2G珫FCC[? .dL2 OOOT_oƍEpˬ&,[xqb8a{]pQxzz<͛7:4-BJ+b֭6ltuuqu,X]t! N.T***?^ҟwL\ohh-&mm>``̘18y$TI555HHH݄>q˗/ؼy3cرbǏ8 %6ě7o}Q h㠢<055bnnO>\nnn4acgoo.o|_|A@@ WWWD_|;w֭[Rv4޽{PPP@bb"'TTTpteJYQQf/l DJJ :;;ɓ'fye(?s ***ʁ?rPWWfz9{:CCC8.<˗/Ǵi.;wN#l@U*B5v"-GP(,vUg !!A㏏)!ɉddd{ը$CR6'377G׮]z*`(7@<{ q({̙B[E-ZdeeѫW/'%%%ѭ[7:ŠP(...fff$:>>ū8;"JKKaoo0i]]$!--l Z^^i lnn$peee}322`aa"pQQQō^b_3v"j ƍL9YԖBVVmץKa߽{3>>3'tttzzz8y$NLII 044Dzz:9mWQQvjhhhÑ;FqssCvv6\\\ Ȩӝ"c8 x.2e 455VjkktkZ \UUဖaSYYUUUxM4Xp --l%˗{ ˓ǏgϞЖIIIұt Y 2%pIL09::HJJhHMM%U! `0|pvvfbرy 9OիBCCWs-zVVDWWp甖VLqvvвJHHǏ9s]OOMMM.Kl8KKN煓E޼y===Rବ@P%K~_L6 lp:::3g޾}?+V5kF*^T*=::?MM͑ؼy3`ٲePPP1c(+V h ߿ׯFEE/^|hii ݻTÉ"շèttt퍢"ܽ{IMҽ{w=1Daٲe077sNٚ]ٸ{.>|ccc(((gϞ!++޽{3Y07oDFF뇮]CCCUUUhjj"** K,׶C~~~ &v+[alcc۷oŋ,:96q1L6 '7з/*.UU) #y⎜( ,,,xgn1[cZbɫR477Q L:p܌wau}prrKuQr%AWWW15##lMkjj 7055H8š!11NNNƁ@Y%%%PSSCuu5jkk9üy055TA5v8P1i$BUU׮]#XZZ"))I$ \yy˱bG-nh[~Dgv{R՟?OJJj?$%%a޼ys̃DӇ%}֬Yסϟ?U!YYYҥK[_AR͓XE񃎎Bڵk͉޽H@UUU1Y4558ƤI^윜BQQS C₉'~ZwA]+))e3ϟ*w9huϏ%^8JHs4HDڵk߿?K]QԄPꒇaɒ%#GR1g+,, ;~7Fn [z*ddd| yy(pÇcԩ8{W Ν;1 ,7.sNO?Dٺu+nO]]O?aҥ6+2iii022b6nUR(XYY!99Q^zÇCWWɢd nТmW,99ۊt:gϞ-xOAќ`bb{ dz˗/?DLLuLIIaF(#H~ ̈́=<<޾} XfH8ѣ.nk۶m֮]ۡWŋhhhǏ.WTT)))GgFKMM $%%Q^^n,P4jjj8}4q57dgg5ڻw/<<<{n,]Æh[ବ0w\2)^ZK;v &*]Fեmk_==7n0ƍ'tOgff'Oh^vlݺs \~0n8ӳ]4qE,\׮]ׯg)<<<ݶ˗/c֬YDѶvN08 `̙|Eٳ222|K.jl2,"8}}};| ]___!&ĂYF{{{}^A V"[<ۦ=ŋEwS*{h&]EV|R`Ff_[mё~^LvHIENDB`pychess-0.12beta3/pieces/ttf-Condal.png0000644000175000017470000004620612176710402017050 0ustar tamasusersPNG  IHDRMbKGD IDATxy\ǟ))Rdh#0XN{M,#4/ɒiD*iQJ_jOcFx{Ϲ,s-rqq|&\\\DtE0[3wo2tݻw #Syf"Wi%"\pASN1srr ^wE~.^|J]]}gq $''@FFhhh|rU Bbb"rrr,^XH[d kkkkv*ҥ 999ԪUs~ZӧO\W]]333C~ @@@?`ڵ4k֌C~rU "H^8qB*===]*c\\\޾}7oG=sO.\nn.666Ŧ^$&&Y[DDC >\j0KɅ9rDԢE Ν{nݺ̔;wРAyiu72iҤn֭חÇN>-.>ydIZjL:Ujvy ѣE3cƌ!l߾UUU6nXh[QL פIObã4n߾&kaan``T0 00Pʕҷo_۷og>}Zwڵ/$˅~E`kk ܺu [[[N>իW?*¹ 4nܸ?Ϥrrw۶mbcNJڴiSOoeeU?֬YzAAAƍkfii)Z*WܶmۚcƌiFܹsR(';; 2̙3ˮ-\\\7o888OfYV'OcǎL2pE ؘ72q"-gҧOz](ʴp888[2220aݻw/GOOGꊢb!DY100PJKKOII9ꨨ\/*ӧOEޤ*++ҥK[SRRx/_OήںuM͟WRRzUT>ggg@deeqpp`ƌhhh^^^ATT>K.Qzu۷`l=z`ǎԯ__(N:xyyѯ_?Lnn.AAA8;;sM!_28ccce|6mʈ#8q"O<)~e.^If̘9--ͧ`kOwwwD")2|p133dff60akhh(zzz%رcSL֭[`ҤImۖk׮1i$vMZZӧOf޼yy+V ##CHH۶mC,9 `„ 7OUU&&&xyyaa $n߾͹s?~ÇXÇ?~ ѡ@*%%eR~+W|w^QSSWR &ԣcǎxzz鉩)+ر}ȑ#YQXr%222_sssoΝ;ܹ3>`=?U.11H稌 ڵ c ((K'>|Lll^Zw^vI& ﻻ ݫX,&!!a{nرc<ٳgKSk~ŇA<ɓ'˔)Sؿ?fff ۶mC$j*D4oޜ>|quuEGGG3*epZZZ#''GFF#**JHϟ5i҄x)rbQ%H"0n8QPPPӧOE 6$..|||͠APWWgڵ+W#:t(ԯ_={|;8͛7hhh֭[7n&&&dff2}t4iB[nµ[lA^^G쌉 :uYfa޾͛T) ,XO~u{jժU)755[~y۠>|;v`4F~ڵ DرcEZjxyy+:x YYY!044XZlllXj7nܠYfԪU +++BBB8p #>>ݻ3rHݻG׮]iѢ>333bbb?~<76|1$%%ѤIj׮ M;uDHHJPUUZjZ'TTTPUUOEGGǠQF2uT^|Ν;h޼9-BFFL ԩg]^ff&222,Z͛믿M,FFF,NϞ=~~~ҹsg݉gϞ=ݛINN=eأGXd0y\oooh۶-WORN=~^`bbRlI&VQ,,,ؿ? >>ǏyתU+ #Gӧ,ҥKXYYQZ5 ordiee%T:M||#CeӦMTVի%>F"dE#ܜ޽{ӯ_?w^h,~ӧO營_'L :t7oۻrA, Nբ5jSLaܹSҭ[b{⾷or~G6o\*vvvL:˗coo_ ?:u:\zMVVVVVe[YZZZ33N[uuu:t耙顧W&,,7orMa's-qzq-nE~ovvvиqc֭(**J-~ߓBJJ /^ 22PY\xXc? >ߣR&+ %%Wԭ[YfH$DDDpq޼y#!߿[fѣӧO`_J2qboo)ڵEŶH%Ixx8ܺu J\ .''La}SYfӯ_?ggJ)`ْ\e!==]DVhԨ!!!߿>}ʇHMM%;;[jׇժUCYY6m>͚5Yfo>wB0+SN5PTTKI>ȍhkkK۶m166tᖶv;wHmNAAA(++3bzIdd$aaaMbb`TE&5CCC5j$,dlP ~$'o -kޗ/_Kz|Lcjj)5AVbcc6B DEE2ʢʬ4|}"7+^[V ~o.../~ o@yi䐓#00mmm455EEESN5jpzbڴiСCgٲe?NSS>:SSS6mDFFp"u W0|pbccA,~?֭[Τ$޼yC``Vt-ͱcܹӫW$''IT\%JDD+VQF>|`ܾ}ag8y$룠23gСCXZZҢE96l 5jT\e[)ׯ~:RGkSHMM姟~YfB7l0v%9r$D"2'GA,cJIm"wA|||}ѣGINNf899k7nD"a޼yDlڴ)mT^^zann733cĉ+D,舭-<}oO/6͛NBBNoSV^ tؑoݻ3mڴ >|vJÆ 9zp822RChhhO?D߾}GJ 99ԃݻwȠk׮v] ݻw|q- ҍ k׮ 6_*z#%%RvmlRŰtR#aaa]\\\b1/&))aV.\' 4ҥKԪU%%%V=iPTTŅ]bll\Kccc"##Y|9?b\gggСCx&Lseڵ.3665jЦMD"}Ç[<OI$N=z3fHšH$N<)ڟ7oԩS4nܘ}LZZo߾e޼yq4hЀ+Wc²z̜9sYE?---ٰafffEK$\\\g֬Y~ϟ{Nz[yZ͛7'++V%_œ8q"?SՖ͛7ӣG 0aGĉWIGdee9x u(5rbllw}`2eA$pqqA]]y)G}luִnݚ'NTh%R~}&L@>}زe F*RG___]2e :::hii 0EٳgxBجY.!!ap޸qŸԔC2eʔRbݻGll,:u*Oj8z ?Ϻu񩐰̗HnٳgӺu"󦦦 񾒓Cz}h߾=Q^|HTDlڵoܸAn݊W JΝ;>}L(99v<68%%%.\/T=6mbٕo'--M׆1`fϞ-*Ȼw044ggg.\Mr;w&44TŤ_d>7qXd ˖-Uرc/k ӧIhhԩ \˖-qrrbڵBW1SL͍y':::RЅ 0`@iӦo1l0aajjZjwUvm\]]ٲe ]tȥ|dee/u _Z IDATccchݺ5W\aϞ=^ƈ#pBvFaի;wNA+e23g`ll\Viݺrzz:țlKVYft҅@J]3g<}={ۓ100(RDCC 6nȝ;wHJJ=xIpLLÇݻWԥKqe999= 'Vhp9̙SCFF!C)_U?qwwgرRB1;7orr cǎz 8>}:u)tȑ#sssS]\\D:us 4HJN:,ZH2r>.${.ӧOܼ-D"!11q 5jT쫪PWW>iii66kkk&N@\\PfPPÆ ӧ,_͛7ciiYz ͓yɘ( c]6gϖ)ؒ&NS'OdܸqHϧ'PQQZo߾OL DZcv\L:\e9 y}߾}iܸp$Oˆ#ڵ+?#o߾?ԯ_X%K.{ O\q}GGGaGq,YH/ңG  ӧOgΜ9|رcVڵc͚5ܻwׯ_ƪU022BKK "~i$%%x5|2;wի\t <$$$ vppU)ݽ{or=b1o޼YÜ9sPPP`F۶mqvvVZ?^<֭[nڽ{Yl'H?.]*(+Sq355֭[ Qbq5լYtF&Vĉ;w'NrJ4445jVKgϞ<L={`ccûwtwT6qE(vvv7͛7 ##*0KUSSĉ<|cǎIEΧ_~,XǏ3ydڵkG^]޽Yv-nnnZ"z=p1!we뛓㫬S̔Rn]q\f U .88+WqF93kfɒ%̚5 ĚjA7nm$1bAAA?^jJNNW8c▘˖&鯫ˀ033i&FCCASS?>>>~R||[hhիWE$$$ +++0ȇxY|իѣ sjiiall ݺuX ,֮]_eveEjޣGLM Rkkk{k?|444]\\/Z^ :ÿU:J\xX,Ç:xAEE:ul_~ѡ?^\ט2111)7U+ϊ{J_+ƿ{U̵ U222ܺu tuuEVVX_b ʊŋsƍR߿ ޽Ԕ+VB\\TLЯTX/---NJÆ r Gڵk(((˗/cĉ۷t ~t֍!Cd?W%EghkkEhh@OO6mH_lumڴѣ9sBCCٱczbϞ=… }::::t'''FyAeUvRWe4M6ڵSNѭ[7ӧh"~j׮͌3<ػw2|6n܈***(**/ФIbŇJ:uprrB[[H_QԪUŋ7гgOdddhժӦMc矬Zt5k^*̪D"QEEEqElmm?iPx*_b eee(hϙ3m۶`BBB-`UHb4ڵkǬYʕ+9sTc+H9y$:::oߞjժ SdϞ=; ˫T-(\\\zAƍԩǎc@ ѣG [ȋb9re˖[b$5jgƍlْիW_djjʢEXt)o߾ex{{#_>'::"Ux1nݽIo>SXf 6$,,۷oX}e׮]L6]vʩSΗX/ƌ7;;;V\;wNhôiHIIAMM֭[Hpp0\jԨQ2$ٷo_VXݻ-yzzǏ/ڼy0-J :rI˗/GCCooodd]]]N<- )I D"XYY}Rd Ϙ Jedd*%]U)._b=--@˿֭[޽)ڴi7o,Ub L4cǎaddĒ%K8rAAA4lPw18z("###Ə֭[+ +)i.l/QC RVڵk>GZuӧOӽ{w  ǒ%KxaIOOG"&[hAfff!yyy1##yyR[ܺuӦM022?@$6iIkԩSxʗ$֗.]Jdd$ ,:X<|pӧ| 3~^KKC*^4M/_fذaZ^"|lݺB[lf͚eNٳgOUvQkD"cǎ d/m۶ٳg6mƨ~z޾}˲e011аXZ M4)Qbc߿?7W^$''3l05rؾ};[nۛ#FغݻwM6II;99qYАm۶jժ2I$z/^ofΝ3f"""ׯm۶eɒ%e*իtQؔ 􁁁[N:͛D")d ))B*ȗXի 4ׯ7711A$+^ݻǏ ];wӧqqq%^ 666888KW%VJ#?Ry)ծ];{Ο?/ruu/ȳ?hĉZPSSCWWhFM$K#$$OOOtttXz5O&!!VZniƍ,^4iDjʊpA~޼yt֍ciiݻwپ45k瓷{KjՊիWF+^bbbprr޽{3bFŷ~[d7zj,YRץwɣGxl_:t(W:+lpÇM63gT˩SNe`+9rD*_NN/^(1P㋔,+e6"{{ /*t%^rlmm+tsΝ+Jbo߾f͚|022СC4mڴkiii)WWrp!!!\z |:IWu#; lj,D\zׯ'-HD~)2aÆ}ҎrpqW\% rrri\\dgg2M6E__ ر#&&&[X//;v WWW֮]+˯BܫC1c 2ǏsСbWbbbXr%ÇQFO 7_~JGHHeXo޼yQe‚]vFp:u ""ooo<==֭3ǧ۷oŋS۷oڵkmA"_ϟ;vK.nlpƍ‚"""x1„Pܓ&MT2ѨQ# D زe 愄g._̓'Ogƌann^4iG\~[PP5kT2\;vKՋM6UzYT^=ƌ#8::Iӏ1KKK\"H;88Pvm!BΣGxfGHQV躻wD...ȇ~nu(]:4?|>DFFJJ1oR *W>+_ +r>TqHp_T{aWRb,D} == (HJJsWGGGx%Vײqvv6 6l( ?KR . @Є]v-͚5cСQ'Cmƍ]YhQNNŋ i{!88XxmmmM׮I9:: 뚵jbܹ\~ ???V\YV ˗/o͛7ͭҥKYbƍ ??ƌCzzTD"aŊRFS)-!l-ONNJCqqq{ׯ_?<""CJ.|͛cjjAGhтYfmҚQuCAAB'z1#44PzFHOOTu gggTUUٸq#+W*NN:ɓ'1n8ӧ={nɒW8qBବ޽;̜9@woƭ[*dܻwOC/ZlY`Zpp0?3#F ,,@)T߾}eBBB2Μ9ثWt###AAA"kkk6l={y[n;2d7.6jjjl ._ŒjԨQ,X~rm&655'իЂYZZNHH׮]cΜ97 z3eʔBbii)ٲeh̙`mmÇt___qvD'!!}8pvv槟~… K*..KҥK(VJ48+++.\@TTb===,,,HLL$)) yyyܹ!Cػw/s!:: ~:шD"-uرcqƱcٸqT iӦ~ӣGXnwޅ&BgϞÇɀTlذA|5 ./hp[n7OOOF͖-[5z5/&222)@ĉׯ2'򬭭 rssH$\x777֭+DyO|ؽŋaffF-Xpaݻ[ t֭LFWicZ+WA```j׮ܹsy :tߟ 0zh2duҥKmۖO\ իWiРK.--[wMPr>}*Zn(%%M}`˗/Mׯ_/zi l" r劊~P 11cWXߌhK%}1eϟ/VRRbϞ=8::?/^ܹs$''i7GeZvm~W^qTSSiܸjֈ#Zx ?ܹsR*E=ze˖tooo)Y"%%ekhhkܸZjY؏^:2/_J> H/vvvRnjÈ#_Xf fff̜9SXrٸq#;wfΜ9~'''ٲe '###lllwM6uuf͚u %%EJ}ɓ'.TllSN1rHFqqq{RRREu)4MIIQ1cP5j128X,9U .::Z*G`` {AFFAꊽ=7n';;vMrr2ӦM#66ݻw Jd 6͛7ϕ2 #IDAT3{lUΝ;Zn]jP\uu &&&xyyy7'&&Ċ+{.gϞNQQ>}ЧO͛߿|rd~6lxw^QSS)_2 ln( epR%KpaƏρ9<&77UUUV\I||}}6/_fΝ8::n:VX ޾}[lXXXɲeطo ..n7|ÀpwwػwhРA?MQQAw^ᆪ{b޽[b 444999YCUU5jTT )_AM>>|Û9+W#x"ͣaÆ(((]' @(@"`ee%.Zoߖ;vZG ښk׮ JJJD"9s Ǐ'%%kkkطo+VŋK9{,7nܼy;߅,_K˗\r++R+ܾ}qqqՋɓ'3`3gΈ4iH$;;;Ǝ+եcǎRwԉ 2vXQ׮]122BFF&M+8phԩtܙTZjUdY_TS2'OʡC< D" &::7775jDϞ=7nof͚dgg3eM5͛7租~"22 !j%jwa$g٨Q#AK.ܹSJysǎ̛7C:'8|0"ٓ_{{{֮]Kpp0FFFԫWŋnׯIF ͛78::b ӱA$Ν#++ LLLpss#11Q>k.^x!Hw%%%dddˋ{!ݻw\A[4,,, BFF^~_,[ SS"755eٲe%γgAFF2eW|qVZh+XbkHǿ;-r/<-NQ ДP :h$BtzDyo(Y "H ^D'Hi ]tl.qO>nݡ>kwן$ A133 X;wxD"jkkd2bpXV0Lr!>>|>p8HNN^c- ,Xˏhٌ> `tttFDTTB!pVPjkk>18rWc"##сĀذXpzeeepQ]]ׯ_R;wN磫 <\M,K(!..H$GII l _~e455AѠ0 rp80 lףbnŵo9??>d!11Ax[+ ΝCll_۷7gdd@"@T̙3HJJB||Wt:j}555]2"ȫme"""0>>@@qpAHI;`Ү]bwAT 6T$JJrr t:RRgϞ455!''y<޿h4|zKZx;n˓0gBill8|8 *<ݎ?~uH*477tz2@ IhllÇ! 1gC$ t:?~Ko^YY~;DGGc(((I$/$I\t 2 QQQk\'*e Bq :\kk+=V;%] Jfw @P|( dggo8cy\\޼yٌ?4ZZZp1K$gee%E ))| /_B!޽'N>`Ө˗/q) koţ)JTTTӧ.)ef3})LOOm6Wjb9}3Ϟ=Coo/JJJ<^ 8JFGGVa0`0`X033$ARbf! ! wJL&[}KjjjDN`IENDB`pychess-0.12beta3/pieces/alfonso/0000755000175000017470000000000012176727272016015 5ustar tamasuserspychess-0.12beta3/pieces/alfonso/wr.svg0000644000175000017470000001166112161415524017157 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/bq.svg0000644000175000017470000001372412161415524017133 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/bb.svg0000644000175000017470000001244312161415524017111 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/bn.svg0000644000175000017470000001510712161415524017125 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/bk.svg0000644000175000017470000001417612161415524017127 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/wp.svg0000644000175000017470000000774012161415524017160 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/wq.svg0000644000175000017470000001053312161415524017153 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/wn.svg0000644000175000017470000001276212161415524017156 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/br.svg0000644000175000017470000001236012161415524017127 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/wk.svg0000644000175000017470000001157112161415524017150 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/wb.svg0000644000175000017470000001013612161415524017133 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alfonso/bp.svg0000644000175000017470000001173712161415524017134 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Cburnett.png0000644000175000017470000003272612176710402016645 0ustar tamasusersPNG  IHDRMbKGD IDATxy\U{IAAg 3Φ̱h4MS;ʆ۠9u9dz4i9",DDd:޿?6pshb_/^p^{uZzs̑;`Μ9Ÿ[_3sעNpuQ"nSlsIW'OK' 0̹h`>J z6$++ 6:NBs<G&| L q[n͛7éW^Ղ3LDFFg=֧Od͚5L&yZ͓O>7_GvG#~(b-m`kr=ƀG링(⻭j((( %%___\]]j呞^iٲ%IIIdgg#˷ (*nܸa= @0>@!puPĸx[(,)F]QcAF8Vs{(ߨZ@ %*IHH $$?}tR G̘13{l\\\yf:$I]vYòeʢUV=iӦ1aA׷\2NH[.ˎ꣬ʑ#GlG|2T;M̀b"ďEtEA1=C %22I&hϟo5cĈ,XVZ;_'CL(Q٨EDX (v7rVY\q).]ĶmՉU2BCCիqqqi"Qfn83V'kUҭ[7f̘Add$ ""CAC@PP...H||MAACn:8ʕ+ݻwoA%(^fbnpssϧg۶JE}2~xyƍtۗ CJJ ^̙3n///Ol޼m۶o3qD+lR(dddX+A$FUuA1Zn}vĉ~ڵǺVi|k777t[+WpN>Ͳeˮ?AlVJ⡇b3j(~^u~wΜ9SeAAAӇA2|]رctt޽ L׮.'--͙N9~ĉ׭[疖իWMEQLJƍӱcC8| Ä3~xrrYv-k׮eڴiL4|Zn]R^p999lذ2#Ȳرcyu/E>AY;lV$AFFǏ |Lrrrhܸ1;w&44ťT z#&&/F1m}{jಳ~:݁W%8@y4k֬Y–Yz/rEΞ=vZC*gϞZpfs Ν;L]]] "(({~Vˉ'XxaOz._l(L@@ 6T)IxgՕݻw3k,ouZAz7orM._lh4tڕzC\bb"iii\~Ӱa O?E@-]W@@@.]eYʐ!C:9pww/왛d"''Iv餤k߾ckFhΞ=Khh(SNk׮t4kf3>|C{n̙xn۶DQ7pʞIDZZ$Ɍ3]ܡC_|:DJJ VG^^zMQTxzz""~~~4nܘ :wLHH&>>xTD^ظq#:t 99?ŋ@BBʻҪU+ZjENxg;w.|gv߷ N$f3fK.ݖkBLLԩSXfggrQpBBBؽ{7/etЁz֭[[Vp(Z$IΨw<ʬs(زTR- VXboQRPԘ\,˸PXXZl6WhWVRHKKsh8Sk7|pN΢P6t*[G,Tq˿$9(4Q\/iIիСC|Ph޼yۗ*g21w\ZmQf^~e>UwXp$oQnNǻӧ򓇋/N>MXX#G`ȑqtнIIϹ)=zqv+ .''|We|Ir劣(/ѣG}GrjJs$tA"cGR௾'c++,]=PTy{\eٳ͜\ a;feR:ǫMׯ^zS*+,aW9sƚ@L``` ZvV̺Pf,f(0`vm\]]i֬_]uٯFUBNr`6.X5Pzɪ*'PRە 0@S&՚׏-[lٲ رEѯ_ o߾P M6E4mJ ׏Fմ .0A5k0zJ@؉ή1߉' a;1PXOOO<==}g>̙èQ5JXsȲ\錴$III9sm T< T%<ݡ,7o(bÜbؼy3#F`ʕv}A`pB1;/s (k/L (hMOQZlPRfM~~>& -cك'˖-sٻw/;w't{jyAgff\>o{P.hd<`X=͐!CÉ6X0xդÔۛsTSljuȞSӧ?Q8q"5???NʥK8{,\v ,VQF4mڔ&MI(¾FAeKFrT)ll?eذaFRSSi޼J`0Xsf1L&DQ&dddc]eXjiذ!-Z]vΎoe`(TWpiiit:BCCkiڴ)iiiغuuH%ϗd2a2ʥHNNDEE1zhgImLj$ʯHnn.N{6k֬\{K.yfF#$ٝmbTvXsssYr%)))5n;-4Ep6ê ),,O>qF{rJNj3h4++5p "4jԈ z=׮]df3׮]YQTveΧZ5zTK\?mҴij%+p8G>233iܸ1v9rTFl`mϞ={ 8d|ݻw~븅1Z'ȕk|]:(uR':(jìm3s긣 ;J긣Q̳&##???xχqkʭ%QzWYL&ӭ1,uyja|\|x(eYeYNV9%55+Wp1yhҤ iiiw$mqekȐ!&*jՌ3AƲpnNqFuT̅ ٶmNrZ$NV۵k'O0A~.hBg [Vi'5M4x'8ՄӧǏI&FhZƍٸq#ȑ#lٲ+V8%еC3'.\ -ZHܵkvZJ{ǒ%K &N8e˖Oa?삶z*=W^BbccIHH@vey$Gw$IU... 8Z5hЀ &\[d \aɒ%w7ʮ;,3LDEEIHH{%??CѼy;VqQ 7 ?~+8/NW^r޽mFi,͍)S!Θ1CaZ;#Tu8q֭#**#<LciPJJ [ݻv oܸ4jqɓN<2(.^;̩SHIITL,Á}jFmCYill;Vi /r$''CTҶm[9¦MشiG)ݝpEg5V믿ڜ`0hR$տ/M}(VKCEqr͛6WH.]1r~tRng-j<68d2U{ZT:f͚U?g}Fƍܹ3Jz'juiѢ{;tG:9[pOI߶luVƎkew[΁~{ [ee={c;YAryŦt:==cĈl^ xG0cgԩϟg*ǜU.\ M6vT'[VTT'ߟG}? 1c 믿eY~XߦMݻwGժZmogX}||ӧ&L ))#GV-cƍ̝;Yk5}!..ʱKb\XF ~~~ڬ,Ο?_ӧ3f7eYDEEEC#,m/sa޼y Ƕ$'';+4}FB\\\JE@@@Z%"!$$\\\شi Ã۷3j(lh4Fp+D %jbdYFӲeKVXA```eӉ@[Ucʕ\~R;lҥK,^gylaKp#GƢE>}:=ǠIDATs̡SN9RK4[[T7|M#6mJ||<@+í/éSx"G2]-زe aaa M_+gҥbd2Cdd$&LpXth~:th#Fh~w3'4_I4D...;5ӧOw-Z@Y@ D6lo5 6… Iɲ̺u[Yz5SNuȤdl4~ڵז-[vJod2$e=ZmOMT} \PPDFF7vhWV@@@)O\r!Ye\~7rZHׁk +V_~Tg N"Vy7 uƍk IصkWF#[nvF`~cN˫o(Ng8%زe ZSNۗ:P(7n >>{K`` <3n_8wSOF#111RU*Uj nx])~~~L8$22L&j qƌ?Nk8|]Ua28zmZ;tPoQˆQ24͛71l&//BG'`ڵڵ$8y$V JBVS~νQ ST &TҔnG\\۷oGҥKvJƍqqq5AwwwׯOӦM Cѐ1c09r/K^^u!˗/s9o/MӖv}N\xQc/I,]t?#/"?8G%==L_|@\\z`BCC9txyy裏2c ϟիy ۽kpfs:%?~\\c켼<177Wc8WWWt:/fxzzV!mۖz^Ozz庒\r9+4]eL,F$&VոU@-2}Օ`V+i nOϟB-MO?ޜqR':(u"!BWs3g\qG\w:qGq 5VhV'4eeeaU#Sՙ(fF󥷷 6R敹-:poZz"jƍlݺ[yf\\\>|x9(N0As}1s$I@R>}v֬Yh4ܹsؙBVi֬&33SϏ(** :LV󣠠|}}quu:Ky뭷hڴ)3Xpf >>ӧOkΜ9Chhh'#SFL&VZUjQ[n)p333K'EcZ#M>|Cnevss駟qPjr777Hff9m_.$$Iˋ7@F2h zz^DY.2Ӯ^vGT*\rYzVVM\\eٵs(_(W D{Grr2g&((HΟ?O˖-HJJڵk,YzԩSIJJ:}&$$мys&L^'//V:by:mjz=z%Μ9eIk B{Yټxl6GQzw,?eYtEqڻw֭[4}~8Ō5￟sY`&Md}[om۶RϜ9I&ǻ.66۷j*~RaO@d?{l:vȊ+L I-,w^,bWI,8e4 eYWs;v4Ϙ1CջwoqӦM@ :oO?_/uԩSb{k5\JJ ?#fbڴi,X? T_]t:ň-[ccc5(pʡ&j$IKeǎcΝ3t:}QQQ 駟8wY9zTqiPc۷[sr1˓O>Yc.**zԩS=EQ $BB...raa@(_|صYrek<Ǣ$IcAxAE?"o$W777ꫯ5jn/h/ՎvPಳ9|0zIQFt___dY&999s攺."":6),,$66^Onn.fڵkGvIvQgdYVѬ6}P&m֐'$$$(IKŇ;ɲ:u*+VPX~}900ĉ%%h4oFxW58Faʔ)^k.bKr z!L&SL3TDpǏg۶m2j(cɒ%4oޜ!Ciٍ͡CpqqaذanQe˖-߿#FHO^3(eɓo泒$aކ0!333 EpN6ydmTTTo_uoaFsT.\>KUlk6-[={6W[ufϞMdd$nnna=o!'O䫯'(/ 55Ǐw$YA䐐!))i`dZN>S曮cQ;᪨Ŷ!'**df^-8w,Yjmڴd2?8|}xx8mڴ˫&͸k(%I;wgeΜ96ݻk.>#rssYɐڵk !&&&@oN=شi#:u:>""wFI___FVj{vM Э[7V Vg 8T6FYORp b V[ hwQNpϟ'++{ AW_eddd0k,$IbС{*wIi4"##z*v7d2%&&K.ǁ< /o@XQQQ.]ХKZmfS6=b2-_\(L8U]\rr2;wۤ3_駟2{l?Ύ;դIBBBHMM&)>..0x`ƌ#tŀ| 4ɲ,vPRɲ,y{{~պtcƌO\\d2SS)'8/LN:u*!!!]_Y2N={V%2 ,Zm`=!"&M}6lh փhР/j<&j ,eYٳ*Co*)'8ooo; |:멧r;wG.;NIIߟ/BMע{Q]$&&HNT(/B:ϛ7OGrr2jj0C6fٳH^z%[bp%iΜ94hЀVZ9rA :u Q9sS6FAVJRѪU+4R0ZAꫯ˲ơ7SG=z_w^-ʕ+dرZmyt:AAAAhݺЬY3<<yfNWPTTTjiݻ7K.uZY\UsNDDD,Z~hOk~IձcG|||KիW9~8>sΑFJJՄbI!j $((-ZбcGx8rSI`GQQQ7E??? FQrVrrroegyHķ~K/TNe/_J*5!niJJ z;vӿ7 m(gWS>ݼyEU]`իGXX,YCq._\aR#<<]2`_#wkgΜyYONPP]N7o7r zˇYW_^||gNNaJ^ߘ={6 -[stܙFY7o$++X=ٳgjiӆӧW+kFߑK,h4!00FFQ{yy *>fh4FRSS|h4T* XQ͝; ִrܸqÚ6b^z :IHHĉ  &V5"""f͚9Vj/%I/46)))SRR|Ε(;LU Hfs52dU&N~yqx@%"M46 5kFffܕ$R':(wu:=?U%{XIENDB`pychess-0.12beta3/pieces/ttf-Millenia.png0000644000175000017470000002000512176710403017370 0ustar tamasusersPNG  IHDRMbKGDIDATxiXODP@XTln"uVAԊj hEdQYEE#d% XTP5B$<|Νɝ;37璼 Mk!ܐ/ Fk}-{/~vӧ-bŊ;v,|}С⋬q8wXK,A{{Hu3Zyyyg{{o~nlmmknnZ>^n477#77c%>&N}qD8nn``W^ \ ߿ϱ]OOMMMBi={m[ii)ײYYY裏mSTTĐ!C>\8|0vkmmZߖ-[0h ^={cǎHOOmضmWԶ6'---jB7XZ~e} |8p ***~ +?gժUaaa_=dl bʕ-qqRD.OhooGTTΞ= ccc *RX,5M>~~~033K&M/f̘!.]􁿿fff= zÔ)S:.]􁋋!qɍ >>{gΜP_N6---PRR"ppppDO=~%%%0Ή_ۋżPQQARRRSSya2駟/K)=ېH$ 0cǎj###D#{{aÆ]3fPFFFÆ KTTT۷hΆnܸ'=QXXhG4r%\|+V)SKh ҥKjjKJJ %%%`ʕ~8QT &&Fv/1e466J,\5---ss|MVhh(_fP(|k뼇qƬ~鴠( |||W))) lkk+BBBgKuSPP#JJJ8::BAA}_xZUWWOGLFVZZuѣGod^QVV{k74\oH$,^ ӍPPPŋRXh ukԨQ8~8 d\… (?˖-I[3ܼypM?&&&\ˌ7ϟ͛71oX `pܱΝs눋)28{,0|ӯ ?#-- SNiӐY6m4O:U1c ʛ!55U(mpHj?iiW#}HpR0TG[QQQ!~~e7^CR a8B@#*ryѠ.cAn)@#*$YN&…CVۛMpR0T! G UHpRE.o7X,_?2CH8cǎۼy!---HMM۷1yd,X;^EEł#GH͛-xG`XqҺݹswy0sLx}AT2JGG򐐐yczz:222`ccI&L_lpRf ---@JJ `dd$҃0a٨Bll,!ĉ9z76g!7BlP(ijgτZ`cɓ'|'HY.6Ƣ˖-È#z7&L????+]re˗)[Ȇ#H9r$~'A[[;vWĒ(o477#::ٳ1{lP(_l6^xmà aժU_Ѯ_wV.''G)###!88\ lss%KloUF$G^^/_cǎ!22044֭[C? ?÷x ijjBbb" WUU5JdofIpqqY}V>իW|/_P322BHH\  ;;'d5kn݊ݻwc:u*6mڄ2a/111 *_Λ7o˕+W>Fő~-_ӣ644D~~>֮]FҥK]fd̘1Avv6 5kKP {{{f^_4\]ɝ$88ήe f##6mm4oooe8}}}ܿ(..ƙ3gJAAbb"RSSq]a˖-"%Zn@ EFF9s&_̞=W^޽{o %@Hsn``@6@p#ާ!qRE".455|`~FcEX }-'ҌpEEEBBvB\d8i,Hп!cWQQ\*|pZZZ055)LMMC 4̢*>pOJ?ǎG ܹ7n܀9uf00LXXXӧ󃁁ܺL>.]K!8;;CQQQ䳒H 111Z]]] d2w^b066ƽ{pԩIIIda=qqs-77֘;w.:::O?a֬Y3`c׮]BFFg˗'(++#..vJ޽{ "xW(]p^j٘1cp=^¾}`hh8(klluubŊ2e +++^J"<<>|8v܉9sx}z]l E(W -- ;v@^^2عs'*5))鏠 /&YYY!77'NYѣG˗/1c nʔ)S$2"wssChh(?f\H H >sEDEEHHHunݺKKK t?.--mummmH7T{2zXdeedkkLҾ[!8qt:4 |5W_}WWW\~]ܒd*ر/^4, ݽ۷gϞō7gqMKK]vm˗9V3333˗{}233AWWWkooԕQ]]ݻwɓ"_}Ǯ]P]]_< Vbcc`0QXX5P͛l/^Pfiiʪ}9nݺ((ڞKJ 8 >>> kV wl~kk+BBBcy+++5jJJJq㶠vɒ%s>b#F ͞={;޽ۭA__L&SOC jjjZL&Fu旖r\ŋkUUU9Ȓ'k֬q㸖111s+T$J 7N*2݋Ȳ6Ioc*ku@|H#*R͗t؈ _}}{|}#e66Y{{гHO@=zD"HZH͗3$yp:::LMMGH:6_[[c`2?~<, ?ďS4;6IҟFc8B@d9bYm7ooo6HpRE|#G"((c;N:kmddw{yyݲ'}ر̆7999|}鬃r̙_n]M4ĩ}Gd544dյkۑ#GsQImmǏеСChhhfϟᡭ#aEEEK:8:&&Fncp!Hl8 [ &  MII(*d6"U__s744`B7zhdz~ PWW}?~muuumD|k!$12Lpknn/O>k[qq1n*S>uTzEE>#xxxp{ۑ8uԕD#pqMUUިƞ={8.7p1L:U}P344]]]0n理`ƌpuuEbbD#)9rҥK044ľ}zM~;?!!̃* |ƅV[\\aggu\,od?'Ԅk׮… vzzzGAA444vZܺu cƌQh̛7dbb~%ѣy;رl]]DBq 6P~ PUU'''… L<k׮17222v8;;xדn޼XۑMMM$[[[uֵgdd{iΨ0Z[[䄊~ޣ455QWW777!44Xp!GLh4g͚ׯܹsNӧO9Vm~䄄rMI[gRR޽Kܷyf"544PWW7"??j{6l؀gϞACC~gL4oߎ(rrr`ee?uuuܹQEPPP#G`KoHӉΆGNm樯%Om'N@rrБ:::Bbb"Ѷ`Yn;vގ*++1rH0Lxzzrd߽{K.Ŵi0tP_GYYFӧSPPJKK*Eikkݻ]KҦ-}Ĉ6mWm?ڦO---܀ڄi7YS:Ժmc2Xv-LMMb+QmmmwL0xAz.q/ b֝&Np/((MH޴l@[[Ĵ5]nذ&&&Fff&`jjʵ1Ξ=ׯcƌ6VT9:=z׮]+ڵkT ܀$5.22HOO;w ؿ?~7D MwijfIj6rϭ.BCJ&6TZE[_Cpo I{|nud~Oh}2,Eӿ'NMh#Y=/ʾi8---JÙBKK 555'ˑnO=yf͒aM#ed'2bNQ69IENDB`pychess-0.12beta3/pieces/Freestaunton.png0000644000175000017470000003735112176710402017533 0ustar tamasusersPNG  IHDRMbKGD IDATxwT?sΙ.T.`CT c^MLyߘ$17DMbbEEB0(* Yz:;qffgem{]皝33wӧO1"ӧOېp$6#6\8FÏ-\L?܆4_zc; օ,&dYK `yyߛ4l.Oi+LÀa8Po>JKKq]Rf\0gaݩJknrrr\+ oFSO\^晦a|xΨQ={ʗ}wTi4iĶ{3ۖ/g@,&#\2eÏ?`s|VQE˰aƌaRW&;;;<8XleeeXB->Viۻwd噦XgϭR[ܱv-ׯg[i)`k?;reeuk&4hЧOVۡz4ԣ7?c%׵WL1u/N7 c JTd3`<WGJm2MbP7m߽&.4XM X '#/ 8w0zuVۇ6xM2|b1b0b55(%ݺ7;EGo-nWyyTiRza:iRɓiѩi,0̴iL3N3C1[+&OƎFqQX ;ߦ|3t"850:C .ËշO6uD")"ad(ij~t,i纩C%CG6Wy %ίByyR1nwuj4_L>xCyh-<~\c>S,k|ЍǙ:t(ּ(a޽XϾVSwDJ0۶mcO"4Ւ!nfU^FFv06èޭah}#xonPJ&>~uP3&`sgR흓cMsRʕ|eĈZ+Hbຜۥ j+CXī|'upOsK!2q*jjškaQ a<6q<,@yyrĔ 8bΙݻ˝:Đp8LΝBpee?CJN1AnT&fIt( $!RX޾]խbiuWmVCGJBR7&goctRVFRKwݻU`qK,Zr% !N,.nث5Bd[;BȨcO"(ԡp8j׭1l[I}8GgÐ\à|vr CB0JQA) 2ܨ^R YysjyJaJC69nK'E4MvZǞE8 u& a [1JU)za(%muEa\hz,LEPS\2 %EkVQnOMn mYJG~~]r5ܴEmẌ7=pjzu)ޢVZ3SD(ڥ+ާvKIКJׄc۪qyZڤ/TfddpWgEYJ)C&7iR|?tLa0Mƴi;w!\EYK5p# ew7j6F=4H,Iqnтos `Ϯ]@P:O`A۔]o@03[Je n:2E~zKff*9x>Km(g_OQnnO<&1| XPokg /^Ldf䎓qH>o ẩv]ٖe((+Xyc7a/&0(˫Ζ89돇[nG=***7{6G͘8VYJMMM{WlIig%mkЪq6Fk hvAEEsgfg!~{ 5miՄD"<#޻7vmг5wEkӟ-ܡCRxf[l+ Z|&D"{Q&|Si=ZnGn3ϰfZ߸7O Z4s]bϐ.Vwsy>>Ϟ >Ͳ r%T"}??f^I{m[3%ܾ={h`w`ăxޚu=ZSsgmREI޾mH7ǎFS [mo^.;}l[]v"I$7˶fQIm۶QYYɬrU)? P۷o$f`m]g?dI]o$J;=s@`MK>m6***x1}[h}ipm#Џᔝ [ DeӦMr `[o-%<6gh>pnYTցnq]DFk@֢ 7i5Ჲؼw'Zh/8=@EuDPys / #He% W3c" 9gH8#fم;uC葙IF\rz(DU4r ?rY4&Ù7o.;wls'Nw[k_i4Xp! \@|"~c,Firq^}99=`0;8N@@]Ojo@9oX #[XB8q_h[ML9FPQ VY~a#ƴrIGݻ?g.q(đ5g*{opjt5j˜19Bj%%F)E`998$#'ͻ%ao'l׽2eOu72㜿xYGymؠWF LRR`~}]6 sRMN9AoN^zP(Dތ4Id`?vz.wݘmemKi-|4 oK h۶m=uF!L%[ zb_$ɒkHݻ4sqԶsKʪYY2}|Fˢm&ܖ͛8픑aipذgXG5zꅭ;v5€m  tZPP;hL2sA7ㇲow:*ϻ+W5Z 9 V20dM?1H!F;6V\IF(#QvUj 7vT X~=k-:>?j> MJe$!ėRmov"Gkjv)G.wMM7o.7M:՝&]XK{pi(,,Đ>YY)y$l09A|ق)7|,$&W ʡρj½;4?EI4Uo ~93Z{!מv2#\VW.+#u6dS1'KYkh W)y sV-Z',e[/cB a$gt|GMg}FPK#hZ/١~p&z^p%pIsn" /uV1D~XLL%t01E\+`8.PNj/Ⱦ}صkB>5 |q4؞9sXlݺu+Z\H94x' [oPj=Zc=CJW)UL3oB­],/XͪUZAr b>H׭n: ֬Z5ҚpbVOoH ow?5}֝DCR&htgHɿ?xa'B{qEA9aƳx xy곟ʍےuRI(Ȩ#I.K__>*`_?^kh -? "=_z*qxur|'pyi/i#H}3gH -IS9CȑV^ْȶH7)5c ֬YR 4xjr&L+pYLɐ!C >ReitidGSb1M[R_051@nJIþ}wqᅓzrFq~Zh[A5-}z;vz.{ xx76l_^OyHa)<f=sfeiQÇ۶UU=*kS)ԮRʏ [;&¼TVvf&1|\FŒ%KtFf+p8MD~b0j+ z(9h;@'uPUUEA~0)\ kOcHG5FN$8 UR$ ï},up8<{~{?w#m.nM4e%[ 5!0B )as.HC꺍 vݜD"R֑.b`_s~^RR ޵Sq eSE{GB²,츍X8HmchI,Օu5FR_vlٲ@uR -[[#h)X_nDy1 ;B"??]{nH RbnUsD>ضmP݂s.e/5 u ]:#A+_ #4-E^^hr$66R^tQpmŦ铗Wuu]ֵL[ 70 ٭9="LxK"\̠ԴPb59$ޙߕGD!W`ȱ˔{wfHu<\cmv7凜w[]?~C{(!).*(y?*M-Q?pDq]s08jrJ@ŵmxNR"\0|9.zy3ƍ>FҶc8'5a8{\O|u]4Sb5$3#'00nb\g 5Q_ Ìsg㎫[-'156V_ń X֓yY-Fa~_㾎fһ٠j 7d@ 6[b0-.?LICǐ*k^ ܿX~08o"&v5{S/cO)צR-Í?usHlnb+2dep\/H۷o'# ;3wCh_njaҥɺ|TbѢE|d wL_U=ou)x83 ڽPaHx"+u);gC-Cl&;r*A)//gԯ|-gv1pq׵6G8dؼs 9q={dԨ&:$R*+) ۜ9Dg+|@^Z$ th]<=cfJR&ƥcqu L.;# y{nԭCnN9A6ow|) f* mc ‘ru+[Beg1t:%_T0ʮW5 -ĴԐ{x;] 1)]ZcHQ oaǗ3Ӕsu0I%c萐o.MKpdee#G Mmt~r€rFXL@mAii)99Y%8B+$ ˑP\2*vXg:xb2 yyx:zFҿ??˟$Q^$Ai"64`.䶱2+d>G; b1zM| )/O=F{8|oګ3K4^|RG;gKILnOZ*. e|NVON ISV5QiX(x97-ZĂ a\6*B%%%TΘ͇8hwKġE._5)_~Mnm$9,iGdffrYgn3: _ c8rpppHdÍcÑnӧO<1R#1R+\{鍼ޓc?CviH$Byy9ӦЩNrnݺbС߻FܬPzl-P6ˆv͟3geeeDQ^{5vʤ6ꈵ;,˲3?bJAK˹r{O*,,sɸ;ŪUĈƗk$>;v97eʔTk}L:2zUA=0v)aaCx /SԩS&2/l~Ä _s@eYZ8pkv 0[ ~_pQzķ 7oo߾|ɜz)ڵv 1\rI\r֯Mq};nb&Mر1h se͝'od?vg& ѣbŊUk\ǩ8g|0]UO>Lm֭Xn X&RJI0935Fݛ޽{a&`;w J1㱤8:d,N\@(h66G ./";v0?JJsڤ[R?2{`#wK_=/GOVUٳI멧aݺU:>a^yg''&:yͲI?ύ,m/+&L5k,^z8έc-[A|蕒}~(Pfvx.mw$لFXiȪU}BɐU+l޼:uR2DA}<>JGط_`JGwE] q܅]8q?0 W"̙sRU?.B&XN%GH}DLj0jj^цF bٲe,_{E+~3|(]t~%랕q߽{7K,aÆ  G >N(iq{חOxڧK>|MEbioY6j6pJczzqa? )d„ FYY|VJ,CGkM8F iHIKu'i݀ҐRйA>dhptV%_@q=LehX.儒)܅=;bm g_E25k[nܳsa&iac)Z-ˮhd̚?_?/om{ +^rx$TJ}~x<~ 旚0O5=`ʔ)8Cii)+V,g0 Ò.K~*#QbR)'HϞ=;D~+//駟K/fРXC O/v8pPCc0[Υ>o HLxB!d@w̢%+yOթ70U5  %C"RדukJVfgܽ{C d"oV8$R1ZEtE^y;\I~ڝJ$߾[n'Fp9a.,5!:eP{qɄ>3KxNigJ)R"M߫WOA+֝99Y!03i +&.0x?r2I aIGFm۶ )%C ٤Ftps< q- 2k1Bۼdfeqs0p.R8H͔3{{6>\!Se(J_i0|ֺaH#%P~vmSMvs){hu6Q''v a :VX{}!\ii)%%'`H'J)5jSsQ~Q^k>٤Ɛ^j"kj1 + )--m}4ʼl˲6X_rib*E[T ]ǯ=rXĹ3sA] kRWmmthTJU* Nu4!\UU:uBJaVOO2m$0l`gr3 ~y1W!_#1v3BωzWRd*EUU-RWNTS.:/Xka-߱c5XcNS߸^.`eY|7'Wۣj"Δo:f:j])ƕ: . =RQ+H)8>x+#F0]?v5DRR'Smwkb`k[CûZ8~}0( ʍl2*z|+xn,_5`Sr&=.t"M$pB?~zgϞ=H)j3B'оB9H瓙Ɉa%'L0efBl0BFn_P/y.n?7n&JS#`zQaW /NDRJ,r@L|^WQH7,: nX9h]g)D{]L夺C9p].j tDq_PјNJ ӧU_"#3K'vs.;oi]d 2O{(aCS&~ /fGf^M؎7A\s" ";B)PmwQW:KF/?Fז0-ZvIR 1_jh3nګg"ss'C`|z9;R?n[s6T;Zѝ81~~:,^x~%]?%ե&&LS5'pS0 {7X'V#B;Զ|1eq!c#)<8\$@G(x1RwO-ѸW,j!AQ; _j:>٠I)ꪫxwyrS=_ ILRID)=~W%dgmkTe 'qWNot u( 0^/^/NjuC}y~.jZMH&o7~FR{[= cOȔsFPJ-:]e FZ?%gBصgʲQ;2z>$S[UT֓J`A$Vc%EBo_VS\\ҥsq\| ,{=%!AВ~`Wʻٱ50H5;vaێ},YƜM@[V[,X ĔJa+iM_4#β,Ǝ'eټ6\'Qziσ[w1M40eW|\}A"UU04=_W%*-kk͚5[_}_^&QA6ҥnZIӚb V4;SukB,BxrQB+)Qwk!lb83Ko+Oo6!Y\O`*O;_TZְfÎ4δ7hLIiAu9ôC=w~΅b uwdbA&DH͖{7C%؜gWٕ!V+StϷpl>(e{n0SU 5HFzՍvMҿHii)9T%A'*%}*5(_*MW^n6lHj_Ay z172ކIH ګ9I7pXYo՗_KH*6_Hߠ>HŖe~c$~& vҀr@;4udV7hvA,c֬묿IQ;;m*gG? f08OO =!Z%k Mٲ7MA\qŵK5\^9o| ModeXkۄT}:$FG@9MH#I7)׵hB>v\'VWz۵k'7\w%1)Ep?!T5-L<%%\UU6ldڵğ? i\=KT}b٤>(M?&=x衇!U}K/I 6fjWK2&NMZ]ҿQ¹iY=M5 WRyR{hO6Gil08B*P$9)P6@66JyHHDΈ=+B[$,(BC o{KIX,Ёii~hчGBHݴH󴢕N%PQIb0Ah[dSG쳏Xih?pq1R*gj "9IENDB`pychess-0.12beta3/pieces/ttf-Kingdom.png0000644000175000017470000004336112176710402017237 0ustar tamasusersPNG  IHDRMbKGD IDATxwXTߥTQ@Fc=F%&n+`4HbF ҋRE,wjyx`{g=;w̙\RLuC\Ro7,/ 㿅ܿ݀ʑ#G 0@O?o)uΝ;p:?qD222j믿n YXX⋯+I޽Y|9Wŋr:VK/ɛeQRRŖ&%%rРA|}}%D.iiiE+,]A܇;wk֫WC111vp-‚esgΜ >'TMLL8y$'OʊG:tHť2C AVVӅ:u)((`Æ C}ZƵ:tɣFիm۶Uˡo߾`llLHH}^2yVFQm$ Yv_xxx ''7|uM&ONNVHIIQ/yÇ>|0y޽gzؠx0w\ڹsgL H4hPZZZ)%&%%,FKK+… ϝ;YXXXKAAAV9$u:Ç'''yyyK&M8z(~/תL2h._Lll,n:Jݣn WCZhQX˖-^7ljBB oMLL](v|g qqqhiiO>q9J=*>ˤ!)Gtt4RNùƉ)));t ӢE f̘QߣGF^o| ի_|!|vvv scSNepqWFbÆ BǏh nŊbbbBnn./εiӆ}vBCCڨxjOdԩE#Gqvv'w^DV̡Gj@@@ @);Ʋ}v9s*lϳgτ% (+ C=o֫KddT;5j%ܾ}[8nff&%u1\-ӹsoqrr"44TH N,g3D@>==wFܹIض{El޼>}wxP~|R긮. 7뇏k۶-yyyhhh077gw%#E455QQQFxCk===)޽333q.]رϟo+,,,h֬Yʴm۶B~]dkbq}DeǗ'x@*cZGcpz#.@:LIK!((ܲ5N):</,X@,u]^^QQґI..."wwמޭK.vp6~Mr/V\:dddCC{Ӱ|-,_8zhn޼)h <\x=i$&M$̮Jru/|P<(.Ԭ -ZzC g+!baaQ zիW|wt"##}ZZZɖ<@XX@F駟J|Dc,233x1&%9 &&&]쵈yaeˊD"-[k֬ѣG=(~ WȒ^P0@y_U{̘1iS ƆjGcp>jjj/Rlܸ=zŋԩl۶MKVN?͛7_|FF{`РAlْ G^X|UGHuuud왱1?>~S(޽{Җz 8@ĤM6bbbjjjԫW룮H$B,E^^yyy䐙ITTQQQ p \Ux|?#dddp&Ng}!qqqݻ{{{v;wd=;** sssfϞ-1,󱳳Pj!ZSScaaAFF$&&ҩS'deey deeBmѢE'77Wx]~R-Jj*V\BNނ/3gŒ:v숢"^ܾ}x455ҥKL>+WаaC=`jjjiqpy͙3\N8Ann.3fIWr$<s16o\-Y<#Xx1aaa礡cǎ|[IӦMkt}׮]/ǏLUK%AIIzꡤb==B33-Z;uNQD"X[[ӵkWvJbb"$&&ׯիWuԯ_]]]DW8` N__ZM6TxJH #,{n\HJCuW?}VS rJq]W?JR+ghhȳg#//OjEcii֜?OOO>568/_\|kҤI/GAA'NM6̘1GGGa?M|||cǎ^wj{M6ҥ e꒔'***ĠNBB)))hjj#X``ӦM"ׯg7N̙3χ Ҡ6q*%`kk+%+PGܼy -Z#|,_gңG899qNNN +W_WWaL.5^֭aaa{w >|ڵkQQQ!''ኊŌ?^iAAAL6g$88B\\Iw,?9s ݻw}̙3KdQ  |Gٙq1zh/_N cMtttҢk׮L:U`ٲe(((0b%@ =<< [W{T6mϹwbAsL0h|_ɓ'3qD6,sD"P>}4r528n޼,ׯ_ݝK.Ŋ5ajj*%G_!!!tڕv֭[i^}8pBbb"lܸw(ho-UFNpp0nnn"gΜWj[[[fϞ]ҥKRQˉ5]kA^]e˖JdggӱcG͹uŋ0rH-Zۻwoump 6d(((0vX1cƠ hԨQuR8::~llܸ1޴o߾̲̚5^zaaaٶm۶=2ƍO^^?ߓDƍSG$QUؾ};͚5M>|85Μ9Cǎ+ ~:hiiq1D"_|ĥR՚>y055]v=/^ cɓTдiS߿/uɉ֭['0ezE`` ݻ翳Yw(VB \;99u^YdWϛM}}R666888⦦888ĽsNDi„ ѽ{2A$%qww899Lǎ5kVp;3:qO-{߹s'̜9S۷8'Ν;@y\\^^^e~+V4Kxb4550a>>>L<~DDĒ[Hm$""agbb"$!d۶m-+Y]HwteVZTx:j᧶$:u*,e=zc k׮ܵGҪU+,--QSSc…gVw NVVX͛7K(((p5ddd"FǛ^z2= ֔)S7n̵k׸r RҥKm۶ϥ_s Bvv6Æ epbPlق3˖-:l2oƍi:12rH8}t^޽;? btU0Ӷm[o%y9n]dd$ ,Z^IyyyΝ;'UM9s&׏uժ,HFPRR*8r>>>e:wedd4i׮]qΝ4hP"$ %8pÇ###CXXdgg SSS9{ltH|||Xl222X[[{elp5bٲe,[B5ݻd֭[ǒ%K EBCC/٨"dggHdd$.]bѵblVR+**ʕ+Ie>|0P/$$$`hhHAA_~ޣGe^e֮)11n(鏋fԩ2i$ {޽ޅ R/]qvB,͂ ً/599Y2=zG)\ yH)r$h޼yU(ܜ/$&&r5kNKSN͛d1SNEw &Vw699Y/]L۪Ѱa #W%,]4 7&$$~ѠAD"'|Rk ˢW^Z6m";;;e˖ ɤ.99&M ''իcbb]ee۷OXx.;vp!֬Y#xcҲŒӼys~g"##IX,&&&ÇcffV)wHǎ~5Ν;gϾuEBAEE(>\yV=zĎ;={6Ǐ'<<\=z4gΝ1eYdeea``۹z*'NΎ'Np5lقfkѦL2VBΞ=[7iӦe0^KMOOgȑ8q 111AOOKKKN>IMMnt҅1cVijj*"'''n޼ɺu뀊U۷oOHHǏ޾`PSetׯ_ʼnnݺcE$hт? .͡j IDATκu6m7n$""K.q)+byyy<==Mcǎ%556m`nnݻwٳ'~~~@ٓZnuFbb"#F̙3?^V]년Tz SQQݻ\x1rpuueȐ!P333Ǝ :tn5>|Xx<{={g7n ֔ӧ/_&77WWW!%$ ]NNV*Uo~~>dܸq#殭T~E|N0:+\ ܜ+Wҭ[757IOOʕ+L0V,F%aaa۷?yԣaÆ7s &NHxx8΂)33@CCCO9<!77K.| ONDDaaa|Áoy{{ qoJOߐ[[[?~,쮚2e r=RSSCSSt"HKT$+VА[n#ө_>:::XYYѲeK6X[[6_9~28MMZ-^)'d/AYB)ӧO'WUh׮m/~ %ꭓ\G[fnCy[]W?Jm)iz[[[A\b^Jddd),xӨ|HH)SZ ##CԩS,[xk%cB,~@[CCC&MT U~k렠)S|rСw)UC###iRQqqq5IoݺU!ݻ G͛[UMիRRݠ1SrY$5w N">}tsgg紈KLL n޼9s*ٻwo >|_իͭʠ<&Yf5nӦ X/ò?kjbjjJiժ!!!̟?HMMeȑ||4C¢qT\ZdpO>uЁv*(̞= 60c ڶm ȑ#;Q0c ;ҥKA:D>}ҥ $''mmy5222 jEJԀh???hܸ1B  C_uvƭ~ fff|_8:: ?ɨ2zhlB~~>#GdΜ9lݺf}Px{{#p7nLvjdxU٣?sL!UAA͚5cܸq&Olڭ[߶mvD1k,~-[HJJE";v@__DݻjEDD/^,kwƍ17uֱeK9!:vիW͚5sf[+֭[(++tRΝ+U'##/ׯ&*O<k~F* 6jjjXZZҥK8011䠾)JmsIM_&::h!AI~~p,//###Jvv;P<{qa``Pf}}}ƍdzgϪPi i֪U+Ν;Ƿ~X,.Sxe* ?lWW'OtE+Eެ,ܹUkٲ%[FMM/I$Btt4UKd($)(wnp/^6gΜK,viӵkWi߾G<$ӧO_U~*bccùs=_vիW XLll,e~C3̙3… ׯ bjjί }kX߸q^PI˼yHKKCKK7 縸0rZ  Ï(((_~aРAeU);_ضmCoߎ9FCC 6Mvv6P9x&СmۖիWՆAH,̂ {.餥m62339{,5ʊWHLL| ==2Q#u˖-6R;v,666GU-Y$[YYÇCnnn*++cee?wU?_~%6l@CC~tR444uرI&Ѹqc-ZѣUT2 .33+++Y|9K.`߾}<}ɓ'_~}Ν˘1cX~=?*N:!++ѣGjs}u(++sAwׯ_租~Ã+WJJJBb2eTē'OL9s~޽{pBXf:O XjN/>wZK}m(̤o߾X[[ӭ[7A.99AU@uVk&Nxaƍ3eʔ[n :3g2lذC:xxxd\|YtTDb}}o߾]cƒH1@䕻;\~]}KIIui/򟸮I;vONNs֭[7Nr=0~xbiiY%׏=ŋ׀Z ̙3۷7nɫWPQQI&t҅pvZk>dTUUuZ)-2zNr-$ʕ+6z|jݛ0}W>/^qt ѣG\rǏ3v:{3Kpikذa=%Kf2۷oРA6nX %hkk#//ϦM}||:vYUCCC&MvRj}C?F$RUs366^*o٧OÇ.WD"DEEq*HEYYBI@郹9zzz4mT%őɓpB5=z ++Jo"'Nd͕}ۨիWlԨQnʠ VFB__O>]vʰaHIIaĈTJ^SSFU+;̜9 ޒ\U$Jݾ}[qĈPYYoooYJEk׮lٲ !,5kѣGYz5֬X'NHt^zK.gϞ{hܸq{;kCBBhݺu+,Db= s4}xx8g߾}xyyѻwoΝ;ǣGx ܼy;w2c >ҸqcNݻ}6 _EϞ=vwfܹ֭s \te.]TBU2Q999ʣ-[SQY4}rr27ڜ:uOzj:t耆VVV̘1ݻرcYv-:::lذ?P:u*ZaÆtؑtڵk<}"/ީX:ׯ_.A:TiҐN:UJ%DFF&;v Jmmm o߾@N~x񂔔vލ|ӡC̰uX[[S^=HJJb\tgϞ1}t:D@@@?. ///:tReCj222 ޠsDDDZSL <==izļ9k׮ח<\"ͣ}ܹs/"uÇ6y?\?Kʧl̙hʕU}֪}_3x߷^:E>wuo+Wpu\(5V10h ,XMps{gIUɓ'{;-<<\daa!1cƎF}rc  o߳gϟ^_R'N(D3Z'ͲEfffO߰aÇ_^4hР9uIII~Vz8|xQmܺRիѣ Zxrez쉧'ܽ{<~ɋ/0`@~۶mK Tccc6l؀'N(ĉLJݻwYfҤI__jڿFܵkׄ7ݝr%j3go^DAA6lxQv^^$?.hӦF^^rrr WрСC...e4hZ18f͚E6m8|0gϞV˗?y-[d˖-ZuttM4޽{ၮ.'l٢DTT***ߟe˖Yflذs@q}yejC=}& >\ThjjDUU53(999444022o\\\hɵFFFhhh`iiIHHPgNNfTTT˗/e75jhQu'Rmz]] | Ԋ 8???cРA:S~M?}Fupp===233cb |96mc4YD+WDCCCѷo_:ӧO7 4hիW022Zx޽ZtkZZZwwr W^q9 6>t{777455>}:|M&aaaՎ/kM_LSWW_~hhh0fINNfԨQ# 8|0ܿXZl… իQQQhhhЫW/? &&&_\֭[oopp0SLT$1qBBB^OwbUUU8".];wNaff){Zn-|Ce۶m~c)'''\\\>|pGtؑ /^Tɓ'4i}]~)5̛7Yfq] ajjʃ={6X[[cff6666'`eeEQQ#<<===BCC? &""0NZ-Zp%=zwޥe˖Re5jt?!!RDQ%_DB/y‚0n߾Mtt4ꬣH\>}Xf k֬aՌ=$Xv-9s … qwwG,yf\p9s0p@^xɓ'fܼ֭y(>s6nȲeXr'$[n-HLLԔN:ܹsUTTz+**FJJ%IRRR.={MMMޜ̚5xÆ ҥ &&&ƲcǎHݾ};,XWWW_Npp0x{{sy033c…Bn߾}uPssٲe={ pQ:t(:umr1,YÇٵk#$)))0a͛,nllLtt4nnnR$/_y椧Kyx+600SGGj.\(RD򰵵UWh}E~: @^^[2{lLMM9~8&&&|dddpY&OH$"22 ķ%##ԩS9uYYY 0}}};Ffoزe 8ׯP>>ߟ[a5ʦM&1bs`p ֢E (~???!!!/%\ٴi籱l߾]NˢG;qrrÇn}}}077Yݻ/srr/HOO',,,`۶m-Zcǎ 6o >|{T׶m[|}}/yyyaD_M2)***''''\idl+!$WX,kkJ59̛7OКRSSVZŘ1c033wЁ#G2b>mSSSɓ'Y|T֜9s(z u*ՠJ WTT$9" ƫWEEE5>"epÆ c BGGccc>,oii*HTjWH$2ҨQ#x2ѣG())q]ذa[q%߾}[t/^,ڵӇQFaddĭ[011aD"Μ9?k׮k\\\DE.]9;;D.]j5`e F*oH=RѣsAKKKyйsg^JAA <3gt>}Tsss>/_rmasfƌ|駕66(ȰgàADfffcǎ̟? qdee:t(~-ĭ_ ҿ+ Zݳ믿!t҅sJ;w.Rޖ~CDD"֭CWWTvATTG&--M0I& $%% =Zaa!iii ZFvv6ƍ#**ݻwQ9N߆y~nn.C !33ׯ_sYalYY455p^zW6mZ @VV6111@\\dgg B,#PWW~ԯ_UUUTUU100aXLVVW\aʔ) 2(QO:֭P_~gϞՄ*sttdɒ%Ѹqcr $$$`eeEff&iiiܙGIDAT ˑ#G !!+W')SSSe׮]Վ L`hӦ | ڵQF(++S~}QUU\7s={Fff۷ R𪪪wհrKݸqY8̩SXbСC5޵ٔ 6C@ /_6zzz4huuuEIHH 55PTT5 TSSӦMٳg[9 }6;w~~"ϟ;5]ʪl*ѡ{̛7[[2? 9z(&L`̙BvI g۶mԸڵڵk߿6m`eeUjsez聫+=z`رR\|;;;XdӦMP,K-KR׏Pbcckܮ .''$BBBhܸqy7vAFF?̟?ǏBRRRs;XFFF԰aC[N:Uଭ  K+773o< k|HDD<ϟ 3֢"dddPSSCEEӠA133iӦ899qUk􉪨pqԪzRjjj\p#FT;?ֿ[ NdB~x%%%EKK EEEl^zEZZK8Aj Q,!EYYYH + (I~~>$&& \СIII5Spqq!9955Zݵ%''GDDDo58IΝ;8p K,m۶4k֬J yAAAxxxsNO~:O<׬\[[["rrr ߟ?Z-ZN6lذH·[ N"mllL˖-111A__Rlf #((FH###! 2{J֭פCZ:y%''s16mŋP&MV;$)))$'' ݍ5ΎEV۷ /skU(|OaXI*Qs!BT$j0(h-de݀1d2sp9}0 PJA)>Q50~ s- C&(ǂ#t:ap8<E,q\PUC_ă @$ J)4M8 IӖ8U[Ukve|>,P%aG`?y,˰, ^En{n/aΠmy/"EO9lж{rQo0CNjCFQo9+#Cyj;yC7U](IENDB`pychess-0.12beta3/pieces/ttf-Mark.png0000644000175000017470000002407512176710402016542 0ustar tamasusersPNG  IHDRMbKGD IDATxwXTǿgT(Ůr 芢%^=!*qMT(&bCр,  k4i ?r@y|99ݙ33/p !_sPGѡP@MM 444TVjVa۶mhhh!(jHpBcc#\]]VZt(ZAӱqF!==lذJO ())@ ŋEײxE+`oo'''"((K,%ѳgO(\?5RNNN Fa̙J 袂C]]׋ Ҷhϟ? lɁ@ @~~>lmmQYYzܐZRRC-h4^l_zFʕ+ѣGV_$F<==abbN p֭?y<^ӧgn"&]8ypQX,̜9S.m|>oc{6ݻw޻w؀o)M^^^:::>7n\1{0ӓ@ll+V)=f>nܸbGGG^^^ȔEMM 6n܈h؄ȑ#سgLr=\CCm]ޖl޼*++S zxxz^dd7nq… 믋|}}RwAhllihkk+.7vV8N͛G<)** hjj&n:}}b]v_ZFFFz\\\vzj?~=yhL&233qRYYh^7ozOTBvQ0k,w_xŋs??~xz?Ν;+Nuuu!!!.yyyسg@}VJp*lk߾}CCC^záeddHfdd p85kx>}zXK"((G%5[nÇ&}Фb8g޽؈g}ꢢ""/_>w~q;vl"mc2ţG).pxz~ls\;w6m*A ]]6)# #_ihh(4Dqoo̙#փ\;BӫTYA jhhuTcСbQkGt;5ק2@ %KT0 ]o߾{\;BDl+U|^|rU5 爛r{3g̙3w3HNRU}L&3]A?Doehjjy F:2y+IVR)_[@ C!:sk*RbtύCGѡPP(Qt((:Jp*J=A Belݺ_ ˕x{F[[/_T8j^6lXӶm&$%%K R L&.]իW4ϙ3JN>=hSff槞(//'qe6*++Q^^ׯ_CGGĝ555ĉB!|9s111믥(\.~W\JJJܾ}[ŴwOԷ`tOaihhJ ͛V/Ռjzaa!M#$annG}dDEEh>d>ĥK4|g5j܍N0L/'w!<<裏T&:.8ydetttpww/XpCIEff&LLLsNp1l޼ϟGAAămmmPr/_NرcUrÇA)))2dp56t}zAPPпdGJpjjj8~8_\FX,QǏ+s_Uz Ƞ;w.^V}{bL6MS3fIJmtj{yzz(,,J'Y"o>|R+ !!!lH Nu6BX^\-JFF `XU{ݲ$zRΖ/si6fyyyK-1ch;`HRY&Le˰l2 :iii8{,Ν;k׮ϯMbufj]__?~ɼWݽ{W)t& ]] lH `jjL{`ff֪ Axvvv2e ÇGvv6 ѷo_dR9`8' s]ҥKl>ʅ }j!+yDWG[[[jo$֣GDNKvv9dɒ3>>>Z?c䙠bڵ9&L+˖T˅dW%! ML6GӦMëWێ%%%ppp@EEظBjjjÇ7DFF8x ;66VC ====a2 jz U*ŋ_e\{'++ Ϟ=C=p=\r&MZe\PPпBBB/_B_^^l2'yR_Io߾)k[Y^&ٿ!e(ѣG=7oSɪÇGs\/)544(--͛j7|r8::F0g]rRvÆ C=4f 4T9U.$$d [VVׯ_ϖfCJpbA`߾}!AAAN*WٮIѿV?O8T92i"ev=77W'544H/^u ]eO;~p$..\$߿/**J3ɓ'uss˔f#כ|||@!>==WAغuʝ ;+={$eG0+@ VVVXh,;_GIͩd2QUU'O`Ĉ?~ >===\ yzj灬s?>3蠪 &UN___agրe˖-SBo~N콬esL2VVV˓Zz)dvvvsTAPWWWXp[TؒwL``%KKt%4 ,K)?~"_3fH+RWW===R/^ fX,R{9#BCC(.8KKKJ6Dg:prrBhܙ&epP/ݎ1N:5xѢE=N nƌPu Ɩt Ço 4Hu 8PLp;R[[1c?PYJ-WWW+_FZ VpsܹsۧEb"8;;Ee566A%M8i ;o޼T nnnrg`6 %8E aw$Y?3snTGѡPP(Qt((:Jp{\BBBƣ蜼7ٳ-[&$$tSP%$$1BƍDYYfffxҡ*({˗/*((u clꢺ/_mG͎l6Ǐ˗rJP*\BBZ]]E#rssM4f̘!1c֭[H8pqʁ&>}m۶A nnn8|0-[P%Ԅ2TUUZZZӃA .!!A񙙙#[VUUѫJٳgX?{]]]|G|xrLLǏɓ'>F`/8<cccU5K \~]:^*WDSx z)%UUUBPP457444pe_SLAZZ/np1Ӣg@ ]T#p̃򤐧C8b۷/ꐒ:w +Ў=!0rH={ irqFQڒlDZP[[)27UUUOŋL[=܅ 6z 8~8BCCЀGS4A`СJ777GBBLLLf6 D\\;Hv;v=z*/;;DM<<oHdd×.]d8tP`ԩy&P__'NZq-0L靐WQk!æM ;;;ȑ#tRlܸc6rHL<C-EEEd4L6>9I}ϭ[LLLĄ mwۄ -Ⱦz 6l|8jjjHꪨz HErm88p z޼y"h4ݪ֭['N //k֬۵kד 6{*ICO>Xd z쉡C-7uT+CV d!eΞ=òe| @|rL0AG{޽{ѣGc :'O~M -I ߫W/QҲDb 2@s$ry*l*RCjll׮]CTTH%VVVppp,p eŻ}( Tvv̤B }Un'NT;ܑ#GIIIbg kjjhd7nYVp+OaI;#...@%Gz ! ӧEYi䥬 \.Ǵi ϲd֚XRPܒYh4,Y"W&.pB888(԰&=ǡCлwoZK0ew i/J){yt:+W9eEtܹ\\\۷UqKJKKE/CŎ;;;;QB-8Yy/_xbرR|~T8>es0Yde Up7oF `ԩJjE󳲲zÑ gg_S8uT;}}}x< 3_NyZXIRt)iii>}OyL2!99Y3DXn}!Qpqqq|{cx<)\qSSf͚F+>9udvv6>SGCjeeCi_| @jɊ3n8@3Æ +Yy$Bt$F{R(..Ƹq㐔tiє\{…vMnsF:\\\h"U4@sNUe\L̜93g|͐,~+TWWKuhFs%8!֩Y?7#z8EB CQ,--A۸QPD%UL&+V@CCL&6m$68!R=@ %jjj_o߾E^nLMM_"33SvuCw-?|okw9u-΁Rj2dF_~%~~~W EE)O>WD{쉊 899 SPQ,U  ''(++y8rIIIƍf:Ommmd Չ!kKjkkUG)bccEaXyNt}rܹ0g;&ذaC+h4l۶MlFooo9Xw}ƎNcӦM >>>]C*Nǒ%K CCC̙3K.ŤIPVV???x{{Fx58zkcÚ5krH߽{wHXX>>}Z~L k֬qttlpuu8z*Yenܸ@^zfff-u|>X,f͚ |MMMESS,Zrz7@W@NYYY"P6mJKKq}#J:ujʕ+y<۷_x:oٲe<رc\ iCyk֬qhqsHHu77LIaXXƍ .`b>mPPLӧM$=IDATrqML0K p,$غu+PQ\ пUSsժUC Uxɒ%\.Wgr<<<^+WLijj"\\LÙ狶O?᧟~jc`Сk"-J0嚜| ?K"22>#""#""t555A駟-^ؒfwc= n:\111{-LLLDy*++g|8~8h4R%lv… G |>!Μ9St=O9[޽F;x`8x amm-puu)8cҥ8qbΝ|2P__B䠤MMMڵkabb<|w`ll>EZ*r p coooQhTOشi:E͛7XXX >>۷oz@777Ɨ#UpVVV8tߏFL>)))̄7>c=Aӧ͛}ٳg JJJrJdgg+amРA(466A__w~?.K7snr?Ovijj8dff"55|믿P(8[[[|xqy^0 A ALLL d`M...{n=hjj޽{<|~~>`ݻwМgРAعs'>Ka2+8KKKlڴ eee۷/h4SMMM$&&"))I(aƌB^^8 :.1؞pߗx)}v?̄R,XR/\gϞ*eWWW?SN … N8111Q-** رcnܸ[naҤI=j( 8>'|h^?ǿussSFprrrRI6PWMgcc#n.l6_},,=/:"""`ffYfI-;g 88X4t钰KUU222Z-@mw =ѦF51bUT,ׯǑ#GPXXcccU&[G, 2ølGS {kkk0a(QFɴ+FpW\<ܵ7VVV;v,nܸtU8`Cmm(4~a4Opz(WC$FsFۮL!`4w0Olt-a٥|<|Pvp0O-)~RdBy݈0`@ 6(奅;QVuyyysȦySS 23BeĤ{'zϴ ;.^ohh@bb"ŇpCC SѤۑ6sqqмp޽v}xHH*++`0N0!DOO/P*)FpL&x-<<<:gϞ\]]]Pഴ eR(AeR⫯|*}۷otR|3f JJJK]]Ptz#vk_}:hDGG |}}Gp=555Vp%cƌ`0V#ၥD_SSSxyyaϞ=`MMM+=h@s:IΊDy[YѹPMG>1;̙3sUUSd%c<Ӡ Q'l6@n 3Pf(:NŜ8gIENDB`pychess-0.12beta3/pieces/ttf-Adventurer.png0000644000175000017470000003665012176710402017771 0ustar tamasusersPNG  IHDRMbKGD IDATxy83d 5e'J]E$hFSNSDR)Rlɖ}ߗ75mfꔼky?3}g!1?vpqq!ׂgcY3݈^꿥`kkKAff&ZVV˗/^+++Ҳ~7޽_v\FFse~p)--.,,....//2JTTT`ܹu܌Ǐ3USn{ߺ \\\pwwoߎ]va߾}a9_,YHH,''G/e3g`Ϟ=ضm'''x{{3]wd,ܴi e/++ƍX=o>8z(K7=@`GMs- Cggg2e XRoP8%%%5vX.]544k֮] 777l߾gƎ; Cbbbh" zjL?ڼ|ҋ@ `+GKy6i$wޝ]fv~OrssakkpdE/NEEθw"00qqq,5k 7n4Jsz"w¸qp "33044ڵk[j#F 22%%% @~~> <. 6 SL9""":/DjeX;=uuus:>111 //ӧ#,, ̓7ۇ"33GGGA~~>ڊM6Ԑ3g@ ޘ7o`jj N IHHXxWV$%%rJ2e1y斎VWW@MMAg-@ۂhժU4Y>>>U>>>UMGG˗/Ǻu됔www  ţG@VVpss.???HJJ=z4\\\P<|s΅:ݑ5kzzz4!fʕףVVVPǎ#~F@@iӦ]ٳgͻݱiӦݬX`A}`xx8`ܸqۤ'''XZZgΜΝ;QQQvvv\֯_X[[Ç8uuٲe3g] ڵkq@PP#G͛7z8~ؤ7,066NŽ222x 33Ӟ۷olʥϟ?W\=***8s P^^0ׯhiiDD" Ahh(gϢ.//իq"99ZZZzH#99Yc߿qqqlpwsѣ%%%t| FFF۷oc8pq!HKK# =zx;IIIt=~8TTT --M9p,kt@@@)777>|C%w,爊KJ^xTj˗~ؾ$UVm777JO:KOj 4ץ>}: ̛7śLMMabb| 55δ4???jjjl2K_5/ڊgRW߾} X| 7(ϼdpppSܢ޽{Xt),,,]JHH 33---ѡWJyy9,,,ݻwS{;!22{4,Xn@cc#H?p,&[ȸk.WVPՙ^xO<O@xxxT@@a广D"ַ?@YYݻgggv+FFmۆ۷CZZ晬,lق͛7#;;zxyyo>ܾ}g B L6 Nhii޽{Ǿx⥗ɓl/^xgV@NN\pvϞ=y1 w'ODD,--zjprr"<<"uٳHMMƍioܸ tRKKKٳg၃K}>p,ʊjKKKIfYp7ntGcb7ntzWWWEggֵkrYlYYo;w.Fc"''>>VXcǎukX)3p,F[[[oȐ!Zڵ2+^¾}CGGB#077%c@RRw]FL>0m4444߿w`SLnPe1JJJ7n$8qfdgg 0dНSHHH/_:$+))eV"HHH`Æ ûwp̞=n7n܀ BCCeΝCAAcprrS7ĉCŚ5k0avL 刌DHHaܸqǎAUUv½{'O~zmsuYLMM1k,hhh t+qFυ`,CXX8̙2!&&RRRLΞiM:f֭[sN:x"rss`aa;wĉ2dfΜI33qssSL!//aaa w;,@rr2"##)B~6e6CCCA__G **J`Æ hEbbbkBYYI e`/9;;}]eH$ <ȑ#1e888`߾} ~p?ů;ZZZԀtttQ°aڣ#$$ ~ݟw/SDGGS#hjju/p?c؆}v顲O|~9\{[ǍB26.Xo޼@ ((555TTT899! V$&&xyWm 7k(//˗/{;b7gx=)1~Ņ< CPQQQ :e ,~R ၌ CUU`7g%=<ݻSN޽{>|8+-7n>};w_|;+ ϟ?wmW LpÆ ҥK%%%•+WlRRR055zj`Сرc[{uuu9Nzlɓ' ^2}AjprrBvv6JKK 9r6dڢ Hعs'|}}xbH$""¹ yETJJ VZśΪv ~~~m5z @>LMM1c 899}HMXX߇_"444@ iþ}i&HJJ"77G1xcǎضmFā^;99ɼッyyÌjooWBJJ RRRtէqE||<(1I+ **@ddd8i͛ƩSd7oޤpwwǐ!Cp!ڨMUU[['N6̯:;6d9 ;;;ջ'}}}?̷L d2ׯ_-vڅ]vhF8z(f̘+{B^^/@XX""" ̙3Q\M .$mg"##Hyy9[[[<|PPPgxlmm"SJJ>U>}:CyY8qBCZZCwV8III\d2ݑgϞL[޿O'Oct(**4+NG߿Xb,-->'XinnF^^zR6 sss<}g@ `ѢEػw/.^ثwÔGUwxh񐓓óg0l0<{ AAA]C$1hРNVO$%%յuҥk Ë+VL~^~ qqq>}Q7nO߫b„ E<2M6!;;2 Ж/޽{ 'Nv,**"믿`ggG7DmJJ ueRӧݖ͛;ȿ3˗/;f2ÇGtt4M0?vvvZem^x h jkkW[[_#F@ii)3f@\\^^^̄abbw:fbH&M "((YYYT嫭ŗ/_ѣG#-- ƌ4/ "uN:R3%XRRR̙3Xϟ5]RSS)sƍР?77$ ~:Æ ̙3QPP . :˗hK1S(˗/g܍͵ ?N5244˗/֮]Kii ---zL>}ˣJOOO0|@&QWWÇc͚5H1m4\|=F?~<ݻF*D///1~x> 8;;;W<~ ˗ ڿ? (7|p455رcI$E@NXX555pssÇyf9shiiAqq1ammwDPP222 ۶mCee%JKKQUU-[f͂$M"fرcG e^&(((Z NjhZrΝ>CD9tЯITUUqTUU͛7>ݓ0'OBUUO_?0vX"""ΰ:ݻՅ,5Tee%쌈Je?~ȿJX[[Νk]|9^lffjue7tz񫤤ܹs;wnYlƌ%K`Æ gO1XwCVUU={F53glmmrU8 &|ե?w\"XvGE}}=v}ի4ezpشi޽e~>|8?~ٳg޾\۳/޽{HHHӧsժUqqqSAՑ+lll±c ___HHHЍ Wp[l 6x5wddd`iiO?&XYY'$$taÆANN枞.]s}}}9{҂7o`͚5`gg9󑓓t}RCDEEpttDLL \.-g̘o?ĩS/]T]={vB\\9s@ >|ҥKDa}ܟ¾}>;}t;{Cڵk׮]7MQQQ|S2 z",, RRRYfM2SRwU  cĉx9^|e˖!11wѣ!$$aɒ%=W ++ {{{P'd455a ppp`ʩW ?ye`aaѣn~~~2e tttZJKK!)) }}}?3f uӦMÇqy 6 cǎūW8T[>eeej:vvvAKK vIWzp<-..޽{1|,\=F*D"֭[uq/_2 +`nn??677͛d42JJJ[[[I^Ξ=72{G{plݺQQQF#FtLMطo]WW]Wxm~(((4+accϟhppp@ <@qq1 ++p=*܉' 46mŋ<HNN5i_kkk(((@UUUCC#a鐜pae42 !!6mzhn۟pt"""=>jjjhmmÇiN 'O$46FLLLcqqq\|We+**`ooOtpϟ?_b-ZԧJd20uT˗/bZ[[CHH7oOLLdQUU۷oyw^my _t'rƦp[- ۷. ;w 022¦Mj*&¤I !!AVSSgɻDbW;p`֬5Jn ") #?op޽[bŊxڳfjr\v 7nرcannb͚5RYK.u***HLL^WTT 88$11$U]񆷷o߾!$$gϞD+|}}o" f’%KԄHHH`022Byy9N>MS%ĺ˗/f.ayԃf"ÇSL1|V5ˣw KI>>>m۶A\\qqq̟?Err25Ж#VVVCz1cư㚋 )))FSS,--̙3MMMXlҨa.]ڧ򢢢>}zۡQr*L<ܸuV\ .޽{q /_Έ!ČY-;vd2Ν;1h (**Ã#""Rb۷޽ Ξ=0:u ӧOGll,P\)ooKNN{UVQQG#hH$^~=BBB`deeaرFHHȡ+FNoN?{BS>|8pԩ剉SK3@\\?0Ȁ@ @VVO>Ǫ C &&LcǎAII PPPϟIII_ A3344t닺:\|!!!ҥK!)) WWW ~uѢE3|+''G93 wz!6l؀ӧ#** 6l@!CǠmY)==v^Ғ!sNcǎaPWWDŽ n:ɓo:*˗//]tڵk4hjjjtNNN ,1cCjR<|077Gkk+~0vލ^)g NZ;;;￿y χ_rG'Om/'&&rrrjaIjqʡLJzU 8{, … صk:?Q*Y{{pǏ _0Kcc# 3uu^ccc;wL޽ZZZHH`O |:{ w޽ #SuxifOPPnLnUۯӧO{.=LVQQQ'M@UPb|<{{raCCC}6+޾}c^)ܓ'OZv'''\]]6YHUUALm |Rk0*6$D.998M؈XmG+lr+3BOoBCP~(9@hzY7@7e@06ݻTܹsi򨭭Dɬユ&eKFFi .^NNNM~&R aҤIXj3gβC_t<{KPPhKLJB2~Xj ӉAs̘16m‘#G ;٬_ ,,N=(Ϳ333;+ôYXX k֬/ӧOᏦlA[[($$TȽ@MM S).=~EV82+WvZ߬ižzzzS%Ϣ~4Ld2O͛7|rܽ{O17ၹ9xxxPVVe)V]o?{+W ../^ `ggmmmV4SNMnllÇ8GsAGGz87nH.&&:::(**%޾})1cƌCz(޸quOOO4xnnnÇH$f̘u, `3H$ܾ}ٲ(ŋLP{31UUUA\\$$$V 8kkk냟s甐yyy4uҥKqAvw|}}[ZKKKWTッ͛Caǎ055BBBW^ŋٳgwJɉ9s ((χ'^~t@\\fffXj`ee7vsѢEi8`urcc#&NlH$1}؈Go\¢Eg@NKK )))~:pa\tO^^ɓ9FԄ/_@OOo޼M=&M… zjhhh`ǎPVV6^xѩ7oÆ AXXjrr|sC@jj*,--٭[ӧO t[\t r00ձsN([{aÆۨy^UU Q\V !))heq!lذD"4 =ʀ!ǏT qF|%%%{(޿ߐܖ"2uLok Ujjj o"++ 6m!C͛ļy󐒒f| &&&(((@@@@F???jkk;yG);/^,VVVFZ999s;w!#塩 IIIdff:Sݺu&H).^X8v{" #???~??\utt`jjjĞ={TCAII  BRR|e"""W^Mttt$ ??񳩩I;v+WzA:u*_6ʕ+صkԤHk߾}wrssŅ͛7WZEf6} !!999vȑ#iӦi|;=*\ss3vZ<\|||4 (f䄂&L{P]] ///\v 򐗗12Zd2***jkkQWW TTT ==p5tʦvXE 7yd@ %;IIENDB`pychess-0.12beta3/pieces/Pirat.png0000644000175000017470000002155212176710402016131 0ustar tamasusersPNG  IHDRMbKGD IDATxy\Uǿ0 " !PԌ45' mq9mznkV{ooVVr*h" 9 IA4Rqe:csN|{b^y~dʕ X+W4@15}ݤ =+- YȵkضmhmZ xh=͂cBM5 .@ZeÁ@g6Z(j*8%$IOOW;v5޽KZZZY׮]qqq1fap111{뭷JdddV6b{1"""(++Syxx0c sM  R;e/LhٳgOcYYYuIZ_oYEEE~.((T(F?*ϩT*+!ܭZeR.` K.U;֭[8p !!!bt< >H$)d st L`1P$Bj~Umڵ.\ƍܸqÜ_635cl7fllEEEUUUַTk~EԮf޽AIIZ J8v n6fqKuvv-jdff۷ˋ>}н{wP(xzza6oLdd$LVVEEE8::ҳgO 5 0annn8q¤vxEUDPGrr[n!իx{{3h Ύspud2ӧOSc*J f„ |D"!88ɓ'7uaIHSSS)**")) bbbb6mDyy _~H$oNllηj&N6ĺֺ۷os)ah߾}lذA6 8z(cƌY@6mFkj Z\.7ŋS\\l9gϞe^fgpJfϞChtcGN5g8+q}\4Z ޗZmjwwz7gF@u6FRGj/j{(61._liӵkW5_15_X5Cp0???U2@"0rH[O]?8xkI666Ӻuk3 I 00hxSd" 6֭[3eMxǵn Ν;ڵ=JVVF" Wg-F:uĉD޽7nfcpl޼Y->A_ٺu+7o4ȸ +Qcƌ899ԎT*%$$p;;L^***נDEE1o $ Xvm>|l޼_~1&3y"qM D[ٳg9rJO2rH=B37n`Zb%//gy,NZP%???w.!!={0o<d&%%8So6Wo5tv͌T:u[HHE7n\$ ,DHf2NL᪪8|0o&V@ޫW/ܘ5kÆ SIxTrrrظq*@_H$>~znPP/hn[[[)Zd}Q-[許΁t9d(µkvIHH駟G0L28;;;Ȳe8xS/LΝر)]4Y ۶mEPPݻ@ׇ^![7qĶ;w6-LYYoGGGrssbɦ6d9wW^rK/aݼyi:O_Z1-Ɔ{777<== Ti>}Z6322D ;"gX(e.%%ڵ+}ȑ#L0AӘ믿Vsn׮@Bͫ7Ak=)"%`XWUUǙZ$̚5G}TuŅ?gNp^#Sg4K̚fpgϞŋ뾜L8rۛϵL]v ٚ 6JN89s޽{rggg>#%hر#:t0K}@o~2@F\RR,YDc'ҩS';fl7MU/..5kڦMz?∰ /FHՀs'+09qӪXʕ+pBqvYvҥKЮ HxgT&08 (2zʌ}zz:zy1ҏ5Ep4zZJ?BCC;wnJBƍ`ҤIM,֘`٬^j:/??\F%f`]:\Y>SfND"cǎrRiaTTTbM W_uΙ3gXt Ҁ2LG06A{'C^ށmpW\aϞ=,_:#F`ԨQxxx[W\ih׻oJۼn>QM-(w?#&L/zC ?ݝ=zӝqy6-aG;g`9:7 4|}}YzN瓒?ȼy,!ٷo8; FR[(++jzA׮ww=JiƐ5z6RNxT%B`ǎTWWsNtccc_|AZZ*Ӌ6wK8s }WLIIԩSuedd`ooOHHHRN>י:ux\"'O$##:DmjՊ͛7SUUŎ;, kTʩSuݻwٴiv[[[1bj8--odupjƕ4d2^}UFapG>>>\EQRRҐfÃYn} DƏz>|8 ?3eeeٳ3g#GNN 4\?]|ڨΝ;R3a̘1p-Tǝ=z4O|>'NJIaT'ÇG'$$]#%%e5"Ií[شir{yp)ΝKll, h1W*cg8 tРAǟzꩉ ?O,,,g[[Y(n(999[֭[sĉzݨ<==ٺu+/2&..JBBwVnj*c n,ئMOCEPPP7iҤD`uI#ՁRK.9rDkаǟgػw9֤PB/½{ƿ#kp{;XS;;;7IIIeoo?#$E)MV+qjvvv|̚5˒e*M  nذ&%䤶jժ/pN)MߦM~z<;OAAq[[[+BCC-!M$PBІ)1e;wﯷvS{cg XׅR-[ХKppp`ڵMe*M |0n֭Y!zԥKK$1&իWY|J4܈D.~1֤ u<;wlr*C mf0 Ș?\fM zJɓxxx`So߾,YK.CIp*%RTT\`ʚ5kdK/? n:R~ƌu-[FPPkڵ LND"ِB~~w\Α#GLnא"gg;!!!J:tHҡCG! !CeffPx݅r}}}iӦMᔩjjr*}g/"I*x-hʔ)05uw֯_͛7U_  |J%NW(([[[<<<<[")))&^hkk[>}P]]}}ڴi)G\>s|kyPJ=<+qqqMTtuuU;ng-obT05> ,X|QTUߡ\ݫoSjBʕ+|_~ K,,HkC)Mf5"SEP%MPBЅ)t#^;dgg篡NՆ 3g"## f*I}8y$Hi%#''wը\:v쨖4ʕ+} %>jԨ^zIm:Ab]_ڷoϼyXz5QQQtY󊋋sG&0ШzTIIIy[&66nݺ Ae׿n} "~Hx7_GbG箣]5jfMUJSo9G2f̘; e*4kWW MI0|Os@$;tV%J㤢]v4HCUU"b-4/agΜ1:H/ugg/^akk0Vv(S!o>R!s%GZjA=d>R#o2(S!}\.'&&T .ԩمQ1gMXQL`hYY]t:jԨ=P[!I_V2)_Y`0-)(**"(({˗/'***(**? 0eJ||Ǎ S0o`bϯ !{!FIKKO>!::DBaa!RӧP(Xd 2RQQAhh(ƍjp@)**J0\6"HKAc?l>axzzy }޽;YYY";v/ o%%%$''EQQ*XyȐ!Z$ |gѯQ /m۶fqB ..d|}}y)))d2zꅇG(lDΝ#>>J ?YYY;v LMҋm L0C1x`֭[gɓ'Jʜ9sXj2 rT O?,d4۷9u}fG:88F^ݻd2B ::*>~:[n޽=;O>$NNNl߾Mee% Æ kVN .11M޽{eƌCTTC%++ L̙3yw4WtЁ{=ڤMGxxeJ,X`R^ƈ9gƌ:?AAA̟?͛7SXXΝ;quuH@3߿wDӲeT9KVXˀ2½EhIhdjDN eŔ(gt͢VgmjMQbz쩷2ו&j+ 3\Y~=:R Ыj;tb2dyQ=xK#5ߗʔ+[QCݛ$fΜO?DV%@c',ȏqjmm6ڮK({j Cش4epVlll'""3ga[}^nʛoI``R w)-!!QjiѺԺukٰaseڵNz͝F.i&,X@޽9r Cq+IDATWd׭[gΜ9mhƍ#l(][pUUU7tn{{{ۙ:u*[l\B9tPseJRC6h~iB`lwu`lܸ_>Ƞoaٲe̝;:>7Çg߾}xyyi܊ SVUUEee% 7H벳MAUTTɰaXb^{/t IT UnO6 JKKn+qɒ%:)Y~}G\.'::WWW{iHRVZŅ dM:Q.˗/K.zׯ/4+=zӦMo֮8nݺEbbI#ZjŶm dΝHb1U#ٳS'/1Knnn޲&<o,FINNޙ … gi 28[[[xW ѕ@]Μ9:k8pMW7F A@u #,,>Y(ZJ]sjIENDB`pychess-0.12beta3/pieces/celtic/0000755000175000017470000000000012176727272015617 5ustar tamasuserspychess-0.12beta3/pieces/celtic/license.txt0000644000175000017470000000006112161415524017763 0ustar tamasusershttp://poisson.phc.unipi.it/~monge/chess_art.php pychess-0.12beta3/pieces/celtic/celtic.svg0000644000175000017470000024105512161415524017576 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freak/0000755000175000017470000000000012176727272015444 5ustar tamasuserspychess-0.12beta3/pieces/freak/freak.svg0000644000175000017470000072475212161415524017262 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Alpha.png0000644000175000017470000003256712176710402016107 0ustar tamasusersPNG  IHDRMbKGD IDATxy\Uǿ3 JF[>j*iifԛ[K" ""*>0,30Ì S39>3\s}ι%ZhZjyE,ZH;cTM;P?ZE-6k zjBCC֦Z",/>(lkHY/sIII!!!x [[[ڮEbbbx $ yyyŕްaCLLLJƖ^~}U$@ LEv%@ف@P*HN8Qڵk\vA ...__2Ϝ9{{{ؾ}{SNɉt'L@˖-U^@l^06[)}v<5jO|<&NHV4n#"";wbbbqqqѶN!ScqP* a+d2}@H 8f{iٷo={̚5\z͛_ 6l֖h233Ar>#1c.]‚72p@ðaãD_)qqq̌m۶1k,ZhqHv{G&M*sF06%Jv[a ]0ŪUU-]}(Õ+W7o={d޽|G%1p@Xp!W^eܹ?~cApss?O>eРA<}L&NȯʨQYv-{Ĥ\08Ba?~SD(bb,UF(d.*N׏*FEEQXXرcIOOO?UyXfΜɟqwwˬ]grN,H$qőM5t5] ہseR{v^ *hܸ1bgҠA/wooo$ &L )) &`dd֭[+;rHlmm ́1}˖-g$&&JVGioOW۷/wUylffҥK6l`Eѹ>|Ç#P(5Jk58B˗G&an ä$6oތݻwpW^Dk֬ Y|yիW֮]{xomܹw͚5(wڵk7|6rHWKIIΎ͛7`""^Ɋb֮]ˈ#nݺL6IUVL:d[mW 8qL&ĉ$$$9s^zu믿, Ë]3ܸqcFFuȳg:RD"Q}䮮ڵ+}᫯*tZXX|UHLLdٲe|%Ȉӯ_?:vHRRFRW%.@֭[4nܸL&kSbhhhf͚ѣƍݺu_ Mfzl߾=aoOkPu$%%QXXȔ)S*+?ڵkҥK :u*3g\cSgϪC=7n>lذ&Æ )5:/TJzz:nnnٓ?,FJ ef#z08S`SpBB NNN\ti+99BX,K,P(HJJaiS6ϟ{zQvҀRE6mۭ7|p RqJ ?+*bmڵ*HS4vH8H 14|=jJzRkpRDUYV)rTmѢEWJJԚ@bb""%%z1bnU7!슼˥v{MKll,[‼ QaOq k"==BZZK?A"7d&tכd2rss.TS(YNrݳ_f^H5)Bg4D&ahhHVxwJcR###&M֭[JH$&MT1ė[AI{jt!;;Ç/qqqT3R)~~~/J!  H%$,t2CѠAܹCi޼9#GѣGqa]~20<`ƍ%ܽ_1݀k F=/VT222x[i___^ZuBPpIG^jvӧuI Ás@&&&jvj׮]ȢE.gaޤ\a5kjԅMP(S)((? ((BCR(E7@ C111VTU iu֭ ccco<Ri35R XW)),,dϞ=ܽ{WzݻetQj[tԩBܺuk+V -֢^ +++~2 +WښzU5S-… quU}]_F&!V,}N:Oynvvvs~ TD" bժU,]HI&h"~gjM\\\Μ9sTJ[) W"Z‡rTPB}R|]^yVXZZRdXbH,--^m T9%:88ҧO÷~[&Sr@@>3D"p7ZN]vp6EP ÇlڴiӦs΢Jb;w2m46mT&lM&''G3gϦ_?!_~̞=ggg޽“+SNǍw'-cŋBOOti>*V\Ž;X~=}iS$߳fvQaJBB۷o3rH|||aȑj% Rdɒ;˗/*B)lG GʑmZm) Μ9ùsx7## R:::r1233y뭷Qty~dggD׮B 8mOr( 4h$<]hGRz)O_NlllQy摜1m۾pV&WFFF4i҄X_N.%eY H$xYBLLL{`5uҥl۶I&68,--iѢ-cǎUG˖-t< E8&o]ILb\.W bba@Ic{8ST$efffUi[6BܹS]###f̘/€ӪH$bȑƲx"+YX X[[3b}eӪ/\BamrnB6Ty7?oߦcǎMА|bbbزe e7߿JL `~םcF}jj-9-m 젟:uI&͢ܤI&OiѢڤ222᧟~bʔ)/$33Sթ&4C򨔧i!@ZZҞPsrKݺuYjUeWX?c„ ΁P &&]lc!&&.zBMRiT48'nZ\AA{!..3g`iiYny O~?3fLU ye5;rKKK &22޽{׆|1Z[ .99{K``e9s|||3f ޶Fȑ#\vuӈVZ1tW5/ҙBcHD** ؾ};5jŋ5j+'OVSHNN*G>}ʣGJ@|||WҒf͚8`ڶm[*HjWPPݻquueZٳ9ݻw3k֬צ2P(sEb1d%=|\.XL^߿.&z;~N8\l(-]wƍuEկ__g(K… i s#r9.]UR4ХrqV4H4766iӦӧļH$Ã֭[sy>|XVDs:yׯ_oX}2zذa[lQljj7222B$Ih Jik.&O;ӧo X⊥*uƆ-Z(Wf6lp䣏> ޖrb! H6nȑ%8s /!8n82225kEzTtMPW$>hР[ō24h0b+)Ji>ɓ'~ΝKxxxkӦMcΜ9(S! :B(&=N8{4YYYSX޽[WĺȂ J|] kז0,H… iذ5TG*u ּyKlĺ˫L$H=zܣuMPJ/X̦dbb"se߾}ٳs璜\sՇ4}F Aݔs*uWԩSI&(,,Ѷ ɪm===ZuMPJӫhܸ1'Odܹ|ҥKSr>Ǐ#?~L||<ٳSSS,,,^4}D !9:Z@^fއɉ//]Ƶk4hЫ68ऱD"I̜ Tm\#J#-cHVVV/N9$ yyyŕްaCLLLJ*Cׯ_Fճ:5j1])$&&Ij|0w2:D\.gjA~J@@ng ?ɓ'ӧOo/J2bĈ##g>jժ*'s`g}vh#BCCUI8ֶE``)+VD0HxG$1b5kƁ8w ,jJ,YTƎ[aJu{RNN˗/gݺuL2  ؘ|:v숥%y~׬Zy-fٳccA___J R;Gw> ???Ҳ ^*`ٳgw;\th~>_|'oҤIޣrssYYYuyޏ}x|!۶mDpCBA^^'OI&׫6IQQQN׮]]k۶mÇ=tPAzyZɩ3C jcjCa.:VXABBZC,}oΜ9fрƘTJxmcӧ#<L[iS*ݝYfi5NGAǏgɒ%;;;=Gl8rHWT|"|}5[nE TR޽{L8&M#aBPGV?~<k}$''gggW NX,_уׯ8#""@._LPP))) > ZjEڵ+ݻwiӦEHQQQ 8###FSR[wʕ+q~~~G5HNN65255-W^sݺuk`bbҚ?u.)*rrr*nokk[TIxyym6:uѣG~:?wΝ;ӺukNZB9G&͍7زe r;;;<==ر#G*E:uuASN:u꓈?wi6))-oYj`` 'OoڴɲeZb{{{SL ?~|seuL&C*dpdOO`mm]dtmڴޞӧaڵkWXRSSeeeɓ'ټy3+W///yK+AXaaa:333{6z3f̈pssk"]*d;7nxi&իWTzWJ]//JIҢv}V*(͛O<]t-XXX044lۭ[ݺu3gΜD%KUSك1|Aٰa;cǎ\5SRRDxzzMV%e~gΜɮ]ex >>>%"""};슛7o3g23 ˗/OرcGѹhedxxxн{j+rїz*+#Hi&-[k֬a%gϞ1o<]Q-0s2d[vvv)`ĉfysвo8S^^ctA5uTu26O:Ŕ)S+\RR޽ɺllļ~JLL ӧO/jiiɁصkӷǟ-477oWb zFGGkڴiG|!Zg/GwylffBx2:R瓞ΪUxw)X,3zhVXAZZZðѺu۶m %j۶m_Jy[ nڴiBN<{ XwD"%_%>åP(x`^mHJJBP`iS`[nX֭ image/svg+xml pychess-0.12beta3/pieces/magnetic/bq.svg0000644000175000017470000000743112161415524017257 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/bb.svg0000644000175000017470000000556512161415524017246 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/bn.svg0000644000175000017470000001572112161415524017255 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/bk.svg0000644000175000017470000001277412161415524017257 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/wp.svg0000644000175000017470000000716412161415524017306 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/wq.svg0000644000175000017470000001335112161415524017302 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/wn.svg0000644000175000017470000001611312161415524017276 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/br.svg0000644000175000017470000000601712161415524017257 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/wk.svg0000644000175000017470000001410212161415524017267 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/wb.svg0000644000175000017470000001022012161415524017253 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/magnetic/bp.svg0000644000175000017470000000122712161415524017253 0ustar tamasusers pychess-0.12beta3/pieces/skulls/0000755000175000017470000000000012176727272015671 5ustar tamasuserspychess-0.12beta3/pieces/skulls/skulls.svg0000644000175000017470000211227612161415524017726 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/ttf-Magnetic.png0000644000175000017470000003533112176710402017374 0ustar tamasusersPNG  IHDRMbKGD IDATx]y\tL)JE,ѲEn۲n䪈XPrFr3A*:T4Xǣy_Lyxxx_ z"d w|?RWWgiFEE:S*}-qM>C9Ą  lLa@LL NNN#F`…hkk#ʢB_p!BBBFff&Qg'Nh344BDDٳK.l'Xz5BCC6f^(]-33C !ޫҥKLm L2d$͛۶mZZZ,j޽݁[|6&^@U~gB***2҂ݻwCVVPPPTOPVȏi555Lehmm5' p)0旙b?_k^-pd+ѻwݻn#??NHHH s 9sׯeś*l;w;w7T*W ܇ **f)--ϟ?ʕ+Ӆ`kkjv1n8lڴ釈1GEE-looǜ9s=Q6055222RRREKK ߿ؽZ(  l̩S?555n„ ѡC~zeawmv[#G#3++뼩r}ddd\ѱk]`nnÃ|ڵ߆Gll,Offfx娫 &u>իk溛PWWMTTB@UUBBBfu+222Cpp0aggC[[Gac ==zzzHKK"""@n <6ٳgsgkkkt666۶mcinhhGNNί:thVEEs܌m6&ʕ+Զ 1@LL ,=n0zhÔ1T*nggweڞ>}ڣPSSӧO"p:::67-t:e޼yr:'ssso,g3N8r;5`ƌӧ8&ac 33666>}:vrֆoԸ6c+Cuu5_Q?ӳ~(1pahjj2޼y|…WUTx.rrr033CKKKN<^^^齂nNjƭ[^mi芆uU 4ݝbccOBBe?vv}nmm-N|ccEv" _p 555BŅÆ/&nJ4h6o}JRSSI_A'zi4CnmklHNNFz:!h![TT͙BTTx ={6wRQXXSR(**o޼ի =#Q(յ OQQթ2dHyGa鈎a{޲e n޼Iajjb Ä Hxx8s-,, jڴix+}FW1112|Cݻu˗c۶mHIIApp0v&MR$+DLL 1PM0.111r YE~=q_gDDDw ,,]v1F̖ڝqN^R ;v+++Kliq`ǎݺbݺuLeL7z^Wb0/k֬ab[ggg'''̝;`ڴiRu!^4 `bbBabblչ}3RgXZZbԩN2e ^-''=nܸ777l߾/n DGGD,MҧliiilYdÎ;f̘!ٵ\AA/^ ׯc֬Yv,,,0tPݻw(**BLL BCC,}bR|6222خ$bƌN @3gĸq@ӱn:444%+++B؀+YXX`ʔ)rέFb[/)) رc;w.ƍuuu7CPPJJJ II>!p***g[9st +vIjLMM oooMUUG;v'`F666ٳgA؈ŋh9SH+**2HnՕ0Ic)S`ff& WWWp-iOPWWGll,,--ҡֆ+OP(8vqHC`` ^K=Ν;̙#޵'s}}=n9a%^vV6 "T*QUIu"n'..Γ%t:$$$"pC }ӧO1? cVܒJJJx1Uŋ0 Fss3Gևž9,;@8uuuMgq0`jglٲ|50n:iNS8 Ak׮ŵkЀ"oø.THGBBk֬Ŧ :֯_v~e0|r;;;n9555ذa9·۷4޽{q={֭Β_HHH`Ѹ}6i}8UUUlܸ_(OI&L4ĐWWWcƍgr 0j(HHH%) 3FwR*++!%%E:W\+Wx~ mS\tiÇ3ۓ8wc9|6R-RSSM6}g899u]sGG‚M~%gr:'O-d߿? 400pICCFOO?t^ //n^+p %*>>N8hllUW-+z/(3Wp~o+W|R|赗EII n޼I|wȑt-?İaPVV |:*Ks~~>,۝u@ӱk.V1cF<˗SqR p"""Յ+ Ç,gΜjݸq7DTUUq!ח/+XAP1cuwwO_̽p̑#GZ :"""sڴiC [[DDȪ\OR |r:u xqY?g:aÆ!)) Æ ]:#55R }]G`|||Ng``8%''SH 4\-p71o<ׯ_Ǎ7HJEc7n0j_p.\FôiӰh"iyE|||ڂ F2<22k]肮ۿ2h4,8| \cc#gvEgƯ𤈏g$@SS˷pBL8xv$&&^622 (((@ii)jjjvΖkemmM>|8$%%tR---rnڴi óg̘1ߡ Dtƈ#0f1.88;$;dx,?~55ppp)^|9\P[[(ĎfZIb^:qƵo< \EE=)&&Q {ѕg [^^jjj1?ԩS ~|3֭[kkkgǿB-[۷mܹ:fdd555,/^455]LCW:2=~~~ZKwڅZZZXx7I[ZZB3fLk_~Xl? ΝʳEKRd0Dcƌ744$@;33s&%F!(((/111t""" )6TSSc##77xuK >>LTTgΜҥKY )((`ҥ?IyoΛ8qzgC|}}[׭['---x|w@nݺ3332333%yFEs'OΙ3G-22ȑ#G&n VX=#c!/ؾ}ݻwk×9#G3|:^^^>K=#ŷ'i_^sujkkB}ّզpvvի֯_e >\kٲe dm:ýkѣGCZZ&YZwww[D͛ISB20tP摐͸bҥ'O;s挑P-[ܹyyyc8z(ϡhHII@R#ݻwSLao:LB~TDJؕf'1v z>---X|ŋ4O%Ϟ=;ڵk3N>#NLj# Ʋl |=uv = \W5NTwv];}!#GܞâEtxz'zBnxMWPP^둑ѭC%7gkk 2o|*%%E$ݻqmAr#Fa+KxZt©ޞ!!!4xxxsϗVSS6!W{}BXDi3~7VVV SRRjI..==n۷o2deeAYY)ӗt횯999dLj'!!!V%$$F@P8ڛ8 ŋܹslwAOOK,"ĉ:r(,^m;'''uxÇG C~~>TTTKEEeee_,爩ig^u'LBBB Kmlll0@`mذ=\Ep)rBR Ԑ 8}:> NTTjtt4t: gn_lB˱ez1^JbEzz:Z[[ lHJJ iii&h4kg! 666 """`ccUV!99HHLLd mkkCRRcs$p111uBv(8p@7h'++Kxlڴ 111ӛkkkKwvvٳ͛7!|@YYYYY={6FTVV%%%8~8`cc/^oTz5y&  ܽ{$pMʊpMjkk6-[H#,, ??? ׮]C}}=-Zː!Coc``___ܿwAll,/^ dff")) PTTIJe7n8|09^΋'ܠGcƌ K,( ǏwqiXZZ;aNGRRS8N //ouVVVHNNԩSo>RFh4:tH֭àAyfWn߾}---ذajjjP[[?@ v+l 9r=’%KN>nmm QXXD\{Lƍ022BYY)&xxxtPˬIDAT),,V 9A[j\\\?CNN @vv6tuuK.ח3QWW+VP6mDϳGm?݋!C'&&2':SQQ7|}}ݻwhnnFCC˫/aY޼yc8m4i55528::\рZZZbx%^Zɯ$??222L(8wn߾7n0ߴi/cńRsعs'[/ X~=Ky@@ wԩĴ4[ٰ/055e O)Yꄄ 8p  8Yp))) :n޼3fؘP:99ANN3f@}}=rss:loNWRR:PTTda'<==qQ󈟟֮]K:֫Wx+莎N,+r eeeqm ,c֬Y ޽{z( ~G؀h7oddݾg 111Qnf$''w[3g1cƨw,^.\ƍ,YT*‚ )SpPEEEb?~< .!Ys{q 9)eĨ壘Ұn:+8;;#??Ν<|GXXhnnF~fDEvv6<<|S=ڱcGٳgq Bwիx1.^HjgRPQQRRR0i$P:V ϏEm7??Ϝ96k^~ yyy8pҥK~:rXZZ L-o@(++CCCCܹsQSS@nbۏqY ӧO9^Ns$pwܩ:u*^cQ!--Ͳuף~~~m߲cCLL 111PUU_YYh4> [xoGRqK,AE)---UWZZZKp/^,'++ qq+p‰[ZZxzJg&Ur q?F|%BNNurr#RWP(lٲ4  B[[Tb \ll[n +( S?@~PQQAJdeeѯ_?n_ Xf GmMyTGzjH>f̘sW $H۷8z(ϩ:{Ps͙#k9sRS 111qDQ ++m&Þնʑԏ=Z 7hZc2EDD~---xF!ũF>qD9p߹n޼ gΜTVVbŊlmٲEAPw$psZ'Qʕ+SyNQQQ㏏2ؿ>}zgFxwBBB.틐A^^% 'HFJFSS^WWwtƓ'ONzǏAP?TŚ믿ÇBP(߿? Ӗ'%iiil:~䑉_:?Xr~'sXJM>ÃuO ԩSȵ@VVV˗۳>3i4䈗K*ETGG /7 u#Oի'Olק}ܹ%K|X~=AP !!E1)/_wy"xx{{  6l{n555L_onJEee%|||eJEEG2㑟*Ok׮!%%HNNFTTO}~~>қ  '//SNbL>,z555>|8`ᨬDkkl> pvv&-bG!CᅦAXPP{J  j-p>sNx{{CXX>Ϝ9s߆ `cc˗/cΜ9PPP .\Dջ7od*cPk444 B!rJIIt:X~p!!!PUU&kwĉqqq[DŇ.ESS CTTqqqDKRRR,mPWWF6𬇳ƪU?mchh@A=>)+++XCKK x-wvv 45~mm-F3YYY?gTXX/^+WЄ+Nuu5It:oNrwwo# ;;駟p=s<`:4MMML0AݝlٲvюBˋ61660\n|%= >Tt1??i{۷oJdw~J0|-M}UUO~J.]ǏcԨQoΚ5 :::5jѣG)aaaHHH"-- *=GGG㧟~bs͝;ׯ_'i2njj+8}u]u Lcƌ!Sܼy\ p#*k֬Yx9̙ÖHMM jkkbbbJ1La+  7oF|| ؿ?pL6 w7ƍ`ذa022&  &_%."O˗/CCC@eif 1cӐazIJJUUU" |k77Çhwtb` p}hddd4Nyy9= 777H҂#F#**-T__LI{3zܽ{puu%zzzuהꈍ%N>ӧOC[[l a̙Bt___"x1 pcc#Ĉ 3 !X>>5^QQvE}'L8QFKKz,["?طoѝq4WVV0G{c*GZZNobѢEXl~w\B䚛Me$ycԩSx";@ܶ}?gOj3gl=nlXx\OO}W!y%}ٰN1!r]h4󨛚$$$tKP(; 2d x2 <%%%RSRR"6m‚ t% ]ׯ'쩝L}t:yN!.''Ws=Ǐ sB( Ə/Hc111Ȱ87p ===`V ƍaee%%%-Ass3*++qMcXW^-.e6/PQQ[Y0.6%ͷ4V^ɓ w]<~HHH`|n߿===]`2]]]:)tttrJڵ&$$ҥKغu+KѣG!,,+WĉVN ^*ttX$%%RGUV ,+wKK q1;v۷oaffD666HJJªUpqreT`*++֭[? image/svg+xml pychess-0.12beta3/pieces/Freak.png0000644000175000017470000006633212176710402016107 0ustar tamasusersPNG  IHDRMbKGD IDATxw\y}zw*ޅ!16ı_1q_w;v܍)ƔPMG ҪVmvgcV+ ,>ܹ33g?9<9^#{&2.B3MS~I[q#׻]pA` =2BF.34AJv9k /IqHh 2ad6SPZCgg'6""}GI[;n&lLɄ1,STO$IAϐD92qmSx g[Gޝ2%!)`a:YA#;3KBLȥWp8޽( hܻ] U$^zj*Kj2ʹ5 WtNo>?6n*,/k E9t SM}O9ihW}gJ4RA5"69UـC]tt%I|=MeKmgvUb6>zRb?`R!wo$\TIqTEt׳x1\ݜ>L̘\m4ԘGˡ#<~^Cu|7Yïȫ@>%á+Yz  ~Cw_j^,-h[PaPS&%*D:6#`>EEEĢ7S5i6܋Zpe!I)ף(mҘN/~D@D*JBvhϣ04aWp;g*2br2k329W=/70N Y  SšAD#X}Hy10@STƊ<@i.(v[pMMMر˗SXXH"?`YKD)5L|A^؃?綻!kÄ/_ƕnӋL5Lo3u?wЯjBǾ-|W)t2%:z< ۅKi[#gh:6)s bGl:Co%}Zp'Nu֑dy".K+() Ju9i{[zK5::0`=Z]᧠*SWrMְ=;իdo"oO'm݋rb&q9Q 8~ݭ*C~XB44W§E;Q.)U8B;s:QFU]_iP<+Wdڵ ݎMfڴ锔dzm1!Q>~*,n{f2nJ8fo[OhLlml"J""2"""108ޝ3;*J@ 5Xģ̫MH':P|nP].7.M*TPG^J: ɏzV%RZ&FÛ8Q9\s! h"*Z4h!$I<¥~jqŃ|d2cނEjh Jd*++ eTL2A&2L),M6S.^qjl@ƅ>\}%AϕPQxv7qO_d:{IPe%r{T9f;z/ZEw+^5' QinL[9} qφ!b 7K.7v. *TϬ. b6=M^E6xYs ־c!BL6lrVr7``N ۅ ba LSM3e܄vf*%(eqբ;P# oz#] J#*>դuP/F<%s3sB)} 6 ܉<8â0TĒCѡcy9o+%U FrQ^b۶m a Dž$~7E!,f+ϒDn#3JmaosmITU%g煯)!P$!dIBe$IDE$YD$YBc]<Խ:7r<"o 7gٽ{7LWDx#LPB!w>Lq+#-?ƥHL!K&+j\:'ճ`8xEW6\8fܸqtw34ɚYRx*"+d-x@\xnPU\Tض+0c|n[5gT_;A@|sRB@ # (i !(%& )2Aډ~:p>u&]1 nҥ zl}Ãt,KȒMqHt 3k&c2m<Yr|v˄nmr)\. F PUAId2d),n`TkkO{mQ^rgNy7h>|XlAEQ(..fԌ7XNO&, "$!".%ל((HְPen`ZU6i\c} w!9:֓1H9fDnQU6->7#ZwoleWw;rI܌ OqKC~I$-H"̉eLq)H<. y^*-[YUDYpOUʲdG_P5oi>J\0Ttaߛ\wÇUA|gh}p#Ȃ΁nTdQ@idQĥ躉[SO/wXn1g?SO3ԻW4RR3(;ufOcƭN英>kSU: -4DAl`hSSX\~Z.AQ-ZĂ زy3۶nauk?~)߽x^O \n{8MSɤR$Hg 8,! NƶrtPX'>8HOq@BD۱&>Irl"k"؎`"ϭ{3INl#@` U`o?J@x:?eSqQUl)OqpG*%8>LK#?cT2A0'Ȋ::mo>L6h$qLDet]&7()&#(@IJY]9q顧>pi2,) { =T$um0{ʠ[`;  _ϸjM&$IDERU$f0$ϟ&D*L>BsVaRcH2A@]il48*I 'rGE~esߖ-IQ HL Dٷf^rT&~:Z \T 44Uf뾣tÛޠzb-ɛPSl`+MpX4)u&sQD x4jKC5`ZC)4v2or%9D d$s 2EK[px&L\WGoFH}cO#0~}ףk$-49ֱpF4@#3(V_0u;8~L*k5$”)hF6=@"ɛR,/3iK8fCyp744nd tFGElTY!w&iqfޮ&ɾ}ZشUI ( WE&Ww A{ S ׃#.҆fd(60S*#Vfؼ Y%شisDž(+lx)8dup aRcDX4wGq9#atG@"`-;8KQeaIˠnKiJS c6az|FAp0MGIe V-å* 02țGb,Xg*Ĝ@Q]Z n>7AυKYDp=7XzTԔ -ױuppf^Yɸya>Ѐx\n^ Džץh<Wc0q|g0hjʌ=nsHF7r#QY"I@q{z<v3g³Q y j&1$!I\Ĝrb z]?(#"mFD,ayAsK'[L">XFb1{B!^-%ADZmCI,VnH^l&IG!z;7`\.ZSY MP^0aq1q?N~$f_W@>^) )ǔ3{펏5:XBZT$/H ۃ*K889-UO.ti,8~8cTGz"َP%pAlqfMUtY}Yin܁툤),dBMa%;Fr .,pKt˫@spJsف4 NXeڸ=X5A`Ģ :1 x51e,D^vSF VYJ>Cw-XIE$n@WTɃn#m3tD%>.p Yqmh.7GbAjJ4N\IAq\mBO'>pȯɍt 5<)'~v8T1 iHoӰ>tEih#YjyKIZ1)C*/X]]WX>ҩ8f_Moq.\WˆF(P#eG,`.:L,H?̝;T.\.}D[SHtcÄ[ aZ |x6٥^3NZ(Iq5{khL(grU!!;hQ@7M~9Ѕ84,pD>L;7C&O[N60pbZ\ @oLq Oh'dvR+`Z`X6SH Ɔ8xu*cO288Z ~z׳gn?@P 8'2X.mM=Ǎ6ЛԸռ9Må*e>x" ?9NQ& cmfO0sQDQ? <ԍ˗s NUU͛ϼy'T* tVltY 8d \m[dYn7>H$BAAX(F4|_zхydQ%I̅+ ,TcdvjmX2_Ҙ:`b0׏Fp۶mL>q2hc( Fͨ((KqpiRa( m!+ա8K4b\@SX,aW^AaСx~s\p|L$իg_@aвIgޏv28a[r-_kϾēO>s労p:n)36G _Dc} _-ɒQYH$C{Nq͛G֦TOL[[;ƑTD[gnEEIATÒ0P ɏ5+BEE'N oq\ Sx,]9۱s9Y̮/{!ML"flk:m4l:o=bR^3ڙW2VR- .QD$DŅagleUQBTq/,fμb B>Zضi?fqG[nE/8%K~F.]9Qpbۼ5AꨇrrųDk-Nr:M۲>>1MkY4~(7eYi=cw  m&̥jl~dƬxhgߡ,y~R $cZrI@t,Aa+/.iTK/[BCCڻEXqғx\;6p /[‘#W z(Ed"EݍifN.9 Gu ?1sq~nYY4}d<C,n vVOM˹P4/)b6?f܋'XD8_@7ۏ`#1qb-y%UL0a&L8u=\Ăs\^kUTy744 mR1UT9L,4B:g\E?87_~=+烗a.q?!wOx<ƍxkhh_~LM,]n} w]]]<ijWǡ( .6mڎi 8-lذk{{w< 0|>C%Ix( fC1r="aGqm|Ҡ}5('I:`׭.RQ⼗uoNF^^g6>!,+tz6MtvvE I]k߽VAW"  p*Ka~E/Hp-#]8NXCsb@ ="t `1CCqt}u~XTqz\"=o `#z'e} t:}Jz.,I6{kn"Ԇ~b>|=nb?5@Q,]86ݴHT=*QW_E,A}G3.j˲~B6k#555Zu%~UH]_q KfF?1t}>kLf /o/O(rǥ*R.^P4exP % nL 5_MQ; /Kao[N IDATpeF,օ,)((k$ hkǙʁ[hnW/GU5ri@$l{:B 8XV9"g `Y&l>o䵓$'FSKv) Ç;@g(:ܗKc-m U ˒NK$W/W_=;@WW۫ fΜAmm"YOE]w1aܚd:h ņ0p4$HK T-rbӇ<{%g&~mL<+,i.M!1 s5z_qhln<)Ln d,;i=z'ҟ(@$(4%Bya(8Z M>E"+v,NNdráfrx&@ 1,Z$ AUe9kpAa]WY4@s33:w/H4zƅ%TU曯͙ujN3g&24pc\Lqk2( !&UR$#NE trjp"N BtIp447uH[i$"O2Su -#4y~0S;j߷ jjNX@fHi4-MyȊ,_^,G%4p2DK.hm|pǚ8tP`*?ϦMկDBfHDiP~6SZ0LSӟg9),N1_A0$ K1!EkY$q\h1$ &LQ+PY4DȞTb$~8Wcx)N."::9WHMjdrNB9#8ꢒ:~mIJ||s|n *G2&jh\y27?~(b[ ԍS<|ǷԃwkQR<{W6FS/yyn~+/IdHsTɴNS{?GIettӢ/U+V#?, kw AB:fNtyho5̑*K-,T o8.8}GgYxf^iә;{.oXC7(ke&Iey "SYRk;v^ 8T_J! i$KK91q,ι"$v&&O8[(C2ESk3LdGRuN e ;x,+e;6Rը1Rf~ӟҺ(vF4Y?|^~AJ(O>]| Mxni峷_k[}o#s_MQ~T"*G:(&YdۡvȳlMlF@D*"L) "vٵs;խLu'6ڕ>]t{Ӻy'lV[^ז"Y.g r$Ǯ:(s wVro+eTTjJk8p9## Se'}SgiLP/iq6MC&GO{$Q 㒩,;.%S+iw0I~ȇm;twwS:}vS[WZ:8B{`W,9Ĉ}GPc[e`ۥ~3?aMQ lX#:f2] {9M@Q'~ؤZMYIfplޮ^&O Tšh!ge|ڴǽ_,#%̘4Woad˥ƙQQUE_,x! <'(A"WHMiB! ӲELgd|PM߆Ͽ[L÷ӪCOȣL_bRIM. 7uҀ!rP(p@[1 yS6>kn> ׮Xz'~旬*-ѝWÉ:H3𳇞{2e8(ASFS0sK:GÑEL[\ɮA(/ qɔ*~7,q~3saq@yj.L/ATYpp ͧq@L, D^r$ d%w_ GO44qeg.Y$IV^Qd=S'xf~ ӦLBq܆U2)3fҿ:+K HH>rn%T$҂ "<9t !לږc\uf,vN[懿y\X}_o_7Eaƕfc!Tr.Q,ҀZo0ʢP.LHܸre5OP Xq׿/n\8᪕*!/D-;D$E:k*pm݃DuI}qJ ̚XƖ-oh4짼8LSa[îm=̚F+ﴂSU%/r|WL`IԖcYB Oo`™4n!+t1|VޱMO͛TcptR) {L3dIEIOG{rx<.U\_2{S(s'i > '%]7RHDKaNB b y)nQo_g.\r^+bn؂L{ lŚշSPPMcVOn9K7[u8HZA`Lư-[Ø}ռ |,A_D[G{jëx%/U#&r~O IwuDCF9iꢱ#Ɲ|%eH Qc8 k͝'N0wn9f9â%qtrV&q0A7 uS)(*G19KQ7_*w_-7T|$$3&mCԌӟ=}X=UYc L1t?b岕\.n7%L (tR.\ȁhocppGUu)WPw^מ^^BNp:\uv⋯~ӦBVq> 4a<gÆulp\`Ljx;;)I//-}WR]]]KMV=9 NSkkL?].eҡCҒ+yK>VkxF vW\-tvvryQHj v2eWY~{E-Yp#omk8 |hάI k 7 X+TUŲ-n w{z9pHFR'&M<9bCC6nwcWUɷ*#a71yBU/Ѵbt8]jzAH3uymqZZ˛_@/() IѴX~S$Óߵ s]^+-[oqr)fL;wld[0EmHXpM1<oeY?4Gf+V,inl;„ _䩧YjE+QT"Sţ>FuL װvO ,\YYOޯԔql{v@QDKfS -*xƽ$ W\Y~G4'(TWahH&Ea5k$I2(+[Δ)ԩAt$IrG?9=~[aY---ڵ}{8 W7ur_Z;6ȎpܒDʶ9PvٳܱLqSpⷿ:%%RSavH1N$Ap3_d:$Ap5oEADzOQl;I6ET1~7/΂Ymܬ]gŊVc:5 ׿jnL:K"  M 0az8Ρ!ʽ^I}y߾ތǿѝN5hci_狰xOYF߈"B Jvk[봵=˧?Cv?D$fƌ$==I~߲f=%Ljlδ%Y(RwQ;}&3I&7B WA@EQEӵu]W]"R)*@HB L Zܙ̙;9sA[#w-*U%9){L ՁaadllhlDEzA1mh]#F w>GZ8OL^v~^V{W_*Zz>wՆ3g=zTr K/uhѧL|I:onoH$'+=s{(e[ͬ[6뮿PYI CEİEyox6Z6v~`&V+JGcMQ< ),Ma\s͌X9/55դ4/,k 'GnR$>xOKLF𳨔}m5[*H則%91ȞI'h 82M͏Jv;ƍdӦGE1#֭ظ믿7_Cݻ1c|BMѠ;RfEkCA~nv>'C]szfec 4m*_Bۿ_0( "cY:HPU$QDEҬV|ȢM]FD ?*SILNXv"+ 8MPU壡&JɈO`^ *n:%$ᒓ^{?Ū䀑xt:p&_ɂnJ$DL4BjkcȸX?L4D1WGIwL2g5@$t >N-GM״XZ->/;V%%Bѫ=#-Thfo_|AGCGW# \c(Dxt:"p8:77*b9@3y[ґD;v RQ i_GzC7C*>$%y)*qfG3o-~6}i+[jbcfc coެdQ_ .V#;FE!wx`ܨ(¨HZ1h%OJ5%%(_Ngy)AP]TVR^o"::LzG)ݻ 477s̘ v$(P\YM >X,PYy U$I,]M N۵8NzW}NȦ(xfa:(hL&ŒFڂA$Q$j=bBawX rNW #y٧STE c8VB!pL "BKyP" hq1Z!uΡN#rZ@fMԯS.4=?;Bf>n-aH@Ik+Wվ(fPbTrPU]x=W]71mh5R9~2L&MkAii1Zm8s熸Z?d=Ch8XDYmSK Ţ`W3k;\~uxnV,]HLfOCNtF({䛯cgOha:]ǽ=Eѵ9 F1S:fF&q' Y/h|a,H9D-9G0p*^'WR0qٳE|tKq>tZ0yHUC2HHPص˄ͦz=5Ulߴjs1DvvΏ>G8:Λ }{c*QyϼjKBlKF!$Iݴ&L߻/h5C;(n2 aZmRi&KJJػg?+# IDAT|E=E:a@BLlڸsΝtZkEdu@5 r4]$Q#uZlf࣪J@ShS{#ңj>"#HNN*m,IfO~~.V T5ަqQ}|@ꌽc%Q/Ih#é4|EшAB'=~ k֡jՓ%%Ͽӣ[>ڝon+GRTPqWq8 K0 vyDC{CGDuD}2eb>|m&e5bIy}+? 8)׻'?A⒃}GS0 ?nش۪ں$IU>2m}22DYZBrd**H@JMx/&QykT50q.|Y zkXX{cIr#"n#6&Qo M,l߶EUYC!/ n1@OT3>n"ƀ-k )׵aL$N!"HSS?UGa3;Ң>_q}[B\u)/Ko4Z->UE62<#AUIR^`N+i6\جVDUE$dQUDu۶aƻtd$@)><@("66tLUb͘ Z:- +=;:C-q>F!Xkv1OkvC}[e_/%6܄(tZN(W__\}c ͭAfի+v6{ ICt=LL|?8j՚LK;UDH*N$Qd}Y]Ks $TQAEDQsXbžZ̡ܾx1}PS(9o{.@{E<Oo,hq`531H>@Smnz P$ncpT,WfR5X;>xWnk,+W,g_U-fLnj,V t=5!݅hu4z&m[ħ>JKO'-=m8%™ ƜXQUꝥW[gH[/<|ˑ-3笡IKC4vf0S͘E>yB.cDGٙ8aI=+sۅ٬1q4/z&}3:8 91$mh"zE`a8C/qSR-[ܥ*ϱN7U/Tڥ ӓw45ܥk}~ %OK.Ʀf]urrOq)^QӸ;wC.]pT>z_ ]mC0TVb ޅn|.Zz7k6Oh5ek?~#uKWQUu{}ZN(~*h4L:Yϣx~{aLw+ʛ0{r_>wUCdggAE?ԏBs@$h¥z(+z"bk6Ɲ~S7$OzK.-[63`cG !:҆֝d%I)\}uΝAUUƍ7{# d%v.P呿=6{{"y(2dPOqq1^d4abW лooj/&͔IS0$%'~'Mz^'xBm?OqZ zTn8>o[&8}N 4(2*˱IդEsBF OsQ{IQن%2Z/& mm kgΜ9>=kƤb DhuFi`6[hmmٳIp{Z>'TYdycdϞ1@ߐ%Xm= u80ǐcCSSBeIo6END!$$O# 0+{LD7tبWƁ`Y͒>=%-e}5h4;e*}<,[nk`M$2&NOEu%Ek 'ZÒ *>Ο=sZ|OZ>vV;bc=mKS]I>%tq1_"Nj0{l[il*p.G%SesE[Q0V7'*h8i-G@%.."S8ϒsvܲe<F@Vt.}:b{s)_}|qʭaK_¹7u`@uiգ*SƢ糳5`U e euFlDG%bk =JK ͅTU>ᩋeNm3E{C>uZOH,9mIL b&c0 ^4k\er8M^j~3~q!5ؼű#;9x#P5P }O\L8j?hk3 pb bFHe]C}M2>/(W,qV ud7Xn7[-@m U!+nm,wPH"M81t\x3Npo;X`[1~!%²B` -dKY7 ")gf0$} 8&nq#+m>P*HF箻>N# w r4~H.YUA~|F7Cw6X6 !995kk%>1^*D +`Գ!ض F8p~`YiQORBbȃJn4d) KAP* c䦴0+l)&!..JhZ[لԟ.<R)ozQG(|[l+G+րFԢtK G{{,v}p[5 *sa͚5w'HOO'>>m[73͗Ib2l~lBdd$z:'8!쉬ߺCE\7ڞ4;({8ħ#EFTq _oO5,Xn#!6e9Rt׻[JD: yeK/_Ø̳ӸH O9Ϋ.vToE5+܊I*??}yZgN(UUq:GiUW`,k؁>Pi_%ł罹y})޿ȑ#IMM=?CSիWS\Tz}.o$.WF%$I,]Ig0H~J,L}Vo!:yDk3LR>Ρ1OCd܇$ 5Ǔiexx,x!W>aZ3I/3\TUeq1{n%8xڹMW_ ?v$r("C+2a Y6'1 \n_^+V, &u뗀eC{nN2o>vU==Xu]{櫹jdƿYqF `ڹ() ppZ\;(i]| Ja?8L*[Z}r LgW~M@MRȫpEsъ? >ı\^7ĤK]8 ɮ@"J3a(&F]yYlt7`0Z/ygu>7KNʩu2.θq~dN{n h̩OYMz-g?ʜtʅ hTY v ;/yK)TUC|Cg#+e{HͩEsr&g|2Fdh(*^߶?ãS",(,(6krs VoNe$w~兟s缩Lyeo9 ?*qFv#Ͽ^~FE >zu_ƟSϽxBḢ-ebeԘt}~8pFPrqN>r[X¬Y">͝GA~63W\v1 M|l5:QQ}hj<@ #z9P`]ú3fPn+`|\5XN/њC⭉h4zFVWKǼuޛJùkAUy?cnTU!>.[O?GڌR Nדoϒ/%Tz M/@)&UM$)RҙxEs᜵bc7tH8͈IwXF(>4z̟;'59{v_Kb2|~/oeDtr`6WߛKjF6ݺ|KCC}ھWCfV62 RЇU[G $" b Kx뭷_G#6<Ȋ+i0*r׳zs>qXAFŒ RGšўIg䊾7rD pPRMmM o먠>2DQxPUzvB?~v2;e1[, G[n!''2"L\sDPs=n}U6s՛v؅'|yY |9o'?-;][zS+z#8Lf\[wpA?9ƨ)ݍ`q!sEKW0DCct ,{IN7ٙXGjM)YXȍ7<,ȜL / K蚨a_CII A#See|b%qHqI qX,|~nBBl}Q6_+}JZtHvM:}כ;vWaьwD=xtL&=f?;qXÌBq*""E| RAQn*[;!U`վH^^XLB:ǓG.@E$/ /) 2wݍ֖J,6LuڼA%j[5_~%SZo^/ 9ALF(tBRZ{uީ~G8AUz'Ceo1W艗a0xo=`W_3/`Yw"TBSr3ABE2 %444{F{C޴~E {XTUf]ȧ_oʩ0jJZZZlE}K^%믹HIJPkdǢ]ٱrJdģ=Q 򻩭BeBYS/2<qarP>݆ҵK.̞53l`RB~T)H(࣬e˗Ը_׾g9{ j1yBwuߑ; ^EKäGg ilQj"%VٝDJt17p#S\4D"#6@_®Ũ#{ɌNĨ̙3;o;MtzuGC2O|~uu a:!9XQZ?e_a!;wg!(!4Ȅ^p=+)WM5"moh(nd4`RPV5j٣$Fa1^QVgM ;-y:_6U8Vn#MTk˸֙,# 49ZxymUnhW-L*-q+}rS[tOPbͻqsݵW(**"V .]?;6oAxaaq`,&Ng NEGYk19SYgݬV+/,kV⽏PP(,+".}N֐pg"ws9 $ .ulPwv o]MEE,wHhH$L.RG8Y b (`{vZ/.;}@!3xGغn)Gb"eB4oX@#1F޹,Pك)F 6k)m[l27Ѣjh 2"TNK5EXW P䜳G "/Z7 ~`JJ2r!tB>ƺ:n~x&ݤ1gG|cE'*23 kIDAT*2 2Qyz8gߜ?BKAH!)aǎ#6x" miE&*"@ӌ0'ٳ}v*Z[زq .~^ =i5UxO#|46PV+fQɈ CkqW#C RoDlXaUZqǴh#G%+}#eg/bG L|kX{juw_ΨPQ:&u/ߍbWpy-AeYQPUf=3~G>=G8Yвqo)nhtz=rF<~&UHFQT!'ҮՀN##R ,s;;߮+NЯ*2~.q4;kغmIhJepU#kt4bօӭkWVXpL9TV%*U% j>m FH**AN+_^UKbo+TȠQ:7/%IJ/,bz0}m{Wxϸtx"#θX}PE-1ָS$р1iuՎ=?|h<\C~_#lF#{)(m/I x^,&V,?OT՗;jFqW޻oŬsaӖ\}ۋh|3UQXi|"Z[[Ox[Jy rwckiV試Fcc1é1ff9 659Ғ:6_rNmKE_@]}1ة 2)T ~09q mt,۰ajzy4ѠAh FC(̈́d^>` vT|!NooEQؾ};} Zm,\Fw8[={^>Z7f%Tbs&~T*;wӯO/3QU}Elپ N3#6:$3̆/dfW3F_ɲpe f;tack@&Çg|<~fS{(SoWNrwoj2Ѓ~e_JAIG῀N 0w+fJA܎F̖h̶(D/RӠ2Z05|5f}oȟ{3p@SO?oswMru]tqgv1|s7Dlx*UJ2"#i|X i|2 .r>}n[q(ЯwbV UYb !_$il)=FzB_6ݦb7O36UL8(^O^^yy^/̦t=zΦ**T픈hlfghh4ô~>qnJϞHNMt'Z1H+ kPUSCU@@W sa pUvZ@Jm ҥ {dCjp/(dn̤7GD EU(ƃ˰dD8x_ňa01QP*v7">.(` 3@*6~yݧir3߼gI; ftKdk'{Ξ>p.!Cs6Z_NBJ>7^=TU-c,VjWI x;*kq_| [ة͌>?0 ׿*:mFMn+_lWJ8p_|1R(@e*lihm[EN>EmA : >UiN!3D=>5Is[6S0U*!-$eY^m{~} E!,?+7~Ӽ56y]a&UUGʇsD_pB(h{nxmݺ^wPTrͦHmy}mO⦥Q[[̻^`?nEdT!}T  em.10eҏjXދֺR ǚ0!|7<È!)T׹(mOL&1u s#΀t LII /ݍ``…NdYՃU1)O>x?O~jo3.\|sYiifQSt^imuGȪdUZ{fCt/2d(۶o0$B BBȴ{5EYJ? qK~ջN ؅*[t2C&܄`n1C>}^'G v6"H0h/#Lg^4"'egg}2vZ]W'=;}zAޅ.waEeM4`:UzpV0Dee7,0, Z/ mjf'!u twA"\r]-ҊW"u.,:F "O-1u[Fp"->VߞMFI&s_JJ*))ֲ]ȪQg&1{oVhU=fFDK}DIENDB`pychess-0.12beta3/pieces/ttf-Maroquin.png0000644000175000017470000002213212176710402017433 0ustar tamasusersPNG  IHDRMbKGD IDATxyXWI 1\h "jKnDew)"EV\* H?.(|XxAL!$u̙ɝ33>D`` 9r$] @9+,,Tt&M\.ؤ1:ʀ8?QYY15GAAmuG3ߘ nhl=\.lO:@ؐh dV'}ҕٕlmhhF:99qܢvlll z*^z+} 5ccc^-/QEE`ffa/租~BbbʱXď?UUխ4+cܹ={6`٘;w.Ů[[8&W^5WUUm[CCŭ˗/4rlv/[dff00oϭٻwo á)f͚%VLC]e˖ FmɄAO.\Z{f}B-^1gΜ1ʲlTVVؖsvԩS(--T=r[ݻwwOlllb%.HlC #G̙8++g!p{UUH#Bp}ūWPSS`p8<6'333"))۷o/^DG3H1cN`^|*~p, ***ݻ7:[l[nu14D?ܖ h)-^xAK=ϟ?ckIh<==qGQQNNN} Uر-[v…`ڵ D\ii) [l0o<:}6մFUl@7\svZl" #GTZ>22Y:.)>\><<\n'8>rbSWW&6pZ yuyxh#;'Gt;5N s8P|>_b :obgϞ`0HJJj7n |>_n1>'I(̾.\P CCC3JEDII `0HLLj߫Wbܸq(//owpsd^p-gh `2W%I">t:1 ~@@-x<ۿ16JFdz1"IǏf I8z(mѣG $IRd^pF,--i*6b%/7B$i۸q#gx9ݻw{\]]KlHHH= kѢE(5`lXh jýJܻGIki٥%6ѣ%z ;;-"t" ;ڜ`0믿"**lN[ k! ZV~i+VIOOo}ҤIPUUmwDHH҆  {L.033kӋmmm >q mͫyl63ARR۶mgϞ=boo?1Ej᪪(gлwV*LIzSh<;w-1E\Ϟ=)=z6qYGK$Agoo4g08q""##$&&ӧOu9sHJJZF"]R߿Y.//'X,X,J &lrJMrrr#6lKLLDtt=*k|[" ͛7򂋋 Ο?%%VejjjpB[NOveD x{]|9eKʎ"wy}_|j:qFF&NCCNsU[[vIDl$'' ?~0`%W.\1c*q^WWGkh cŊ ڀAII ۷/|~P$Ŗ.^(4z{Niႂ.zppp/3$MH+ g\.rzeb! nK???U:PTcccS.sN[4H#lgϞBOOO}nݚ"" :,.;!͖<%m~% 핓#y^"|>Ga!%{wE-҂/jjj߿? 0~xJ :.\C$iOKKө5#I/5ڵkoܸ1 %%tss$z࣏>dJ֭CCC)u_;i_fM7؇&>Gcl~~~6lpDJhll,nܸ|dggc˖-`0 ؾ};rrr4Z-ۥi􏋋i(HĔ)S:L˗/)_eQFQ^ j}4E6gԨQ|*}ŅT4,TurrL (((T{;.+hnc"Guuu 3 dv4BiONNzDӺJο8yzz6濲O?~!y&0aj X5׮]w+~ޮwz(#88666lmmrn!*,v߻wO ^^^1S{D- FdOO?pZ`eeŻsN oood\M4 b_-ϟ{w***4:94p8!C o@I,y}%4[ KDH@mֻ:sHypr$JI022BZZ㑔>]KӧOOO 6 رcajj!~&Yuvvv4119IWr%"##x5N .Eђܝě7o>O]؂̌HJJՕs?}#[[[##F`۶m믿.APQQ˕{׽Faa!6lbݡ#ж*"å m"|Ϟ=L;;;ddd  y)@4sN6 ͛Xt):+W/$Tf_m5+۷oGBBXB nݵfffȑ#;v#>>PQQŋqIf#t\r .lږ]]]|7MW\ɔJLqq1nܸnW e?~̙3QTT^NNNꫯP__ߢ ֮]#88X"I\. haz=p@ܹsXtiAQիvMo&o3e;wNmѢEn1C!55NBhh(>|j?=z7nHQ AuuuJl2O-luvH2A^(ߛUWW7 <$ P\\cǎѣx!L& $... ia IR^PX,_5r 7gΜثWbذa^nקO|Gm닄dffR[uBDl@Xg<~zzz lggff6ʕ+.\wqqOOOJLL$.\y$~>ý{({7ἴ>0-?~L2ٻwog7|pWͷƾ]h;::Z`+ dggSJ'  ǃ3{vf82kիW|+"t?\NNm۶7Z<}utt$fCaa!+9ǏoS"I/^%TTTcQ[[ٳ_ɩMg*ݹs &bƌ0779D!@M6 K,>իWHU `bbPl۶PV?իWb= 9zʔ)Ν͛7|{"8;;555ѣܹAy Aķ~۴25I(((ׯα,k^+΀*Y5M@:k eOYp/^TX`Ak0P3', VԔ)))-E+,) nҤIK.1rtt︔p-E+,) nڵ4MXSEn/]a/#GTS|;k,5Q%,rKѐHccqkhHҿ[Ksl::MP!H$͗X_4$eOo\WW9I E!m󕳲~ x0Gh@n/]aOIpaIJwpphABn/]eOIpÆ ?C6|7;vBl9s&]I-aOum>]}_rK*KJ۸q#-7,뵶*rKQ*Kə|,>Hz`0ry666g( i(xI=zOMn/b/5T[XKm uA-ECZ, n:/_oz/&MTcnn>0,,RyhH@qRN$,rKѐKBHźܚ^4ݾ+//W>}:pș3g%Mp000;n޼ysx)_7oޜ>dhܨQ`ZngϞ777'9yvǴlv&M5핟:u*HؐֆCc6?bرedd0L$&&~k~EKK;׮]ۧVR[A I#***pڵK2]&zrssstɓ'ӧ...\tٳx!=yHvQQѭ~a_AA1Ƣ->SWWǮ]p^{E^Z ACC9"nH]Lw;|ɼ͛7={ yyycǎ] ={)ePII B]]ƌ㒓%%%'}||O>d4K"ijjSG]]M,O1mڴK*&`VUU!::݉۶:ujӆL&[.VVVXr%_333QCWWOFmm-"""j*(++ٳ2e NjReffCWWW\u&1N _2220sLL6 "uuuptt3-bٳgۿ#<<Gўֺ$ ܹsǏSRRګu-$zeM)X?~濱[~=O˭ҿ5]eO5}'F)i>o]EӅ_$O>K,͚>99zřuuubg(**[wg``thMDyȫ̙3 >:CQc!9yd?#PpIIIRkMQRo#5TOj/5T[CV- NKK k֬TF>sRjmmQVVɑ7n0?}\mm-ݻ' R:,v1 WdIENDB`pychess-0.12beta3/pieces/pirat/0000755000175000017470000000000012176727272015473 5ustar tamasuserspychess-0.12beta3/pieces/pirat/wr.svg0000644000175000017470000000565512161415524016643 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/bq.svg0000644000175000017470000000461112161415524016604 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/bb.svg0000644000175000017470000000630512161415524016567 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/bn.svg0000644000175000017470000000622412161415524016603 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/bk.svg0000644000175000017470000000631012161415524016574 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/wp.svg0000644000175000017470000000615512161415524016635 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/wq.svg0000644000175000017470000000517712161415524016641 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/wn.svg0000644000175000017470000000570612161415524016634 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/br.svg0000644000175000017470000000556212161415524016613 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/wk.svg0000644000175000017470000001043712161415524016626 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/wb.svg0000644000175000017470000000706712161415524016622 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/pirat/bp.svg0000644000175000017470000000516512161415524016610 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/prmi/0000755000175000017470000000000012176727272015323 5ustar tamasuserspychess-0.12beta3/pieces/prmi/prmi.svg0000644000175000017470000120720212161415524017003 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Eyes.png0000644000175000017470000005205712176710402015763 0ustar tamasusersPNG  IHDRMbKGD IDATx]wT~owg]Б&R-`K4?5&X4cc14"UY`e^gwggc<ٹs~|fY\Y f ?gOӄ p\e_;` G̽`g(ȑ"|ghnn{z3 ǃ2l6bМ0n7DQ($@U=N7DQI( Eu()JŃeiq4hSۗ-[6nOh4Gzo 8 az }xشi $I-0gN} (UVVbŊ I $IAt:/ >cdH*tU.|APBA]]k4ZXm|@ mpErfyBssLJ1Mlwld6ݽ I*mVԐZVVJE Nl~\P''$Iw8"݃EaR66: IflTTZ]-[6kٶW,/.24㽪PM3 _F~ IDhi0!Ir'Ȳi p8$IACo{s{"YV@Q=x$VqjbYv zߟ`kDz$eǩHQ^( 1םM(jЈE1 I>V'\.hɤŹ{. E(+oAdfADlٲ!I$ vbĈ(Սhks$}jk[Ǐ[:-t޾%mmvgttiEVkdc3Iw-KLiJJJpOƶ$I_thii{QT|Pey$իgm((Hɤq]pEAфB2ڵ{ ($$ ݉[Ҏ B`׮㝤^!qsal6$I#IEqw9/,^9sf|x35yfu]cu)k\.OZ9}W:XQ3hx'ҷmmmE,bG`ZA h:3qQgС9A]$P R;!Q u"+EQ碣U'>XݾgmoݺNwҥK;j!XlY|y᰷Hz'(\]ZZKz<&_?ʪ}w_UWg-|/}s^Yc1bD^|٘2e8&L 0fL jWu  ( pUWAaX0 A2A]2}dB$ d9L$ղjw9R3V &`vr,q8(*:c4FH$ynS QPlNx/t:**f7}<K ryA(*%\aZ/sIn70#H OQb 23fuT6@ 4M!>>V+&[ !#j1"۷oG[[+S'b\j8n8\^\^.h-231hPb`,+$qOpLH ;eI( </~K/Zp> "I]Ht(++˥VkIӐ<Ѩ$yxJ0 !CґgwG (  $I"--uo@UU#„ak FAeetBQ( 6))F47{tǍtz0EEim] ̅c1:Λfp_b'H Q]c6_UWZh{CMSE5v>~$AVj$Ip8hhEY$, (Ϗ6$I^FÁe#6C8G (,1b$yy F>fLVo7^W=3] ge߹BWVV͏+t /YQQw$}>Z'5dHL9|Gw*V])ELiQQQ? *Zmc.q^LŲ,OIb@A$zvGhlt!%%99Xz5$I 4͆~A~-AͶl6we!E%5,Yd*(B^ak%>qym'CQdkw&2jk6h @ee V5AP`.|P K@mm6l Q+,B}}+A؎O8 @tPAlLF b Jš4@ӃHB%0 ݫ$뢣<.oLw:ou9/K,6yf39wVTlj֪)AXpFTϨT48n|ë*EQn01fh4&\RR4~v|v[I#uu ExhllDmEhQWfqXEd p<Ϡ=OV;k֬357[_Z`q+^JJ*S$J'2<`6'\fc̪>f+[URR,F"Xg x}{s; &g!I=i[VVvqu*TףO>g:L@\.iROs  ݳg_^МۥEii% D&XF$RSVE6cbL8>tcwlesB spJiRKd2 99QQ;ݐ{F䥗No=<:`8Yg²]js\މh{BJc0|xIݗ\jEEq1qpea\LR E˗/ 99/'`E"+K_?MB+2fMCH'0jT)]Iĉ#{a44(DE鑗8\~R!ח_~ic=#mћLFdgg@ׁX(t (6| ~QWDbA =Y3 0lXwLVFJŁitHIi#( mpO^ru C򠾾$I px(@C11z"/=cV--6y! 4gbժ044,K61 XJڵu MMVTUCĠI=Z?8AᢋA^9AR}.:}G~t30 jFG}ź  Fe00?ЖK!IB)IEP&OQī=UNZGbica?AZi7|C$I2d$:<}sp#,  H2I2@ l>nksHFca ìQ%I^~7bi5DG(u+M+E`]6,CE.|~pþ}`4U6";;3gs]uR9 'LneY9t tZoOO7tʹJ:R5Dgd0hP%֪Tcc$Y&z<"RגCbnCw@`h>CX`V Z+**s^VÁVk+8Nڿ\2頺x-.(,]kD\t-X3`p;64܁uIŭ~o ׿V]CV#jL0 FFQ{Um۶%1CӁeAo_ADii)Vkp͹ݥY_( qDQ4 $EP%LԀ`)5IWYY="))PjА$XUU d: ^4 IR"[R׋Ceذ;RP V`e"] 89NTW&#GJ! Ne5VARAQV(Jŀ^Ew(zHWil)DCZ00*E r f} Kٳ/El o ( =E mذa2e**jqQPӣa )BCq먝cPOo I:GaĈnO"AeKJt!PTT/:T:P$j Ɏ-.20 QJKeJV Ic7HN,$p844Bր deeݻ$Ā0\e." fUUoBIBzYرݺHOWשoԐh4ɠKm{PTTVPCq,09;`(CaITzt?'IEAPst(:J<$Ih4 #$S;n\Ajuus0P F!^El?atrrRQQ:gL oU[/^\t;GGmMM IHN6 Vokn#,Ɛ!JQ#VV{b1{sMo욶xkRR&D}eɒ%GC/alZ(:;f0=CSܾOycƌDnP46 (ǛRqp՗ 8r, z:w20gdlٲ/|q2t @)VXDGN'<ρ )g)wlVp# fd8չ ;p\Ïp@!|uӅ[wYʉl|rݙEHcJh CHrg_طPؽl`7-[,O555y ;p8Xfmev=ZōoMMb47[Ϛ&n摀ZfCvKulg=w vA;(/BUU**:yxg E_}59K3z!s /_\ Y¾}:%"q60 Nk>3w"Hx<^\Ym;AB^1yݻwwIغu&MV)~h"hmm,8t*f+駫9tB~#ņ vn7AQ'H) 1kb:L@7X]]ZZ&:BQCS}7);w|ŋ~#ܾ}{P_^G(Jn!B]]3F${US{---_>&̚5 aI\VV|Ն􊊺xbGoV 6|ػ{WƶmqUz &&:L8_ 7^yM6K&k/VbժUشi z Ǝd _w>t]i=dp۷o% 18+ɉq۞z}XR#B:T#urVf*+袑شi}lٲ^?aPkj,֭F\5pJá".-^ ***NbZ }a69mii aIKؿ3y^r܌T̝;z./nkT$IjuviiiFQ: pV,I% F_}yO:׋fpUa„q4i\# LML$iEn ̙3PPPcѨ:\dmtIIՈEDܪ#DCګ2P$$BE\42m[Os~. Z[ؿ &St9], F$nl6knK[EӛL&]Gt1"BNٜuz9elݾ v끚Z]~̘ui_n?!~Ȳ q&OɈFfMҊcǪ;i><6[Ct6oMeN߻0|ͷXn38N`|444l?0qb;f> aɇA5Unp=1cF%`Y-x^zh4zdd$ ~ө ח ,F:4L:nl۶3fM2T<**jqx)tz3CfsIb^YY;o,%cڄQzNFet8i*+KBN*Ihlt &FF_#l6g[,Kw5pc] I Ä8{x}YHwbkPt+a=Xf5{[ŀG[Ӄ),<C0zP( "> }r j9R oc;>It]m3$u%Jc„|Fܐe[p(9z=+x5 (@Ȣ9w_#IO &;(J'AQRT` ~+:W%,$Ie)w7lKMMpkj'Aqũc c }v 6_[~v#HPUd`DPRvL|#zP']QE Cg:h+`Dg}6v|of46ݥl$Inx|DjGDNQQRSSK_(2(Pd)4FpٴI6੗5sSꄁ(CD$bcP*81$ \v}=zƏ/H8Aq,22[bbeYAYYS-< őm9NTUU ILDRtR|PNfgcɽ8.S8vƍ1(,<(FӷPFc y l;J.wFÍdPQV|>aF]]Ӣ6)| _g I\$Y'I'w 90^9cV|:I9h445 IDATKQsga0iڙ}k q3(C HT^`v˖=|||L[FFeg{u$O.kjj}x:uHuN$,p\4qdI0\%YP9\)2w̝/6փlohK (DW"wp={6?!oAx CDȒ ~?⌘5y @Byj5+av{܂jxgGBB,DQFF^FÃn jw.x"irJ@'GnN~),}hlV~[wt`0`Ĩ1Ak  `+gt[111[?1Zߌc;MMM(/Сؾ^ 64`„Ag~i6Yquuô#G*Bk{Jg)(Q;[d2ٳp)/bѸvLwuyxg%[#J@{!`tj!t\3zﱟ(HDBB+}CCzbqైמ-f6^oCә>Ng#I"bn.33UU<ᢀMG|iĈa`pm":Z;v`%BN!C!&F@6PI6d9,[ ^{5{KlL_pG,eQ鄢(py<,P dIĦŊ;IJ( 1APSS[wAyuǎ#0<DQBMM=Ma00xpL&z~t"[pgHuuph#n؄y\Y-^Ȣ`Ʒ_ As>V㼓nn} kvcGje—_~F\Nއ2 fyRUUԆV?FL$IT_FСO`il,P$A(2^q'ֆ?lCːO5@@4CTW^9 'ME( f8W\Gx0 X9}rS$It63p뽏`-0ZT\y/G0L6}<Gp{\% ,xM7QP0zkapVrckqD@CBlRB3 M_`6^/DToWes:{ok_lo ހ)3.`<]GEh #0<54RHƎGA,hZT=xi}!lZZ h gn8'(ÐG!0~S!IyIT*L6WF ;;z=b0uX=Q$`0^pN#q^~~n @(*r CKh4}Gǘ1ž7qqFDE)|f`6KL.+CtAddIzIRA Bqp$e(8H ooy݌-?DO^Bg4oOLL0H U촔5zO!2gn x 9رc;֬/5#PȲ,Mly^Neay\~Я[9GƐԔ-zOqasjԝb+3/ѠCVF&f͘Yq?,][Wp$HƘzgO-h0zo9p&o9zO "➻wd)#AQdszXaC\5FQ\tFODoCdCswU#|#,JO+]D"}])* ^/IxfE~Y@ tZ@Ñ\7nBcc#8v _<'2Ғt^X ?0ŠSd :7/?,IQ^Vv9 ={.*ʴmM_bbABW28˧X.0fV7&^X ߰t+zhYNƟ^x*z铏\g@-))~y8N!=D;nJ8XEk Ӆի7~_="q}Yn>6xhȒNk|TQdWΚοQi)[яbEQp80|xAg&KCj)EGe/0ji6mC[Ͷ~okzpKqqq:t(mۆywp; BIiY'ڌJ•Z\|M! **1ЮX/YE n\\ $Isg!0ۄ3 7Mzɸ8C=|- Qz d =Gѿq1ӦX0gD ^7:˖O-mv=]2@d'zfڰn& Fw 5DG3INFII q-7ᶟ]p">+\6sJD!8w5Ԥ;2zw`X0q0Bu)*¨xcjcq锋-e*p{x^BFEhiqԷn.5%?\FXدqc>/ϘxH$&lGS0 es6ӎ.g^@A((o*CpUd 7̙OW\/Ig2~`@y5\s.t fIc„aHLu/+LvD:DdSXI~p,pOI,CDL~:|>uN?^<O>+(߅^ /l۹F燯Ѫyqx%%ǂ蟩P8|j$)3g-8R>9|d?/ P èCS'-d_RhbtlݾPT5; :"ZYl0FO]=k"7] < $F(Nh4s LZjgx$":#i(H6Ks3~2)PKNӎr!11ӊ¯P$w1 [|fw;dg ' G˂]G+ng!## j5 $N7|qO*ᒓ_7/zbPrbIU NE"-zmiEM맃,`hĢiλ(;)1c2xv\Pdp, lǫԡ$p`8zASR†bĈ0 IaC_wճސb68+]9E̋/2ƚSǡjbm8x< NYD|b#B>PZz*$A$V;6oއ}鹴(R{bOE< c[f]ղkߡ'.DHl:3*).חM7v֕l"l'X 18g$ HYiؾs455JT[Lu ȲJ'`qi À$N%)Z$IR8Gs =±Iq_{i?xwE""DAB/Brr2Fk7ν$ E?6srkː9ɐE<>t 9sh;pzz BJJ"x(,|>A,V*c#++k%:!.v7˧3}lPdg(>Rv6M0Xq+<@_9g@4zlىF,O@ee#JK}8{p\bB/>XԉcMex}ވ{Ʉ+VChh N U*m{Ah*4<(J8Wr l4rd JESS@>T̚5 ط4N_.%1g:?Ȧ( ,-P"b&MyDkU8Z|.A {PTUV]{o '8TxϯÁI?$cADp/4MזI4p8h2l(vR&S0uԉlMQdWELbU ljdquxy 9=6\m4r̻8EZZJK+AQ4 PSc߯9 Z$3U(),a1 ڗ[著G7YFaqjGΫMHF$̸VE,1y=">snk~k]Nbc@I((ȁFEGGI`Yǂa(F& PUW .<8GN=pQtcEƆˆ(|^HCee,-p8{ݰ45ahX,8l,hZ"!2JF_5 -rsRNG+PYbѨhu{B1#rI6 igARc1iLFןA VKe ɻ݆=IOcpNn_0`V7.7lk f&TF⑟?99F# ߬tdqF.-9KOJD4EBA$tAP%H0  /pzmmzxIS&OS˖7܎˧D8ڬx%ј2v,vډYEh4+֠ɅK/`I4Mu{AʚIpJgQ4ɊWUjIzv_ty6`p=˲7 $Ȋ#1eT`츋P[[=6*Cꏉ~)[;ɵٝѦ^aL4eSrZt]AS_HM;Tl6+-~T˶'%%%hnjBjZR .{3ኊ`£=G_mpep:p\6lT`YCτ+/>(O>0?&& mmmG%I'w0VB_+ޱc, L!C}6466"##}6478Ȋ$1s,@qq1B@%Ȓ ǃ3/dݽw^?-6lmv^I?qR_g z5C`Z]=Fzz˓'Mafǟ}銮T*Մ̏ W~^]4 }0>755!::_}E8C@YE{&srl6vEQqnf6B^ۇmi  pSs+' ͻOSIOeHHNݯI`4:Z1 K[[[5jk'! ˆ}{WKfI9\r^{j{777cڴ]}80Yd)BY ~NuȲٗ\m:xJCY!H(/9xHbڌYg!$<}nJya)z%ID8eZ5|nyXf23ȾTx EÒgpv~غ iiip8H"<Өt:QUY[@Q0) ZWZ m"$\I ՗Up^|N B{! ^PP?߀${! ^s!by"$'HŸ.zD8ۍtDtpUY0O<.Zlv ,q(y%5\;;JMJȬY[uIMm59YiMf{cmPd  Pv@ч0;  % hkYP_+KZ!K4W{ա?zD8ш"L: e%$[,xc_aYa0y{" x+kE K=[˫N$ n~\x,b<|ɤ 캍^k|-Rxn }Y"9\M@ sAV:ECRNDTdBh>ul} }۳&OδvG+?WGشm~mdjjw|=碑тن;\Fyvr IOM7St^7kAզ{Dc2=/|+~{ s˽5~Xn{A5P|^X[P<\NQ tIr /,CP$ ˠ( * ȹ'J"բʼnW'ţIDATfcHzZvޏIc!? by@{82k9YbcM}L9$6"?@2ӓ d 4ҙբ E~2a0ua\D ̘9;PEuuxfɓz\xocԈ;)IlRd.}>( m c/?]CnN$;q.>55 d9MG|>A$zh4n7R5+Vȹ"oS]14) 1FLT_vUqPdDtd^Vnw[ n숸bqp{mX8 VLǍsE$ ؽ0v?V<ח= ˃ތ܁,zJvZGűcpQǴI>Ev0壥;o ò3Vqؿ + F6^z-oŊOs m:T\jk9gmK=wc~{ZZluGUm93LʤSJ 5EQT@@"p[l4Pv[f]IJ,$Q#G]ѭ>dDΆXC&y"ףOdtyz*:?ߊ~{i ݓn}nn.#,np7$@ DDDYa7۪`w?=P~gbԇbŒ ?v|: ]dP7Ne@)(>Pb|4!sdz0BHJ!cF.zulқ\+ir'˲,Iġ#twHSI"Db[0ebtZ߈Z!訆 p6d { cI/4F3=)??f G`@1_*߾xS'p"ΖX $5@0|h=u)͜v-czW mݤI*}RzTTLV 5OW2[F@.c C. 'Ͽ8g0MzcXVXZDADծBCD50,`yuY-)8}6ɵ?P(PȱPG6log?9lߓ+`70s{u.w{*λg5kKQx?А~ˆ#5*{ IeQ!2z&uz0ZA)@0 $B,ql˶hJAD*ոQ\Nۃ`6W_XU&WqZ@bbwzsgpVNr 8:Z A{^K5\x@A>dwJHrxi9+?$<,t}he6k5XlH>tvvm?7:-R+ .z=JJA%ׯcѲp"ZA15ulf;zC<UҘJKK8y0ΕXɄwWe Bڧ顖Y/{+/iDR_Rߪue:. !7nq#G8sWI*o~<쥳'w>YpfSz&a n #H";=sjpv;XًM9H. W\zJ,۸W$ ZFvKztEpP {z4xz*&?;1Q0/FtjA;ݦOJ2#m[RN{釣?8~0ؠ)׃K+r_;O骤 k %%iMA1 IQZ^}Y?"WBu9NsgM&(Atؐ}4Z'4^ZFAAamUep}QTT1Ç֩zkV/oLP߫֬\zLjr(P Z۷FXfM+6ll)9/>,X9!c&<U)@%Ͽ;l6[W+ }](ZtK~%/SgJ *,3'NWshv6^|9MB  >B]ɂx8t4ŵ/y/]>}3iڵe@)XӦdrQW&2aHا$zTfw.7W;y7K]fqVOz͋#}9o>D!bo)VˆtqfI-iA%u ?͛כ? &Nb1~Njcty>Kl; 6n6y@p/gEөӡcGL{mfH[l4kѻOZP`;ekFԸQg깙~`w{SyJ>9z*u6_žCpr.xAE~WpC Qw\7AR#'~V{>cK?=v/ZbT4n+i(bsIYEUfCRaNbyX#=̓9MJJ6t־ZXePXTT850WepMd2axZ*$4e#2 6 5JŸS_]D|, ].cJ!mvOJJ@維01q|}`,]L} isb蟜BDaeIhwc ܿ޷kM6󯼆g'EdHA0Ї@"@4ةl_{]{ݳ邂?|kDv}C;Řh e !t9d1p|H,ݎH<ڻ+M82 ?֒i 禐 >ۊ.caDj͊QedBkyNU!PBFW#i=/*)|cKGvogXෳPT\jC2ͼ[d UiUiUvOX{0Q%uca>yX8[Ֆ ݽR: E Lze&P"<<!:LUv=  nǹs0j(mfQ#GEuu5Rs/z 6-EBƲҥ+VٺpPTcذАb۫[9ҹKFն^20 UU&3u PX((䞠JG@ "nFnU|7xU+o!`Sе[7ݻD˖ 9$s1w/ 5/v [m2aϾջVm!W=QlA/Ŵlv+Vv/WeYrAvfr}XPT[Ҫ7rqL8[vxO`92,_|Dz"99Zre~_}.7\93=9G9_MlJJ>Y?pMlYY2hl$pGQNW Q6AC)qP)>*NP2!vPzeiހ+..FFFlks/3ԿwJYvHyF u+Զ_T q叝9s9tL`Z2o@$pW̵7і$r`ZY:R шJrTUk9pY 29r9 ^a6[aZa2bd`mPJ8!!6i8w5 ӁC)d2/چ7/BX0g*C:P$mۦҝV@`r! R8̛1CQS$Hʜ];wSPEap|-UF:+,V+^ ,R(0Rg.!@.J(\BTUp s_TȦܥ=ONCne<aCc2񟑞ʊ p,;}z%~:~c~4ȃ0Mu%^󔿍 D dd",6\ю"0!X8DaOnƕbp Ft֯sĈ H WuHN7uCDk^r%% $T0pV xJC V,31 cӖhߡ#~7JKJ <̝ kBx|e;Z>CiiY]9(T>` S,ٲnҕfzjy>/.,z7LH5RxDjmavc [CXCL0$_Ϯ;:!O@ƺK1O!$M@7 &]٩Sg L *<|β7:Ҭov}_OXD:@v1 U =XXNEήI$xBf E Wm5ԩ_Qy;w OFR<ɁFȃ4kG:w }C#'2zQ.Sc fPBdTJtn5n6s둛(P(~2̯%0j~gn*ݠ. a?Eҝv/SIENDB`pychess-0.12beta3/pieces/Chessmonk.png0000644000175000017470000004361312176710402017006 0ustar tamasusersPNG  IHDRMbKGD IDATxw|TUwj2C #UADAX(me_\[EEQPA Ȃ @J!^&LLHk^{g ܯo ;DQ:$$dott[(.l^P D9<8l6sݾoԨQFcnOFF999o]R F&!8p JRjwiL&#((fggK5 ~~~` zS'Ɏ6V֏y P.?ܹs[=0`2E\IKK㦛nB:vYtC.K/L7qqqjرcd2v={Zb… Nr9ިT*<<}pwweTL )--6UUURUUEEEEm, c\./T(9j{7 V{\om6ʃXsA@}\SSs8n^}\ZZZ X&OY7|sG6`WEll,2  p]vlM ++ij VKJJ4+6FEDU?Ǻ_ρDJ&LM@1PըAnnnÁ&d2*`N{_6(~"B,˻*F#6 ݎZ>9f8J>>>L&CP8- `6F`08kކ00@T>j^( o8 mQT2,A'#G "ϟ'((UtYspÇgȑP(P(5!pfY8BAMM )))=zaX >h$[eaadN߾}1ҥKxxxj"""mR1h vIZZΝkPCBBڴlj r@AiM5+**NFK* "}f,%}^pecǎNDڢRgŦP^^֭[5j `0P($33]vyf4 vNG9s QQQTVVb6%Ayg󓞣(={s9.{]^[dAh4>(4R|ܭ[pfrss 5An B_ XtG MkCѳgOV^Mjj*& \NHH&Lz 'r9YzcoݝM6~$66nW^yz4ztYsrf߅:P(2lDA0`09L'L<8nZO?ѣٳ'>,t2qFqǶm;v,= paòecӦMTTT`۩ԩS[<䓨T* sM:u& '!*p%:w)@fߢd2erj8}4f?DovեKXx1Ȏ;g!99_fڽ{7EEE$%%QYY$9W \gAs d7HoEqlS(xAf6ѿ[BBh|943a6 ŋ~ȫJll,ƍod2k.n6F#~2Q9r XV'&p ˀg2l }GP =V͢f뉈pcP^^͛3ggϞeժUfLš5k0.Vjk3ܯÎdÛj+fL& 5r|@c( if C.¬Y\ Ν; bРAڵǣ_\^T2|p=Bp \A\-ohXN[Vٰaov_Nlj'9.䦛nb֭V lڵ ZxM:(-g0syn*++YbwӧOӽ{w R kk7oƍW^AET**v+2C`uQ 6̙DgCh4nɨ裏V͍` D"""/x'S\\L@@h4u&jkkh4~{i˩kL6;vPSSÒ%K '<<={MXX!!!DFFh\{L~~>EEEP\\Laa!,Y8~i BV4?u󾣨}k Mĥi4 b|||A@I:`Sٜ:FӡύпF#{eɒ%<̝;QbΜ9Vb`P(Jߟݻ7#)++瞣@ 8.{cZC-p_TfΜI B`@QSSL&CT#s*/fDQxYRu Ç͍~{`jkkX,?[n݉JHHj&z;a}yy9!!!rזp``|7jl tvJll,V\NMM͞|یFAA= ̹sd@8ڵkaH|GZ,unBOzz:}P`=6ݰ}&%v˩$==}I}֞Nosi)m у(޽;AAA닻zRZZJ~~>999R\\, HxswEIMM̙3񛝝*A4ɷJdd\g*JI%0LhZDrӊ)58a~n6l6p)..h%**HuD^u]1uinQ;`۩l0m4̙^GR]]`͆l6 FLݛ` g%%%wwؑ瘁[vᴴ:2Ǐ[RSS_f&G2zoEWT\&t&EN|RFSmKf{zzi5i98Բ2˜ZH4FOOGiܑēP(;z8g p]wq]wQ\\̅ 駟(--h4R[[+Q*JIň$&&=zpwOo, foπOF233Jowj֖\.h4bXPTU[k}~F3xz± ߾};;v@׷j A.STTǥnnnRޯ/2]lvi g`Knѣt&ynߑZQڛpvkjsUi7Ygryo 8'Ӵn/l%d2edgg ^ |}}[(++#77JiBB;nnnh44 jJo?O^^^m]Wڴ5IGӕAhjuFT*A9f~gA/bdZ.4FP(dh4b41 :/J$h͘KȠ/( a x@L&)ɴs(Rp5R7< ]EvNׅa*_W,ǯx})}RҥK.Kk;`07t%%%Ol6j5cƌ!$$7JR41,ٳ=}k3޽{%?b w vt՚Ͼ}:Qz {Ls׷"p Z-ހ^2jX! .))9 н{DQ|@.יT*or;M^W~~~TU7B!f[2EQ|sFuu4Jn/: ~!2~ÇS]]́x׹[ݻwgAٳ'Ǐ9~madN1Y ta}v^^^w A8T*wy{{O?+&C,6mD\\ bbbaʕsU Çpr 6|Ill,yyy7e_ԩS}vՅÆ {ѣ hkЧtӳgš(--&p PQQ={Mq(//gذa*ch4aԳ /Ɓ8{9%##!C͏?7|VUUg(,[ngdx-pr\?~41dff0?JJJصkWfM!??v6 QP1~rB(_O>%K0n8r Cm(IN.si6lꫯ2dtbժUߟ>ȉjfᅲ"cs=bR-BD3g/!??6G5oٲOJP(^"v \~~>[laʕ<8h4$&&gqbŊVRSSlm!4hP}v233*|||>ݻ_|~ }Yx_~-kd2oδiHHHh oÃ68|A rjz% n 555TVVvh,&i|GrUUUi&;w.ԕoZF&fE\&LR{RɤI8vX6"ڦ͛Nj/O<_W^}U?7nw*jܧ+hiRSSÔ)Sh4TRmYoKFf+ ͹>|I/^ є.Zپv{]J~ שj-Zy? Q&y۵T6)%%%\KjktLUUU;XRB3\8dȐ2~nGjudSm۵i۷!?LLLUinFjenr\.\&>|U~ߌ ˉ`С7&v1cưqFrrrZmG q">ZJ† Z TR }Fl{q#s[L&gϞol8BRRhֱGCPPD 1wD-i62o'kppp DVWQUU(P%AP5Jh j(R[0g>St:x]{Kut:; aaaKfB!M:zUwugAハFG`РA*GJT?DރbɓzހRj#TVVbX2V+K5jLٰ?G0nP'G*jwu\UT*Gvv6111]^Ο?NkVkN?k Biii]nnnٳݩ}TVVGTRihLԴ)UDGGSUUC/\[ #5a6pB_UUuЭS\\zulpr; n;޽>15` IDAT{Q*r<==OKKCٓ j>P(TVVٞ$-'T[neԨQ&n[pUDQdڴidggSSS˱l!!6!}@.3}t>6]װTO׷ 鉛[{*Q5@L͛gj i/Q\d2ul.zɸqHKKO>:gx弣l^_/" ]^pii6D݉m JY.]jq0`FQ %jiT̷Cgnn1Lt:|||:j@ϫC8O8u8v] i14+ܮq^oB, eeem]ïnܹ/^ShSh4ieee_cWw%%%>}N$p2(Y~=w>>s̷vq̙3Yt)z^|obի*_|*zr\(--eڵ]ݻwi&>N!Ft'bPQQ[o7o^ 0c =z47o{֭wwԽ{K/_EZ>?\+;PWEq{`0X~=Uf4ٷoFU>SZAP9z=3f̠~unnnvm9rD}^ܹsYne;`9x wf„ s=lݺ7rM7lRSSi/FlllYZsڱcǽǏO>>>L6 LFzz:|ݺu_؊+~ e\c"ɸIJJ_$==ٳg7(ՌF#Zת9((H/u:te<==/Ӈ>gy}E?pTF"Yb |׌5ѣٹs'#G7lCk ===;(pwyǏG?3;C^~^Ax'xHKKطo?q ())?d…,[Y?Z'/| 'O5%y//vgA+gϞƲzjϟ =s'N83uN+f͚5U0;;;ࡇb…<7 Ο??aÆ)//_gϞ̱cZ9#|nO>K.)bmXr%SN /& *5cǸLEmm-~~~-L&kWč$pf͊o rss|A׿Ptrr)ֽjƌ͘ SCZ@Rqw?M>1233ٸq#z%QIIIQFI N&y( qx^~e/_ѣG_ʨQݻyP/\pІ ,\MkzttDq PQ?̔)S咳1Y,, f?kj.Tv"EEEٳI&% Wng߾}L8A׿lҥK \wu){}K.Ul޼?aaa<Ц+ bbb8{,:;us[ed$$$wQXXHppUfdd[߿'$uǏ^駟",[h#GFKpBয়~ڮ={rY}hDVP^^d^K(..&.. ƴX,6jjj8~8Çoup{:qć ßu:]xIII={dFh,vmܹs{G>}5؈44Xo t:ӷo_i9U*ciQ]]  9™3g<1b[q&H.~w5@1cnS(RSS?̣9sgÆ z1bD؊*J񹹹@Ѹq///eԡUVVRQQAn8s ZVG(;v ŕ3@frr({キ֭[_2e 'O@3``ذa1Gm9 ҧO VZuj`*.;;l-J6W(vFGG˖.]ڱK/mApp0ӧO(OTUUA~~>>>>$&&B|5Ǐ*l6Z,f-֬Y~_}UtҀb1l6ϟwmA@rE s¸IJJrRnVS$$$PRRBddd{¯0j6 \.YV{:OT+T*Qզӄ/U&q뭷2o< fLmmmHHbb ~_c !$$/r=H? ZMbb"ٗ4:rQZEZF&RhQoܹsI'R[,V={8Q7D@@ӧO'55!CH>vC㍩IHHFƉ'={6V+cǎeK)Pf1h z)FMYW~R] ^dkÕܖ.]*^,p/pK.z뭛\4k֬xvtMnfΜŋ/&''ݱc̠͛73mڴ4nO},Ziƛk4tʦAEjWc;! 6¦Mb-Z| =zt=3<Ã>ȩSQ@.c=6/8RQQ!X,L:u;VjCjka6Xb=z`޼yz̙3ضm[|@HHsHހYyɀ,( ^rss_ xK.:XPPp#bSs NSO8 &_z4nڵRLè$o4+:x|}}Rf+p 8#Gr {=|N IHH8o|7?~֜'i:ٳgWUUI999jjj@.] )..ŋᇱrܓF8ry睛yf̘q*##E}fO?}ơ_xK3tHDQdObɒ%d2DQdٜ9sAu8СC&MK.-t钇(@vqȔJ%%%%ɓ'?k׮ŎsUUU^|M8m׮]PT\\~ƹFIL6l{oܸq R%9u)))L0///)5L__V+֭CV3y? '"VUR~BӑˬYۡB 裏q5vC~aqbbҥKrrrf{yy-oeGV,^ٳY|9r|4u;P= f:"z}wO?t@ݿڸq@pi&y 1eZ<1c \~~W8Qx"NZcjpPもvMffFR1|pFRw,I&?8gەx㍬Z*[n999 7TUU%^~k֬ ]lׯjh@r}ՙjlw.QQxzz2gvA[)0BTT~; eC.N믿S2|):;;dV^Mdd$>>>HUURٔRYYɮ] ))ѣGӭ[7l6999lٲ_L4cǶ8PAv) V+O'!!,P(HLLhѢE>'11!C zbB0L ԧz|\.ݝQdkP* 4.]RfTb-dKx㍒ɩ+G; l棏>" իW4׏ӧSUU_|ڵu]v1gGbyGyGrz]wgɓ̙3\ȑ#N|WpS޽P$$$|>F :Dd2  _|qyyy%&&퍗:NI9sfL&;RcZZFW<&L@V;- ϖ-_^"XlY~~~$gΜoٲNNj/ȑ#]'>> bWNVV~;AAA`P Cிz*++ecǎ}|d~$LDDC=ZXXN&MWNv5C ҥKx{{$peeet:ˏ={6|GF{=bbbHJJjS?&L… RV}SL+((n#pkkkeg͍6lSC AƜ?~̸q㤼zbD3HII z7\~k3\@8G][uL?Ν;y)**kW?&è:l0FI~~kAhٳgɤI eHE?ڂ{٢AuԪ.\Ç=z4VݎGeΝ۷ JKKe 0zhX,vt:yg::RFáCNrmHTJѣټy3ƍk/TNʪU{[-|'̜9(5k/\"===zpK}CDQj9Փ)SPUUEHHd ׯ۷ogرһwcǎs>54 'ѣywYf -jSGF}:ƃ>([m&xzzrw@ff&Z_~tޝ/r1z= Hdd$eee_~~k„ ;vRd8 Z&))իWˍ7rG JX7ŋ9~ zTTԲcǎ}2vXz!w2j^zIQ_wy'Pyc߾}K#5y"##;y뭷̴a)**"??\JJJ(--VO=aaaA\\z n駟/$)) Q[9yO?iii4M]#NELFhh(9ră۷oϠ.:M:9s&/-BEN>MVVyyy L&A&**\ҨrK9y5I%>>INmbƍUwww_|fI ]yr*++:u*={ܳg) ?L||<&MBѠhU5dom۶1o޼ @ߴBp-**"''GZjjjZ )X 777!&&޽{KzΦWlu}ZZgX(//ԆMBdduLNokRj6YjĐߦ̚iv{Gy%#$$pyyyY~A(JBBBɜa2$99|Ifȑ1|6CѤ_Zɓլwww[+ , 555Ҹ|}}>|8ՎhV19t(|„ H_*Ki&"""7nӟ'&&F*d2I˔j%++'OrCii)]w]M&S<@ii)cƌᦛn",,`icp _v^^/R JM3ĈB1zhx6"tl|gTWWѪ9ls?8P{A֮]KVVTTT89 EDD4isΝcر.-ݽ{F͂ _~aϞ=TVVRUU7Azi&- zŝwIRRK,!33sFpp%%%vgudc8خ. \UU/GH0`(J<==%CcX(,,ҥK\W^yɣPoiΟ?c^^://'qC".tÏtTWW騪Bӱo>֯_/㕔hf̘Ֆ-[Sl r1͜={zeevV^חQFu ;7o`ѢE̘1fM!y+-i^=vؠ1c#&-٥f]KPߺ(Q HŅZv?E .\ MEQ&]dnpj} u!Y{rl6z*]4V:"3So4ҀnSCeYrbrǡReY8Λ \0D2D@>GB,C,C()%Ny^V Z  JAQ image/svg+xml pychess-0.12beta3/pieces/leipzig/bq.svg0000644000175000017470000001534012161415524017131 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/bb.svg0000644000175000017470000001532012161415524017110 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/bn.svg0000644000175000017470000001525312161415524017131 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/bk.svg0000644000175000017470000003105312161415524017122 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/wp.svg0000644000175000017470000001174612161415524017163 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/wq.svg0000644000175000017470000003047212161415524017161 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/wn.svg0000644000175000017470000001462112161415524017154 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/br.svg0000644000175000017470000002246712161415524017142 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/wk.svg0000644000175000017470000003620312161415524017151 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/wb.svg0000644000175000017470000002441612161415524017143 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/leipzig/bp.svg0000644000175000017470000000122212161415524017122 0ustar tamasusers pychess-0.12beta3/pieces/ttf-Maya.png0000644000175000017470000003155612176710402016541 0ustar tamasusersPNG  IHDRMbKGD IDATxy|@UU @wL@@/_Q GFee%呙ɓ>ù~(**~tMLL @&?G܏ BGG'}{ϔ wǜQFK***~vB@@@AAhmmţG}EnN+ҥK|oÀ$%%`X[[̌\'t$%% .]]>#%%3gɓ'oI//#\TTTǃ{攕3i۶|ɮ]j*yv®]0|p\= ?0jԨ(aaBTTD"_6Ssrru)++SNJJʕ+ ''WƣG~,++ZIII 8y$رcHHH@KK ߏpAAAhnnFvv6WuAGGBBBx-h[rll, Ç8s >}Dtpp,..SRR1C@"aRÇAVf{:WgeegϞq|}YY FKeeeW@hhhrll,Š+ cի~ ]d?;K)&M|" H$hiiu:L< <`z;񡲲Ըw^-VVV~YePPРD"TcŊǦM8@(**L$˗-[v⧟~@{@>333lٲ>>>,XhQp8;;w{NõB ,, k׮ŋiTUU͛7~%ӧOhiin֭K~Q0HKK˱;̝;7yZZZ,XxYӧOGdd$ˑ'O$\pA >>ϟ?O;v!$&&ָK;vl+<㏝v`ӧz*TTT:0W__2!:رct/^DJJ Z[[;Jɓ')38::cڵ Ć puX[[+WĐ!Cp P˃ SLS***wYիW\|իp555\]_WWǵ f;||l߾wFCC]ABB h##0k,mVmYYƆaqZ{_|qqq3g!퍪*rmRŋ۝؈FCu{/__67ԔPV?>x֢ ۷oYYYdffʂ,["55<`ʔ)򺺺,X!..cƌa:===Lm͈pܾy5ĉ/uV{ŋ1k,c8<! իW RRR Cbܹ"ږcƌPUUmrAP ̄;w=`VVV044)++nJk0aH$]ۋ/x GEQQӭ[g̘! Xr%DDD~ HNNFqq1޾}Kn333͛A"u,Y[[se_RR<==;,\!K߇*++ٳg8,Ymmmdgg uuu> ˗/Ԟ3fYXXPpaƍx5"##!**'N`Ν;OOOCEpp0m>}:xa=σmmm d2iKO1`& ֭[CCCڟlݺ۶mCii)mm{TWWhooǏl@nn.bccQUU6ߟlv*f|')))ŋ1m4b͚5WPPCP]]0"ŋիWXf \\\X$?rGuu5qŐYf1=~7fff\;;;*Ҿq)D"޽{ذaCSS{Exx8FDXXX|J~L<GH9ÇjHѣQSS?8~^֭[*exNvv6rcc#۱}׮]mPPPӑ c3f b \v N§O1?@QWoܸ111[r̙Nmv >k2L:p_I?/_Q-b7nܠ^^ף%Kt{^v8SSSܿiii 1am,1<_MM z;'''zѢEW};!ٸqF=7}"66mmm4h׶566BRR~pbbbE\؈{b޽Ğ={h[JrA[[8~8vQ5jHJJR(l-k}F2P(5 SN;SWWֆm۶>uuuXv-hH|%T9XWWBttt=K>NNN ||L#Xo޼ٶvZDGG3 ww…^_XXY=ӿ^II mrܹN)8<[ZZp=^Dܹs [ieTݶH va^nj޶mڴi, NMM̛75kMۖ/_>544z 2~ {aݺu(**L=D",UEE%L477͛7R [Ykaa!κ\II qFsSSSãG;:Bu%򒲲2,ܿǓh{n /+^W 猾|||(G*&p5iÇ2 IIIՁH$ FFF$Ӂ>|___Zzd /_\~Xaa!<==\8Q8r8"6w 4fΜ0lҲW'rcR%̐@577c۶m|N&M!$$ii.ϓb\v CL<<<(Ǐ朗gbb8dddرc]qI˗`+NBB閗Ӕ_ ..?BYY =ѣ >} mmmHd#koo??""" ((zNn3`)**Bnn.###,Y555 b[LLo~~/6 vϑaŊfZG3==>>>Xj9̀DUUUCCC&d{[ܹs Tyyyl}q,#88SUULg"صkW 077Q;?+Vɉ7([˒wH$$&&֭[ ׯ;'''N <ś Biii||| AAA$$$ ##ۡí)))RRRi+,,T;uHzz:ٳgcX|95-’%''ѣGطomjjj&H$֭[9AAA(-- Oյ5/ذalO>yʄ444ĉsB@@ӧODga޽{pssʕ+Y8wKM4!Fx{{$iͽbDGGWL:UC-%E5%066>3XăPUUTVVw4"##_p!-? gϞ;x`라۹NNN4gSTTD^^ӊ4|||Xrvzjl۶#/1bx ݾ) $%%i&3fիeZ&L`>Kwww :V… PWW͛^~z|B&QTTM92LӅh̘1'LoO>Yfff4iSg777osby NaPWWgz9V*vuNWuxAhh(m{JBBwFbb"ӈhun#{UUU}kP9R&=== t\t{S8r8aaay%+**ɠ~ruIxdIg>|@zMa&O%ppjjjvoܸqhoo7ug;vl*z!_phH$(((~q[ݻPQQDZ78##ժU3gN=Gddd &&G__ߧs:)xp o$||| ~s駟u6m¡CIIIxyy'wԩm۶ 7::: sL.w޷oߧ+V0`p$ k֬/&M+^3 زe Ξ=#<֬YC׶~Ӹ[l3gX.[:|a #"<;;RRRW<"3u^ׯ_HJJ \x/_$)F&qE\r+is`plܸgBͽj9ӧO([HKK'O{ppuSLs玠=o`ҤIXd .]ĵ:HIIuh^t":]qIpVo<{YYY#߼yß 7779scƌAaa!-YEE>>>صk?M6񹺺R6oX/++y+Mb]OOGQQ>}-=ʳTym۶u:GENNTUU!,,ܞ61d|.dee!##ףdMM .^T8J[[[ŋLن}zJ` I3WM|f댈ŋaÆ4 &&&.!$2Ǎ:bٕ-1))JӲSLi8댰Bttt|\v?0gJJlSuF(((` UyͼyKs@W H3⻤?gI.ᾶ:3KsF_.*^З%ֿKsF_}n>>>#wz5 ^uۯ;vlHh---]J`4O]|+.\4][cŊP(<ϷoҖ%FqaذaBss3JKKڒ5C_\R'L333ZR0a増.]jDFFs^^^G~~>㱱EfFPI3{ G{ #88033{ٲeKCTT R G& nB]xMjjjyxx8ӧyϣ ϟxnXl k.ڵ ***27(++K=z4]kc``@z500Uu]60GNED:Bktuuaǎppp˗!""R*/G @+@ee%}2:/!HMMerQN***pX>}cVSS`ƌXlwm:ìFAuz{gll;vLJN.]ʰDcf?HOO$322> 2---XYYќ-33666{.tuu₤$8pPRRbE$\\\mٲ%:]qq]AAq\O4V^mAt~V9ssh J!vBհMؼy3Ǐ033Ccc#bbbi&prr#.\;ϟw eff{կYFɓ9b (,,>اOdgϞAUU} ߗ^ĉ{ـ(TcccD@II麍 DN^^B"(j6m­[GGG"۷bbbpvv޼yӧcݺu¼y ,KKKCtt4-ZQJJJYYY؜9s($7?gMM űo> "--Wҵ b߾}J#%UUyaa!.]www3gaPPP0uTkNNӑjHHHȈ6ӋBUU>|ׯ_@ @GGSLA0w\#''yyyHLLٳGqsp\_TZZz$LNWWyEuu5f͚ɓ'CRRba/^$O8ALJcLn9s&N mmm+**rZ\[[ ~~~xd2 cETd2/^H#\qq1<<<~2m Յ1ەM64003gܹͭp8::vʈ3g@LL SLQd0&͛7L:9 PϯS[tعs'Y2*6l ƎQD ??={0V6P(X~=lllp%̘1WL;s??^- `thpqqksqqG%++ K3 jmDD"59r&ݻwΝ;Xn6n܈#G`̙t#܇o>|8Ν3 jZe>*PPPkSPP@II ]6 z-1vÇ􄯯/455!..Z[[2o߾ի!**ƢgΜDªU uuuʕ+ C}}=1x`AAAi䥪9|;'#3Gj{!##7773X{{;_OOO+؈XXXP݋ ;v ۶mCRR,Xaaaxzz :%K백|ǚΝ;1aXYYqV_ 8p]2<QQQj477ӕ /{,^PUUʼn'蜦7n4.]JH&q%5 pqq|5#|}};F'''@ Gĉ}H$BLL K,9[qq1?Çǻwh: .>޾}qa…prr5޽{ÇEEE6r)jҥ8s ޿S%|H$1blق2cc5m֬Y]/_?ڵk,ݓ6m4 11>|]Vϡ/^@WW.""p(++cĉ8w"MѣGPSS=zs΁$ YYY8wLLLpA~ ؿ?0qDhkklk׮ҋ/rܹA(((L&;l'!--S.]tܸqccc ׯ_g;wb\wK'N@YYDqnXҥKL ,9*222pMCZZ!773f ϾKJJJ>2l,<==)ׯ76lgU/@8~8m߾}:?DDD0x`Ġ 8 ,^UaRRR;vtYK;vd޽ wÇy"<Ő!C:󶴴Ą /ڶoߎ4ܽ{\yy.˼'ؒ_b7@hh(,Yu_@G^'/%Ϟ=#77999dff~7~x">>kivCRRǏz̝;C [9r$W1pϧ=A thjjt(={F8::_ƴ e111tK$%%gM8@!m3ܾ6>>>#:/_ސ߸q#._rEKzö 6]ֶ`>=444t^{nW\*IJA^p)Ʋ4}XX7m;{,鰰^}ngϞwLe[>=<۲mc߶CF\\\߸qa@"3z۶iӦtٗ[_+UMM 3gBVV m+Wj)zijj I v`p߿֭["Z,/!PVVFjj*[ӕm撱,_###lݺ_禥~l@pxN(++ς|ˣ!w^ރ*x&ګiSIENDB`pychess-0.12beta3/pieces/ttf-Leipzig.png0000644000175000017470000004670612176710402017260 0ustar tamasusersPNG  IHDRMbKGD IDATxw<_:BV YRJݤ)y*HjoH$D*2"B#{{^CYVnǣG~_~zO/~/'}tŏeQc?7݀0e|8fccC^^q;7 @Ǜ~= ıw֮] 666tǜߥ_rA3Ŕ)SU26}ܻwt!88Xfȑ톆c>ߓ#""!..kkk'N 2TVVo{ɒ%qQDGG'%%5k X}W\^x- L)٭؃ۓ֬YCUTT|'WWWcǴǏ?` o߆ ޿7n78111#+++Ԅz@UUԿW H$ σm4c<LQQ{.smm-mFIIIeH$1dȐoE"PWW'%%k׮uuutKٳU aavLcYYY$&&ҕ)**3҈'EEEӞsP(aÆAKK fff% p޼yHNNƶm`gg===sqq 111L&cسglOmp,,,011]WSS`9^lQQ 7oޔoFyzz֭Ew FFFlllغu+&MD*2dH㍿FiiiL6 t %9r@ǤAGGbBÇwww1ab8Q__hjjسg<<<Ddff (++Cff&7n`066`llL{B~~>eIT&MbŊ|avI_cؕ6fp\`ddGh E]]}܄ ڿF)))X`ff둒*Vdeeٳ.ĄիW֭[ppp0{lի@RKl22 ++ NNN8u߿PTTWWcHBDDR(((}}}ڵ qqqӧO㰰0|sJJJ󃏏kw-(**)))* GGGRvv/с!:r ގϟÆ 5VX+W۶m QvڅkhjjBLL ** xzzB^^{E[[lmmx78@^^ 666b<₡Cښ({U`˖-`ggȑ#AP &&kc9VV BCCݻ-%Gбmx;uuu|t>fbbDtվXbQKK VVVx̐N͛qMb֬Yt(++cҤI8z(mۆW! |||`ggk׮!33 KP?+ưaÐ:TVV|A7(,,1nCUU* 0Ԕ8fccCKK _2f eur===h?=}rÆ bbӱرc]zzzhmmł ;;;CEEEEEǏHKKĉq:c8,],,,t'^+7(zr̟?ʊ,PTL&+ UUU^h6 %&&O644$/ZhBjj yym0rH VVEEE+***:E;ΞB>\FFz###vܺuyĉ7}/✘.\7o;;;L&CKK iiiprrBMM [ׯ_'$"## QQQ2ܠ08\\\ūWfffDFFbС7pYÇ۷uڂiӨϟ?l?II HIIAVVr𔖖;QRR !:R$$$ ''GYt)yΛ/^8֯_UUU@y.딒«WLJ+V@II#ҭ];(^eee,X:u*sNL<Ν;aggG6͟?ta͚5@Gʖ-[FP\\ڢ"? :m XvWg4Ԉ?|űtR$&&8s kܹ8uX[[CNN'#ddddǴq(A544X *((@Kꢢ"TUU8҂їiWL|ٳg##7nׯ_g(sMs]={ᜉIkovW6l؀{)`PSS̙3s233!//O!++ JŌ3p5| t$HXn58www8;;ӝ;p888ARaggGWvԨQuQ999a@PPVVt#))X¡ =iOhh(V\ wwwÇ '''\xX41b011A^^>}D ͛WWWb%888@uu 4hH"?6FJJꡎ( .]qa„ >|x***B||< vvvm=ZZZP(Ďś7oVVV<{ \\\عs'q}10w/___"""3ݺN\v khh+ ..dff #޿%%%ر(++ðaÈ16x5m֯z}}}$''CBB]~9s&ZZZ҂kBQQBBB''' vTWWB$''Lj 155a :Ɂ;w> vvvCMM ^¾} ,XGff&ݚUQUUm8qGss3ֆ4}999(((@YY( 2aÆaԨQ Ąv<}nnn }mS}}=&OWbĈ8|0LMMk 0ajcǎ())EdܣG1cXh1HAaa!tuu'i&ddd@HHk׮%666j }r&PSS*** **/Rd x;a9r$eee BAAW?h ֆfY{{;|T*( ;O;{Æ #H_c  ֯_+++\|/_F{{;|EEEIbffFkk+LMM̌ 9s044ɉc:񁯯/.]J֭[kÞ7 .իW t`nngggݻ"sqqA__8qZ[[p.:cccTTTŋP(B.\cΎT:t<< !!!:bVZ/999 #۷=Š+p=:63ddd;;o>?'!-- OOObС 6rqq577 YYYBuu5ƌ̟?[n@kL:uj/̌JyG$fΜ (=z---H$cƌԯHJJC0K'o޼鲎L4 ΆW' 4~Z5kN> $''6f((( ,@HHHmpuum}% B .]Kbƌ AНCXXnݺooob|iaa;T(((DZd"hFQQsĉ!**#GohkkCQQ>}x!%%\8;;#33i nѢE ;wX[dee777] L333'dffXretL 7n %%t |||2d1~xxzzb޽>}:JKK{=zŋXv-RSS˴gE&1n8X[[رc8}4n õ^ZZi p(9rd]ÿ{C@@`(,,azҸr ?+W d444`bb :o޽{F@@@s nرcǀ{)>},Y/^$Pzcl@[oXlΝ;vun///9+c:<[9Bl.[GC xMMMw=wϷ%^Oװǩ/(Çq1<~#N:~~~bI'>?544th# **Z)++kAdd`/^ ??׊C[[zzz-ZZZ ܹsF3WWW466"((mۜ9s‚5ÇHˢhi,55LiiQYYf }#Fx //͛] $VK5eeetY>|8~jdddѾAMAA 999PJl &;%-- ~H)S )) :::FFF߫ixV33?|t2UVVL&ws/h011{#g ]322 33swll,N8zC nǑ#Gc>|1c@oPfff!;;@Ǟbbb ..?BRR_mz*ݻ7.\M6Q߾}緮 6T ś$%%TAQQO>޽{޼y3^| AAAl޼&WTTTlhg~wwwY._{NथPTxyy!==z!!!GGG؁/7!"55u-MͩN111멩r~!,,L;͜9D8/&,,AT*RGII J(OtrŗRRR(**k~SN={^IKKԩSذa- C M))T?͛annt);;[pƍ[LXҙ|cܹFtt4vލ7-[[OgcggŋЀzZ gφQWW77y&]p6L&bGDUWW#!! ?G2aI^c„ r lق(DEEa޼y>qqq>=_ J"''HVHJJPCvv6݃eQQQ={:,Y -mm)((@AAزe hyΞ= vx6Ǝۧ466r͡Cw &&W^海nB7ŋۦG3۱CzTP(۷[neX%ظq# 66tA4M~~~BD'iСCm ;w.tuu1}t|\4M?z۷oLFPP*++rko^^^ԑٳg899Lg+4 JԄJբ|5I޽oS2$茽=Ν?݃Μ9WWW|[>ѣWWW%C ˗@W3tm{{=>nܸsW=aܸq˃>-[PSS333hkkE:dpnoF+&O ܹs/T̙3OבHw ***HII~{%ĸ>D||WW^zE5fΜɐoHg)ܿ .$ԝD]]A_hGcbbYVPPbbb 筭 AAA^ݣfp3f tU ǫߢ}R~lCFF|jj*U)EWޡmΐ^__...CTɄ#9hILOG+ >}e0k1cn 兲2|N>˗bbb4tܧuS֭fY///hkk6:#556m"ɉ"!!ׯ_GKKKIvv mSǏ]UUUaȐ!8q"pmXYYaԨQ TQQQ$&&|YO=1^xOOϯsuuׯa`p$5558r`ii NNNBg733H@RR6XhEXXa kHHHLKKnll$EGG ((>>>֭[]ޫL:bccDý#TW^M8ގsaǎ8p% IDAT/߸N#-- g&J988܌*١&&&ooo€xxxիWcÆ Ws!\Eg?~<]}joo3lllpi̟?<<>BVVVΝ;8vghjj+<Ǐw/L8bbb`bb ͛j8998q2=Ϋbbb())K}ᄄǏ3L@YYFFFpww|2PSSoooBGG555ĸq㐜͛7C^^kp4&OC___?:;v`\.,,,sܹR3 i"""F}hdpF-46000]zj\rK%RRR‚'~5GFhhr ++a`_zyyr5Yqg'744Э:bؽ{W:;;VoFӷ'OZ;we}66cbA3:qT2DDDf8::LLLXn}O'%%Q:q^^]liLL  !!ٳgtzzzՅ">$R}%;;{[Æ }aӧOĎʐ!CP__Ox'// ^FyyyXnyP?ō7茄شiHt:m8s ?N> HKK3ӧO7:uOvMuF]]g{Juss N<٧:u 迍VZ;v0H--- rss1e`ܸqɓ'k.(++c޽8<0adL2044ē'O|RRR} |0`}oץ|DDpʢ~DPp5"_,wyyyZ QQQjݻq{^^^:p0?AO؝{&kYڢA-} ǖYm?s_M}QSS:ǃJB__$ ߻y?,ͨXYYAop4)999TTT 011ASS;8رc aпRҠ/_DۥK~wAii)***]˗/455^wU{,""" ##c",, :::Xf allr@dpo}x(((_tt4_>0 FpppǏGmm-޾} *:ݥ''g>\XX[OOG)Y.]bްaC˳g>}/333f͚$%%aϞ=ׯQ]] nn_] //ff}}~RMMMqqO>%:tFFF8wٳ_w iK.!00;H$...;wܹsG3X%%%fkdprrr 9s@YY&L`mkdd M6!''`"-N{{;hR_^W뛗PBKC͛vXYYI~S~\'bŊӧOSTVVseeePTTO4駂J"00˔L@/cW Ņè4zXb|}}ɉTYfoxxzIHH,--tm۶ O>Ŝ9sΎ%Kyh|VVV(((kST$''#--{=] bbbXz5N>L466=ǵk@"ן׫JJJիƍLgXfMDRaccnjߢGǏݻVVV߿Gfffohii;gff͛78~z=(I=z4N8]]] o߆.`$ Ճ"Ƣ?033 ^^]Jx{{,,}ۆSnccq՟?>۷oGW"Bڮ\еX/mxxx ]]]999sLT*ёݻVWTI[gϞ۷o3?~SNUIIIFbb"]&ہJm@% $$kd4551jkٳg=*g. .,,wKKo޼!@SSWbbbؾ};@???RXX}j̙3aaa H&t'j}L`pѓmmmVUU!,,O/^CCC"&&!8ގ}jocPk Fp͝;wΗߢ  HKKKh68::… e 999Guu5 2cBEEwœ'O73//SXYYQTTCCC,[ \\\#R0 -棚kiiFGGĤ‚|رo~D,&%% Ȩqe̜9#F˅;vń ܣ]18UUՖyQIׯ+++~CZZ͛9s洛s w 7ozݲAPPw PQQAd^nkkxyy))) 2Waeeʕ+{wʕ}bmڴiOQQfϞM6a߾}prr‹/0e̝;f_x?W:e͎1uT011hhhh QQQ]elll`p3f8gBII 5k6o\w)/իw¢W7111*}M:555}uuuرc,,,qFTVV")) ***xeoM't!f``<&&Thhhݻwq]v 477k.lڴ7,nHRب _~Bprr,,, ''Ç [nEee%>|BVV@SQQMgooo2)jhh <,wEӭe]]]1o޼>(~>~֭[ե}}}9Tgϟf9*gbÆ tCҧ-'OVڵ7 YƗMMM=KTTTpq@WWt޼MMMHJJBdd$qʕeYY.\c9sׯ??+er {dd$3W p ⸩G*UUUbﳠnٳgpqqqucʔ)Č3m۶ϑ>iLTUUhشiSz^܍7Xd{022"d+;m4ƍ}6i:55ؾ};!7bMSS8s Ɔ:Mɓ'8y$ÃBH$XXX@CC? mmmxbOp%ر!;zux*ooo`bbƒ NNn=M0o}Bcc#LMM:3g}( 9zdp[nohhUyxxt۷eD`` py=/// | GUUU全(/ILLNoѢEtZm€R%%%'O_kc.YĔ3&ݻwϟ?>qqmuu$??W999Xpa\\Yv`v700 uuu΀ݻ[hhh@CCvݻwoӺrJ#$$X?~ۓt;vy222edd8rWВvzdp6LLL!C` g޸q#V^ CCC0 :(--ԭO^oDHH@PPSS BHVUUuxxxG&3ӭ-\vvv' 6 ZZZ033J% 666HMM͛w^; ##xyy!&&042ӧѣ EDD$SSSCVVA}, ĉI7RRRpssc/-[&थF?dddp NNNDٱcBWWbtP(x!BBB6B qq d2,_|]BBEAAA 22Kǯ3uΜ9$666lݺ:::P\eeo999k777LMMq}L: NNN=injjB}}=ZZZ,dee!00X`$तb &&&())A@@HOOGFFttt VVV899aĉHHH=0sL455ϧS]jhhepM5& Eveee HKV} %޽{,**œ9sLNF222ѣGIG:uf2Jv''{xgVBaa!222l2b˗(//Gss3 111hkkC[[gϞի6ᇄ̠Agl8z(]Uaa!\]]qQTVVbѢE kو7 'Obɒ%tSشi>} 7>C#  & //%bWII ~~~~goo72}-(**͛7466BBBT^^0lذKz /_1f̞=lllD||>>Btt4ƏOs())Ks񰴴|Dz:>Ջ@"z j +++:Dwׅرc!##dddn@AAXtH$^nmm ...(((ЍEEEٳW= jC ꢪښί___؀tT*WUWWV13666Ԋ *WVV=SRRBZZpEb/S nnn$kkk$&&BAA)))diiyq(// [U= aaahoo)^|I۶m$>|@VKK v)~vz8###"Hnn.:\~~>XZZ YYYOu/!!ϟ pww '\vv6ljr, `nnCbƍa EVII ##DK6+!!"RZZ%** ˗/G||< e֭[_9#ϟ? @{ #FÇb&.ݹs:2@MM *++addD8p7nܠ?@zz: PVVd-Z;w ڢ݃+***qbRFF`ffGGG((++GGGСC<+WrssQ^^Nھ}{Yee%Ξ= 6/xK\rEEEQPP۷#//EEEt"""0 lB$korrrBZZk֬Att4@&akk L&J73<<<#ؐ&LM"z4oܹs@dd$Lw"<<Caa!?۷oCKK hllٳg;xxx>ļy,fAMM 'ODee% 111())GJ"[8;;N[Naix1V\ wwwݻw;v,akk ܨEii)]!C , )))ؿ?"((XģGzpmmc[j$CRRkߚ5kPQQg";;CA__ŬYYvˍ7M'qqq[wOqqq+V`Xz@5^>( ߿KKKDFFbٲe8}4j*TWWCEEt ϟVVVXZZBTTؽ{7jkka Ç455i&(++CYYW.x5ݻPUU񡶶AUTTmHjs/֦LœI|4)zJLm",CRI9_U$cYA-/Zf|phknp'O.s8R/&Nev7az#6V ],pؼy3VX7o"..Fxx8h4ك...pww@`$t:j5FGGP(R؈!0 ")) `Ƀ96l???ּL&`H&!˗|4 \.RRR 7o@$FB 008y$>}wwwbbbϟ% N{vލ tuuA$!))ɪ6 0|U[[lpDDDhjjtjj θr b1\. 1333gΘ 999P(Ejj*199iQ#nJv܉4|>D{{;޾}q/X;h񁷷78 @ZYe=lRth4 ɐJ6B6ݒH$hkk`@WWd2!JiJJ BBB`jߺuv? M ܸqJ혞s8~8RRRPYY zL Pttt@O(Foo9+Wb͚5x=4Zq8zX7JLCITH$hN j?NGY<##׮]Cgg'nݺ|sW@@֭[:HZHL&N> ???C###OKb0D"_FRRD"px|@nn.:;;[4bсtsWu͆%ߏF\|?f36m h4x%_nEmkxxآ (** * ۶mC@@v333P(Ǐ`0Vaa!󑜜%GX.,p(..AAAbcca4厾> sbGGGxzz#//CCC J8w^77VTT[ZZ: ի#+Mt:|J===\.7߿fԩSX~=0==G8z(^zZ P0U2'OBٳgıcpmdeN3z۷%%%> f444H$rn8Ф{T*y1'mj[[[ֆTwaUI$H$d\xhiiApmb ٸp<"DbDtA@@9r.kͧV%GYY6ndeeYl㡸wԔ]{LEEE!//۷oR333hnnٳgՅÇի6d2ovh5ֳ.(("EEEh48tR) * dRj5 II_EEEprr[tAA[ qqq H`V޽{g( #p0V%)9jjjRPWWLfU?k.0 d26h>~XZ__Od2U5>Sl;vyyy'''.q.kG.ytrlL>zarrcccRt:Te}``v //#W;STݣkd2Y,VX,X,k,"BloT_+=i9_mB {e²v1_)> /IENDB`pychess-0.12beta3/pieces/ttf-Line.png0000644000175000017470000001771212176710402016537 0ustar tamasusersPNG  IHDRMbKGDIDATxiXSچ@XšE*NuhA,C-xED GebPQ*mhHU8*KiDuGZ]o6kĴBE &&nG:C4ܴbbbfrۇHKKCxx8HI NغukcQQu1e}jkki'OV:NSɓ'fff&0T]~<~ᝦݾ}["-33SrNp8۷/bH~~2uP58hjjXա$Czzkjj*ҥK 0 eÇ_Xt߻w/ĮGi[YY=:uqLI Kw^̞=[2;;;oQQQbײPPPc߾}À```ŗzi41rH˗/KB Dߛ:u ؾ};SL̙3G˚_KK }&Fֺu`kk hhhիҧMֵ:L!GGGtl]cc&N( :TGGG3lܸ}><<<&>'vkg„ زe Wl` 22RbR+/;wҥKthHDss3~%477Kq.m)O?ԟb=OOOχ@ > .v+X,O?_^.^@k_~%@WW~Qz>}9"'88Rez]]>nm;;7:lxB1cvBѸ[xl6l6["aľ?>ꌱcbx4ٲN FCDDwͻG!..Nb,ZZZؼysb(}bd|rJWe\zUY|zŋ<|pRlٌc$wZG@ qppGEEa+**;o޼Kd}DRlmݺUb+^AõkװsNq"|2̈qu(mQG^h4(4WFp066&&0AKKKmHNNڪpE[[%00ze044t}WV v,sÆ H"##Gw5. $z#rU@$s~j@R(QJp*JGR(QJp*J5IIIxBb0 444?l޼2]"HIIVQ.tIPPл+UZդR&G"+>6P)4kwÙoCMJpjFWW6mn l"##Ξ;wnYv)DEEɓ'(ѥ|\x֭!&tttM677k-Zd%ErERQS&ѧ[`AƍEf+]QS1]MDKK .o洯~X*j &6[5%r**:Jp*Nޖܽ{='33sիEEE %82x`/S 2DDDs8 ;;),~:)) zD}:;ܹsw8ہDiJs333XYY QZZJ^ӧO*JOϘ1 @x49 |||@-|>bccIFବuV{hh(%vرC:dڵ'ekׯdÇ't:<==^ƹvZ&5񸻻S2lUUUd/\2K 51@Gd~$Z5jLҤ"44T;`˗/O=x )_|)+--l...əa]-@GGG׌E;99 gg{eff+V p]A4hsrrVXZZ͟?ĉ?+׃)k TJd'N8xN>'˖KpoҡU˂swV^^^(=Rñl MO\.Wk}۷/xY-lll/s;wN(T@eeβe˺?{$ܠA`f&IC"JKKOuwl8PpHOOXUeQ{9twEEE*'P(Rh|8>s )>/!vڣsɰ ֯_fYr}3|>l6;Q<bb;tmۆNԀRxoŋO?X`X'JJJf+lNGff&-ZXx1222MHUQ@ q8 //?RRRhGYYNϷ%}Ituu8'<9s ?lmm5H]%8.vڦ~,Y˗/n#//݅ nݺ.\ 7HЧOn3gv;;;bJdd$t5U#n$={0?f²eˈ{D9S}AAAE]ǚϏ"""( +..lٲիWmBEEVX@X{޼.**芋aÆI%оbQO;rKr233iHLLٳg1rH"$j {{{ ;okQQBBBx.Pb! +<\]]&L@FF&O,nƒ0nܸN z7{{{\pϟGhh(t@_!۷7nb^yt:"""ۼẏu.$$/Tl"ǃFg@ pZ$:KΝChhhYii4JlA5]P.++,--3F<CIh{t:]@=ѩOp֥Kzddd_1c`mm|r~IJO:n_|7)1 nnl?U&|+ūI#C{{{o'''1U...mOKD'+]!uA#/''ҲťnҤIn~qqqM.6 ]]](4/^ ..Njː*8ggyΝshbNPhʈId2aii㉎Ce*iJ 2B{t*++1Cl޼YG!($oJHQ ֦5cƌc`` ^QZ^0?reeeoA3!iBG{;{w yo>"HDS8Yݻr_E%?D۸q#ސ \M0B9~_l mUFBBҡU$88X&o%$V\\Uubhkk4FR&XB+>6P) nԨQŨQ2I !Mp{AXXCIR4T bZ@mmD(rzWNP#khh%i]H*=Z++r:ju5¶lxFYYY}zQwdίͩqMMMHMM`zQImhh p8bsR石T_3t?xF#<\|FMl455aƍɓ'֦UTTt̙M:=ֿp8MǏы!WVVY`llm۶hhVlbobb߻rs熌9'663gJu kVBKK f̘!oLL 1zhĈ@ @WWҲq1ihb:X[[wǏjժ+|׮]ؘL&.ncc3yp"jjjNKOOGdwźulIIIH6k,ʴR1i$]1B"mΝƐ!C$Ҳ!@%Ү]J NlF!<JKK A?7DҮ]!G7nDIITg?c:O>Łx!Ξ=SNԩS5j.pѣGcO0{lܺu 7o ;22jBOBNWttt :~Bff&ӓ8 رcGSRR}0M&1D|Hoطoa`gggڵ UUU8qa4 6  j\!b)<@8RONN8u J!zj|ר1qD r !5k֠T~o;p)WnMKKݽ{NNNJݶ`tiNđx=LC+++䠶.\hRLLL`ff?Caq!7cccxyyUb+|oG UUUHII!ӧOMJJ!VRR3fP.BE<vU>Er6:|rRʖ.]}7opA!^"0)ġhje*!zE`0!`ݏ^|:r͚5I[othڵk5LҀSldz[[B}ٳgBPP:ho6669HHٳg`` >) N Uɾ 4fff2700AoդRJp*E&UCkor!0 NCko\.vCPM*JKMMؕ۷7@K[lQ^t&D/k"oۇx葺]4:9Et"IENDB`pychess-0.12beta3/pieces/fantasy_alt/0000755000175000017470000000000012176727272016661 5ustar tamasuserspychess-0.12beta3/pieces/fantasy_alt/fantasy_alt.svg0000644000175000017470000053713512161415524021711 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/0000755000175000017470000000000012176727272016015 5ustar tamasuserspychess-0.12beta3/pieces/regular/wr.svg0000644000175000017470000001067312161415524017161 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/bq.svg0000644000175000017470000000460112161415524017125 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/bb.svg0000644000175000017470000000461612161415524017114 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/bn.svg0000644000175000017470000000476312161415524017133 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/bk.svg0000644000175000017470000000561512161415524017125 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/wp.svg0000644000175000017470000001122112161415524017145 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/wq.svg0000644000175000017470000001364712161415524017164 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/wn.svg0000644000175000017470000001147212161415524017153 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/br.svg0000644000175000017470000000432412161415524017130 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/wk.svg0000644000175000017470000001132012161415524017140 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/wb.svg0000644000175000017470000001077112161415524017140 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/regular/bp.svg0000644000175000017470000000402312161415524017122 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Alfonso.png0000644000175000017470000002264012176710401016451 0ustar tamasusersPNG  IHDRMbKGD IDATxy\SW?YX%., JP֥U\*v-Zݬ]T*J!uԩS >;v+F \pᑂǝ;w҂l Z[P\\L^N:ja0hq#W\q|H2@YY].{ҥ8'EHH1.'LLIIտT*P(H!\bjqBRDDCjjjq/ ^hmmݑH$>|8r.r79>u1Bpp0Ǝ9<~РAVOJ%jkkQ]]Jjqkhh ]fڴiϜ9CL&#}= X<w]4::l6---(**BQQx \.*'ɐZ JLVkuEtt{ baҤI$҂"pQPrp""" HkZ}$:Lttq @II qmc[qyZCpL\{{;ZZZH;}4N>Mjmmm=0$y@ 6lSUYXף׽wcوBll,ÑHDX$''C&A(F꺱t.ksT1du\ .,, 3f bbbwI|&''cԨQ0axF$A(B 0%Y >R&NéSQKNNƌ3~`o#]s aܸq74Cѵ>h4~`tX8 0QcS޽;w$]?.\H8ydԩSZƍiii{|'N(9cʕv?f!;;tP1vDLڥU<_p#ЀVƧGN8ZR!:㶐+W2=.ļ;TAӘ/ =n(}oزe c2*✜ѣGΣ[OII+V1Ѧ2dIR]]x B!(>>>-lw3~aQ?hxh4ߟnU=P*t{G bL=ػvzw׮]#+ [ɝ;w(EԸJzz7}1vVg4c_(//g)tG G,Sy:Z~}\kk޶I.?2М;lNOk{.00glj>ɶQ feA0m3p\FA౏T/Wp^zV_v:S޷͛7K^+^gtxcE<VWۖ2$&&bܹ6 @ g| -$\+^FT=b:::PXX۷ogeҕI0قM}0LKnXSr#h46NG45Hg4!JԄPDDD98> &N#9Krx#'qI466:Æ SO=(Ƣ=N>HRhZ++27b1@#5,cp!̟?nBmm-JKK1sLtNIlw޼'|2=`x]EݠF)r >zޒ u\.褐$}QSO=6l\@+Frf1l06?1l0hfFw^G]~}:`rRT59s&mۆ3f 55rرcձǏ?HܹsXy۷oucF @LOPσpjCh nڴi}6nj%[bԨQ:u ^O:WKKkWpj!HzjD"KO؁DII H 7]oJ0Rȝh Z+))VŦMiSLlذUZ-qpWYL\i E) W^oS}qR*#G2S0R´LMwz_pUUUP(͛7{|\@cm- T* 9)ҖdS&pt 5=w@Ypyyyv'x|>ꨛb[[853-,̢x@*Lc>KBJS(1yda֬YP(n`  +`k/!E&o( .??ӧO$ǤI0i$ܼy3Q,a_3ziM*2r6M*J KZp(..Ɓ l;x1 S Ӫt W 89944ԩ`0r8R?T*Z#-s%Kᠴt@Nd22b~Yxgkkk u%`0FԔhlLJpA͛x7]ΐW_}YYYRpL <!Wg("I;5耔dBL۷oGUUՀ{ceB,EGG Y(<,]111󑒒<=^g &+t˂S(ڵk)]O9XFҦW`x>9̧ܱ/GjAA/ |j% `ݘ&OcRRnYYc9$JKK|X,nNKΝꫯZwIp:EEEXd |>YQQQ/"%%儮T* WW"##Gr8{,nj~~~[ytIpp88xݐrWhnnFLL JJJLOcęb3G3223(4 t Gnܸ5k`͚5qM%}  f2Q ji' ؈Çڵk \.GMM S7$*@gb&9s&ӱtR\r\^\nܸq  (Pfrpb] ?SK4hN8a%63AAAt5}h4B" HKc ʶl3o޼ 00p˗lVm;q?Zp:Yz=JJJ7߀dzo1~xHRB0T*c٬)WXӧO@ZZ\XXxeʕ555i t={bGFDDBCC2 "aN鬎+ |_~%lقhn .NZKV>a#f%l>/0`b,0*Wz+VhllH$ܹsョ~vd',T6wڵg}/Z@p6==^^vmG}o,ĵ#po>\r+WtG`Ns*|N>=bΝcNJ/|eBB'O|իGFFuo۶mç~4Źi9#h X J4s|pXcm^~ڵAb,A \ҥ;::Trd̙8}ϝ9> @7[n`08N2~wZd1-88l6Ц&\~qqqdTVbbccD~[z@sb%ɤ#FS/g޽ ))),Ѐ|.ͯر|M/sY@ wZ255=, nf:>5YjkkQUUEj7B{{;2a3R={:tu_otXW: a#ccco ^A둚|~FF$ɀaL䫯޽{c4tR/=V`=meUpŊ[b=Lw[RD{{;VZ`~!bWp|}}k9=O"Pv! SDzH['9} eӦMk+1bYSS tݻYX,): իT. ]4 rj)xk֬9{ﱹ\.K/(=0l0Q")~w5j 2sgF@@rgƱc|^WB/.Ml$]pPb}isV@PP(t3?.7ydh4T* 2ʥ. F`ѢE]p,֓,Ͽ_t) ~!;;;Rܷ^T*ŴiH3f l6Z-I)((ܹsIw9uXg?iɒ%,>$VInH*`0Е`$%%<1Qb IF[n#'3 ,x$ 9LP]]I颋-ѣG)tTqNJjfشgϞQdƍNi/_]],X@]Ν;aM穪%CCCB!ƌ仸"8='NL+ !v*eb1ewu0az=d2G2q)%@/Il H *aVCgDGGݩ"*qEE慳J?CAnSnBȖSh4]Jdo(,,H$r\g0}ٲe6uΝ0B,cСX^T Bgg'jkkJR7gչE GfݶkܡCV4H!jɓdh4ҫHII Μ9X}˗/wiXl 7'**̝b7r9;+fkynĉ Ag*笇BMRl͝ eގ6`A D3 ʋGmmMHy̵6w@V[o1֐m;\ zb5!!Zi/^rFo2r OoA})ҫźך}m޼p^z*^yUSJJDxx8Sz4RJp8xs%K***,?HJJ{ˈ_~ hiiŋA^ǹsPXX &'Ayy9[!--|J±c ˑEAǞ={ŋ{ld2mFb׮]xpAHNN< !ɐGyJbk֬}iSTbHII_|aGc˖-87na͑#GMr.?k,NKK/Zp8H$>|8 .::\.)))9r$Ξ='Ox \.ٌF#d2rrrVR ɠj  44/_F/ٸqy<#6m:sȑx vzhݻ-bcc__wZ6$$qqqHH  ?~<׿bPTDDoNgٛD#F 66Fرc1|pX,_UUU1SPVWWƌ*L[d2<.hPUUz󑕕Yfe{f}0ދ0xx2e?Ayyy\{f]QիW}ar|kZ ?eޗ@AA@AALSĉt{_p*p\vNR<裴Fu4h҂444 Μ9J<ػwšboʕ+q!L<׿liis='O… 1{lL2 POTA<MMMhlldWjllNdf焊^zf݋m|$Akk+-_N&M㴣Y{Yd $7S3:qDp8~aTp&{ce*hnnfZpckjjQnIA@ @JJ yǠ @  )Jp\,Y2 Lxl(JDEEѮ 9sعs' 6믌4˴YlV_ NRa̘1 0rEEErv+8قo_hoo QeΜ9hnnFcc#PNr9fΜY,L´a3gΤi:u*@$L 4o dphllܹshee%k 999ח"\.78`KP(^Gbb"L`0"z'Pp* j˖-c4"!!!ZfQX7|iU.\VS:;;QSSSJ:ם;wҥK0~¶m;jdeeLT`ƍ{=sޚDcr^IGآ H$m8S)//nj3a(//gi>qKz[ U2pUZ4h}҃>fA -Kz#Ll6{@뢂_{HWgTbwjIENDB`pychess-0.12beta3/pieces/Regular.png0000644000175000017470000002641412176710402016455 0ustar tamasusersPNG  IHDRMbKGD IDATxw|TeӒɤFHB Ą`APA]@_H]UvYuϮX ,M  e)$$dd3dZ*|s}ssr\,YĄ`ɒ%n=/CW}gеߛgp>:P]Vˏ?HII L0H_+WPXXH~~>=3'c  )s' qMZLuu5{ t:P""":)}_@2E{<D6RH$L7VWR)aaa# BJJJ4h!!! -[hK/Cbb"2N+ c3xhh>~_`S*DDDP^^.ݻ7 N{L4 r+c3_jpq w]{]/;0zq2ܡC?Z{nopzԩSqH$JKKS^^N`` &'OڳL9=7 `#Bgvrss9urBBBM޽y衇$))K.LHH|h^t3{lz7heLdeeqر/NT)#Ls# o!@ PmQO0oqHIIk=b RX`{%00 AR`:*4 'Nt2p x 9X0y0F#A΃m!7Wv9ӸZgYĞ={\ph=z̙3^W(( q职@17:F۹ 5kpo p' ڞ+ QZZJcc2GzTVVRTTDYYj:z=uuu466"J_|һwoo5[e E\rb0a9Ŗ d+aNL&[ow}Cp|Iv#GQ*ڽ֣ n\p+$${[hDxŹ lk>BOfFky+nl9JbС8qׯ#HMMuhHiiiH$k@Ó1i0Kh F, V+R>k ~>qQӧOw呝ѣH۾D"[o%;;|eȘ1cy"&"dY灃ܹsv܉R$>޾v?tphЃ ©IGն ooWOnf…v`0PPP :6آT*|eI`` sisrc ϩo8ڰo<ߟ/^HffkSN%((grv.槯ި( LsBBS1{8/\ުȣ!--Xc pCXX N̂1u8шF!22 $00Lf5z4 z{D)AstYƻ a7m)a7[ؤwN}}=6``` *J\$ao4 hZ񝙷DzIR^~n##((apf=FAբjqy^PT*Q*mF{9BO{Esc@PY;zv`1LV=VcA1 ( fҳ566I^^ h4A3@DD餥yBp)ڹ"+ѰCq)z=ՍP(3x`15ܹlԥ),,de/%zi N9O*oF0 \~ׯʈ#Z-mgWޢoT5 F6=̙3mWUU0fS<]biֶ@O+p)μnkpBռtq;" {;޿{c8JŭO'ҫ yNT{L6Yġ\^.e揝{H$N}o{"ʊ>pmɒ%&_Cgp>:u2UUU%"=J>|8fjs:B+'OrNlvgp8XGH20 !X{$bbbZ tRkANE$x ,\'qq+DA%`'_cբ7KB;]#G 1bDGX~mq ,mebpZϣ 55թ Ν;ٿdcL&^F<#gڀ %撎Ν;Nvɓ7V-M"0u/$33S2;~8AAAL2E=^f= 3s6.;;;vP1GSپܛWڕwޔR\\lumNGB׮0'6~իWǗ_~)ʢGȰ˜ ˶ B0NxhvY֟gfϞM\\w?!GΝ;^|8ɮ\¥KڣY){^89u,34e q;&K6g~Ӛy x+ql0-m_ltr7-y9rY횛GXbi Ϗ# Λo)7Lۀ]V3Z~U}5FͱN} 8AR'NR\p???1QLSSWA#_wu.o/J"99 Z pYY'q7#&bDpOV }niGWSSCA 9{0zݧ*Or]%+DB_",@ؾ23%mc͚5h4͛'湚>}:/F_':#񚗐ڌ!/%PnΝ;)--%%%+VX]_Jzz:eee|>0tP -!Q2PGr%x ؍tMhsaVZTj]D"aժUVnfRRR>|[/`B]HCHnIy"s6?noޛIIs/̚5aÆQUe/}R))))TfF 7Ct:Y8Xb7FӡR3<$7?DpoG ;:.:L&6mDYYR">>̘1cP|W,\׷~#LRtn; HJbro*@{s9•+Wddgg;=>|8gΜaذa\rl]YK^KeŁDgG̞=ݒGit"$Bc 9,b4ٷoWvy])))oT+bi#q6EԭXpp- :^῭kOdd[J$f;3F"B 8I\F`˗.EBBC3f w}7;vp+ɉtNJs ~wK2"Ժ'&&2ydNݼL{z:۩.**ʫ^܌2ߥwJzz?]ڝ1iTJCz nn,y,G=?O[G"-mpDW}gеߛѡ G38|t(=^PsaJJJ"==wL<18?`%WZe***Oŝgri.\HHHH'ēO8`0;.7oF HDJv-y̒c`zk׮*@~~>+_xǹHu<18K-PoUhjrn@ЭEu30`kbccL‰$00PiZ@VqTJ^xG.j7}>l Kxb1cAHC}gyDmm8;#::7W|'>9N#L4iҎ͛7"HDf>줬Q" xgl ZիWS^^B`׿ &T*Yn \18q͡b<~~~CVXq߱c6d#njSSSk׮ B-[0a6nȞ={@矋c<7`YoFEg Ώ7ǏJ=G N) s@f:SnAVVĄfYfEyZ1̇@AA~!… 9r˗sEv"$bٲe. EEEM駟$@Pyԕ:AVSLaܹ0aXv-رcy)l߾n[z~݋0gرgLfEbb|WGN^uQ$77Wdڦ\hccwo*t:qmMM v9K[w BjT*;RRRro߾+}]ɽhѢi111f"*^#''b ,/Ο?/cuϠAxRt͎L&k5F֑Zepi[reFPPPmL---"^|)ow۩ׇ~xxͶN=zFII\.Qt:o!zQaTTC"gi 7P*$$$HLLלV[38(|ڵRSSN4ކd,eyN&5 )6J%{]vqud:$*R&''{+BGӱersoZ׏zc5p.\8wرs= 9SW222~Ԧk Wū F"Ohk§Ԝsf5kX@~~>_| V a Z x@Ri=5eʔY7՝#G!dc\l?hWGdٲe?Xo6rAqՖQ']Z3&p/}ƍD!4$ ,(++:t|ny5 \.?ͣn'N??ի#<4&ÇZȑ#v3[;K[x:/v?8D=vǩ3FccmmYr$ɂ%I.ZRۭv@||<> 6lŋnu2ILLf /축Z0< f/`.oPfff3Ye^^^22ҠP(&Ij0Tdeeh4C3ޏ06Źlp~~~Y͚5^{ ̎`[455grrr3g8Ysg .!8F>s/rdhhHdmԖ-[.7V]]m!!DlL4+ @s8jrV^ͯ~+"WƂ{~ŶɔJfϞٳgW<[nz8ap}wn6-[ԃ/\)S(--eҥ|w$&&SOy9spGps?2}  )jmh/~QuV)2T*QڵK4???9 999L+Kݣ%K|=gp>:P|C©SDЫW/fΜIbb7+))a˖-Zfݺuյq իFFڵkH$z|L<68#>}:JDS  .F:(7\B+WK^^SprN8Aqq1zp ɷ! Z j | ˘L&),,aÆ'k֬]̼(J 9s QQQӧDŽ1zѣGEȟS5< Hzm555G !vMEVgҤI;L 4~W_}YfSW_}Ts3oҭ[fu]$1ױ60{2-;3 ӦM۽~p]R;p N8)S>\? JS墮OjNN8E9r$;v&{裏Vٽ{7 0|ƍjrV\#}:UUUdff2n8v.]sׯ666m !b$)So o0L~+ʕ+Wͽ|8`p ^YcccB.m%Rc41c/\ŔSVVhߟ>}0`믩1uv RZՎ;Xt)/"Gɓ F3<%XN6a0a`pxL<. `-,\_$xwd'O|ѣ4W0qHx Iی3/GII86sDaaa ɬ!C0x`OeI5JKK4g}3f$@Pjժ6Չ쩋 w"HxJ![ 8&&&' 0i$;\L1 #k* """ӧ}!**`vwGy@vv\.Y^{=nŞ5ǎ3Ĵoзo~~~j`>ͳXT34-[Y3--?H΋0؂0CEyqY_Ε+W|2/_bٷo"pwƮYfry r СC\x к:^yr6|`5@PPPB? .~hȑbo߾j1 ncOdwGll,F׿xv;cRRRl$|'mVHBBS]|sƺ$`>>^V_pJLOO/Z) |'n,I 8{9innnd Ή9AUU*wwT*e֬Y^?ٳgu~W_}>3gδ+FMv7xC>ŋy>` qM_bWz`sI /9}tL&KYtyw[s^r7BCC-B{ӑbQ#"u{.IJJ*raEp7Ko#RyEES] Yh-L&-UZ6ىMcc02'XWDJKKٵkxF0w<Ц}̛ EDDHll,D"STTdݸq#?7n p\^8hРK *MHH+ @uuuFQTTTp3g Fp4cMG!6 [D\\aaa( J%rɄ^L{ذa/pi;7mȑ,Y#FTBۦ&^ʞ={x8y$&۷ih+~7,Z(ER ‰4//%K4[n D0wرcrB`,\;e0:M%kjj8yiuj8p s=DGG;=Y&ѯ_?x 5k wѽܖNJeZ.^x*jᴉd߿=WQYYy4((iSwÆ [:;T*L"FmYN݋O `„ .e+qɓٲEVTTd/S$Ӽ6u ɴinܸ1xp{bBCCE ŧcT?3m CCC(((pЀ,UF`ll YYY뵵xϳ/^<4%%#Fakkkoȑ#777$''^| ooo,Xv2̝;\hh(RSSr 6@IIIh={F4LP .x5,X`ڹϳ.\8T__hF20>4hBCCn:9Х~@<<<d;TNNb۷oiiiX`wsprrl0x;dff&!SRR7)%%Ŵc|Po W^ETT 22!!!hii^Sq6ۢ\](Ke}fVVVWJ%1ӑd?777ʕ+ڬ릦NgbbL=Sk>Ҫ,uĉprrBll,>nii)SA*)):봴2&NKOǏDBPPvq!::>}:EL&"""`ddq|zO[[ 00P5Vܵk;hkk:--w|{ȑ#IIITVVbڴi_1zhX|9IIICFF:q%vvv|;}s<<x4ȸj:\ZZZ ssA\\ %%###;3gDFF0P(_;v wwwL> 055dBYYcǎŚ5k6|eee044ӧyfdff7!..ooo϶;wh---u"?@AAZ P h,v5FFF|FL&jkk1m4a۶mEkk+޿ǏjjjDKK PXXϟ#99hllDEE.\B899aсrss)S`Æ zBBWUgÇݻ%:^`Ν Hq1̝;|/0bk'b:dᝩY`pƫ<7zh͛7􄳳se{XZZǏGrr2JJJz-;}t̙3HNNƘ1c88144( }%a͛\N  R1c_&[BAAƜjYS@__k$ :::Յ&$$8?j477 eee(**BMMMw`ӧOヅ bΜ9t޽ /_$ %%%H$m䠯7t:t:޽Cnn.Z[[ׯ~:._ aOroBBBB@AIII}bbid2mm1n8XXXjjjW^^t~"##Ç___Xy&"##q9>/^$$$`mm {{{{+++cHII?XΝ7G"e<)XH؉'n:?~Y\ov킥%@YYZ[[`0܌:uyyyHIIH$BBBjjjPUU0c _m300 ]}6/^ {{{CYY@FF`0P]]:m&L86`bbSSSpuun߾ͱFי:◅7{{{^ZXɓ\hg>NCCVŽ;`eezyf;wB٤U27nHHLL$ HJJBII PTTdCss3t:Z[[7o %%/_x{{3{KLL#Xɶ 477Xvـ~pT*ǏǡC RPUU.ss: W\ٳξ BSS޽s̬= {md2|;q>Vz0|pXX.++ PT"//  t: ---"H$D"D"tuu3 kDm9@ aϨ>,`ʕ@SS=/`owFJJ=í6V+$jۺ)t8KKK;)) vvv8sZ /^_ 033Մ{CJb055) iiiH$K1L&t:1RFFPPPWXDm[tttÑ^z}4illCQQgO;?CPeO5?ˋ9 Qp>*"s8)))j)Ғ١_.\hhokk} EEE*Eﱶƚ5kr@HJJ59:CRfX[[ԎH_it:_5rssK.Nc?n')((B=ޫ ???<}o4ctW‚Zaa! II6}&))Io111zw„ Xlt:Ww8cժUx1=zԭW]] %%%=H$"1 [V,=6PRR2իW"9999Ν̓Fy-fΜ 6v]9={H$b pbbb\y{@ @^^(xڵ/+::UUUزe ׽ŋ٬C3x_ {<tA=ڪUǏl6ԥ},FH 'o]WWWرc\vW<(mhhYf8a۸tRɓ<76#GĊ+xjRt˗/ѣ=U^c"sܿ<:􅜜u֍!88{L&;4vW^ӧ\MsB`„ 1mڴ^elg߻wϩ}}rzر pwwyZ[[?fɓVSSe˖8rtt󳓒ۧy4=$''Y yI>yyy\,K<~_MJJ6lj͛ Yv60a\RwA%zՊH$|ֆ_~t:>ʐڵkBii) ?U/x===z0L#??-1򂖖PMNN&K3?qxcddB{{z||o>hooGqq1򐝝lCJJ ӧOǴiK.hii`dd===hhh@LL /_DNT?|*cd n۶m"13quA5`ff333KKK9„D6niiIe],|ܑ?#Fl_aHmCw|in-,uǎ666vvv^P(mmmCE(b %%&˾$Xۏe۷Rlll. Badddrtt#2D<<<􁁁N L&ugmF IDAThhh||uLGGGaѢE<==-e/_+..Ʈ]nS(I Ċ+i&TVVbڵXbE ! 2^QQgrINKK/^DDDnݺ%yW111=*ϟ?GXX͛w+zM!.d*.""Ԅgς@ `رHIIٳgO__@G~WC.^= ܊@\\|gHD!j:\PPPewލTHHHСC [RSSéS8FJ^v?%XSÒ?<"##1n8rw܁a2x%~---FRRPpՅ{B:K\1::Ozx1fǏG\\=z'OA&|nV 7oބ@ !C[vX:"ucbѢEӧOBL&CϞ=,/^cNJʄ&pΝpC n MMMhhhD"&&AAA=>:Bv"֭[C"**4q>eeM?gZZZ+ʼxWUL^tp E… ą -ZX޾ ޽ __^̒X?xgτLihhFߟk&Pa{MIIa%WݦUynjkkٙW^ ^+k%:BIfDEE ܹIIIv6 HHH/aÆaرx&|5A_,q=Ç˞bqp5>>>JOF@@G&ׯ_ ŋaeeCږltqqќ5kV$KJJ4. i#YK`ϯL&Ν;M6-988̯QUUZ VVV AVVfuvǏ/Xj|0%-ZRR"I駟G=BAA~>`2|G{{;stt'$$$aҥjjj/_;;;ܹXUV|ly }N^^^ضm[Y&?~O>(//F>())A^^;'`WW1ov=}tS0m4 <cƌaɓk֬ iooǣGD[(ȋ/BFF...Bvv6JKKQYYRdgg#""}dddxN"""DZ_dd$_u''P^\\JWWwm=qu޽Qx!xU#0B;2D".^PAEE򨫫Cyy9 MMMgY&n,kZ]e'{{{ᨨBCCElu_PQQƍ?`(,,W_}cĉ(((ի0iOF+MO|'11`Μ9={Tj .IIIHOO琦7116ގt?EJ 9sk֬!F 111455!??d2#FwcO!ý|2Ncҥ}2IwFJJ 8~8N ''' <xY[[͛0aƌUUU8qƖ-[ؒ$ Ç5f͚YYY"66ܹsabb2 }DLL`KKKڙ(G՘+ZZZdUoHHO0{X7Y fYt'Mr6qqqJs 11~J qFH{@Z`?~_[3'(e@ruʀ Q!|}Sܼ-"a'p5̙3\QRQQqNEEeYשTjdJJ F SSS(؆vAr@mm-]%"##CTf~tD© 44"W^1UTTdfrr2%}}}pޥRͦLL**=Ob֬Yn޼ɾnllu}֬Ygg_us_lll //[n󐓓PaEbCnnnl*//ի1k,lذ(--Ǻg戊\]]E&fcc  ᠠ P(\pӧ백iB;Klu422!!!B֙7o98807o@IIɃ,Z &Mʕ+sðaÆ trʕ4iVZLCfggǍǔb1:D$acc )) hhh@dd$ƆݽFFFRPQQaW O pcر4iN<8<{L\]]qEE444&3Ϝ9V?LFX```yĮ^ 5 @C.dZ={&&&l ŋ~+`0ԈDbA__A؊& @UUUDEEaҤI H:u*JKK恵O muww8t{ Ej?;Dp&&& `ll,zzz 1h CWW YYYI-[/_} "VUUϟs-;r`iiI&k'I--/š RRR022رc1m4dffBQQqqq c)++cΝpwwɓܸq<@QQL&1vXX b ѣGAj]mkkرcq]#455{nxyyzD yyyEprrrÇ\]]/"Bի۷#99~~~|)hllҥKqExzzb̘18L&jkk1k,a۶mEkk+޿ǏcPSS'ZZZAhllDuu5.\rL0k֬!C !!wڵk1c6l 67oX#hooLF}}=\?v؁ 88X \ebCCI_TTCCC`ӦMiii9s+<[8ooofٹs' N:Gb{nܸ8q~g[֭[q9Z ۷o+sРAw޽{ӧO:Z8 ,\~~~nJhkkCOOR@Xb2339.""}̙PUU+eee?vZNO6 ())چO3f M}t6D";w{˦ʨ@hh(,,,> ˗?ӫ0rJ_@W*))0nnnزe ?6j($KNu D|||///%K ,, " CRPP@h F N1pqF !<<RRR>}222{nӕ+Wyf~]]/^J={;N 1cZ`O&Oe?{OYY6n܈2$qp8\bb"d@*}}}޽'ODcc#Ξ= /// 2:@&H$Zˣ yyy% ˨zpz*,X.ֆߏ2CAAaod^p8qq>e]lo>cbɕҍURR244Dzz:,Y###l۶Mso S\\njWslkkömTb dddJJJj' >޽;v ,&snn.F׽FFFHKK8N8WvܹÖڷoA\\Ϟ=5^x)))>|0w\P(rBB^SNA\\p=z4+=z4Z[[1~x˦"33+dwhoowݻw_ѨYXl gӐ7n`ҥqFC: ''H$ըE}}=jkkQRRLb˖-hkknܸϟ dʲ%?aĉx=lxH$ cccCOO?dX7())aӦM5k@͞=/B6) |||eL:gnذ8rbܹO>:o< gφ455!//yyy(**H$BBBL&t: uuuCqq1@pycȑ7oEɶ(((`ŏ?(py,YǎѿEp_s1/Dbڟ#]7!CZ|9LV;wO8;;cӦM5_L2HV5ddd //EEEV :󥤤@" !!=== d2)))ꫯV@ii)"##hhnnNGkk+䖂$%%1h HHH@__6l455yXX ))ϟ%g!!!$9'AgjjRA]]=9r$D"Z[[`0@Q[[ $''#,, :ғ2, 3gBWWmW_}N8kjj̞Th4deeݻEo33t n䇠WkiirssEra7n BW6Ozu9:::BFFPXXN y@ @IIcR +++VVVPTTDtt`I_;akknPQQ#G>:̞qs=իEEEPFF҂:96QUUL}Ht}[+< 455A]]MMM 044Đ!CaÆe҂ )) 4 L&Ҭ|}z9;q!H\}D"׮]CFFm&t=:ѣEEE̞=ӦM5LLLJAֆ $%%!""())=/0 s(++gφ-H$uŋlՀh0 T-,,DvbM`0t#022!Cw...---iiiHJJj]2@qq1rrr@$annwV ==iiiHMMEAAdddPQQ@yEzW+=:\jj*n߾0رc@[[&!!]MKK P\\"RǍ]v!99ƃ,//C‘#G+)))N (--eoy :8qsܹ544&0tDYu GP ݣIDAT5 L&C^^ 8KKKCNNJJJ ҂6H$)))Bhtjwii΂ߣ6BFF:::2dHAh ʕ+lGIIEc ΋쐤ި({ :PZx,U"YʵMMIENDB`pychess-0.12beta3/pieces/eyes/0000755000175000017470000000000012176727272015321 5ustar tamasuserspychess-0.12beta3/pieces/eyes/eyes.svg0000644000175000017470000034350712161415524017007 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Maya.png0000644000175000017470000003133212176710402015736 0ustar tamasusersPNG  IHDRMbKGD IDATxy\߳"ZfԫiݛW\RJoeY+[.*"" ,?& z+ys;99+Xd<,YDc}5OruJec-Z@*RvZ2۷G$ϭ[ʜŴk׮J\[vHRI7ݻwSPPPXpp0[FPV󱷷'--yGGGΝ[m-\xWҩSWG:?Oq GFqq1,?04/L5bbbۛ'VPrƒ\nnWʱcdeeUsCYcx X\G,T*uJVq GGGWSK*))͛yAȺu5j"FB_孷ު+ԫWܹ:cpO& P9Nʷ~˝;wtϟϑ#GP(xl>Ε1v]v|_~ܹ:cp2 Fӧg͚5s~~~L:_̒ٳFRU19p[fڑ)Ў[/^ȑ#w^{'OҡCk֬ j H}}} hGT#[#VJzzI2:cpRL*WeZ`ڴiӦMS]oM^w_zҽD{cMZZ[LV\QQ}wA*r)9;;믿)T*e֬Y$$$9n q,ũJ#/Òs)))1ӿKZdqI~.^3b8s bggg.^/©S\riiiƍ6hVF"ꫯҢE SLn3fq'˹tgP[Lׯ_gIqnݬ |C\.wV g֭;v8n[n h 4Dr[[[Yaan)fxH$Ǝdˋ^z1{cpD߃)sںu렡CرҥK[$&&N_}$I77o^_Jհ` spp`ر|w4k֌ J ^/H*ڿ?5Bc:fp={d Hpuuu:t^zeqXDFmmmYG9w&7nܸдiӘ?M;8oM({!̹ѷo_7onG)xxxTu $((ƍsMd2b#F۷)**B&1dZlɃnR$pgϞ^^^YK,sq={<^z_F_=|'Nhڴig}FRR7k4Ϗ/M6! VvNom}r-,X@^tؽ{73g,w V\Ɇ fEh4;wG9^C@@@Bƍ{\= EC7y.MI}VA"еkWJ%| 6mbժUpWWW-ZĈ#f…$$$`fΜڵk}ǩP(,^֐d#H*@dbbb:&''Ue ݺuoɉsҤI}\\\رc:u`lْQFq]{=~mD"'OdĈ/Ӈnݺ!H?;_9h t% ݺuW^!<<<\\\ݼEh]h}ʑ1PEnX&MW+V &&F7`?W_}]v7P\][|9;wdԨQguಳꫯ_>JO>{{{j5EEE2m4lmm d2J%ÇgȐ!ݻ0 O)))BN%h4yaa៞j C|厫T*6mĦMv| }5~u222y}ýcp/Bz\||III$%%YT_BBB7L\BZZtgggڵkW&K*"Ev) 8~8:u\@ 7n\N q۶m4MS.Jf#j*o8::Qj9sǏh cbbL}ҥÇsaիǀѣUv7իYJ]OƔ 7wwwp M$Ê+*Zgpqqq߿1Z͌3z<ك=;v4x@)˟iԨ'''P$R4e333%@iJ3~KMMeVYVպiMeV ?`pSk^TLH{jO_:8z#L_cjJ:ƺ D{aMZgpƏMׯ)EB^ev] 6on'?~5oڍ&+^?U 7oK,<RXeMrr2* X֨Nhy&4hЀ-[>&c0 $ `o>h4!tڕ@72*۷@ 9zJC'kЪ@e[ZB$11UVqm߿۷Yr%ׯ_gƍ:䧔%&&\zJ̠tY .22\?oA&MI&=zL:͛7/ 4DfcpyV\IΝ^ӭ[7V\ٳgdNbKe,Zy`V,2[nV2ɲ 2Jug}VZl5 z}T;:!!ؼy~4PȷƬ҈v spp@$YE߿VDl۶zR=z4qhū˸57o={ݿA1hP*lmmQTBau$-cp:{gTk>&28OOOB!wW,sD" <(/_n{ Ȕepу>/2&&{g}V@HNN.a8U!(' -5Eh֬/Vݻ/xDoOQQkAb.]]d3gӧOlr9֭kVrzF@2 r!ƌ[[3JEaa!4lذu".]d|ΝɃϟKĉѣ: Ц@.O<رcF75f|eplݺ*A 6d„ _XrJazϗd\t __*l!vhGRV:u*FT;v@&'1 q_"//Oo> fPU&1k,5jWY#dm&6 qqq$%% mY;vnoo 6ݦ>s#g"+JzI ӧW\ћa1[{ LOd?UVKKK?+4FfVդe˖O=EbMV~4㑜_b3ǏL¬M_ NVYF/Wmڴ!77!k5Se;W^~6m@VW6џL2L6lXۦ'j 筮UP͛7|||* CY a%''/#TJNHNN66uTjd71~2ą >o߾ݻw6g\~IepIIIzE1f̘VC_x+|)JjY@L&4iRa*|bbL ={u/ҥKdO}"7nGTdlu4Mo2eJWL۰a޹svAm(L6 .0j(7nl;wW^|F.sA_^mcǎ{TR\\LQQ{e޽@9=H/!!!wؑ JVW^~xm1B$dٳǔb{3ݻD"""pBW\!88zd2.\(vIϝ;gIh xNe=h4޽^zӧOvU%2Q5k -4}1U:Oqɭyי0a۶m8;;W*^C*@`` RGGGQ ½֜݋T*5J\_H$+ [JW51hpKӗh4s׹X M_cyfϞͿouqq/0J&[[۫Vj6.bmۖhҀ[`\\\"$$={U Bbr\WZMLL -2UƢO/z3%_~rCF0Pc Cɿ[@0`p5EbQM C 3h@\ Fz\ 뵑Zo1%'B|1l'C>oOGT+N}dUukPKkU guuKyT֖(M_x<B)J`^aggܬY3 VX8w={;w4iCi*K.[h4\pTNb}͛7XIbRn޼ȑ#ܹ3vvvt҅#FiIdd$U;sR!Xbpc-Zǎ;...>۶m; %-Ύ[n"5 +cc)M` B0I|s3gбcGP HZ?j֭І%n)=N⣏>"22 pQuVMB0KR!cp6D FСC999 u-[mPP=t`Y-\jÇgժUV4}T'KMM=RXX( ?`@Pݶm[K.5dɒ_0CbJ'MDjj*ܻwꐦuTsqMPeʱc滸 ?z{eBa&J[BTTc!qvvfڵUWSj^^^FQJ Q(xҥGDusINN̙3lڴbe~ȑ#єZ=ݻw7=zg.DPdWXK@@@TӦM3۵kwcΜ9rrr~dgA –/_>DV?:3335(ns~QΞ=[ HR7nLvhѢN5EB0fX~>|A6ڭř׬Y5k5l𪓓޽{nȘB ry\. DR#9y$̙S>&7))c/˗qssiTݻΝ;(,,d̜9ӢTnmU(ñ׮]#•+W>@;$n*aaae:>|Ȉ#۷/;v$99;wҨQ#MfV* ]0|pG"PTTDaa7YSU,;H}i4˗/rqtR.\.gĉsϑYh7o&&&:kEj$[ߣ7W*LuuFP8cĺ)Jϟ?{.$//-[3oCw̔X7+WH@@AdeeqMl°aX|9BC\aH``^o;;;4h`oְaC^|Ek#m{{{۟~mv` *3j4suq%((Hf^1bGaƌ̙3GNzjiTgǎ,ȑ#N`>}S"hTA|"(h43%MΝ;=gkk˚5k uwwiTSNP5Ν;T*S!jp̀֯J\sΝ{+VH{bPjgg+˫|W4}7oVS0uЪU+]O?69=׋Fy3%Mj?#ÇٸqcUKxjj999f;ajp Rn6&&D"ǀ;3åK 3Rwo됙iUј-b$^XXwh4Ӽy!n ӦM#2RET*}aaa!M_1Ui\ezS N t={\7nܟP]6mA+3Phт#Gn:~aa!gfҥ%M_1 N |BB=z(}}Ri];/Brr2YYYܸq.]~zN޽I_nR طT:Z $IDATVK6B0Ab IӃ6q iZKL~RT\xT7o޼Y(VU)))9&Lkĺ1DDD_YU*999iMiOi*s8qɩ5y2dȫfn_dKXX`UL[UZ?leaa!?rc yfӧRP lFTj4BBuVoA9JWF4Ν;ׯfe+..F&w^ׯo-iˣ̙C.]_~it* N'pUIx\Ν;j PƢ/Bjj*52k*R\\LjjI  ^zJ$g-..;wW_#22Ν;WF!..7|NKX>I2&NxtNSooo~={ɓ4iRU6ݻ]' H97o޼ZջF@ѤI*l_4j詤g~[n]{Juw ?+W>vlqqqrdgg>ϟgƍO%|?CUYYYJ4hڌ:$^zFR 2̶& (1٘!M_c) N S=>|Wb=-T*.M_c)V:X7D-Ԅ~{;jEP%֟JӛGM%Ka{S\vR)ڵVׯTݤiѢRJŵkWڷoH$"??[:QZ߷V3/rU:uT;Z޽F-YYYӺuk aaa899!P*1|IKK#,,LWTT@ `ܹOO)))IKK3[ uoio>SHLLԻ{!8tPsD*Uʨ6,ᢢ 111ĉ-h<#U,T*u!ϭmڴʕ>>>MV{I4(66d}t1b1YYYܲb9r$DGGs5ۋxjժ+@۶m[o08oood2.[(&==u NƄndsν~hhh 4k Jr]vիآ'EV9|0)))GٳgIHHE 8I&QMTYGl@{LʦM8|Ib A{$-Xdp8qAKƍѣӾ}{klmŋyzz:Λ7OroѾ<cpE} 2RIzz:11mI={={ҽ{:! k/( H2''Xѣy簷'??''';FnnnL{{{M<*z@nQk׮8u HVy=z8,,lSppp0p X\RZuCյkW68֭[ӦM$\NN7oFU2sL?+FIph]fjԩSGm۶ѣGOؼy>))~{#`l ̞=ۤ診Yࢢhժ/^4+|XT*/2_6`;Ҥ&sN_N&MJh4G93lذjکEWZiBCCÀI@%0mBjF[w.ܹ2`$%%]&ПI u\zz:Ǐ~~~^.}LC;2nذ@@@@??oxa/1`'Nt5kVY@icK={EEE/^|HE;5(d2lmmYr%SN%::Z7x"رCDTLhh(^fL))IlԨuv wIqqńFԩM֭}g}V3nܸS׮]Slܸ1?,,ڷY常\ݰaC4hP0U^8p wa8qBas`ȑ4oޜM,DDD|uV;@hM{T3J"tر?gƍS)Er$ ˗/K\h4"LؼH$L0RСCy lll=z9İF\~1cD\v%cVv*???틄d2RRRXl* ___|||aL4IwJG}ĝ;wv 88T~mM\5 K.%-- s_Jӧh4wP?~d.]^ܵkא]D;}>"0,2dǏ?ҥKݛ)Sd2e '11D SWJcǎ*{~zf̘a.Į更7x+yQŋ?~!'OZ`G}${gjuEήX#FHR_u֝dnnr9=={kРM4)wI&c=%t͍}rJ6ll T*K ̙>mڴ$HvcǎjπݻwK / O>~NJJ;w@ ͞7m3•Ǚ3g7ooM3gZS(e˖|s8k֬=z˖-G~[=C!!!ϧe9s& \S*hS5Y>S6l؀F!##s6lؠ.//RBE_i]xbwΎ;ݻ|+g.[*Z׫W/&NHnݬ`僋iۣG'@p?͛^tiw@$ kH$(** V>̪Ӿ}{5kF\\cƌw᭷bРA3h z-f͚ɓɡw׏k7anpn8uW^eĉ̜9+VK/D\69ڵk9pdV^._"4)S8lٲE_vÇ4|p)K2eJFID[a5JN,YBff&,[u€]ꫯ>}:M4O>T*.7i҄ ҽ{wKD"...:u0Ύ;pH$>3Ο?7A٧)u*<<|7SR*gF!77k&oJ3Ċ>r,[Lwlƌ֭\"`ooի)..FV>۷뎩T*<<<:f2x-Z-L,Ԛ7r…1J̞={… Gbe(v)t#=}k \^^ڵ찱ިh4d2 \ίy'LpT$A +]\PPpkӦM- \7Ed6\|TvJbb 999ddd;ANNNkHLLѣtҥVTO'nm*X@-`!f5,weɒ%#\\\⫯m۶UyVIJJbƌJӏ  T;::ڰ PV+ """lϟ50CBBBٳg~ & ej5111,ZVJ5XMԩSرc9sƔ|w[mر#ǎؿ4X&Mc)^ŋuw***v9Y->ڵS`uəM}֭[U<55={*iW_}ծ% m۶uDI-[XٿHgǎj wwb.J(,,ԛ۴nTi:Yh<<<49\nn.mڴz $h#H6ОFiBÇ-m ®Hd  'J>5oOb`qmɆIENDB`pychess-0.12beta3/pieces/Celtic.png0000644000175000017470000005114012176710402016251 0ustar tamasusersPNG  IHDRMbKGD IDATx}yTŵWUw{awE➸+fqKL4&yI4K -b6c4y'4(ΰ kO}q{z6f]}Ts qnHO8π߄Oqb0L! 8}Oc@0us( _l!`pZ+V8״uin]i`͜y.$RnpJ8,~98`B`_3M9ǁG[Zn oȖ8 FWUk+յ()#2\y5P5U5M@4BUc @^ Q_? > ]7i:@.\4r&)5x=n,b (`0_>"r0/&N`2L(9q(BxO$q[ISxQStw8)3=~gAe˾w=w G dQe˖鞜G wO?YXQi `r=;KlD"Td1<0JaZ,|X!\NRpNhGb'β8^[%W G. ]F) )gYUۀw?NkEUUZnՊ+-ƏHc Dp[<:|ج`0ڵP2(\] QCb^#G#{!㊋KK!KHt躉QË1 JnIL8I1np;XX< 0a&LӂiZH [2rDRCCc Cf> nj(CIq>PSYJi$ @eH9=߲56Girp;C$Q1Ib>t_I`&^[ I׶iB0*RIcG`݆-Ȱ77eUCzI6u;@ ɎUlUHIjwrW_z s{5K 0#R+WGIC0n|1"{]2,{i`!C˓B">t&>υI46!NZ Q[rejQ7LGH)ZZ3 jk")U#/ON0V~ᇻJ( *ԺUUkBȅɔ.+) Rp[zwժUea&#ߡ%˖-{j7BQ5ޣSFCQ =P}aZJ(;Ln08^I+sY1z0PJA)K)4s̾X5B([,qM˂f;`03'~͍[ĝϰ喳,+& 8fN`0`0hdʤG6Z_0tifk7MYZ/_!WwBu]#EBQ~ #ˇ1Y a񨩳I|˲U$ ӂqCQ.WIM0Rv, eX\#V:sL"CCJp>#_c߰bŊ?.[lCN  'Rƒ.=JuÜAq0FkeY]8 uN8c#-Mӱu>ddIBqa>6|h1JA nM^uDҀ2@~'8I'5^ۛʚ42̹3F8vdYDA>ö9qKp ofO3Z~շ}3ฮ.eewѷ"M8˲noiY`BE):3үhiMb'OFؑò0M45PZTaC$l¤Gօ@`H&5RFAfT,Sr3ٓp((K8ͭa·GA[ (aV2U3BP\h7<_Ԅ#Db~">]7̌4m&3sիْ%KL0o?\$a1%k0mU {ń(ҥK,1; Җe-E8Γ(BpNQ=-'zÓzҐ(ZRϞJ(.N\ N,E8eIaK0@( lN:9Ls&Zpm‘4~,1;r`O v]ppT׵5uoC]C!44)Ɩ(BD`B*XGNlooq9, ydf֕2Ci9 d:;eYNw&Ch# eqg9 "hl˿`b[{̑󫡪B,V1sX&(!D^b9err# [|>>ApȕhttzeO0!/ω<t!^pN1FϪ1ce`0hp O9iilK]7"\'* DSܴ8 -u-ӂ# B㤧`r=g*wM:l7ͱ](b۹#ay2nm8' 9DIeffX='k%I̩oݰy469z[?J=XG ` $[HBI8(((ph_'X0k eH)R) am $Q$p:$2 ,AL$C 7FAA$ADQFppu)EG,0m4g b|>4[@~,8ӄ3BQDvԧX!of1nUmC M/ϼ.fv@"B7Ԝ1\"<.1%mCK 'Hhl gM@WvYf t,O)‘9B^Vj-nB-]E.eEt B$ sRJܙ}r :|G`0ʁxa\0A)_82\N)m/m[, Tr&!dӽ{x#`RvDc) A`xx<\p:D8$n!WQlCK R'3HVIV}PF p?Y޲ݏ#ŻH!gҐ>p#xs$;LGRisskj_feLL%wJ xC!JBzLdu^l`zDR0tgɛvn0,d%dRA}0Ӵ'ZALb>WwJ&;20 Xc8eeTLTH.TUPM/?$aSiC*JJ/ fLfQ\>4tI)2 t AѬiTU709j[{$rǬ5P75Q%&@wٓV먮kƞQ[0!"cP5Y`3(vLE0JA7`W(Rx<"z˸qR0L(\N'Ci VZy,P8g^Zm)tȶ$$6m5J{%@-TD$ž#OJU6p]cVRDbI|swe/XksJ) eb !4sdYvbSFIajF^E.L0Mx܀ɐL Nhnjs(_>:2{|텰 WOJɢlm&1^v+v7!I}qvd2껑_>J!8!![7K@LOLr[e\9}c8)c'{ǝ+Rq#p1}%C\is'dzE}" gkkX .gMR]p;:9c ?s`GDtزc,wB#Jrmfv-bD), p$uCw$(s`YTU1?tDv[s$!NEߵt{Y͛!h[sۆmAnrJ>R"v$aY3.>7, Q`(. gYmE#9rePOY*Ht;:d`^O~q?^˲ݿ`r( 8r xз93^? )K=A0rI}ӄaY4+$q~ժUeTJy\0tiWsv$nqm[} NQnp7` FyfTVD<È0sLSMwH*4lg88&One.G gpcu}t]`iYga&Bl2Rd0X`@nmcbreaq`F-)0PmZ}"+8ۉ|o֕J1H$ugpӇ=DfgIGR4lľgᖒDRo w^<Ɛ|j B"æ;PV A0mڙAM}3Tu& aZ< PU|VX1'ҍv!=GvVh8\ۆp ɤq Fo\b˖-Hupkc2Z9&:^'k=z <O:e:254ǞHDMH'){ù chnmǿY[W5Lo cҸRpH~=:{0qdz.-JS'@,œic{TsJte۾Mۿ}<|J:k#ug !(S9_knn؝98U=N )򣭥?՜R(CTMmO(nACKÂp|i2QqPu^|mֽ/n/-_;wEMK5Uh[v9΅O5DQS0nd lSz1|XFiaժUi}~xyV5v2deqp hiM(¼yt{pw"sTbͺ:l$-(9S1u(L8 øC1yB9Ǝ,Ns`|0a%Gx"YmvY!ؑC|Z]=,-X\ur{C=oUTTPZZQWߔVTV-Ek{58p?⻸(Q܆vl sc@:M" ^L*go޶GM@zr ߇Ϝ5%`K(w2 !'5$[.]VԆ~M$^xy<_arر{/LC=|&F/W "(21"DIq17kT@R0uo݅(~8XU! 0h\A~N 1'npxxh Erxqyscy>F 'p4R_a-MЬ-T,C7DX_#ků|.,7DTvpC_,CK@Lv6" Lh ő|m->-lڎ^` fNfNd{/[tU4M_{}h~zfn@9 s^O.>?-D<=ihv,( mhlnGcK-bbDML44‘NQyqgNV+/C&a0ukl (ߞ|+ R czjǀ“Q\\{`Ɣ0-  @nBΘ0M-e'[n@% w0FKZbyF4xFQMu~u᬴׎P؎ÇeC~L>} ?eAAQÙC | IDATb t/h7"Vر㴗ظ0L(5| zDysN7HFȹ -q 9ǖ[yO=0tX&\`*^OR >h/( cHI>[()g|܈D"߭oBx:RϪs.R0׏~<\94-]MBWSXC4Nzx`$!8稩k$$yqSGeT9<{#mG{ 97᚛a:& ԲaIB*B[[D4t/ۈVx.ȢQ! "D&0M5I X%ʕ+'I"|ha6j&y&#*! dL H$  Ɂ?vP_ &٧W/|S=cC7 ϡpz ~|%s<$a.9?7{ڑIfp81lOupXn`x?)k.gQ3cӶ}EuL4 ^t ]9iZh cZi4]-3?,ʬ沏i1 J K AɮXUUsϽGbrA`8vX'QlgiJ-I0s˖s8,]%SW~u4O˗bg[o44Ҏs#}vHH" cp?͛1 iⱧ^Dsk;1s„Z,:\ȹ-#:<l`9WXqN2ѮJw8@Ss$ĺk&ޤMo@)CQP")(/fe᚛1W_Yb04BT]W`h M)0cq >„%`s*{.0,I`sJ(Fp8ń38BU[l޳6K9̌/lߑΞ?s/ΜaCK@)]^B?.躎V膽|F lɠ_c8(^8nۗoW9x4pH%P7>"vލ7׭ÔcpE!~{Aq?Z鱬vig!]/%<7[D8{g];_¨a%P4%09BD"ڊ&kӤ}&F֯ǑJwN#c"csf͚zɳZtdDZ%0vTtȿbtu ֯_EY{w1w|hX4s FWWNZMӡ&tÄ5HԏI]~덞NiV{z}AW^e%}mK(TQk jP(T2 t5v@v8ڰ@5.j|e Μ0 EQƽX|zUr|^7n xűn)?{&LSCsK+3&Uj:lߍϚ 8il Mx7*~#X?a9tLΚɧ&f̜ J)6mzwxFQpapg VsNZ( A 2,hcG@~3]~vn4/~+5i6,x_Rj: O)֏dCJK::KBtlsPQQ<F U3TT(29)VMDq 3"!vDZWi~uW~'k>QLHJd6yi|#ʊ SHr hVsDQm\xVF㢦9"mhFK[;:RS(D%FIJp%σy眅믺 u pbq\\g1wv!|Jծ`GAAA6nd!zݸƫ+k0wh̙:j*pLA(D4tM8a&V!5Hj"$J}p>A~|nwqQa:Ǝ,i0L=mH*!X,)t"ް|n mR{L~,(**BMm-BljxW\/MI@U8 FusSЧtfteҪRHGg/^ޱJ9i~elq{FWOsut:(UQqƔ3VӎhLH$U۴фx칧SuȍJ}^{4•f9KTRЎէ7ubYV)֏ӧ8^_6#Yov'{PucˋtZ4KAmבN'VREZ{D[_w4.HۚoֿdгDҟ`2hܱf"yݟ!2 5m45Ê0aP쯪U` rZ)J>"s{0 1jD F +p 0?/EwN-IZZ`]'y?$C }X0mzL,\x_3S&ga%C1cpy7 ]<_&ɲ_xwJ04~ڷ@2Ip2_yͥxJNTRSR,Yr_/\vT@==9z .SeD[{F(/!M`˶~7Ə)R 76c0vT'TUmب ͭyuïz$Qih=:' N(R>`'$ 7߀M[CSSt`B)@KsǒdeZR\P{5-$ "SPVZS@\* lȑw'#B8i]oGWVߕH$/p@t uoTyiaS%3C1z*?.:DI$IE$BQ4L]l QpTY0TMfV:$0 z$\,O=1)5_g&t-W͚6iBgp9%8db())iZعgf93Nęgǔ R4Z8U2E3I̚Cux85M{pMMJ@7t.4X\O^t.>Kg9l\5Y`0-k# L:Μ<&qojE4iQL8q&%IxdJ3:ehY8Շ[E |Á|)Aid`&**k(CKkaBXC{֬iؑ:i`aKݻw#7}S1# &-K/F'BcwN)F`aRׅʪl@YQM_41z0桰@Bx>Q2@Ah4)lٱ/>O]#2-Ŷ] &B /+h&I/M`Y,ӄe-3}ݾf,LY;لa Ԅ}[gNE)IhJ ,c 0 [w W]s&T,ڣ !7^Dm@AQT]e3M{7H2`,>Rbej۰M!ǂm۶ao׿x->xk^[UM$f^< gO G?>yy>[m꺁4p$|jQ>,kBP4˛=mLCɖ>Hg_f{-c ڣf)֏0P[[۷#cs1npnA,sR J">UM%^* Lƭ{)*n֭qƔi5j4?U4 =PiA:ֆƦ( hiM A`[q9K%痗'k_ p˄eY z{D{,KM(sf@Q[`ǎx0i,>w!D}d& ^uXNPC`u`(މ;?˛o'iH4}46CT ) X&R rHc%9~/ !5uTUir%i4j2aG\0{7H}iKEԔj:z3/,áCLxh KUU(Y3TV&jUЕd TZ cN(@8> %n ma0*3S* {e1}MQ,P((MӸ-(9HӞlq9>ծJ!"+I!o@P;?TA(& P PU1`CM4%q)t2 MM@z\  Q D!,ӂ'ٴtLKR3w{t]{z .QX :Ԇ5aM`䟆y\_7~'~v23XKWhj&*)hٗUU%ǡID#lE{,ҡN\pgLJ;0,{WSNZ $&,xexqýo+H{!WTwt\nqFtͼ/ -[pwFkk[:YOFΞVE!֞szݘ nfW9)X1yKXJU}Jnǖ$Ygc F)۶٩%I”)Sq=Z^6 ]~w-ɍݞH&gD9̞L)*>SuVBQ`qmipMMMX:p.,¢gbXi: ׍%y;;Tm5M="K"Ò+/r];G&slZt|햫?\`2:< OB=w k,\pnA,wJrm^{$ $.'Vj-CKK{_7TLS0c(w7F8jm,eb4CTv)BpX.-G"B"d=PUm[v3s':ۣI5u[z,GCLUu>ok{.$6Aݻk ;% o}Ȳ Fؿo/x 0܇x<@ p ]ɣߏG20 @QVZP8ێ0 %hG?1{_snݶcEDb,>wm/|{HiX֣9t/VQGRznY' 9%DS[qّl|PR~ Ut*iΛ{}KG ;WvzYƜ3FuWAMK ~?<,s~x.<e y?8]2L^Zr]8{|׿\/K&^{lnyO~2$9 =p\񔎏Ic@ (.Cχ(v죚1''IB!i`,)1I_sݸ[pA/bnK&qi8t7\QF N~[oܥC4޳J͠%( O<|=DKQd :^DREUR:JM 7~sgM.ī/AsK+,˂(8Yeo~ ˲q;u;0oZP8 yY{2Gb1455R^Cnp p%kāðLǖaq 7+8hiieY(..ՄŮ]_\8'zTJ! ''S>io=k$a]խVjl )a)a][ ƌW^7;JkWCC4Am]=|nG:xg}e9{Ḃp\>ȟO=$&9^:p.njԩPTT-{gÓOy痰puAlK|ӽ5MݻonK@' _p:=qs"(k0_??~׿:HE{2(s+/9ǿpk2t%܅E~9AM} EI"{qBxBUM:(2d*UA7.ksD2Tjמ4ȒS`FGt 8~%R*B1ʎ֌w^\z?g|^/ZZAWra3qg\s-}9,=:]qW^^SSmmݻ1ď.^ʇ<ȮJ{ۗ~פNII:+!a ( #ApajJrQJ\(abKG@QYD"$ݝ^^o~~{NիwW;wSၣO>o0y˺v^z4,yty\=^J_8a֗8_TUVby;z&M~b6>H;td%_Z7880D4I(`9dõPV{=VuӹJo_?//B[k]W ,V cf5h!GfQ'A2I1MWD<}ud 7t izézcEsMct܂Qkkkyk?ź+J1 ogI<ʑ0N zb M$xAofe!:.\ޒN:.mQ#\pNkZb8t)^RRs= M$z}!iC>o$)vߟ^կ~o%rK*<=&mTmcy]ΏwZ/RbC۶]N^x De pBz p t˭,[ʭHksN% R-/ɬ\&>JkI`g}[wf0 EaM;o\!wZ^Jʦj6ri37f( Ӽ|xIM[߰|>&A/t_ZyܲmmKrVe իj9r|ǦV)NQU& M]ŎM޽mbld6YF璦}ӆTBfdžRɗJSҦ)w O= ,oeSM'@U#?9Wـ#|o/ QZ |[\Sq;UUm?vFǥ7ed2.E7 ~?S4eJetv{F3)Zn7^z}NMu j"mN&"NOĉDNňDT]YVDGx#ci>rGx<'t*=|go!dͪlٸ3_fe;@/}O4MY*A^>SR~}Q\@8C6/7tӺ$i:TUtJq9ԲYnE$*x,z&etugt|K.|G87BSd2l .iPBMmu*ҲB'_Mp>q*va#/6oXH3˖2 DJuV吗 AC\[R24#oO9 ,rA0 <Ӎ2qN aQYq;Ҿcŋ_WTKB ;h<@7|E$=G}RJ55!La͔ eHTQSɖ5SDcSiݜ8T3P/WMn1Mwu `>VuLxbˁۥrh85%װ( A:&LJɲ!n~y?[nmz4cv|k+Dɖ : zl_d^|X `Z6k:w_z"0+ FO~ToBZ.sTY(˶9ذ|kڪx8 !W4o^y.iS)gkDi]Yb l3mk9 S!@&QcpUFa7n#kQٺJx=΢$)sdA"Fxp4p8HXG=o''ܱտdQ>}6Lo*:S  ]_^/nmmm<_m݅Ja,7ϥ8Zd,(GSoŊyoR/bzzz飿EdJ[|Oa' sS Pض+WhGO]vGifvWt,T)l%cWma~MI:4a}Ds\q|+_$@,"dX1Q0'R", 0۶!,r?^{:Äo Mw13u>%RJ"Lt%!·^ŌFWIENDB`pychess-0.12beta3/pieces/ttf-Usual.png0000644000175000017470000003166712176710403016747 0ustar tamasusersPNG  IHDRMbKGD IDATxwXSǿ †AP:-Uu488qZq@R"K*bEZ"B@T0i/P|I={|% C;BI _s# X[[CGGVVVRS^j9Q477NWZ&q2{DFFR644k… I'Tӧ/u9{_X? RPPPTWWDzόMMM?#pڵ9i;o={ FFF>iҥ^ﲬJJJ`2_PPpڵkc *jyyyCU_|rΠ鵡S?~.11RSS"իW㸯ANNaxe0mU1* {{YfMV[(\~ bQrq# `|Zs999'Nɩ5d2lll֊RF+V@jj*M5jTG`;իNGb4551e_*eXhݯ9..3K,i'N{Ms(**Z2//83/^|Qr1 y XXX`ԨQHHH+T*GZZs=z*rss66yy錱cNںu111V?zw/E-SSSv-Fbb"/_.0---,\۶m'c b |:'##E<,ѶWQQ8yeee|'fA^u5~-ܹi4Ke1j4o$?C_&!_u… v())AHHTT //>!kMMMq):Kc NR75jif~IIx%8\GFk׮=cwzcpmD$hkk/30h$Ơhܙ3gիW| p~׷ťqʔ)E*hiѨcp8q̔RIСCݎS p*B> MGcc#rrr`0PTT999aŊ;,--eddLyyyAGG@ЀfRii)Ϭ]!io߾CCC₨CNNrssQTTdO'''OOOTVVv Wh4***^677)))=RaI;YCCк!iK.ZZt-)**O>D~# UH$h4˃bdg۷b/wvA"##5޾}kd2 I$R J}%p%#𜜜LMMAPbЀJ& N]] UUUAee%JJJPVVB[ CCCBWWxT2=##ãA\XXTZZʳј Xd2zzzƕQ6TTT(,,$i=72 [`hhsss@OOO~t68mmm]SO 77͊K.E}}De nݺEm`0H%@ 1c]]谰1 ,)Xh@"Az555wZuQjhh]kDÇ!)))L|E6ΨAbbb麭c/)))GZZyZxmpjjjR! J-rQRR"Q7H]]F|Iӝ-c^Fp&&vPRRww] dddt,ܺm '{"38x>dkRx|ݝ%dSd'"3B:X,h4qty;wp%⻡!~go͛j.!ir?w/""oWCfp A]u,,+[[[(wԩTnOi!kR|P5w!Ν;ldd6|1p:!ϟwAYf>Ǐ$ ='OuΉ0l۶֭[y{DEEZj ZYYZ*[㓚)))AII Ri… 8s pwww +z֭; bsҟi~Ĺ}8*?Xr@Ppҥ+-UD~$''Oշ6lXf͚Q" ITQT\۾};JKtIKKڽwF[/i^FIX,|}}-~G\' { ݊Ch8~x҂zs C}8ء 9|zaKt3 ߿___c׮]oAVV$LJk׮R VHHH ""##UC$uonn_'22RBJdp]ʏ;\WW'-z>XQinnPQR\.\cҼympEEEըȑ҂1b2PPPGwm&€8$D&QWW'pv~~H$1>˴]t3Z^^.tN%L& t(--ETTT3?:O;wnuPP{ prr"F('NwE ӥ% JbΝPTT ʕ+PWWGRRbccŽEZpVx߿?16hРٳgDM4wϞ=B[zsssinR=zVlذ_5ϹO>֭֭[?^JKKP'tx-LƘ1cns~t:8<<*>>ʊ+LDkjj:A&O} kk..(((@SSSBEEE>#G,suuvnFAWWݪVSSL&JjQQ RSStaVd{Q[XXʊo:XXX 33'OĨQ0}􏺦/ZI??.X3ZYY9KAAፒeet:L0c/!0Ұ+W 11?~T |]W;?7 "p6""oMM&IR3tJ_$(n68xyy`/Y߿S^\t k֬nݺ>Lq78}UUUb>|yYf.22R`_~~ئ&*7oP^~M.**"SUU)KQQ:::-e/LMM]3@mpqqqhjj~/V IJNNN<v\q*>yd{NEmm-g6u"į"n޼ EnI$֯g;VWWKC:::***b9;vlӧE6Έ9rD`&jFZ|X5ZJJ ll^1!H5jbbbDvȐ!Xx1BBB >\xyW;'qI#Azzz28TTTO?/ӧOEىCeeX 7oIV)} ||0`K"KY\ǀ.$'\s䪌wdSd'"|m. >g|MVx N;08}}}(++CGGJet!msӦMk^U?s5[ڵk2w6ld2aii 88ooo8!660pyܹ>x ⷇D"!99/_|Sׯ#&&F&)ʖqO׏d2푘OOOd466bʕٓ-b QQlmDNUU/N =EI{" GKK ;@H6W[!شiA"ڊM6/$L8$jhh ::Vb'Y1Caؾ};~gK%ЋPA~I!gggBFdbÆ 111?S؎ Hł"""c1qD/Ç Mb//.] Hn's)z._-[V455AKK ֭&?3.\=/zQ;FCCϟ?X'Arr2_d☊ /^ B6je4"##%οç| uVhiW[;.]*0/q-…Œn5NgϞٳgĎ&XYY!@D=v 9qqqd4iV\.Mcc#N cҤIo_h4FimmţGIT6pijjbС-lmm)))ı`X[[Fc ܣhnee%&vwҥ){===8qorJܾ}bj*K;sLsZZdB[PweUx=s$߿q񁞞qwETT= (.))Q?xrss3.^ɽi7;;[j7w9r$n  D~~>LLLh"<kT*UWlRĠ666pttʳ?{M-׵o>8pDZ֭[(* UUUJ5{CC郌7ƍ ??pww繖!3x-,,,f"@!6 _|߿=|6lLR6aۥK.^x.i-iiigϞ!55uuuB-[=|v8f;bڊg"==<VvvLDl5߿UUU^paÇI۶m wqq ,\PT<vdtMM ÃW_I<ݙl߾)))hiiիWyfFpǏw>|j0 .www'O_d Ss999 9c4M=t+++"Ͷm0{lbbw(//&gH,TWW̙3755aϞ=ذaDnʔ)=װa!.\vƌ $$$fɒ%(, 6668qBBB*\rOZYYIU'`Ο?c^`֬Y `sxd2/_ ^lYÇl`?WI#Tw8@W&%%jkkIǎh"\H$ݻO\RREʂ rrrpq|Jd9HII;w`iɖe2xQ{>p Yz5X,VFuu5F ;;;t#<<D^~-qw^ep/^#GHk>Ñ#G CC W{ uF̞=O>>}/01߁{MNN!!!D<_a.| `5J̢n d2aggx$%% \:㦰EEENGll,;۷owҰX,b[ag1M#T*Ujb7nZܺ;66v'o}}XZoȐ!۷o.L70n8^Z. 4HiF***Dji,YN1Hy[XX`4Iqq1v-0 DH3(k:O@{8sDUUU;hz DCG>4D~!씊l爌wdSd'" }$&&:G292Nzzz2ȐH(0Ϟ=˳k˖-RXs300aeeɓ'baǎ}333dddѣRDѠĆ ЫW/@>}x `'%%᧟~! db֬Yx)X) 9Q-[ +#Ł3Yz56nH $' %%%Xn^J8ܹ mib(((Sfz-ݍTCCC|AAA LLL0sLۗxC?s8p)))9r$CKK ǎCNNJKKb`llo x/nO>OYÇ:x`ו+W 7Xj F ''Xjmmm<+V@ff&`_`h yĈB }Ν?#`ÇCKK | !%}Ο?/퇌ٳ<@PWWG<\8;;#88pqqCP^^ssso%2eNN:I& 5:V$$$`С(++(xedd;99KLLv9jԨC>Sf/]Tv! N 555F@@!''Gspss#(ͭ!HB;333#6s٪Q__wz,[ PUU'( cozTWW{L||<,,,*ݻwDxBR2ڷo=zY~,GD`;"rO$&&@hh(nݺyyyܺuK򵅻q4صkӧvڅ]v<ܱcLjϡ&EEE5 ϟ0Z Dyy9^|<~~zDEEaСڵkqq.]VVVx-\]] oՁ蛞### : F<==߾}aÆϟ? |9}۷L&EeȐ!g~x-޽ )vb_~% oߎիW`+  :}+tpp ruΝ;h4dkjj- ͛7ҥK?D]]^~W\ FÎ;Ē ! n&SRRǏc߾}سgLۛ0+V%ѮDH3hVHLLĽ{zj<5 HEyy9h#Ǝk3 .ٴi`P( C)!!a8e_/^Ė-[ ̙3 رcaccW"77wܰaC ~zLB]]v؁ŋd6mJZSS8Fb'uۉɶѣRgBq^Q" 4h=N`طo_CZZ"۞={ //۷ocÆ E?Bݻ666/^LINNN>/حGaaPN8k֬ `:x`$$$?$ ͞=O>%*gJEX͓t:"##1tP$''cDg[[[l9~G!8w!rNNѻwodffb̘14hz &ny޽{cƌ4h^Brr2nܸ5iӦ!!!, D %KL&###.w;w\Mdbb:7YYYpvv/ЀiӦpӦMď!ӧOgH3pww'j:nTTTwpr8::ϟ̜9Sj rrrDڷo_e {ŦXG^ =7Çɓ'Kn3f̘?d2 ]W-ŅH9sT8qd\689S!ڷ+ફh"`uy/t:]tC Y7bBX8+1bl2[RXI+i~?MmlEԖu b˖-Rk&f̘ C+:G8Κ5Kp髪z\sss/믿ƳgP\\ܡ:J tuuy LYYĉ܌;vwވϑn”D"077 *Ľc,Z<@ZZ%%%;':;#ep}% %%%B666˗?&) JKKi B~~>Z=U6mmm`ŜQpg444{׮]e_qLLLᴈ sba8zn Cs˖-ER*!C@UUݹkt!33sMIFPpvBQQ055mWf0 緛 Ś5kJLi„ ?~<0l0PTՋgq977---x->>+/7eeer "##qEbp燀n=Mҡihh ""{Vl :x7N$ck LƼyUUU(++[fVNN._$ck1 ؀]鰆%]xQ(văchHI;DOOrSTT$qٸgrrruqy^{ B(O***AW5j@uԮv6hQiii^] ο+A{k8qds̑d\]]ž6;;}n(/ 38Z\Fіiz,IENDB`pychess-0.12beta3/pieces/ttf/0000755000175000017470000000000012176727272015151 5ustar tamasuserspychess-0.12beta3/pieces/ttf/merida.ttf0000644000175000017470000007571412161415524017133 0ustar tamasuserspFFTM{zGDEF&z(OS/2B*x`cmap(pgaspzglyfcm:`oheade6hheaA4$hmtxmNlocasumaxpX nameJ.wpost5>yvhea z$vmtxa8"zL_<+C \C \Dc. "H3 gh gx{ yggxxdUUdJD GDDDW{jN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a(<Tj~@Xp~  , H < Fhl0@!<"D##$4%~%%&F'0'(&),*l+,-4--.".../8/Z/06001$1d1242j23(3T334455b566\67*77 72#"54  g %3##!##x gd##5!!!!dw 7#5#5#5#5g #dfh!3!3{c 3#3#3ddf5!5!yddf #5353!5353 ggyd$e 72#"54   #'+/37=333333 #7573 !!!!!%2"-x-[d-o-F-2- +O-zdG3! Ilz[AdpG/-$,P.-z/e-J-5 -!  2#"&546ttutuutgf 53333xg hy$dx%3##x gd##5!!d7#5#5g #d{!3{c 33 dyy533yg y$dy!!dy#5353 gyd$ #'+/4:?ELQ]!3333 573#7 33333 &'3 4#5 #'"5'52#"&5463GdzsO-!+-2-Fd-ox-[-_ -! iaOh-  demttu-5-J/e-z.,P-/BGUdpz[L -`>j[ e0Ytuut!!Yk%MY]u -19I\nr7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&7676767601>776363"%436'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&'&5&'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'0&5#"'&54763272#"'&5476"327654'&                    @  &    *d    A   *   +$ 9 D%Z&  !%"&"  ! 3-',  "  " >DZ)(A\*q112 " 1.   %''5%    >  % '3   # tEM!  6  2vEN 6 2U ! :-6G2L6K'*"J-!*#>>;@.>:>>>xB//BxD??;#8FX5%++*5MS2"")&>>>(NO/. &%=J/331C9+@0/0,EA/101A   g  )        B  I      "    \   " b!  $ %"!(" ($, "(O       <0   *TU!   !-  /w  R [$ ' ${?! 7 &  ' b@" :( '   byqh 4/ HRQQ(QQR\K(0NeQRqq>e~=5==59lxA:064RQQWh{=-?'%46LJ<<,,:=MJ6445IS9:=#%59 !! 98"#g!4677#46gc!fObf!7R! "',159=BGKPU[`e327>767&'&#"&'&''%&#"'>7676727>7.'.'.7>7>7&546323>76.#"&&'.'##"'.'&>76327>267654&'.'62'&#"6254#"267&#"'"514;54312321+#1"53#'7#'3#'3#'3#&'735333 &'73 &&'35#7573 &'7&#'67&'&'2"'"5#=#7jL>L &*' 0).L97/e':57C(!$b< Aa:B66m7< 05n*hN>7L?x;JO98PJ:wAK6=Mh,n30 <6m77@<bA 7654'&#"'6767>7>7654&#".'&'&'&#"6&! !2$7'&! 6! %'"'.'.'&'&76&546726767676#"$'6! 7&! - ~-m-mt/$1o--_"0x-[d-o!%D- mnw -f+O-( T e_b O%!^ #GS""S$#V!!UQ&Z0+M^cW-T("   F2w   )S+Yf[L+0Z'q"5 KI!/,1= ghBY= oNNn .KVEge=2*!. B2-:4Ƹ~mmnr p r N0<z[Adp E',l* w, *0ˌ-$,P.:&S-Y8e/  a-r- M-$= !!U##U!!%I&=dZ%.Twsrr  NnoM srswT/$-:=.10.56$ "(-15:?EJNRVZ^bhmrx}5@J_u%#%#%#72%63#%67#&'73&'73&'3533355&'35#7573 '7'4&57'&'7&'2"5&'&'.'.'&5432.'&547>32#5#"=4;5431232#6767>7>7654&#"4&'&'&'&#">'"'.'.'&'&76&546726767676#"$'%'&! 6!2&! 6! >7654'&#"74676767632.- ~-m-mt/$1o--_"0x-[d-o!%D- mnw -f+O-( T e_b O%!^   35q}9O2p9HBAD& GS""S$#V!!U$   F2w   )S+Yf[L+01W!/,1= ghBY= oNNn .KVEge=2*!. B2-{ K>̼$#FX70+M\d[)U'I %EBAJ8o1 J":ϸ~mmnr p r N0<z[Adp E',l* w, *0ˌ-$,P.:&S-Y8e/  a-r- M-$=     54 &   %K!3=K#(' "EQk!!U##U!!v '-11EwA-!!(/R*$(q"656'.'.'30 #!"67>7>7>'''&'.547674767>7>767&7676'&76'6616'&767767"5&'2#&1&'7&'7&'7&5757573#75&'35&'73 4674&'73 3%&7&'735&'3#7!#7!#7!#7!#7 # `F". ! <5 ##"R0Ha(0R"" ^Bu#(a #xN-3%,_&$8*!83hz 5 LJ!aP=&$ "v-  = , - !7-d kqVXTTO-!+ [-p P-S-Fd-oyQ- #-x-uEy-xLz/wGy1|Bz/w *9\q!"7$9$* , m?} Bl0!b9B}?m oN{ņbX? {Q.9L H&9 3f;TS$- GqF8`(A!"   +s!   @+  Nf- -M-zr/W-/T.,P-0] \+P,*R {dpv+ Q0xwwwwwwwwwwp$(,05:?DINTZ"656'.'.'#"76''&507'&767&''&'726763277>7>7>7>7676'&320 30 #!"67>7>7>'''&'.547674767>7>767&767'676'&''&7676#7##7##7##7##7&'35&'73&3%&'73 4674&'735&'35#757357'&57'&'7'&'7'&'7&1#&'27"5#"R0H  %aL" )-"+Vn @ #  ?1/2 .+/  % #P4,#U!.  + @ Cf U ^Bu#(a #xN-3%,_&$8*!83hz 5 LJ!aP #7  =  -v"  Hz/wy1|z/wy-xx-uO#- DQ-yxd-o-S- P[- +O-0TVXkq d7-< !, m?} Bl1/$$^Pj#$  X6|  >;hKHH8"a/9,9% <3;J ") -B%6"!q]@L=U oN{ņbX? {Q.9L H&9 3f;TS$- GqF8u!"B'@   !s+  %wwwwwwwwwwm0X Qv+bdp*R +P,8 \#0ˌ-$,P/T.W-r/}-+ -=f-g + !'.6;AFKOSW\afkosw|%!&547.5467&54632%"5.'24654'&'.'&'67  573#7 6653&'&'73 333&&'733#%3#%3#%3#%3#(ҥGYfQwUTxQf[F'K  o!A ]:  k^sO-!+%[-D -2-Fd-ox-[BH --v--w--v-.u/1v1dm&?!Ti =dTxxTd= iT!?ڹle X o  ?- ]-$-o/w&i-z.,P-&09<",FqGUdpz[0I vuuuuuuuuu!QUY]aejosw{%!&547.5467&54632%!654&'&547654&'&547654&#"3#'3#'3#'3#'3#&'73 & 333 &'73&'653 6#7573 67&'.'&'4654'.'2"5(ҥGYfQwUTxQf[F'BC]hJ<6P79O6;Kg]CC1v1.u/-v--w--v- -_Hx-[d-o-FD --%+O-k :  ]A o!g dm&?!Ti =dTxxTd= iT!?ڹleDHE<C5AkMt ?*D8PP8C+? tMkA4C -o+O-/ N$1% t/m-m ~- C-/!R 5O98QQ89OFBCCBBCCBFO98QQ89OnO98PP89OFBBBBBBBBFO98PP89OLNE&+:<-n2& S' sq++r8&Zs(?7* : # --sm2KF1kx8u12`.-OCBBCFP98PP89P  )0 #rM+"O&,d >&*+ UJ), 0ˌ-$,P.?&N-</r5-mn5-~D-y 4!7;?CGLPTX\`dimquy}7!'!5#!5#!5#!!!!!!35!3!5357'!35!557"5%3#%3#%3#77552#73#7373 3 5 #7573 '#7'5#733##73Exgii͉̇"Dh2"ުhgD }.x-,v-.x/CDG!j,x-t,v-u/y-Fd-o+O-x1yig-x-r,w-<-x-Ugg4ffw"Dg"ͪޫwE+h*f0D.0. Wwwwww.-,C-+C-N'Gqxxxwxdp ,ƌ-$,P.wwwi-N./xxww!#4&'52#4'bg8Oe"bR7! %,37;?CGKOSX\`dhlptx|#'!#57'!35!35!!!75!!57!!'5!!5' 555%77552#73#7373 3573'5#73#733#%#7!#7%3#'3#'3#"5!7#!5EhFުIoG<D<<7676727>7.'.'.7>7>7&546323>76.#"&&'.312=32514+54#1"#"13"5"'&'2&'67'&#&'7  573#75&'3 &&'73 333 5&'733#%3#%3#%7#%3# *fzye*|,LMKMU_`3(( u '*(!$b< Aa:B66m7< 05n*hN>7L?x;JO98PJ:wAK6=Mh,n30 <6m77@<bA ̼$#"9OO98QQ 5!- C ~-%m-mZt/9 $1s N^sO-!+f> -l V- -Q"%d-N -b-3'%[O98QQ89OO98QQ89OnO98PP89OO98PP89O+:<-n2& S' v--w: 34e10TP98PP89P 4D-~5-mnH5-r</?&N-z.,P-<0 J),A U>&* "O&,dM+k # )0  %/37;?CGKOSW[_cgkosw{ 1' '1&7 &716 61 "51 4#0'3' #%' #%' #%' 3 573#7 5%'3''3 5%#335%'3IIIHIJHHIIIIIJHH >T[!u- - ,- /n kIzsO-!+ -&-Oc-d-ox-[{da-IIIIIIIJIIIIGGKHd <T\ Z ---mk/e-z.,P-0 %,*Ocdpz[0bax!467xO8 7Og3=%-7On'"514;54312321+#1"5267&#"254#"2'&#"67267654&'.'6##"'.'&>76327>'%&#"'>7676727>7.'.'.7>7>7&546323>76.#"&&'.7327>767&'&#"&'&'S""S$#V!!V#$$D 83:&d089L.(0 '*& L?Ki8"=$(!$b< Aa:B66m7< 05n*hN>7L?x;JO98PJ:wAK6=Mh,n30 <6m77@<bA L &*' 0).L97/e':57r""V##V""R$$ADDDDK{{#J@M.o-1uNNu1-o.M@J#Z  N  (]/9,# '    -7$.V"<90fD&S8PP8R'Df09<"V.$7-    ' "'B](  N  Yxy3"&xg 8O gOy#565O8 9Og ]U GQZn6! 7&! '"'.'.'&'&76&546726767676#"$'%'&! 6! &! !2$.'&'&'&#"6%6767>7>7654&#">7654'&#"#5#"=4;5431232# :4$!/,1= ghBY= oNNn .KVEge=2*!. B2-{ KIq"  )S+Yf[L+0Z'   F2w  ,Q&Z0+M^cW-T(GS""S$#V!!UG0.56ѻ%.Twsrr  NnoM srswT/$-:=.s,,t8NPF'?'M/R*$(q7654'&#"&! 6! '&! 6!2%'"'.'.'&'&76&546726767676#"$'4&'&'&'&#">76767>7>7654&#"#5#"=4;5431232#.'&547>32&'&'.'.'&5432m %EBAJ8o1 J":ŬX70+M\d[)U'ʸ̼$#* K!/,1= ghBY= oNNn .KVEge=2*!. B2-O )S+Yf[L+01W   F2w  -GS""S$#V!!U}9O2p9HBAD& q  35akQE" '("L<4!C-L6b#AaY"656'.'.'30 #!"67>7>7>'''&'.547674767>7>767&7676'&76'6616'&76776 # `F". ! <5 ##"R0Ha(0R"" ^Bu#(a #xN-3%,_&$8*!83hz 5 LJ!aP=&$ "v-  =  *9\q!"7$9$* , m?} Bl0!b9B}?m oN{ņbX? {Q.9L H&9 3f;TS$- GqF8`(A!"   +s!   @U] e'&''&7676'6760 #!"67>7>7>'''&'.547674767>7>767&767"656'.'.'#"76''&507'&767&''&'726763277>7>7>7>7676'&320 3  =  -v"   #7 ^Bu#(a #xN-3%,_&$8*!83hz 5 LJ!aP#"R0H  %aL" )-"+Vn @ #  ?1/2 .+/  % #P4,#U!.  + @ Cf UO@   !s+   !"B' oN{ņbX? {Q.9L H&9 3f;TS$- GqF8m?} Bl1/$$^Pj#$  X6|  >;hKHH8"a/9,9% <3;J ") -B%6"!q]@L=UC2!%!&547.5467&54632(ҥGYfQwUTxQf[F'dm&?!Ti =dTxxTd= iT!?ڹleC2/Q!654&'&547654&'&547654&#"!&547.5467&54632BC]hJ<6P79O6;Kg]CC(ҥGYfQwUTxQf[F'HE<C5AkMt ?*D8PP8C+? tMkA4C7676727>7.'.'.7>7>7&546323>76.#"&&'.312=32514+54#1"#"13 *fzye*|,LMKMU_`3(( u '*(!$b< Aa:B66m7< 05n*hN>7L?x;JO98PJ:wAK6=Mh,n30 <6m77@<bA ̼$#"9OO98QQ'%[O98QQ89OO98QQ89OnO98PP89OO98PP89O+:<-n2& S' v--w: 34e10TP98PP89Ptu 1' '1&7 &716 61IIIHIJHHIIIIIJHHIIIIIIIJIIIIGGKHJ)6Nkt>7654'&#".'&'&'&#">6$3 '7&! '5#"514;54312321#6767>7>7654#&! !2$%'"'.'.'&'&76&5463267>76761#"$'ˬX70+N`aW-T(G )S-Wb_L+00W WF+GT""T#$U""T$   wx   $r" . +2>ff?\3FnNNo =XCjd ;T / B2-g6b#?cZ763267632%>763232%327#"$'7/773&! 3 "&54632'254#"!254#""&54632"&54632'254#"!254#""&54632\31P[I;V31`@: CB ,9OO98QQ8CCBUU/2  "&Ҥ.% 778<6761-?XU1EpEpE/RZNl9PP98PP8BBCBBCC9PP98PP9OO99PP9CCBlBBCC9PP98PPn3LF0k2~Tp76nV.P98PP89PGBBBB;.- ; # 8*?r('Z +9;-n1& R& MO&*O98QQ89OFBCCBBCCBFO98QQ89OnP98PP89PFCBBCCBBCFP98PP89PG ^>'&6'6760 #!"67>7>7>'''&'.567674767>7>7>7&76772767>7>7>7>760 3!674'.'.'#"76''&747'&7>7&'"Q#$O|! (+A!j ^Bu#'b "wO-2-%a "8+ <3hz   3ƈ#_Q $ @002 0) $ "P 3-#T",  Df T$""R0H !#aL$!++"!Zj ! *!U)*!TQ"%&G- oN{ŇbX? {R.9"L)!' ; 2g;WU$, ErE7 =;hJHH8"a.  " <3767&'&#"&'&'3>76.#"&'.''%&#"'67676727>7.'.'.7>7>7&54632##"'.'&>76327>'"514;54312321##1"5254#"'&#"326267654&'.'6<#7jL>L"-' 0)-H>7/e':56J2 <6m77A;)bA tP!' (!$b< Aa*:B76n6< 3E1xZG?XJDU[B@]VDKW?GYx3 75:&d08?G.(0 ',# L?Ki8">\%%\''^%%^'''NNOw[fgjc]EPNkls1+4O-p,1vNNv1,p-M@K"DU" 35#!5#!5#!!!'!!!!35!7!557'!35!ˇʇˇ#DhwyDުyuD"~~ChTͬ"Ωެ3Dd/Q%!654&'&547654&'&547654&#"!&547.5467&54632CC]hJ;6P88O6-B7PP7C,> sNiC6B= /!376?!5?6767654'&#"'7676763{c@9&Cmc8"*%/Jy; ?!/42a>>i;6S< tiA-8.0?R1; \6?C^nF8V<?!36767632#74763232767&'&'#56765&'&#"'{c?"$(I3AKP"%h] ,B.(?4i")%:=,( M- &0Q`:'4;QRKJ  4.JW9-5_8$"#D 5!3733##5!53.9}}ic`no"!3!!5#"'&5472327654%'{cE61-,f`7)=;A++G0)Djb:[W /5(B8L2 6!3774'&#"'632#"'&547676767{ca %B ,L53ZFL4:s!*-P@\)C<@FM-#)8:-&VL"%<W@T0*0A,7R s\;1- D!3!#5#'{cU,:*. %M!33767654'&#"#327654'&/&'&547632#'"'&5476?#{c+'%;9$'k)K25E>$#A 2D>e_;JG !.-!# KFjdBNc H!#%4D=o#8Ma:5*4VW="!%'.#)l:55?^&&K:*G!!32?54'&'"#"'&54767632327#/#"'&547676?9>$2- GL9 $.(,(&M  ;KD=#$$9dFd8V&'I<(?(& @ -3-&  ><%$;.!#)("3!!32767654'&#7632#"'&/'&'57#>?* *OV:P%##(-6Q4614/6d +-"=J]E]N<)3E@jKZ" *9"7!!4'&'&#"6#"'&'&5476325'&'#5737^ !%8" )gA#>KS@'AMs@0 5  d(!)#*'8GKAy 0C&,S"$ Y=85(544  _A2*<%<)!'%%#,>^;<"3!!6765'&'5776323!5676=4'&#!49"EHk  ;< L/)% 5d8-(9!?a&'B$" 8-U#&<W3!527654/&#"53!32?A ,$c,>= {+/376?!5?6767654'&#"'76767633!39&Cmc/+*%/Jy; ?!/42a>>i;6S<xc ti4:8.0?R1; \6?C^nF8V<C;?C6767632#74763232767&'&'#56765&'&#"'3!3?"$(I3AKP"%h] ,B.(?4i")%:<-(c L. &0Q`:'4;QRKJ  4.JW9-4`8$"#D  33##5!55!33!39}}i.c`n"&!!5#"'&5472327654%'3!3`E61-,f`7)=;A++G0)Dcjb:[W /5(B8L2 !26:632#"'&547676767774'&#"3!3)ZFL4:s!).P@\)C<@FM-#)89! %B ,L5c?0*0A,7R s\;1- Dr-&WK!&<W@T !#5#'3!3U,:c*. &'8IMQ&'&547632#'"'&5476?##327654'&/3767654'&#"3!352D>e_;JF"!.-!# KFjdBNc +)K25E>$#A +'%;9$'kc#8Ma:5*4VW="!%'.#)l:55?^&&K:!?]E34$#>D=!#%4$2-ydd; I<(?(& @ -3-&  ><%$;.!#)(08V&(/37632#"'&/'&'5732767654'&#5!5!:P%##(-5R4614/6#>?* *OV_ <)3E@jKX$ *9Y +-#=J]E]Ndd*.2#"'&'&'&567672#"'&'&#"32?5!5! #*.&1;),! FKS@'AMs@0 5  !$8" )gA<0C&,^;<"$ Y=8@=YwE>SBdd/376765'&'5776323!5676=4'&#!5!5!49"EHk  ;< L/)% 5/8-(9!?a&'B$#9-U#&<dd".!!#"'&'&'&567672#"'&'&#"32? #*.&1;),! F=uD5F68 $I* bDdn.*/&/<37WM'<5J' J4[<.Q : \      * B i  Chess MeridaChess MeridaRegularRegularChess MeridaChess MeridaChess MeridaChess MeridaVersion 1.0 Version 1.0 ChessMeridaChessMeridac "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph66 bɉo1C M=UU]]22f33=fuo"dpychess-0.12beta3/pieces/ttf/magnetic.ttf0000644000175000017470000007157012161415524017455 0ustar tamasuserspFFTMzrhGDEF&r@(OS/2Bex`cmap(pgaspr8glyf݌`g,headd<6hheaE4$hmtxq3Nloca׶maxpX name;yndopost5Aq0vhea r$vmtx_R7r빕_<+C C Dc! "Hv 15g111ddZZaD[DDDD^Xq]aGXjN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a&:Nbt6Ndr~z6 ^ \`$Tfxv6<j p!!!x!""#$&&',''(*(()Z))*r*+>+,,<,- ->-..h./J/00l01H122V2303 72#"54 2 %3#!##CC1CC225!!!!CC222 7#5%#5#5DD2CCCΫ!3!3D͇33#3#3DDD5!5!DD2 #53!5353DDDΫD͇ 72#"54  #'+/37= 5#'#77#''5'57 #######7#57 &@_pS2E60U2q1240e0G1%0B2`1p~/R/2E07UqfH## 2#"&546xxy#xyyx 5333CχDD31%3##1hgdgg5!!d7#5#5gggd5!35cg33gd155331gh5hd5!!d5#5353gg5dh  #'+/Q%#75#5#5#5#5# 57%5%'!7!7!' 33>75&'7&'#0G0e42q1U2FEM2OSN_pO@O&3#A'E^"0l" =%F`0"lHfqU$E0/2~/R`1pB2%0#1]I$= #m2#]E%?!! !Yk%MY]u ,08H[mq7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&7676767616766363"%436'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&'&5&'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'4&5#"'&54763272#"'&5476"327654'&                  @  '    +d    A  )    -$ 9 DZ# !$$% 1.&,! "   " >DZ)(A\*q112 " 1.   %'(6%    >  % '3    # tEM  6 2vEN  6  2U ! :-6G2L6K'*"J-!*#>>;@.>:>>>xB//BxD??;#8FX5%++*5MS2"")&>>>'OO0/ &&e<4>>49lxA;/55SQQXi{=, ?&&47KK<<,,;#$68!!!!89!#2 !467"7#4γ~GcC~eECCC 159=Odhlptx!21#!"514"3254 '5?3%2 367654$#"#75#5# *#&'>3#*## 373:337:367.57%5%'!7!7 67'&54632337"$#&'#5&'5&'&''3##2222998~##$$&;L U/0G0e57-mo" A 20 !2*W,0oEM2OSN_pO@W SM6J%>0P?E0PFx=($)Dwn5  014M2222! !6 $$ ʫ>KWcceHfj$#h$Dk$E0/2~/R`1pB27 , =&7-@ ?, :y:N2UY2-7?S0t6#lHY1 SZ02VM3 33"&%"53·cG~1CCGd;D2 #5265532~FeDdGDDDcjuy}  ?3733323767777'32#!"'#5&=56;/''?'&7776%>7'46;/ ''5'57 #7*##7*##7*##7*#"'#7.'(%##73#%3#%3#%3#%"3!2=4#'76/&4#!"&?632.#"12#1"=41'1&?616#/&`S&4 T#0eFC40+%I"#\]n84H@7lgC(. P72Q? ]gn5.W"!p0tT'0O,dHcCS2Exs#(4:v;22YX~0o]603E8OQ&K=1U^P02<7D~1pu^1z& MsFeV7~/R/2E0t5JH#fHgggggggCDDDDC,4ZaX55Zogg&Y34YZ4-^pp^gggg4XZ44YY32XY43YX #*.26:>Bjnrv736/&&1?6'%"312=4#.#"35!35!35!35#75##7*##7*##7*##7*#"'#7.'(57%5%''46;/>7?3733323767777'32#!"'#5&=56;/''?'&7776Y3e2ZY4d5X[2e3YY4d4YggggL߁K$#x0G0es#(4:v;22YX~0o]603E8OQ&K=1U^P02<7D~1pu^1#8UY]a #3'3&'&675"1"5&'&''67>7.'>77&#"'676&'7673!''5'57#7*##7*##7*#"'#7&'(!#* ###777'#"'#"'#"'!"&7>77676'$'>7670&&'673254'7367776'&21#!"51436a;#y0CJ'%0! (-6C K$l$  F* H ( p02"4S2E2;w;16+#1+>C+..y1<2/++2/" *4b 20'5 C<EF#ɰU3 369ZdO-"*,0661"-8La-&&,,$'k2222az zr/2y'  E3 027/c3h?#@x9 $ < h4"  "d#q40 +M}LMK 2222#6 -159[_cgl&''&'&6721#!"514376'&76327&'.'.!"&7>7.'5"#"5&'56767.'56767767>76'76733&'#"'676726&'!5!67'776'&'&'&/367777'#"'#"'2#"'>7670&>7&547#75#5# #7*##7*##7*#"'#7&'(!#*57%5%'#3l*a$#2222x)#!*(!"Ur' ' % ;EF!)   (#"-*R&  [EW4$p0,&4( ~0t17"eb"!(* "ν &o#?;0δ#r5?2:+00:./"-<N88,  2);A*.0w182/(+2/" -5d01)3  3!3:14!N0 c!=Gf(0G0e52;u;1HfA#hzE0/2~/Ra  #.Ew%#75#5# 57%5%'!7!7 73632333321#! 321#!"514;&547#557!7#7"##7*#"'#7.'#32 30G0e4FEM2OSN_pO@3 8] "%"0Y\$0"N!!eO+"" !![$ Uo  U14*]+2>s917j4 2 0V$ }Hf{E0/2~/R`1pB2O4D>-e 0 #DY^$4(""0N!""!O}%C1n#!V52֟ 2 ySE])V}3 &I{ ###7%:3267*#7:3#7*#1*##7*#"'#7.'#3:3*#3:3321#!"514;&547#557!777"5435";2514+67#&'#"'6#77#''5'57#3265440e0G37n6 BBZZ }`+2.X*17j5 1/V$nl\[ PRO+"" !![$ Uo  U14*]|3 hhFb """M N0\2cii@_pS2EooxTTwQfH5D}3`E])VD50N!""!O}%C1n#!V52֟ 2 ySy3DDgh@cE / #""'5N_eDigB2`1p~/R/2E0UTxxTy(4<7#5.'5.''.'7#"'7&5463246373337&546327#"'67:3263(.'#"'237:3.7>7 ''5'57&'(!#*##7*##7*##7#"'#1#!"5143!2###7*#>7::3*#.254#"!254#".'.'*#(!>7*#6.'>254#"5C&o(#'Y!QO9 0mP P94Z%0.'o0q( O9z7O8C*u9!E"x.].  +W*ܰ> d^"agffg,V*+V**V+*VDDDD  ';?CGKz12#1"=426=463123:3'##'##'*#32 !26#75# 57%5&47'7263737737337373#(!"'7%&5143!21+#7*##7*##7*##7*#"'#7.'?#55'7#*17#7CCD6PN97PN4OQ-X,$E#@\=* `&16652T2(0ߴ 3%vg5EF4!1S y0222 !#42#2eF~DDEe;C  #'+Z"312=4#"&=4"##75# 57%5&47'7263737737337373#(!"'7%&5143!21+#7*##7*##7*##7*#"'#7.'?#55'7#*17#7JJKK8OP79NQ80G0eFEM2 *S/%L&0=^4)=0k@00O 566u,$S$(! $ug~#$4;u;2;v;1;w:28m6 0 4S4yw75DCCDFO87PP78OHfE0/2l.;*/R>* `&16652T2(0ߴ 3%vg5EF4!1S y02OSW[_cx#3#67'&54632337"$#&'#5&'5&'&'' 77#''5'57 373:337:367.*#&'>3#*## ###7375/#!21#!"5144M01 SM6J%>0P?E0PFx=($)Dwn5  @_pS2E0 !2*W,0o`7-mo" A 250e0G$$#2222VM38 , =&7-@ ?, :y:N2UY2-7?S0t6#lHY1 SZ0B2`1p~/R/2E0$Dk$j$#hQfHh6 $$ 2222y7#5.'5.''.'7#"'7&5463246373337&546327#"'67:3263(.'#"'237:3.7>7 ''5'57&'(!#*##7*##7*##7#"'#1#!"5143!2###7*#:3>%:3.'*%>7.5C&o(#'Y!QO9 0mP P94Z%0.'o0q( O9z7O8C*u9!E"x.].  +W*ܰ> d^"a3#*!*#"&'2!21#!"514T&;L U/##$$A998#0L F1$SM66N -mo"HIH"oo2222[>KWcc6 $$ ! !x,WbJipS]_, =&77&?5j$#hh#$k92222143&1ggUygex4'565yUgVxeg v;?CGKWv}327>'32#!"&=46;'&6?6'46;/5?33#%3#%3#%3#%"3!2=4#'76/&4#!"&?632.#"12#1"=41'1&?616#/&"&'(!#($bGe+#><&$7lg7PP728OO8gn5$%=<$,dHcSSGTTVU2DDCCLY42XZ3gg4YZ43ZML߁KgggY4d4YY3e2X5d4YZ2e30%QS&/feFrK=%#$<]P7E8OO8E7P^`=$#%BF%"&'(!#(736/&&1?6'%"312=4#.#"35!35!35!35327>'32#!"&=46;'&6?6'46;/5?30%QS&/Y3e2ZY4d5X[2e3YY4d4YggggL߁K$#xbGe+#><&$7lg7PP728OO8gn5$%=<$,dHcSSGTTh##hu5XY34YX24YY44ZX4gggg^pp^wgggggggg3eFrK=%#$<]P7E8OO8E7P^`=$#%7>7.676'$'>7670&&'673254'7777'#"'#"'#"'!"&7>7%"5&'.'&67676&'6&#"76'&"&'(!#" 21#!"5143$U 6C K$lgU3 369ZdO-"}p"r+#Q+.)2/=P2/" 7.'"5&'.'&67>7>76&'6777'#"'#"'#"'>7&547>7670&#"'67672676'&'&'&6767.$'!66327&'.'.6'&"&'(!#" 21#!"5143C;EF!)C( (Q n#$_ EW4 80U+T,}p"r,  Q*.+2/=P2/" 6*-*R\i &o#{0 r' ' % *"!(*!##'!&82222h?#@ ! -  ]Ku@FY:*`, Z9%7=0 k1(   E3@27C0bC7J=fy$ 3!  &3#d֪ "H;(NS"""")?EccE<^!""!O}+,5*-yW44dc .6N[%2 3267" #"&'2 3#" 321#!"514;&54632'"3254321#!"514;&547!'#32654 ǜ ?,#$,>N!!`""M%bFEchhgK"" !![zyKooxTTw55D44"""")?EccE7::3*#."&54632'254#""&54632'254#".'6767:3(!&'2%.'.'*#(!>7*#6.'>254#""&54632"&'(!#" !21#!"514/2d2.2c1d3.2d1/9OO98OO8CCD9OO98OO8CCD_ wff3g3u]]DCDC]1h6.\-.\.6g1WW3g43g4VT4444CCDD9OO98OO'!&8222-X,,X--X+,XO97PP79ODDCCDDO97PP79ODDCCDtKNPYfeO\MK E&Z][Z#E!@}>gffg,V*+V**V+*VDDDDDO98PP89O!h##h32222Zv'COi(!"&5:3373373##'##'*#32 !2626=463123:3'12#1"=4#(!"&'7#"5143!21+O:-\.@=<@9\=3#*" #.'&547'&54632375/#2222"IH"oo-mo"H#0L F1$SM66NƇ$$#2222h#$kj$#h,WbJipS]_, =&77&?^6 $$ 1v #/MYeq}!21#!"514"&'(!#" "&54632>7.%.'6767:3(!&'2"&54632!"&54632:3.'*%*#:3>222]'!&89OO98OO84444+ wff3g3u]]DCDC]C9OO98OOv9OO98OOT/1d2.3d 3c2.2d2/2222h##hO98PP89O,V*+V**V+*VKNPYfeO\MKHO97PP79OO97PP79O,X,+X--X,,Xtu 1' '1&7 &716 61IIIHIJHHIIIIIJHHIIIIIIIJIIIIGGKHaa #/6Ua!"&'(!#(161/&%1'#&?6%12#1"=4.#"%76/&4#!"&?632"3!2=4#327>'32#!"&=46;'&6?65&6;/5?30%RS&/Y4e2XZ3e3%X2e3YZ5d3gggL߁J9LY55[Z3gh5YZ43ZNCCCCaGe+$==%#5ng7PP728OO8gl7$%==$,eGcTTGSSg$$gt5[Z26[Z35XY34YYgggg^qq^,3YaY43Yohh&Y34Y[5,DDDDDDeGrL=%$$=_P8D9NN9D8P^a<$#%=LrFfUDTTD D #+7?_*#>7:!:3*#."&54632'254#""&54632'254#".'67>7:3(!&'2%.'.'*#(!>7*#>.'>254#""&54632"&'(!#" !21#!"514.3d1/1d2d2/3c2.8OO88PP8DDC8OO88PP8DDC^ @Age3h3?A]]DCDC]0h6.\.aV6h1WW3g43h3UU~3333DDCC8OO88PP'"&8222-X,,X--X,,XO88PP88ODCDDCDO88PP88ODCDDCsLM*U)ge,V*NL!E%Z]ĩ#E!?~>gffg>}N+V*,V**V,*VCDDCDO88PP88O!g$$g32222 [ 3?Lm}21#!"5143"&'(!#" 6'&6327.'.'.$'!66767.#"'67672676'&'&'&>7670&>7&547!"&7>7.'"5&'.'&67>7>76&'6S2222,&"&8'$!()"$s'   $ i!'o#|1> 7*- !*Sw!d _%!' * &y#s0DNN3 3:23!N/ d!gy$ Rg@#? ! .  ^KtAEY9*a+ Z9]OT$QaDn #BJVh!21#!"514*#"&'27&'>3#*" #.'&547'&54632'"3254/5?3%2 367654$#"2232"JH#oo-mo"H"0L F2#TN66M889qmmmmm';L U/:2222h#$kj$#h,Z_JipS_], =&77&?Z! !Eooj>KWccD'COi(!"&5:3373373##'##'*#32 !2626=463123:3'12#1"=4#(!"&'7#"=43!2+O:-\.?==@9\=,+O<)& #E!3327654&5&'"6323632#"'&'&'65656765co%&?G#$x;&'  ,#=?B./"",-1H55TVK-.10M "# /%$=!((??A>,0""%%CDOrs!3"'6763!2#"'&'6775c"/ 3 *  !C+ '<, +=S!3&'&'4767672#"'&'&56767327654'&'&#"32767654'&'&#5c0.+>B0.3F'%8:JK9;%%9:7  5  +/  !-E!%1/,7-/)+,26//89J@;9'%%&;<@I976!!3[&%&&()&(%/0i*?!!547632#"'&=#"'&'&54767632327654'&'&+   ?]K>>"#&&<;=7%$(%$3Z('$'.O*)dK!  -Z&%GFZeHF#"-;13 A@\B33<>i*H!!3632#&'##"'&547632&'&'&'"11367676]>eL;9" $'/4;p'G"%23&())>4&$dKS*(HJT@:6,+P!    <2112C280# ! 14i,B!!47632#"'&=#"'&'&'4767676322767674'&'&#"#%=O:>!""-.8e=''N=(%#&/8$%dK*  !"''FC[@9;),S\?B !219A34 !22i <!!!&'&'"6767632#!327632#"'&'&'&'6504WP+-IM./b!<;ON=>!8*+1WL  >>EI68!dQ4211yMHD.,+.CGL2:')< #-,683i$(#"56;547672+"32+#"'&5!!*00'%%9Z'?,1?Jr0)8""/ -)0* d}=S!!##&'&'&56767633547632"'&'6732765<5<%27654'&'&#()7K8<!!!<:On'  :=R^[-!#$"%S'(#%0L0.'';3$#d(**GFWVHF&'Q PBA%%6## @>ZB.399d673#!"1/i5!!4763267632#"'&54'&'"#"'&5,)2;00$%?$ ds #33= I?+*!". D!333#"'&'676;2#"'&5͇hDl   P  ^:!333476763!2#!"'&'67654'&#"&#"&1&͇hD^99Q;01;2* y /)%'4) "-&C:9##/05$#%(*=XY!333676763#"'&'&'&5&'676326767654#"'47676765&'&'&#"&'&͇hDv12=8/./C"# !69M7.. !  #j&$$@%1/ !  7)+/242,,47E+2*+%&- ,c !(' !"A"; q .!333#!"'676763232+#"'&5͇hD-$$3 . aX%"G    ]L!3336763!2+632#"'&'&'4763267674'&'&#""'65͇hD "15A00#$,,.-31(( ATB-- + ,! l   $$9;A C24! ! . >,+O<)& # aI!333327654&5&'"6323632#"'&'&'6565676͇hD%%@G#$x;&'  1#=?B./"",-1H55TVK-.10M "# 4 $=!((??A;/0""%%CDOrsG!333"'6763!2#"'&'677͇hDz/ 3 *  !C+ '<, X/AW!333&'&'4767672#"'&'&'6767327654'&'&#"32767654'&'&#͇hD0--=B0.3F'%8:JK9;&%9:7  5 "*/  !.D!%1/,7-/)+,26//89J@;9'%%&;;AH:76!!3[&%&&()&(%/0".C5!%5!547632#"'&=#"'&'&54767632327654'&'&+   @\N;=##&';<<5'&&$%2Z('#&/P(*·DD|! -[&#HF[eHF"#+933A?\C33<<".K5!%5!3632#&'##"'&547632&'&'&'"01367676V?dL;:! %$21>o(   G%%23&')'?6$$·DD|S**GFW?<4-*P"   @./22C282  34"D5!%5!'&'&#"2276767>7632#"'&'&'476767672 $# 6&%#"U     318Q=> !!"26@<-,·DD  1/8SDE  .')CEO<=7/."0F5!%5!47632#"'&=#"'&'&'4767676322767674'&'&#"  "%=P9>!""-15d>''N=(%%&/8$&·DD|*  "$&)DEZ@9;),S\@A !119B22!!12"A5!%5!!&'&'"6767672#!327632#"'&'&'&'06104WP+,JM.0a!<:PN=?!8*+1YJ  >>EI65"!·DDS2203wLHD.++.DEN1;'(< #/,6:2",5!%5!#"56;547672+"32+#"'&5*01'%&8Z'?,1?·DDn0(7$!/ ,(0) 3AW5!%5!##&'&'&56767633547632#"'&'6732765<5<%27654'&'&#',4I:<!!!<8Qm(  :=RaX-!%"%S'(#%0L0.&';5"#·DD)**GFWVHF&'S PBB#&6#" @>Z@03:8d675!!"1/"95!%5!4763267632#"'&54'&'"#"'&5 *)2;00 $&>$ ·DD #33< I>,*!$- iB!!"&'.'&#"22727>767632#"'&'&'476767672   7%'##T     354R<> !!!36@>++dg  0/7TCF  ,('DEO<=8/,!@f     0 H u  Chess MagneticChess MagneticRegularRegularChess MagneticChess MagneticChess MagneticChess MagneticVersion 1.0 Version 1.0 ChessMagneticChessMagneticc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph69 bɉo1C  222 #22vvSXccvvvvunpychess-0.12beta3/pieces/ttf/kingdom.ttf0000644000175000017470000010461412161415524017312 0ustar tamasuserspFFTMz>|GDEF&T(OS/2BMx`cmap(pgaspLglyf̣@`}Lheadc:6hheaE4$hmtxcvNloca/\Q maxpX name~wjpost5;Dvhea $vmtx`8ּ_<+C C Dc4 "HU gh gx{ yggxx  kyyk4DKErL:eGG(fcafggnjN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a(<Tj~<Tlz < X t d** """4"D$B%'((()T*+\+l+,-./02v3464455j556R6~67h778P8z899H9::,:;;4;<*>Z>%"72#"54"g %3##!##x gd##5!!!!dw 7#5#5#5#5g #dfh!3!3{c 3#3#3ddf5!5!yddf #5353!5353 ggyd$e%"72#"54" !%)-159=52"333333 573#7%333333""8Lg|rM3"333/4Db4jt4X3  4'483M3g4}43M4Z+LD\`kxV12 2#"&546~~2~~~~gf 53333xg hy$dx%3##x gd##5!!d7#5#5g #d{!3{c 33 dyy533yg y$dy!!dy#5353 gyd$ $)-159=AEJOU[2#"&546 33333%&&'3#7573 !!!! # 5"5 6#~~3t4Xb4j4D3/n33M3|gL8X#h3{_ " 2~~~~qxVJ`k D+o44#3M44}3g3M48 jF4a !!Yk%MY]u -19I\nr7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&7676767601>776363"%436'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&'&5&'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'0&5#"'&54763272#"'&5476"327654'&                     @  &    ,d    A  *    -$ 9 DZ& !%% &  1.&*  "   " >DZ)(A\*q112 " 1-   %''5%    >  % '3   # tEM!  6  2vEN 6 2U ! :-6G2L6K'*"J-!*#>>;@.>:>>>xB//BxD??;#8FX5%++*5MS2"")&>>>(NO0/ &&>49lxA:064RQQWh{=- ?'&47KK<<,,:=MJ7446IS9:=#%68 "" 89"#g!4677#46gc!fObf!7R' (4eu #(-39?EJPZbinv{6'&'7"3254"32547&#"632"32654&7#"&5.5%47&54326767&5432%35#5##303:>'.'67#53533#3267654#"#"'#"'&#"&'&6767.7327#"&'"327327C>7#" .&'73 3335.'3 &#7573#%&'767#6?#.'#>727#'#*#"'746565.'2&'"5&'73 6?& ]\  oveee )))+++H_zzjHTuuTRvvcdG:L"]\^^.'(3G !'&'61674'&5676'&'&! !2$"$'6'.'.'&'&7>7663267>2''7'&$#"'6$&'>7&'4765&'.7667>'&'&7>7"''67*#.767%&'676'&'&'&'&2&76767676'#"'6"32654&'7%53335553#7573 '67#'267#&723#6?#&'7#&' 3 "&#27#7353"UUDUU &77$|Mm"  .Qe\/mIZ  .  "($   @0   ;_q"-- #-*3< ]3T2<2AB56BA1<3R3\ ;3)/# .\(ua陚`u'Z (0]eS. # )"  /\Ho/D,N{$67  ; b <   1@    !" !"  :QQ:9RRK  t4Xb4j 4om %!33M3 &4b[4Zs y4p m4s 3 )`H  "U)f3z3' 3RuCCu`enc"JhPF.E#]fFI'$2#%]* JWI=3$09yU>D)##!iKNPF'lD"!`AA@ 5<xVJ`kGm3 3 4 4#3M4 -/[4$s3x;,l3?4 (4 Hǒf{3&"/<ptx #'+04:?EJOTY^cjosw676'&54767>76'&'."5&$#"6$3 33##5#535"$'6'.'.'&'&7>7663267>%7''676'&'&7>767&#&'67&! 6! &'676'4'&'&'&%#"':3:3<567676767&5476'&53335553#7573 '67#'267#&723#6?#&'7#&' 3 "&#27#7353 "" 0 <)MU<[/'a陚`a@"UUDUU"- #-*3< ]3T2<2AB56BA1<3R3\ ;3)/# .+~~ 3"\}>D"!  !";G>D+!  #%S 5<xVJ`kGm3 3 4 4#3M4 -/[4$s3x;,l3?4 (4 Hǒf{3" '3\z #'+/37;BJRW\`dlp"6326'.6326'. '.'&6'276%327254'#"'26767654#2676'&#"'3254'&'676'&767676776776'&'67&45&!7>7'&''&'&767676'.'&67>767>7>7&'&65432676327'7"5>7'2#'#7''#7'#7!#7'  573#7'37675 67>&'.'73&5&'73 3353  %  $ {NWDlD@c>L? ;  25?$G4$8' =   #S5 d+8# h3l1',/HI-*& 1+0),!2$ ,% 8$)&! #RCyR|jhZgbKKN&?$_#) "Y3u!w4xD] w4xz w4wKy4w7[rM3"3[23I34Db4jt4X6`396:=$L׷ Gs!!=1#6F+)&%+W2)*    *  Z # 6!3o/@_ 7yn  %& 9! 41*3H #<>Y7CnJ$!H'0/6DC8, ;O[V.m'''G]  >0;_<$  y?4ww]4 3ww- 3wwww#4}43M4x 4.3  3 `kxV 5Va  !&+3;BFJNRVZ^bfjnrv|'&'&7677'&767676676'432676#2#327##"'! '.'&'&7/.7>7>327>7>7>7&'67676''&!7>7'&''&'&767676'.'&67>767>7>7&'&65432676327'3533%&'73&5&'.'73 67>7675'3#7573 '#7##7'#7''#7'#'2>77"5   7 4R" =:i '8$4G$>6*9ZeMXV!( !   #%7 "% 8# !0 4" ."  4 (& h3l1',/HI-*& &3%)*$2$ ,% 8$)&! #RCyR|jhZgbKKN6`3t4Xb4j436[233M3hy4ww4w` w4x~ ]w4x!Y3 ) "?$_#a 9@*  @ `N *%&)+F6#1%RBlL׷),Ub+ )"$DKK5 -%(!)% *A & H=# ]. 4!/@_ 7yn  %7" 81*3H #<>Y7CnJ$!H'0/6DC8, ;O[V.m'''Ga8 5<xVJ`k 3 f3  4'4#3M4x#4wwww- 3wwJ 3,]4ww4  o0;_<$  !%)-159=AEIMQVZ_diosx}3!'>54&'3'654&#"#3335 '3#7573 !'#?'#767#3&' 3&&' 3&5737'2&'73&'73 &ˈ[qK\r[DdFGd\4;t4Xb4j4D44 33M3|y4wx4x m4w4O 23M ibb#22"H~33D4#/lo3bl03UFeeFV;5qxVJ`k D 44l 4#3M44}www~"3ww*m3wN42< 4 aA2$1y35$).28=BGKPTX\`dhlptx|#!7&5467#7!'6%&%&'73&'73'2573 3&&' 3&&'#367#7%'#73 573#7'3 5%333##32654&#"'!"3254'2#"&546ḟ[r\KVq[yU{43b~3"#2Gb 23 4w4D mx4xy4w|rM3"3 3;44Db4jt4X4;gZr~s(LLQGLffffFddFGdd"0lb3ol/z35oB2$x a| 424w0*m3ww~"3www4}43M4{ 844 D\`kxVE;5I!cc !ffffDdFGddGFd4 DPX`lx  $).37<AFKOSW\bglrx~&7%7'&! !2$<547#"&5476'&#"&7&#"#"'&#"'6! "&54632'254#"!254#""&54632%"&54632'254#"!254#""&54632%254#""&5463273254'73273327327#"$'654'&65'7'767&! '6! &%'&'75'77'7%&#"3573%&'735757'75&'%'7&'73#7573 &'>7#4767#46723#'#>7327654'7#?&'7"5654'2&'73&'73M; ;LgP+S9P e9P O9e Q8T*US?WW?>XX>IIIIIIII?WW?=YYR?WW?>XX>III)IIII>XX>>XXRIIII?WW?>XX9E'E%?-D,>%C(F?s#,2-* ⅄m  mHALEDDw'Od4?@>b4j4 9~+   33M3w"4"&4`j  z4  4L  < 3 Q"G33*33LNE& l|OQ9<%aQ9&&9Qa#:9QO}k#5X>>YY>>XMIIIIIIIIMX>>XX>>XW?=YY=?WMIIIIIIIIMW?=YY=?WIIIIMW?=YY=?WF k !=[=!WF#$r^up*8;-iv^r$ ,AAA`"#032`9778"""N wO!5 P/&;>2? `k3 39c -6 ~4:* .  4#3M4v4 ,3F i3xL' <4l9 4  z , #(,048<@DHLPTX\afjw{#73 5#7353 #73 5 #73 5 5#73 5 #7573 '#?5#7##75#75#7552 "5%'!!5#!5'35'353353353533533535!35!35335%35335335!!=3!3573#335!353#" #(!<5" p4w3,3v4wb4jF4v4w3v3Ae(w33M3x4wDy4ww4x`w4xtx3xwh"DD2ggGGDCGDGGdGGDCeD"CDCDDDޑ"C"w+5+w4t2J`kww3w=3 w44#3M4www4D4wwww+53ww@54wwS34t2hC D3iשּׁ﫫שּׁޫ﫫D$ gCDDCyi"D!!D"!#4&'52#4'bg8Oe"bR7!+ !%)-159=AFJNRVZ^bfjz~' "5 525#75#75#7!#7%5#7 573#7 5 5#73 5 #73 5 #73 3%5#735 #735!#335!3533#3#%!!%3#3#%3#%3#3#%3#%3#%3#353!!%3#3!3573!52 3<5(#2 vDD3h"x3xw4xtw4xPy4wDx4wrM3"3e(w3I3v3w4v4Db4jw13v4^4w3mxx3U4#"wwxxww#!DU4CDCD3 D2h34ww@54ww+53wwww4D4www43M443 w=3ww3w`ku4t23w+5+wDDi3D2EBBEDD33% %-5f  &,159=BH&#"632>327&#"%'6'&#""3254"3254#"&5.5%47&54326767&54323267654#"#"&'#"'&#"&'&6767.7326##3335#56?&7&'73"5&'.'246565"'"'#%27#>7#&'###6?67#%&'7#573#7 &.'35333 &'73 .h}fgz~`ZrNMrS{?j"m #}d~)))+++cdG:L"]\^^.'(؛gN " 7;? aUS`ɬ?:8  ! MicF4wwgwwC$ p3  -*",r   3&4;  4 b  4  v.4; 3M3"3sn p3 4Db4jt4XR ~3`KS<?*...@AJ)Wh())(++++**lf3,\\)  '^^6 KI%L:QQ ? ^B00B^ ? QQ:M732#%23#46767#47>7#&'  573#7&'73'7&'5'7 5'57&'73 3577&#"3'7'75&'7sŶ`T r-K[ 19E'E%?-D,>%C(F?s#,2-* ]?WW?>XX2>XX>>XX?WW?>XX3?WW?=YY?WW?>XX3a3"o M 3>XX>>XX>>YY>>X ?  ( 49 <4L'yxF i3,3 v4}43M4 ^. :* ) ~4 -39l3 `k>2? )&;u P/!5( wO#'+/37;?CGKOSW[_cgkt} 1' '1&7 &716 61%#%333 #5'35#7573 !!#'#' 37'1"5&9&'29IIIIIIII7IIII97IJHH3wt4Xb4j4D333M3|g44 3  "IIII9IIII89HJII8GGJH@5xVJ`k D304ȑ4#3M44}3g3P4S4K  x!467xO8 7Og Y^ Sn~#"&'"327327C>7#"'3267654#"#"'#"'&#"&'&6767.732>'.'67#53533#'35#5##303:#"&5.5%47&54326767&5432"32654&?&#"632"3254%"3254'76'&ZH "ëǫ" IZgN " 7;? ǹɬ?:8  ! MhG !'&'&7>%&'>7&'4765&'.76'*#.762''7'&$#"'6$"$'6'.'.'&'&7>7663267>%&! !2$61674'&5676'&'7676'<547>'&'&5476'.'%67654'.'*33##5#535:QQ:9RR: !" !"  s b <   1@   )"  /\H0]eS. #N{$67 \(ua陚`u'Z - #-*3< ]3T2<2AB56BA1<3R3\ ;3)/# .;q"$   @0   ;_mIZ  .  "(m"  .Qe\/&77$|M"UUDUU4AA@` !"D"!zLh $ "*D)##!iKOJWI=3$09y!]fFI'$2#%]* enc"JhPF.EuCCu _R"/<ptx676'&54767>76'&'."5&$#"6$3 33##5#535"$'6'.'.'&'&7>7663267>%7''676'&'&7>767&#&'67&! 6! &'676'4'&'&'&%#"':3:3<567676767&5476'& "" 0 <)MU<[/'a陚`a@"UUDUU"- #-*3< ]3T2<2AB56BA1<3R3\ ;3)/# .+~~ 3"\}>D"!  !";G>D+!  #%  '3\z"6326'.6326'. '.'&6'276%327254'#"'26767654#2676'&#"'3254'&'676'&767676776776'&'67&45&!7>7'&''&'&767676'.'&67>767>7>7&'&65432676327'  %  $ {NWDlD@c>L? ;  25?$G4$8' =   #S5 d+8# h3l1',/HI-*& 1+0),!2$ ,% 8$)&! #RCyR|jhZgbKKN96:=$L׷ Gs!!=1#6F+)&%+W2)*    *  Z # 6!3o/@_ 7yn  %& 9! 41*3H #<>Y7CnJ$!H'0/6DC8, ;O[V.m'''G   '&'&7677'&767676676'432676#2#327##"'! '.'&'&7/.7>7>327>7>7>7&'67676''&!7>7'&''&'&767676'.'&67>767>7>7&'&65432676327'   7 4R" =:i '8$4G$>6*9ZeMXV!( !   #%7 "% 8# !0 4" ."  4 (& h3l1',/HI-*& &3%)*$2$ ,% 8$)&! #RCyR|jhZgbKKNa 9@*  @ `N *%&)+F6#1%RBlL׷),Ub+ )"$DKK5 -%(!)% *A & H=# ]. 4!/@_ 7yn  %7" 81*3H #<>Y7CnJ$!H'0/6DC8, ;O[V.m'''GwU&54632#!7&5467#DdGFdḊ[r\KVq[#1VFeeFU30lb3ol/wU3:B#32654&#"'!&54632#!7&5467#%#"'!"3254gZr~s(LLQGLDdGFdḊ[r\KVq[bzUgggI!cc 11VFeeFU30lb3ol/ ggggkT DPX`lx&7%7'&! !2$<547#"&5476'&#"&7&#"#"'&#"'6! "&54632'254#"!254#""&54632%"&54632'254#"!254#""&54632%254#""&5463273254'73273327327#"$'654'&65'7'767&! '6! &%'M; ;LgP+S9P e9P O9e Q8T*US?WW?>XX>IIIIIIII?WW?=YYR?WW?>XX>III)IIII>XX>>XXRIIII?WW?>XX9E'E%?-D,>%C(F?s#,2-* ⅄m  mHALEDD*33LNE& l|OQ9<%aQ9&&9Qa#:9QO}k#5X>>YY>>XMIIIIIIIIMX>>XX>>XW?=YY=?WMIIIIIIIIMW?=YY=?WIIIIMW?=YY=?WF k !=[=!WF#$r^up*8;-iv^r$ ,AAA`"#032`9778"""yU#'+/37;?CGKOSW[h3!3573#335!353#!!535!35!3535!35!35!3535!35!35735!35!3535!5!!5#!5'CDCDD"D" $VGGdG$ GggECDDCyiC$ ૫﫫"﫫שּׁ3#4'5g 8OgOyU!%)-159=AEIY!=3!3573!53#%!!%353#%3#%3#%3#3#%3#%3#3#%!!%3#3#5!#335!353CDCDEwwxxwwxx5hhEBBEDDy﫫ͬDyDDi Y^ %-5f&#"632>327&#"%'6'&#""3254"3254#"&5.5%47&54326767&54323267654#"#"&'#"'&#"&'&6767.7326##3335#5h}fgz~`ZrNMrS{?j"m #}d~)))+++cdG:L"]\^^.'(؛gN " 7;? aUS`ɬ?:8  ! MicF4wwgwwS<?*...@AJ)Wh())(++++**lf3,\\)  '^^6 KI%L:QQ ? ^B00B^ ? QQ:M%C(F?s#,2-* ]?WW?>XX2>XX>>XX?WW?>XX3?WW?=YY?WW?>XXd=i88hEA;d0'55*DDD F k !=[=!WF#$r^up*8;-iv^r$  W?=YY=?WpW?=YY=?WW?=YY=?WX>>XX>>XX>>YY>>X45 1' '1&7 &716 619IIIIIIII8IIII97IJHHIIII9IIII89IIII8GGJH K ">cz%&! 3 %2''7'&$#"'6$%'?2&76767676'#"'6%67>'&'&7>767"'&676'4'&'&'&7&'"$'6'.'.'&'&7>7663267>33##5#535>76'&'.#676'<5476&5476'.'̾O"q['ua陚`u'Z 0  !(("   #" /\>D"!%(&2< 4QE ;*CMgP !+B@0Q%#+<.L/+'-Ryh8: 99:8hwT-'+3H.<tEEtQfMC*; EQ4 <2&)*"&Q0@B,  EqS_gs{'767&! '6! &%'773254&573273327327#"$'654'&65"&54632'254#""&54632'254#"!254#""&54632"&54632'254#"!254#""&54632<547#"&5476'&#"&7&#"#"'&#"'6! &! 3 m mDB29"F(E$=-C-@%D(E ?t",3-* \>WW>>XX>IIH?WW?=YY=IIIhIIII>XX>>XX3>XX>>XX>IIIIIIII>XX>>XX,S9P d9P P8e P9T*TWNk<_ %/2*_<87-AAAEl =\=!W E"#oayl*8:-oqYw#X>>XX>>XNHIIHX>>XX>>XMIIIIIIIIMX>>YY>>XX>=YY=>XMIIIIIIIIMW?>XX>?W l}OP9>#aP:%%:Pa"; 9POe  4MO&L<m '"'&7677'&767676676'43267632#3272##'! '.'&'&3/.7>7>327>7>7>7&'67676''&!7>7'&''&'&767676'.'&67>767>7>7&'&65432676327'   8 4R" =;h &4(1J9;*8[eMXV!(!   (7 "% 8# !0 4"  -" 4 (& h3m0",.HI-*& &4$()%3$ $(& 8$)'!! "RCyR|ji[gbKKN 8A+  ? `N,%&**H4$1$RBlK׷(-Va+ )""EKJ7 ,  & '!*% )B ' H<Y. 4#/@^ 7zn  & 8 80*3I (6>Y8CnJ%!H(0/8AD8, ;N[U/m'&(G e (08BN6'&###53533#>'.'>"3254"32547&#"632"32654&7#"&5.5%47&54326767&54323267654#"#"'#"'&#"&'&6767.7327#"&'327327&'6767#"F ]\  ouCuuC{{!?'G !<'9))(+++Hfs}gDTuuTRvvccG:L!\\_^.'(ثhM " 7;?ȸȭ?:8 ! MhZH #ëƭ" IZ6#`HBB QqANvQs ))))++++R 1!!**kf2 +]](  '^^5 KI$Ln]:RR ?^VV^? RR:]4j6*ebbe *6GU  $(,048<@D^i!#5#%5#35'353353353533533535!35!35335%353353353!3573#335!353#!#!5#5'ggGGDDGDGGdGGDD·CDDCDD""CC"W𬬬𫫫߬﫫DDDDyiD#cc#G529A#32654&#"'!&54632#!7&5467#%#"'!"3254&Zr~s(GQPGLDcGFeDˇZrVq\azUgggBI!cc 01WFddFV30lpol/gggg(!3#52676767673{c DF 0D)!3676767654'&'"#4767632!{c55ee'%%$>Y86T;12 /.\[+-}wBA98D>#"A<7$#01JU2100 =NE!3654'&+5327654'&'&#"#4767632#&'&'3676{c_20QG$%$)U33JB00]B89Rf>?\&%;..PMH1# !"*;63 &()69C*/1!31<&&  !3 33##5!73{cEHccUQ=NN=2!33327674'&#"'!!67632"'&'&'&{c\ 7+*,,B*&$L4o%$+*-,89T6'+"cw)(CU,*tV *(0H78"$ #%:N!3676767672#&'&#"6763#"'&'&'&546546327654'&#"{c53Y200V 5+$&+)@<5431B832!$d$#'/,+)*90!"8?4<<,*),87;?[) 23?;89!"():=H t," (&MQ%'#$!3676767!5!{c;767442))#"#|{RP>UL=:::A_at-?O!3#"'&'&'&547&54767632"3254'&'27654'&#"{c>""*,.+.+', qY0/NH21/  !!8)(D9""E@%$. /001((  "-/({2$e++-(+""!C##N 3( "#)08I!!676767676767654'"#476763267#"'"'&'&'6%676765 (#J %&ysR/.C31.*JIr.&([ %7$8 T!)(d)  Xg-('0 ?KO"!%   )K%+!!#367632#"'#%4#"3276nRVD1244Sb.; --6E#$d@)"!;:LI@D+,Q##161]()67 .!!#5#"'&'&54767632327654#"N Q232/C;#"$"F6+-Yd 5I ,+CCGK;:""$ ;[67)(];;-8!!3#"'&'&5476767632!327676%!&'&#"Y)#9<.21("---&"#)'%K'!""I) d ), +EeB=8)# $QuT+,B-,&%!!#53567632#"3#HH27!XXd0FSFP !EF=0H!!67676763253#"'&'&53276=#"'&'&'&76367654'&'&#  *+4*"!VCDb)..#"U! />--C[+$$]% 6$%!!)!d;B<9%'!<8: %$A"%%QD'!41QJ13 96Z=)*%+!!#4'&#"#36767632U<@+,UU# ),-(dV9*+Y( *'!333#52676767673hgc DF 0Df-!333676767654'&'"#4767632!hgc55ea+%%$>Y86T;12 /.\[+-}wBA95!D>#"A<7$#01JU2100 =NcI!333654'&+5327654'&'&#"#4767632#&'&'3676hgc 20QG$%$)T33JB00]B89Rf>?\&%;..PMH1# !"*>33 &()69C*/1!31<&&  a !3333 33##5!hgcEHccU==Nf6!3333327674'&#"'!!67632"'&'&'&hgc\7+*,,B*&%M4o%$+*-,89S7'+"cw)(CU,*tV *(0H78"$ #%gR!333327654'&#"'676767672#&'&#"6763#"'&'&'&546546hgc%#'/-*)):0!"d53Y200V 5+#'+)@;7431A932!$y-! ('LQ%'#'E8?4<<,*),8659!"():=H g!333676767!5!hgc767442))#"#|{RP>UL=:::A_atn)S!33327654'&#""3254'&7#"'&'&'&547&54767632hgcw9""E@$$8/  ! 8)(>"")-.+.+', pY0/NH21C 3( "!+0N""!C##. /001((  "-+,{2$e++-(+lM5!5!676765676767676767654'"#4767632363#"'"'&'&'6g %7$6! T"(%'&G %&yrR.-D31, ,KHs.&)ydd"   *K $!(   Xg-()0 ?JN!#$l/5!5!4#"3276#367632#"'#: --6E#$RV%$6B3142Uc-ydd##170\*)76(" =9LHBC+,Pl35!5!6767672#&'&#327673#"'&'&'&56( 22B-/)! S!!6''81$%U.0;!"&$$yddGB74)+G7 ],,"!8>-- 89P0l25!5!327654#"#5##"'&'&54767632v$#E4--XnN  S0311A;#"yddZ77)(^;;v5I +-BBHK:;""$ l<5!5!!&'&#"3#"'&'&5476767632!327676s!"#H) !Y* 9;/21'"-*0%##)'%K&yddDC-,#%*+ +EeB>8)" %RuR-,l5!5!#53567632#"3#HH17!XXyddFREQ EF=L5!5!6367654'&'&#67676763253#"'&'&533276=#"'&'&'&~$ 5%%!!)$] ,+4($#VCBd'0/""U!!.@+-DZ('&ydd%J01:8X>()$+EB<6(%;:9 &#B"%%QD$#30l#5!5!#4'&#"#36767632U.+ 98Q0 = a      - E o  Chess KingdomChess KingdomRegularRegularChess KingdomChess KingdomChess KingdomChess KingdomVersion 1.0 Version 1.0 ChessKingdomChessKingdomc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph63 bɉo1C ""2^RRUUTUU^Tmpychess-0.12beta3/pieces/ttf/cases.ttf0000644000175000017470000010522412161415524016756 0ustar tamasusers0OS/2Q\{5VPCLT}W6cmap:>cvt #0fpgm3OglyfMuxhdmx `L@Hheadȵ6hheaJP$hmtxq>~<locaͲ|maxp9t name*"postKprepdR&:bNHG Wx' $#  : b  N  HG  Generated by Fontographer 4.1Generated by Fontographer 4.1Chess CasesChess CasesRegularRegularChess CasesChess CasesMacromedia Fontographer 4.1 Chess CasesMacromedia Fontographer 4.1 Chess CasesMacromedia Fontographer 4.1 22/08/99Macromedia Fontographer 4.1 22/08/99ChessCasesChessCases@,vE %E#ah#h`D-D3>,(eUu@) EhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDF+F+EhDEhD?W@!@ Fv/7?@@Fv/7?@@Fv/7?:77:>% s; $P2`22W &22t 22-U2CsLQ=-7?CXeF=$2s2=202s01 J@ @    Fv/7?7676%67>7654#""'&'&'&'&546764747675'537337676%#5%#7#7'#7'#73'7'757?'73#75757'57'73#73!57;5 5!5###>=3.C<=C/k  4OL J=8+ NA"D% W}~W $#D$ <& )7>J .'\  46 '8,A: 03.&.3-9B,Q 0 =2:`726[82@C[2q3TdFF22q VVe&lW21(2Rs2=25s2  z* m@7 , 18=,87@m '  & JJ #- YT\4#4$"/M /" !-//-% /2) 5?6ZT0#<:778?Zob2"d22E232Wr(U2V272mY))2s2=2041sAUe4632#"'&'&#"&'&'&546324767675'537336324'&#"32763232#"767632#"54'&#"32732767654&#"###5!5#3557#73'735757'5?#7'73?'57/7'73#7#7#?#7%#52"5/6+"!&*/ '1\?A; 03.*-30 :@>^1  GE?42&D")Jd#w,(N8.4$ #E;;3<,"/1mn10"!(<39=Es225G=2̥s1(2W2lOQVV2q 2KFFTd382@726=2:m"&06`/5U:"5A4?V0  -..-# 0TA4B-=  O&5/`7/j?762#@21;#268>1s4=222s))oY2mv2U2Vr(132J2E2<"d22nZo78?77<:09Jlvz}->76767"5#"'.'676767654';273263632;232654'&#"614'&#""'"+"1326%"2654#7#5!5#3557557#57#7#?#73#73#?'7'7'7'7'3/7373'7357g)# >$  '%(#&8C$  gaq; 0hYJCPf  s2G=2̥s! Fg|ax2B424525626252YY e_#v3G^W#22EY2Jd;N,'$'* ' %.T.GL7<%;142'.̂q [w  2s=222s>E2>2gF_x4455554X2Yd2_2u2y2b7ߚI$I2NRVZ^bfjw &#"+74'3736767&'763632!67676767#&'#"'676?6765577'7'7'7%572#"'"1#&547&54632+&+;27633236767676767632!654'&'&#+&#""*#&#&'&'&'7373'73373#'#7##7#7'#7'#5757;5 5!5#7#?.& ?&   1 " ear( :=  2 :%' (  Fg(YY e_#v3Nm / <& .G  K1c$1   M* E %4Y2=2\#2/4252'626^525^424x2Gs2=s2  ;.457,!4($=* J/T)8S1>E2>2g3X2Yd2_2u21#(/ +/ 1  1 YaA+,)ɋ%". / +P%$4/245555544Dx2s2=202s#'+.159=AEIMRVZ^bfjnrw{7&54767&'&547&5476327###5735 5#3557'73'73'3'''7'7#7##7#7'#7'#5755!#d!V"++@.(& d# s225Gz2xf=2̥s!2S2?!4C2C^B2B^A2A\C2D`(/e$\AG2 "%T#%"+7*"%@%$B 3G?]$@2s4x3Q2 =222s$>T02V522,2CCCCAACC\M2'2/"RVZ_cgkosw{7&54767&'&547&54632'4'&'&5467>54'.547>54&#"5'5#57#?#73#73#?'7'7'''3'73'73!57;5 5573%5### $c!UA++@V d$ +,;1 ; #":1 1<+-0(o%:2;:2:;1::2:4!?1!2¥s2<{2x<25s2e#\BG2 "%U#%"+67*"%#U# " 3G@] 2j=&"  7#  ! #71$%=i 20L3'@99::::::,2N253/ 2>$2s2<2Q2zxx/42s"  #'bks}$2Dkptx|%7#'#7'#7'#7'#57'57'57'5#7'73&'.'&'&'632676?'&547&'.'&%"3254&7"3254!"3254"3254%2654'&54632654'&54632#"'&#&'&5754'4=47654'&'&5&'&'&54632654'&'&'&'&54632654'&546"3254"3254'&'&7&#"632&54'32723223254'=4'&#"32763233'73'7/73'73#735??'757;55 ##Z6:2)424Y82;KN2_$w gx(Z14   C@  hg@B   p   w( C)*Q)*: (5 8!%s@&( :*)P  *)C*HF> M)gd]ASpqR(0'cB55Bb9C&F 1J \2a22;2LU|k t225r2593337;M^EU2:2ww*f29m Z$1 6PG 8'Y?(#;;p Y'h0P6   %Eg P   P  ) "5)>H ))!,'BR6**3$/Q!)6 #   ' / 88A13**6RB';  )) GrC1.)$ r  k  %%D (J2:]"a;;L29U2Cj2'2V2s242r7;?CGKOSX\`dhlptx}#'5#!75'##'5!'!5'575'57335733573!5#7##7##7##7##757'7373#73#73'73575%5%57#5 7'75757;55#7#QFUNUFQRR^n$p$#q$nO;2:]:2:\;2:^92;^;2:|2||2||2|{1z 㙀 Fs2s2 "FEEF" 5PP|00bV`q#  #q`V::::::::::k32 b{{{{{{yyg3212}$212 22O2I2222s202s J@ @  Fv/7?2s23s32 2922212$2P2@22||||||}};12:::::::::: cq|"3254535#5##3326#2&'&'&'&'&'6763"327&5465&54767&54632"327654#""3254##7#5!5#35577#%#?#7#7#7%#57%7'7'?7'7'3'73'73775 '73  ++.++  Y) ?%+ 441d'0 -  &? ;>XLQG"1&%20< !BB"@z@8G}@s2G=2̥s&4%2F2=Y2f@2E-27|MS@UCd 4  2(2:i O2n :/66/:t $ !+ ( 42  1) +?^FRD< &%'($%!!*4'+I  N2s=222s;$FF=Xe&?C-7LQuU2C]2= 22&2{ %2_2V2$P # !$(,059=AE4'&#"3276?232232"3254&"#"'&547654'./&'&'&54632654'&'&5463267654'&54632654&54632654'&54632"3254&'"3254!"3254"32543263763223254'&'"#"## 5!3557'7'?'?5#73'73'73'7'73'73#755757#57#7#7#?#E;aaS6))2&,2OF  < O  O   G2r422s'2Cj249U2'L2V;"an]J2)(J Z*f2?2w|2ĐM^'7;339+4=AEIMQTX\`dhlptw{#"'1&54?'&5471632763211#"'75#1#57157;5 57#575'3 57'3 5' #7' # #'7#7%# ##o6t2<'3iи_2_S1N0g20Sx2x2jp324s22s2<2Л2R_2^M202g0y2wQ31n43s!;@@Fv/7?:77:>% =806608   /   m2 1O + ERIRD<!&$)#&!7654#"!4'&#";>767663267'&'&'&%32765&'&#"27654'&#"'8,A: 03.&.3-9B,Q 0 46 N& )7>J .'\  A"D% W}~W $#D$   4OL J=8+ N>=3.C<=C/k]T\4#4$"/M /" !-//-% /2) 5?6ZT & JJ #- 87@m ' 18=,* m@7 ,j  {]r!1Ew@F@p{kba^]TD=6.(x;*"cbd]\Z2Fed[Zp OAH8mRH`_OFv/7?^1  2"5/6+"!&*j?762#@21;#268>&5/`7/  U:"5A4?V0  -..-# 0TA4B-=*"&06`/5}dlF +<v@8ww@xuoiedb`QOME810.,`^VE>;4&!  uq)==kVFv/7?//</...............................10IhVwIha@RX87w8Y"2654614'&#""'"+"1326;232654'&#"%>76767"5#"'.'676767654';273263632bhYJCPf  ; 0N)# >$  '%(#&8C$  gaq~.̂q [w  w2'9;N,'$'* ' %.T.GL7<%;14vdaG (z@Q@qifb`_]G;1-,(!  |TPN96)% J  WUT{|{Fv/7?/<";.4eD#I@$$@%!! #Fv/7?/</........10Ih$Iha@RX87$8Y7&54767&'&547&547632!#d!V"++@.(& d# e$\AG2 "%T#%"+7*"%@%$B 3G?]$eE/Ro@.SS@TPPLF<62/)R HD$:>A/0R0A2Fv/7?/<</////...........10Ih2SIha@RX87S8Y%4'&'&5467>54'.547>54&#"&54767&'&547&54632,;1 ; #":1 1<+, $c!UA++@V d$ j=&"  7#  ! #71$%=i2#\BG2 "%U#%"+67*"%#U# " 3G@]  E_&8FNC32723223254'=4'&#"32763233&#"632&54"3254'&'&"3254'2654'&54632654'&54632#"'&#&'&5754'4=47654'&'&5&'&'&54632654'&'&'&'&54632654'&546"3254'"3254!"3254"3254&&'.'&'&'632676?'&547&'.'&(0'cB55Bb9C&gd]ASpqRHF> M)&( C)*Q)*: (5 8!%s@&( :*)P  *)C*    R`   C@  hg@B   x 8  %%_   $) "5)>H ))!,'BR6**3$/Q!)6 #   ' / 88A13**6RB';  )) GrC1.)  P   P P$1 6PG 8'Y?(#;;p Y'h0P6   %Ed.A#';*@<<@=65.-;:7643&% $'$%%&.-.//0 434556&%&''$)(-,! 0/ #"21"!&%# '$98+*;(  Fv/7?XLQG"1&%20<++.++  N 6 $ !+ ( 42  1) +?^FRD< &%'($%!!*4'+I:/66/:a A]$,5>@^@Ȥyf:2)!ż}hdN80w#4?'Jn`#t+<ZA A6]-%qFDZFv/7/S6))2&,2OF        +@K,,@-$'&'&$! !!"+     + ! !"")Fv/7/324#"3276!!Q?\fY !uTd+[raRz(BH=SS( E<&30&%(Y)"&@<''@($"! &#%$ &%"!$# Fv/7?323#3#7aRy(BH=SP?\fX !uTd+[qSS!!FYO % [1M @8!!@"   Fv/7?D=).1TT!!)MV'Z,kD, "M $@B%%@& $#"!   $!"  #"Fv/7?BYNe n &(<4TT!!Mv@2 @!    Fv/7?,3UI1TT!!W/3lO*' ;GM@H@    Fv/7?+:7[XaM$ $=,1(R1TT!!UF!&5*>dLX p$:M{@5@   Fv/7?5&'&#"27654'&#"v $,2(78 +-)").( 4;'I +  /1-#%37D*< "=>! MrsL *S 3C' B73? -)0D*>44?*D/KQ1/;.+C +)++)!+.$09 1QKz( CC ) 21<` 0$ 1-4*&  a;18    !-&:HP8%327232325&'574'&#"3272?63233&#"632&54"3254'&'&"3254'2654'&54632654'&54632"#"'&57545&=4654'.5&'&'&54632654'&'.5463267654'&546"3254'"3254&!"3254"3254&'&'&'&'632676?'&547&'.'& eYdA &%(#:#P>?5590P#c&I/  %;!.Ov@2PP@QMMID:51.(OB/< FB$8<?./?O/1Fv/7?9MIB7$ +)% .X$, ( &7 , 2:OCH>!,"!- ?HDP93 , 7&'2$XK  "g  #841139! 73+00+3  (* b- .H( <HCI>4"!$$!"6 r)$ P1. 4"$  -)  ZXf   $+  ~ "* ,    PX9'&&}!) + %{342'-##Q$C*L&?/' 85 ,s0''y@4((@) & $$" Fv/7?0&%(Y*e@)@ Fv/7?+3UI!.3lO+& ;G @9!!@"   Fv/7?+:7[XaM$ $=,1(S!F"'6*>dLX p #: j@,@     Fv/7?>?~~~~|xjF8 x$~. H 6(>#z%z%'*X./063:336^8v:D<=>BZD8DEGJL$MMNOPQFRPSNTFUFVXWBXDYZ[\ ]4]`ncdehijXk2kl"nopdqqrstuvvLx?00M000`|{}vE_A,!4!!Q!4!'Ho!{b $%')./012345679:;DEGINOPQRSTUVWYZ[bcdeijklmnopqrstuvw$$  !"#$%&'()*+,-./0123456789MNWQaOSZXT:;P<\=Y[`]^_?>@BACRDFEGHJIKLp( %+/5:BDFTXbdftx  (.17ADFKVadfkv (28:BHJJJ\`bbbtx  !"#$%&'()*+,-./0123456789MNWQaOSZXT:;P<\=Y[`]^_?>@BACRDFEGHJIKLUVd                                                            2MACR@  `uChess Cases 7CHER00u_<8x8xbb"@ *pychess-0.12beta3/pieces/ttf/millenia.ttf0000644000175000017470000005030412161415524017450 0ustar tamasuserspFFTM{OGDEF&O(OS/2Ax`cmap(pgaspOglyfO0`DTheadf6hheaE4$hmtxn$Nloca-rmaxpX nameLpost5AN|vhea O$vmtxYM0O!I3_<+C C Dc! "H       G  UUUUUUUUUUUUBGGGNGG[ppCNqN224 jN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aLZR`n|Np~n~ T  VF6F"F@"D&jV480$Jh&x L !!!"*72#"54  #z!!Xz #z !!!!!!!!!! YVUUXzWWWW #yz!! Yz# %!!!!!VVVVV#YVUUX #w 7!!!!! WWWWW#YVUUX  !!!!!!!!!! YVUUXWWWW y!! Y72#"54  C #'+/!!!!!!!!!!!!!!!!!!!!!!!!$# #$ #$#"UW!!VWR!!X!53#DCC5!!3#5#53DC !3 G33G33#DD!!#535DDC #'+/37;?C5!!5!!5!!5!!!!5!!5!!5!!!!!!!!!!!!!!!!!!!!VUggggffffg$# v #$Rf "#$" "#$!!Yk%MY]u-19I\nr7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'4767676767172763630%0616'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&5&5&'&//17/'17'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"327654'#"'&54763272#"'&5476"327654'&                       A  '      ,c    A   )  .&:DY'  "#% %  !  0/%(! "    # >DZ*(A\+p122  " 1 .   %'(6%    ?  % &4   # tEM   5  2u DM 5 2U ! ;-6F1K7K()!J,!*" >>;@-?;>>>xB//BxC>><"8GX5$*+*5NT2!"(%>>>(NO1.&&=I/331C8+@///-D?200/B  g  *       A    I     "      [    !  b  # %"!( "%',  !)N       <2  %TU&&   .  /v R [$ ?! 7 ' ! b@" :' ! byqh 4/ HRQQ(QQR\K(/MeQRpp>e<4>>49lxA:064RQQWh{=-?'&47KK<<,,:=MI8447HS9:=#$78 ""#55&##{%463ʎ#C #'+/37;?CGKOSW[_cw!!'!)5!'%%5!!5!!!!5!!%!!%!!%!!%!!%!!%!!%!!%!!%!!%!!%!!%!!%!!!!!!!!!55'%!'!5'!7>E|<z8d2d d2d2U[+Yx|v$X!   X# # $$$#####""""" $#y$Vmucgb@]BMcV!&X y'yˎݏXC)-159=AEIMQUY]aeilptx|!%!5!!5!!%!'!5!5#!!!!!%!!!!%!!!!5!!!!5!!5!!5!!!!5!!5!!5!!!!!!#7%'!)5!%!5!'!!!!!%!!!!#3"C$ܪ$y  dd2CE?B{?WC3]U_3˫:###### $%# $%# $$$V#""" w C "&*.26:>BFJNRVZ^bgw!!5!!!!5!!'!)5!!5!'!'!!!!!!!!!!!!!!!!!!!!!!!!!!%!!!!%!!%!!5!!5!!z?{~6?CBEDdd  #3" """"##$z$x$ #"$ #"$ w###x###F]U_3C "&*.26:>BFJNRVY]aeim !!!!!!!%!!!!%!!!!5!!!!%!!!!5!!5!!5!!!!5!!5!!5!!!!'%'!%7!!5!!!!5N<dd CBE?Y<kB|CwUw3RV# !### $y # $%# $z$V##""! "W$v C "&*.26:>BFJNRVZ^chr|!5!!!5!%7!'!#7!!!!!!!!!!!!!!!!!!!!%!!!!!!!!%!!!!%!!!!!7!% !!5!!!%CwB<k?CEdd EN<2qf $"! ""#$$ #"$ #w $ w###" v#V#CfUw3ثC #'+/37:>BFJOTX\`!!%!!!!5!!!!5!!5!!5!!!!5!!5!!5!!!!!!#7%'!)5!%!5!'! !!!!!!!!dd2CE?B{?V### $%# $%# $$$V#""" lQV# C'+/37;?CGKOSW[_bfjnrvz~2 3<5.% ! !" #<5>7%!!%!!!!5!!!!5!!5!!5!!!!5!!5!!5!!!!!!#7%'!)5!%!5!'!!!!!!!_^y_ΩDooodd2CE?B{?2d2VUUV2d6l,Fhoopq9u:mucg$#$v """""#####$$$ # #   !! $C #'+/37;?CGKOSWZ^bfjnrw!5!!5!%7!'!!!!!!!!!!!!!!!!!!!!!!!%!!!!%!!!!%!!!!5!!%'3#%3#%3#%3#%!!%!!%!7! !-!!Yk)<k?dduBEDD DDDD DD1PS22!"! ""#$z$x$ #"$ #w v###" $## #######Fy!UwC #&*.26:=AEIMQUY]aeimy}!'!3!!%5!'!%!%#5!'%!5'!3%)'!!)5%'!!')5!!7!'!)5! 7)3%!53!7!7%!5!!)5!' 7  !!!!"?ZI]7% ! !2 3<5.Dooo_^y_Woopq9u:7% ! !2 3<5.Copo_^x^popq:t;ZTQ>'''%&"I99!!#"132dJap@!327674'&#"#672#"'&'&'332767674'&'&+ I*)+-;2''g C96# w >@NI>:!!f$#.-%##!4B#$@J*+!"=65D?9 >13" 55;( '&--&&p !3!##5!7# 2bk_<jY||YVkC8!3!!263632*#"'&'&'72767674'&'&'"# kW6 831'$MN <55$$P&&0<10+.7j:b)(559VW $ 'M 1/:4./MN#=!3632"'&'&56567674'&'&#36367676 L%/<;:"$$(/16KCF(*/o*+0,(''*, *(&4"$=>P=06"'$&&&""=>QT;>'()$##"$%$$!!3%$%&20%&%%&33F673"!"!88A656 9:IF<:"!&&;:BP44i2!!3#5#"'&'&'&547676324'&'"3276kkJl9.1"##;9C#!!",-N'''&%)J21~Ug&%76@!" !I:8++=:.065i4!!3672#"'&'4'&'&'"327676kBr<=:%&&('-$J'&(I$(5*&('&;-'%ig!=@UM:9#%4T2)+*,:*..! ./i6!!3#5#"'&'&'&547676324'&'&#327676jj(03*A01 $$99A175&'36$&$$::'%&T9+,00/YDB !0:,.,//'+.!.-i)2!!#&'&'&'&5676767632!32767&'&#"W$7;e;/1 "!00:V98r-,J.(' $%93./ 48*-'':7F61/$$)(>?@L33;%%Gi!!#534767632&#"3##..6''$'Ek b q5 gbML7O!!53#"'&'&533276=#"'&'&54767676324'&'&#"27676k()78@P9< i !bD%$   3G99 #009431*'$'5''%#70)'#[~EC74H7//,-V{   $$EBY1/+,(=-)**28+0.,i!!33632#4'&##"k2ojDvkUQ> N# #73#!!!!!ߑ=kVVVVVPbYVUUX##'+/37 654'&'&#"#6767672!!!!!!@"'&3''i"<;O52/)&=[?VVVVVTR='''%$$G;7#!%#0/6fHaYVUUX2#;?CGKO27674'&#"#672#"'&'&'332767654'&'&+!!!!!/H*),+<4%(h"D88!!w"!=>OK<:!"f&#.,&$!#3ZVVVVVB#$@I++!"=56C@: ;45  54<'!%(+,'&:YVUUX2# !!!!!! ##!##5!VVVVVju1bj^XgUgUgVdYVkY||#48<@DH!!263632*#"'&'&'72767674'&'&'"#!!!!!W5 920(&NL ;73&&P$(/<0/-.6i<)VVVVVb**359UW $$#M 11811.M YVUUX#9=AEIM4'&'&#36367676632"'&'&5656767!!!!!*-/,'%)*,+('PK%.<;9$$'&1/7LBG'*-VVVVVO,**(&'2-,')4"#>AM:33%&$&PT<=''Z%("%%%'&&%$# '%"#" $#!VVVVV &32G943"!"!88A655!8:IF<:"!&&;:BO533%$$$40%%'%)$$""$%$&! |YVUUX , .B!!!!!!!!!!3#5#"'&'&'&547676324'&'"3676XgUgUgVdYkkJl9..""#%9:B#",,O*$'%$*L01WWWWVg)%74=X?@!! "J98+*=://65 ,048<@D4'&'&#"3276763672#"'&'!!!!!!!!!!$)4-#(&%<,(%LkBr?:8'&'&))(K&)%-XgUgUgVdYN0++,,:)//!./g?AUM98%#1UWWWW ,!%)-15#"'&'&54767632&#276!!!!!!!!!!BNOAB&('%CBOP@=]O,/)*5($!XgUgUgVdYʁ"">?NLA@%&{I89C5), ?WWWW ,26:>BF4'&'&#"3276763#5#"'&'&'&54767632!!!!!!!!!!''33'&$$:9(%jj(01,B/0! $$99A266XgUgUgVdYF:-, +//%-- !/+%U:-,/1.YEA! 1WWWW ,.26:>B&'&#"#&'&'&'&5676767632!276!!!!!!!!!! $$:4-/ 5W$7AM13 WWWW ,#'+#534767632&#"3##!!!!!!!!!!..6!"(#(EkXgUgUgVdYb p6 fbMWWWW KOSW[_4'&'&#"327676'53#"'&'&533276=#"'&'&5476767672!!!!!!!!!!%&%5'(%%52'(k()79?O:< i cE$$  %.H89 #!.-<430XgUgUgVdYM?++(*37+2-,Z}EE84H7//,+Xz %$DCY0/+-)WWWW ,"&33632#4'&##!!!!!!!!!!"k3njCvkeXgUgUgVdYUP? WWWWi%!!#"'&'&54767632&#276AOLDA'(''ACNS=<^N-/'(7, """??MMAA$%zH:8D4*. 'Iu   " 9 "Q "   Chess Millennia-LChess Millennia-LRegularRegularChess Millennia-LChess Millennia-LChess Millennia-LChess Millennia-LVersion 1.0 Version 1.0 ChessMillennia-LChessMillennia-Lc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph69 bɉo1C tzzzW{{UUllUUpychess-0.12beta3/pieces/ttf/cheq.ttf0000644000175000017470000007641012161415524016604 0ustar tamasusers  OS/2~NcmapIglyfœLuuhead,cz6hhea `z$hmtxzlocaJ3,{NmaxpE{ namek*{post|n- @ "# $!%   X Sax    " & 0 :!" R`x    & 0 9!" "# $!%     h] * .,)          $@1     #  *hS$# Z            $"%   h_q   #    ,'S  I  *>1          +,!q 0    %Gb  $  *%  "$      hV       %,  "  ": $'JW &!   *#        ! g   RhyT      #    :     $ (    &"!;* /B     & +4(    Zh_  #      7;    :&5'    - h+I5On? K@   LYV  D!80  . 2  !11   X7m"8.   )$' =)h(I3Lr 5## '65*# $)LX  $! sd  r Q1   jhY.E[on       l  U31""OV O  S  TS   O         %+$k*   &(     i   ! `] chm'$'JW &!    j,  IH  $h    -   -   +h}2 G     U,.       31!   "4 *=g0  & *;    h$      (#  !  .    !   5  hm$Hs2  r   }9 /     6" 8 $'JX &!     <      Y       $$=       #'+/3=++q+d ++1=+Q16/2>0H1\++=+e+p+ 2++=Q6?G+ #'+/3=+2+'+dQ +%$>T  ) -,) L=G:7+;8+=7+;8+<+=3 +&e+ Q+%5$>GTC       $@0    "  *LF8888 /37;?CGB++_`[+e ## 7+BhC             suL=G:@+;@+=?+;@+<+A+#[f+"#+Ai4B%%    &ruLF@@@@ #'+/37;X\`dhlpt5C3+j{:+Jq+dtuwr xY9  !    -(T  F  + ;4          +.+ WL<1+;1+;2+=1+;1+<C+=kz:+#Je+t" tPv3q\x3*Y9 0    %Hf!   #  +&  "$      L22222 #'+ 5V3+b6++Oq+dpx{       %,  "  "@} v $'JW &! eL=5+:5+;6+=5+;5,<V+=c 6+MOe+p'wVz+  *#         ! 4}vZ"  [#eL66666 #'+/37;? $(,048<@773+h>++'q+d`><AdU4U"       #    :   ! )   S+L=7+:7+;8+=7+;8+<7+77+=> +L'!e+Y`??<dT@4    &"!;* /B     & *3'   U+L888888 #'5+3+T:++!q+d-k#     #^3Z 4*) 7]% K;7+=7+;8+<7+:8+>7+++=T:+I!&e+-3 k    :'7'    /^n4 Z*0)x  $K888888 #'+/37m =+}ywx8+HH% 5H-pD L?    MZW  A 70   . 2  "cLG:9+;:+=9+;:+<{+=}ywy9+"H. GM%'6NH-Oo!(:8  [7k"8.   *$( <.)dLF::::{ SW[_c|=+rvwww8+-  5## G! $6F '65*#]1 $)LX  $! L=G:5+;6+=5+;5,<}+=wwww9%+"-9Usd  q FM!%$N6%  N]( 1  LF6666} #'+/37Of}6:>BFJNRVZ=+nn^~t`<L+[3<Fdxzwn       i  S42"#PWM  P  ST " R  |vL<-+;-+;-+=-+;-+<e+=mn~t;L+)++4=FdFewzWvd       %*$k)  &(     e    bW '|]&vL-----f #'+/VV-+qou@%U+l)6O l   j,  IH  $L tp$'JW &!  D|L</+;/+;0+=/+;/+<fVV+=pt?%+(k2,)7O[k>G -   -   +6tTo   +DX$|L00000g #3VZ^bfjn9=AEIMQUY]773+hF%?(d+E IdLQr~t    U,.       31!   4*=mwL<5+;5+;6+=5+;5,<x77+=F% =@"+&0  + *;    $IcL^>Qq~Vsu$      )%     ,    !   5  (m\&wL66666y EIMQ 26:>BFJNRVqC3+m4+o3+o3+nL!}#'JW &! Orh9 /    5"@+e ; bWQ rW4  +=7U+V=3+r;D4444L%}|  .Pqin       %$=     W/Qp_$W   <   +>8U+= V=4UDDfVUWDUWDgUDWfEVVfDDeWs6_<$L$$LY&RZjcUUVD%%%%J ^ %NLN5"&(+:-U03R6:]:s:::::::&uf       .  8ChessRegularChessChessChessRegularChessChess&TSLNFRVXU[OP43,.&2685;/0 ?A@Cpychess-0.12beta3/pieces/ttf/maroquin.ttf0000644000175000017470000011001012161415524017500 0ustar tamasuserspFFTM{ GDEF&(OS/2Ax`cmap(pgaspglyfO`headd6hhea :4$hmtxoNloca=RamaxpX namevVvGpost5Avhea $vmtx_4x8._<+C C  Dc, "H   g UUDU              UU4TDTDTDTDTDTD#C`|3#C`|3jN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a(Zp.VnX|  4 >XZ!d#%L%\&&$&4&'b'(h()@*L**+J+,$,Z-."./00112233v34P45P56F67<78B89:&:;f;<=>=>Z??@ @AzA 72#"54 3 %#!'35#31Dhh3CDh3 %!5!!5!!5!!5!!5!!5%!!DDDDDDDDDDDDD13 7#5!#735#gg1CDhͫD 3#3#3#3#3#3#3DDDDDDDDDDDDDg3 3#3#3#3#3#3#3DDDDDDDDDDDDD !5!!5!!5!!5!!5!!5%!!VDDDDDDDDDDDDD1 53!5#35#gϪDgDD 72#"54   #/;GS_kw%761'1&'61'1&761'5&61'1&61'1&61'1&61'1& 6'1&%61'1&%61'1& 6'#&61'1&'61'1&61'#& 61'1&Jxxyyvnf2f!n!wTTK^*]>yx~Uyyvnffmw!TTK*^]#$ 2#"&546xxy$xyyx 3!35#35gCD3DU%#53gDDgD5!!g7#53#CCgDgU!3UgD33DgUV3#53CghV!!hV53#5CgCh  #,5>GPYeq}2#"&546 61'1& 61/&%'#&7 6'1&'1&7 6'1&17& 6'1&61'1&'61'1&'6'1& 61'1&63'1&63'#&6'1&761'1& 61'1&%76'5&xxy\^*&a@Xb~}e)wnffovxyL!xy$xyyx]+^c'aa}&|ewmf2f!n!v! yxyx!!Yk%MY]u.2:J]os7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&767676767172763630%63654'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&5&54'&//17/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'4'#"'&54763272#"'&5476"327654'&1                       @  '      -b    A  )   .&:DY'  "$% & ! 0/%)  !    #  >DZ)(A\+p112  " 1 .   %''5%    ?  $ '4   # tEM   6  2u DM 5 2U ! ;-6F1L6K()!J,!*" >>;?.?;>>>xB//BxC>><"8GX5$*+*6MT2!"(%>>>(NO1.&&=I/331C8+@/00-D?200/B  g  *       A   I     "      [       b  # &"!( "($,  !)N   "    <2  %TU%   .  /v R [" ?! 7 ' '! b@" :(  ! byqh 4/ HRQQ(QQR\K(/MeQRpp>e<4>>49lxA:064RQQWh{=-?'&47KK<<,,:74'&7>#"&'&632"13!2514#%!21#!"514!21#!"5147"13!2514#5!+"13!2514+"&7;21#!"514;2=!76'5&76514'761'1&?761'1&6'1&63'#&'1&763&'761 17&54#"'6'1&?<514'61'1&?&+61'1&?&'613'1&7&#61'1&?6761 #'#&7761#1/&76'1&'6153'1&?l ^]a;0 !W--?<9H~~1A2233gggV4"""#UU3VVG0U""""W2F4DUUUhVVUCgxyHxyvc$Cyb )#UHG D<H  ohGRQHq's`)7= DasIt_HW Y~q/z"S7!+K97a %,H7#g̵^Nq DsgG sPr&  #/EYk} '/<DNV_iqv"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"&7;21#!"514;2=!!7>76&#)" '.'&63!%2#5#"514354312721+%761'1&6'1&63'#&%'1&7 6'#&'1&7#37'761#61&'616514'76176'5&76514'761'1&?#"'6'1&?<514'61'1&?&+61'1&?3'1&7&#61'1&?#'#&7 7&5146'1&'6153'1&?v2233gggV""4""3VVUG0U""""W2F4DUUUhVVUCgn-=<,n͆K1/KDS$"U""W!!WxyvYig%b&aP` +jxyH#UHG D<HGRQHz`*)t_H"33333fggf""""3UVVU"2E""""E2DUVVUDg654"Y**X"z#"X""X"#yxv)jf+('`Ph |yxHTH$H2<H4QRG&-+#P"/ u`H"  "+08BKS]erz#-5>JVb%'1&?5376'1&'61 7&514'#&7#'1&?&#613'1&7'1&?&+61'1&?<514'61'1&?#"'6'1&?6514'76176'5&!21#!"514!21#!"514;21#!"514;2=!'.'&63!%2'5#"514354312721+6514'761&'61#61'761#3'1&7 6'#&'1&763'#&6'1&761'1&H/_D*`3HRQ`GH D<GH#UHxyEgggW3VVU!DUUUhVVUCg͆K1/KDS$"U""W!!Wz +`oPb&a%XiguvxyVH`D"/ t+#-&GARH2<H$HTH}yx/fggfUVVU"DUVVUD3"Y**X"y#"X""X"#h `P'+jft)v! yx  )1>FPXainwz &2>%76'5&76514'761'1&?#"'6'1&?<514'61'1&?&+61'1&?3'1&7'1&?#'#&753'1&?;21#!"514;2=!!21#!"51476'&7%&6765&'&67%676761&'761 7&&'6154'61&'61&'761'1&763'1&763'#&6'1&761'1&JxyH#UHG D<HGHz`X_HDUUUhVVUCgDggg|=>= mIroX5m3{' " #  SU#H">Wvxy>yxHTH$H2<H4G&-`H2DUVVUDfggf%  ^opOM00v!z!`4 k#,""#MT  />w/1Wv! yx# 5AMcw &08EMW_kw7%"!.'&'&6'&7%&6765&'&67%676"13!2514#%!21#!"5145!+"13!2514+"&7;21#!"514;2=!761'1&6'1&63'#&%'1&763'1&7&'761&'6154'61&'61 7&&'761761'1&?53'#&7#'1&?3'1&7'1&?&+61'1&?<514'61'1&?#"'6'1&?6514'76176'5&& <%+n~cl Oې* r657IroX5m3{'^2233gggG0U""""W2F4DUUUhVVUCgxyvW>Q"1#S # " "*H/_`3H$GH D<GH#UHxyk =%iiX +v opOM00v!z!33333fggf32E""""E2DUVVUDyxv/1W/>  T#""j#, `H`o-&G4H2<H$HTH}yx  "'05=GPXbjw&2>%'1&?5376'1&'611/&7#'#&7#'1&?&#613'1&7'1&?&+61'1&?<514'61'1&?#"'6'1&?6514'76176'5&761'1&6'1&63'#&63'1&L1 17&%&'616761&'7612#"&546;21#!"514;2=!%"13!2514#!21#!"514H/_DI Dao`3HRQ`GH D<GH#UHxyxyvoc),}]  qPY ~~DUUUhVVUCg4UU3VVgggVH`D"/ t #JD]-&GARH2<H$HTH}yxTyxvn }\-$ qOtZ~~xDUVVUDUVVUfggf$  #/EYeqz '0:BGPUampx"13!2514#%!21#!"514!21#!"5147"13!2514#5!+"13!2514+"&7;21#!"514;2=!"32654&'2#"&546&'7616761&'61 17&L1 63'1&63'#&6'1&761'1&76'5&76514'761'1&?#"'6'1&?<514'61'1&?&+61'1&?3'1&7&#61'1&?#'#&7#1/&76'1&'6153'1&?v2233gggV4"""#UU3VVG0U""""W2F4DUUUhVVUCgjjii~~PYq q}] ),5ovxyUxyH#UHG D<HGRQHz` DasIt_H"33333fggf""""3UVVU"2E""""E2DUVVUDeijji4~~-OtZz$ q}\- n!v! yxyxHTH$H2<H4QRG&-Ds #Jz"/ u`H, )5AMYaiqy#/;GOYanv;21#!"514;2=!5!+"13!2514+"&!21#!"514"13!2514#!21#!"514"13!2514#"3254%"32542#"54%2#"544$7&676$'4&'%.'.'.5>7>7>%&'61561.'7&'761'1&7654'761 17 .'63&'37&'763 6'1&761'1&76'5&76514'761'1&?#"'6'1&?<514'61'1&?&+61'1&?3'1&7&#61'1&?#'#&71/&76'1&'6153'1&?"32542#"543DUUUhVVUCg3G0U""""W2Fh3VVUT""4""gggf2233F$$$$$$ UUUUUU!!!'!!!!G5<<0 4,"35+AF/4DU0( ) BR9)%ID ,$EI&e&p;I!bT" FxyUxyH#UHG D<HGRQHz`It_HUUUU"""DUVVUD\2E""""EUVVU3"""""fggf33333$$$$h$$$$6VUUVgUUUU<]II==II]?=II==II=P[EZ13"=!F][IGVV8&0 $G*QA|^Jx++(eg& ";Jb yxyxHTH$H2<H4QRG&- #Jz"/ u`H VUUV4"!!"% !-9EQg{ *2<DMUZco{~>'#!5#'!5# &335;353"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"&7;21#!"514;2=!#61616'#61 '1&7#61 '1&7#6337.7376'#& 6'1&761'1& 61#676'5&76514'761'1&?#"'6'1&?<514'61'1&?&+61'1&?3'1&7'1&?#'#&7 7&5146'1&'6153'1&?1RibVVbiS0̊"2233gggV""4""3VVUG0U""""W2F4DUUUhVVUCg&`\iMa"2 a} ?`~^ ^vxy-":MxyH#UHG D<HGHz`*)t_H̐4liix33333fggf""""3UVVU"2E""""E2DUVVUDw\h842'~')^& yx?SyxHTH$H2<H4G&-+#P"/ u`H33 2#4#73.~g sD q3~gErPr!  "+08AIS[hpz &2F%'1&?5376'1&'61 7&514'#&7#'1&?3'1&7'1&?&+61'1&?<514'61'1&?#"'6'1&?6514'76176'5& 61#6761'1&6'1&%376'#& 37.%#63 '1&7#61 '1&7#61616%#61&335;353!21#!"514!21#!"514;21#!"514;2=!H/_D*`3H$GH D<GH#UHxy":xy^~^ k`} Ia42a\i` ̊#gggW3VVU!DUUUhVVUCgVH`D"/ t+#-&G4H2<H$HTH}yx$?yx^&~')42'\h8liifggfUVVU"DUVVUD  +AILXdir{ ".6BN!21#!"514"13!2514#;21#!"514;2=!>7#"&'&632'1&?5376'1&'611/&7#761'#&7#6761 '1&?&#613'1&7&'61'1&?&+61'1&?<514'61'1&?#"'6 17&54&'761!'1&763 63'#&6'1&761'1&'1&?6514'76176'5&wgggWUU3VVgDUUUhVVUCg<:G~~4jH/_DI Da7=`D'sHRQ`GK oH D<GH#Uyb  Cc$&vxyHxyUfggfUVVU"DUVVUD,H74'&7>#"&'&632"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"&7;21#!"514;2=!l ^]a;0 !W--?<9H~~1A2233gggV""4""3VVUG0U""""W2F4DUUUhVVUCgW Y~q/z"S7!+K97a %,H76&#)" '.'&63!%2#5#"514354312721+v2233gggV""4""3VVUG0U""""W2F4DUUUhVVUCgn-=<,n͆K1/KDS$"U""W!!W"33333fggf""""3UVVU"2E""""E2DUVVUDg654"Y**X"y#"X""X"#z)=IU#5#"514354312721+'.'&63!%2;21#!"514;2=!%!21#!"514!21#!"514"DS$"U""W!!W"͆K1/KDUUUhVVUCg43VVUggg##"X""X"#"Y**X"DUVVUDUVVUfggf6>;21#!"514;2=!!21#!"514%&6765&'&67%67676'&3DUUUhVVUCgDggg'IroX5m3{'=>= DUVVUDfggfopOM00v!z!  5AMcw7%"!.'&'&6'&7%&6765&'&67%676"13!2514#%!21#!"5145!+"13!2514+"&7;21#!"514;2=!& <%+n~cl Oې* r657IroX5m3{'^2233gggG0U""""W2F4DUUUhVVUCgk =%iiX +v opOM00v!z!33333fggf32E""""E2DUVVUD +72#"&546;21#!"514;2=!%!21#!"514!21#!"514~~DUUUhVVUCg43VVUggg~~xDUVVUDUVVUfggf #/EYeq"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"&7;21#!"514;2=!"32654&'2#"&546v2233gggV""4""3VVUG0U""""W2F4DUUUhVVUCgjjii~~"33333fggf""""3UVVU"2E""""E2DUVVUDeijji4~~-GOW_go{"3254.'.'.5>7>7>%4$7&676$'4&'2#"542#"542#"54%"3254"3254"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"&7;21#!"514;2=!$$#.5<<0 4,"35+AF/4DU0( ) BR9)!!!'!!!!@UUUUUUUUU$$$$$$2233gggV""4""3VVUG0U""""W2F4DUUUhVVUCg+$##$P[EZ13"=!F][IGVV8&0 $G*QA|<]II==II]?=II==II=6UUUUgVUUVUUUU9$$$$h$$$$33333fggf""""3UVVU"2E""""E2DUVVUD!-9EQg{>'#!5#'!5# &335;353"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"&7;21#!"514;2=!1RibVVbiS0̊"2233gggV""4""3VVUG0U""""W2F4DUUUhVVUCg̐4liix33333fggf""""3UVVU"2E""""E2DUVVUD52#4#FdgCeFD+;;21#!"514;2=!%!21#!"514!21#!"514&335;3533DUUUhVVUCg43VVUggg̊DUVVUDUVVUfggfUlii)5A>7#"&'&632;21#!"514;2=!%!21#!"514!21#!"514X<:G~~4DUUUhVVUCg43VVUggg{,H76&#)" '.'&63!%2#5#"514354312721+3333fffU""5""3UUVH0U""""Ww4CUVVhUUUDgm,<<,mͅK00KCT#!V!"W""W33333fggf""""3UVVU"2E""""wDUVVUDg554"Y**X"y#"X""X"#D#C-GOW_go{"3254.'.'.5>7>7>%4$7&676$'4&'2#"542#"542#"54%"3254"3254"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"7;21#!"514;2=!$$$-5;<0!4+"36*AF04DV/(!)!BQ:(!!!'!!!!?VVUUUUUUV$$$##$3333fffU""5""3UUVH0U""""Ww4CUVVhUUUDg$##$P[EZ13"=!F][IGVV8&0 $G*QA|<]II==II]?=II==II=6UUUUgVUUVUUUU9$$$$h$##$33333fggf""""3UVVU"2E""""wDUVVUDD#5AMbv7%"!.'&'&6'&7%&6765&'&67%676"13!2514#%!21#!"5145!+"13!2514+"7;21#!"514;2=!&!<%*n~clOܐ(r5 76HsoW6m3{&_3333fffH0U""""Ww4CUVVhUUUDg-k =%iiX *v opOM00v!z!33333fggf32E""""wDUVVUDD#1=IUav&32676&'&.7>74'&7>#"&'&632"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"7;21#!"514;2=!Fl ^^`<0 !W-.?<9H}~0C3333fffU""5""3UUVH0U""""Ww4CUVVhUUUDg Y~q/z"S7!+K97a %,H5#!5#'!5# &335;353"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"7;21#!"514;2=!41RibVVbiS0͉"3333fffU""5""3UUVH0U""""Ww4CUVVhUUUDgV̐4kiix33333fggf""""3UVVU"2E""""wDUVVUDD# #/DXdp7"13!2514#%!21#!"514"13!2514#%!21#!"5145!+"13!2514+"7;21#!"514;2=!"32654&'2#"&5463333fffU""5""3UUVH0U""""Ww4CUVVhUUUDgiiii33333fggf""""3UVVU"2E""""wDUVVUDeijji4~~#A!367>767654'&#"'6?676767632#!"567676Ug   'L"h#    "':7-I(i@9! ]P&S--]//R" ' CS!3327632#!"'6767>767>76767654'&#"&'&'476767672Ugś-: ?" 6K1Y?6"$1:/1 -.677j<?AEK (Y   *h% m-6:<7HQ3>&.M>NN?E6- s  |a!36763#"'&'&567632276767654'&#&&'&'>7>76743031672&'Ugg&863?0111=A?=75!!!'((8,,"!*(I[K  (QC LI!%&33?F9<+-#"/& !*).11L'(I  &I!!H'NT !+A!367632#&'&547676763232767654'&'&#"UgT$77<=32.0KMWiAB KJww*:7:865+*0 ''=>63!+C:< 243@UNM,,CBRR./CD/(N,,&'><@*))0.6!3!""'6106176763!2#"'676767>Ug     1$N+05#42';18-^*3W u YAP.^/lR##QgX]JDO3*>V!3&'4656567672"'&'&'6%6767674'&#"3276765&'&'&UgvtMMmN98##/4A,.EHIYA@!\/0/)*A3+/"!Q-0*(7251#&@p Q88&&/;,-EK>>!$))4 (*(;#$.8!$s'"''50 //GfD^!!"'&'&565676763246767632#"'&'676746%676767654'&'&#"w=u1+,*(CAMQ,     1)('   ('( h45H IIG..A   </4,'   !!H$(234;,01f4J!!#"'6567>7>74'&'&563267632#"3276767654'&'"P   G8<"/06+#&)'GFU^ y/&& !0*&(hS# cE?>W  I!66&,&SNM31..?''-.*G+*&(fOa!!"'&'&'6506167676326767674'&'&'67632#"'6'654'&#2{#57@B/2,.FGO:()   #!%    #$ (#%>@++7vhO1155CLJK,.02#//6!  !  %J$%X33`,-L$  1.mTS6 ''9;=C*,fA!!6767654'&#"27632#"'&'&547676767632`RC>7=(732"$ .1JMY4HJ7A23 0/;;=aVID 9=*+###"hr   * --=JBA(' 0cLDI"$h'#'6I%)'&;:=.#",,fS!!6763"'6767>74#"+"'&'65>7>7>7674'&'&54767632165F-! +0  Y,'A') 8    hX!""") = .:="@7u/{u# (Q)([33]+EY   #=AEIMQUY67>767654'&#"'6?676767632#!"5676763#3#3#3#3#3#3   'L"h#    "':7FDDDDDDDDDDDDD-I(i@9! ]P&S--]//R" ' 2COSW[_cgk327632#!"'6767>767>76767654'&#"&'&'4767676723#3#3#3#3#3#3ś-: ?" 6K1Y?6"$1:/1 -.677j<?AEK (Y   *h% S;48.+-1#DDDDDDDDDDDDD/&.M>NN?E6- s  -6:<7HQ3a|]aeimquy6763#"'&'&567632276767654'&#&&'&'>7>76743031672&'3#3#3#3#3#3#3#&863?0111=A?=75!!!'((8,,"!*(I[K  (QC LI!DDDDDDDDDDDDD%&33?F9<+-#"/& !*).11L'(I  &I!!H'NT ! =AEIMQUY32767654'&'&#"'67632#&'&54767676323#3#3#3#3#3#3 ''=>63!+C:<$77<=32.0KMWiAB KJww*:7:865+*DDDDDDDDDDDDD|/(N,,&'><@*))0.6243@UNM,,CBRR./CDj26:>BFJN!""'6106176763!2#"'676767>3#3#3#3#3#3#3y     1$N+05#42';18-^*3DDDDDDDDDDDDDW u YAP.^/lR##QgX]JDO 3+RVZ^bfjn3276765&'&'&76767674'&#"&'4656567672"'&'&'63#3#3#3#3#3#3jQ-0*(7251#& /0/)*A3+/"!2tMMmN98##/4A,.EHIYA@!DDDDDDDDDDDDD'"''50 //Gg (*(;#$.8!$Q@p Q88&&/;,-EK>>!$))4 fZ^bfjnrv676767654'&'&#""'&'&565676763246767632#"'&'676746!5!!5!!5!!5!!5!!5%!!c1)('   ('(  =u1+,*(CAMQ,     W!!H$(234;,01ȕ45H IIG..A   </4,'   ]DDDDDDDDDDDDD fFJNRVZ^b3276767654'&'"#"'6567>7>74'&'&563267632#"!5!!5!!5!!5!!5!!5%!!z y/&& !0*&(=   G8<"/06+#&)'GFU^U.?''-.*G+*&(# cE?>W  I!66&,&SNM31DDDDDDDDDDDDDf8<@DHLPT6767672&'&#"32767632"'&'6!5!!5!!5!!5!!5!!5%!!,,AAJ)&% 66*+ $#>('#-  )999W?AhHGF+*  :$%446 I#%, 256l$DDDDDDDDDDDDD f]aeimquy654'&#27"'&'&'6506167676326767674'&'&'67632#"'6!5!!5!!5!!5!!5!!5%!!Y(#%>@++7v^#57@B/2,.FGO:()   #!%    #$ `2TS6 ''9;=C*,kO1155CLJK,.02#//6!  !  %J$%X33`,-L$  1.DDDDDDDDDDDDD f-=AEIMQUY27632#"'&'&547676767632'6767654'&#"!5!!5!!5!!5!!5!!5%!!^.1JMY4HJ7A23 0/;;7=(732"$eO["$B432D;98))*9+.,!&/!!37DDDDDDDDDDDDD=AEIMQUY#"'6;676767672"'&#"32+"5476323276767!5!!5!!5!!5!!5!!5%!!DD!   %^ T9 "$,0   $&dA@"" !7 =7:*-#87KbDDDDDDDDDDDDD q_cgkosw{36767654'&'&#"6767232767654'&'&'&'&5476767632;2#'#&'&!5!!5!!5!!5!!5!!5%!!g 9=*+###"  !(,)605*.'&@?K'((`"QC))@o>=aVID6I%)'&;:=.#",,   * --=JBA(' 0cLDI"$h'#'DDDDDDDDDDDDDfOSW[_cgk6763"'6767>74#"+"'&'65>7>7>7674'&'&54767632!5!!5!!5!!5!!5!!5%!!165F-! +0  Y,'A') 8    X!""") = .:="@7u/{u# (Q)([33]+EY   DDDDDDDDDDDDDf<!!6767672&'&#"32767632"'&'6,,AAJ)&% 66*+ $#>('#-  )999W?AhHGF+*  :$%446 I#%, 256l$#Ck    3 K {  Chess MarroquinChess MarroquinRegularRegularChess MarroquinChess MarroquinChess MarroquinChess MarroquinVersion 1.0 Version 1.0 ChessMarroquinChessMarroquinc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph69 bɉo1C  333 $33zzC"pychess-0.12beta3/pieces/ttf/usual.ttf0000644000175000017470000010305412161415524017010 0ustar tamasusers  OS/2gNcmapfglyf>М~Zheadz6hhea `,$hmtx'MPloca*J,pmaxpV name 3post @ +#,$%&.-'( !)"*3564/ 12  0 X Sax    " & 0 :!" R`x    & 0 9!" +#,$%&.-'( !)"*3564/ 12  0 \Z"<,,<-<"";-\Z"<,,<-<"";-  #'+/3=++q+d ++1=+Q16/2>0H1\++=+e+p+ 2++=Q6?G+ #'+/37;?CGK_>[23+*n >6UHz>x{6yQ+1 +q+d+=+,<""<,5=9+X[+14p7+G?6Q2++ e+p++-<"";-h] * .,)          $@1     #  *hS$# Z            $"%   h_q   #    ,'S  I  *>1          +,!q 0    %Gb  $  *%  "$      hV       %,  "  ": $'JW &!   *#        ! g   Rht2  #         7     $ (  EDE 9   &"!;)   & +4(    Dg^h7| 7]!     EDEh  9'6'    hCDh+I5On? K@   LYV  D!80  . 2  !11   X7m"8.   )$' =)h(I3Lr 5## '65*# $)LX  $! sd  r Q1   jhY.E[on       l  U31""OV O  S  TS   O         %+$k*   &(     i   ! `] h}2 G     U,.       31!   "4 *=g0  & *;    h$      (#  !  .    !   5  hm$Hs2  r   }9 /     6" 8 $'JX &!     <      Y       $$=       #'+/3=+2+'+dQ +%$>T  ) -,) L=G:7+;8+=7+;8+<+=3 +&e+ Q+%5$>GTC       $@0    "  *LF8888 /37;?CGB++_`[+e ## 7+BhC             suL=G:@+;@+=?+;@+<+A+#[f+"#+Ai4B%%    &ruLF@@@@ #'+/37;X\`dhlpt5C3+j{:+Jq+dtuwr xY9  !    -(T  F  + ;4          +.+ WL<1+;1+;2+=1+;1+<C+=kz:+#Je+t" tPv3q\x3*Y9 0    %Hf!   #  +&  "$      L22222 #'+ 5V3+b6++Oq+dpx{       %,  "  "@} v $'JW &! eL=5+:5+;6+=5+;5,<V+=c 6+MOe+p'wVz+  *#         ! 4}vZ"  [#eL66666t  !%)-159=AEI2  #         7     $ (  EDE7+n8+o7+m8+o7+p7+mL!+4U*di<>`q+d'+h>+577 9   &"!;)   & +4(    Dg888888L+e@4<T)d<? ?`Be+'!+> +=77DPTX\`dhlp!     EDE@7+l8+p7+n8+o7+m7+oK %  7])*Z 43^k-q+d!+i:T+5+:&5'     gDD888888K$   0)J*&Z4<^Lk-3/e+!&+:T+=+ #'+/37m =+}ywx8+HH% 5H-pD L?    MZW  A 70   . 2  "cLG:9+;:+=9+;:+<{+=}ywy9+"H. GM%'6NH-Oo!(:8  [7k"8.   *$( <.)dLF::::{ SW[_c|=+rvwww8+-  5## G! $6F '65*#]1 $)LX  $! L=G:5+;6+=5+;5,<}+=wwww9%+"-9Usd  q FM!%$N6%  N]( 1  LF6666} #'+/37Of}6:>BFJNRVZ=+nn^~t`<L+[3<Fdxzwn       i  S42"#PWM  P  ST " R  |vL<-+;-+;-+=-+;-+<e+=mn~t;L+)++4=FdFewzWvd       %*$k)  &(     e    bW '|]&vL-----f #'+/VV-+qou@%U+l)6O l   j,  IH  $L tp$'JW &!  D|L</+;/+;0+=/+;/+<fVV+=pt?%+(k2,)7O[k>G -   -   +6tTo   +DX$|L00000g #3VZ^bfjn9=AEIMQUY]773+hF%?(d+E IdLQr~t    U,.       31!   4*=mwL<5+;5+;6+=5+;5,<x77+=F% =@"+&0  + *;    $IcL^>Qq~Vsu$      )%     ,    !   5  (m\&wL66666y EIMQ 26:>BFJNRVqC3+m4+o3+o3+nL!}#'JW &! Orh9 /    5"@+e ; bWQ rW4  +=7U+V=3+r;D4444L%}|  .Pqin       %$=     W/Qp_$W   <   +>8U+= V=4chm'$'JW &!    j,  IH  $h    -   -   +EVVfDDeWCUUxDEDUUx4ExFUDDfVUWDUWDgUDWfU 3wV3Tx4UU 4UBFx 3Dw5xSU xEwDyEU!! E"  fSW  "WEg f Vw&.7=C#w&2$B>6/$2%UV#C=7.&wt2%($!4 F !%(E 4x%.7=C#%2U(%! 4 !$(TF F_<,L/',LY7\R^jcVDDUUUS9999r ^  $"b%(*,0u26x9;m;~;;;;;<%>}>?-7uf     ( > L bChess UsualRegularChess UsualChess UsualChess UsualRegularChess UsualChess Usual7TSRQFZVXUOP4321&:685;/0[  EWHJ%7(*pychess-0.12beta3/pieces/ttf/lucena.ttf0000644000175000017470000012062012161415524017124 0ustar tamasusers0OS/2Q\{5VPCLTmWM6cmapcvt gQf 6fpgm3OglyfCQhdmx.@|head˱d6hhealL$hmtxv@{ locä́pmaxpv/p namepostprep(&:cPHP W{( $,  : c  P  HP  Generated by Fontographer 4.1Generated by Fontographer 4.1Chess LucenaChess LucenaRegularRegularChess LucenaChess LucenaMacromedia Fontographer 4.1 Chess LucenaMacromedia Fontographer 4.1 Chess LucenaMacromedia Fontographer 4.1 19/11/99Macromedia Fontographer 4.1 19/11/99ChessLucenaChessLucena@,vE %E#ah#h`D-!E TIeN(wYZbZb@' EhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDF+F+EhDEhD?W@!@ Fv/7?@@Fv/7?@@Fv/7?v0)).}Jb)v 0NIQidCC Q{# #Q <3B22!!)*``;;7BC*CD>!!DE!!v^!!!!!!!!!!!!!!!!7 BNh| &"7i_##Lu"K ,#9lQ>v)W)/}Ia)0MTHikjQh61=AEIMQVZ^cgkosw{ 254#"77'#75'67213!53&514635333"13!2514#7373733757&'3#735&'7'7#735?'?3?&'%735"'%5735573'7??75?7353#77%#57#73#73#73#73#73#7%&'7#73#?#?#?%57d****}܅~"JI"!!" QiIHN| 0))Vb4}))v4Q>z 8څ#, = H] ii^ 7&{ h[6 C=!!k!!j!!k!!k! k!"Y!!l!"u]v""CC?!!VCCCC!!)* Q{# #Q E#9 ,"uJ#?#i_X"7<&| hP77 B-!!!!!!!!!!!!!!!!v^!!DE!!VCD)BC2AIU_nz~  "&*.26:>B13!53&5146;676767#"'&''&'&'&76767&76767&?'&76'327654#"674'&'4#"63276"13!2514#7373733 5&'73&'73?6%&'735&'735&'735&'7335&'737#657574'7&'7&'7&'7'7353#77%#57#73#73#73#73#73#7%&'7#73#?#?#?%571HI"CS$# 6),$* ( >4"MR?!`   I.      QiI?r 80  <A X K{ h q [&Y h[6 C=!!k!!j!!k!!k! k!"Y!!l!"u]v""CC?!!VCCCC3 #o6#" "2#  &.-!r`,$  HGrdmm ) GF Qh;<:H Z 8#4"MR?!E3QiI?r 80  <A X K{ h q [&Y h[6 C=!!k!!j!!k!!k! k!"Y!!l!"u]v""CC?!!VCCCC7a]\l<2   !OXG&Y; )90 2!$3n   "3 #o6#" "2#  &.-!r`,$  HGrdmm CCQh;<:H Z 8#BFJNUZ_ekpuy~213!53&514636767&5467&5432"13!2514#737373333 &#"735&'3'&'7'&'&'&'''3535 &5&'73&'73&'73#77%#57#73#73#73#73#7&#7#7%&'7#73#?#?#?%57 ,.1?_"JI"_?0.,  QiIL ^ KD?^xw Qs|!f ph[6 C=!!k!!j!!k!!k!  5!"Y!!l!"u]v""CC?!!VCCCCT00adP# #Pbc1 /qQh;<:H<M;]@ Dj ? ^y   {#f wqhP77 B-!!!!!!!!!!4!!!!!!v^!!DE!!VCD)BC.'RVZ^bfjqv{  %5!%2514#!"132654&#"#"'!&'&213!53&514636767&5467&5432%737373333 &#"735&'3'&'7'&'&'&'''3535 &5&'73&'73&'73#77%#57#73#73#73#73#7&#7#7%&'7#73#?#?#?%57c#((('3  lML76 ,.1?_"JI"_?0., QiIL ^ KD?^xw Qs|!f ph[6 C=!!k!!j!!k!!k!  5!"Y!!l!"u]v""CC?!!VCCCCdCCd""!"kKJli00adP# #Pbc1 /@Qh;<:H<M;]@ Dj ? ^y   {#f wqhP77 B-!!!!!!!!!!4!!!!!!v^!!DE!!VCD)BC6JUaequy}  "&*.26:>B254#"!254#"53&51463'#"&54632&546327&54632#"'213'7#"''2514#!"135!2654&#"7273737333575'5'3?%'''3536?3&'73&'73&'7373654'7'75'&'7%&'7&'7?575#77%#57#73#73#73#73#73#7%&'7#73#?#?#?%57d!!"C!!"I"L ''' .:**;. ''' L!IG F#n''''QiILcESg+u?Wd Q vE 'v+"11;( o ƫ K#(h[6 C=!!k!!j!!k!!k! k!"Y!!l!"u]v""CC?!!VCCCC !""!!""!9 #'((J/7*::*7J(('" RSRTdCC''''Qh;<:H<MaCc)E+J&?Xd È vRF.'#+4 "!1;o t Ku &hP77 B-!!!!!!!!!!!!!!!!v^!!DE!!VCD)BC6 #'+/37;?CGKOSW\_cgjosw{73737#73?#73575#737#733575#735#735573'7'757575757353'73#77%#57#73#73#73#73#7&#7#7%&'7#73#?#?#?%57##5##5#2514#!"135!53&51463#3353353#213'!5735735#75Qi!!ۆ""6!0!c'ⅅy )^h[6 C=!!k!!j!!k!!k!  5!"Y!!l!"u]v""CC?!!VCCCC\d\?$#I!8r\\r8"J88b6*Qh;!qh!1{!_!Or!!'3343z *hP77 B-!!!!!!!!!!4!!!!!!v^!!DE!!VCD)BC OdCC! "<M# <~6B+o/d J@ @  Fv/7?hh)QiIL {CCCC?!!VCC""vu]!"!!DE!!v^!!!!!!4!!= !!2!!!=!! !!7 B hIR  ! [M4-*@1 $(,048<ADHMRZ`fkpw|7577#?#?#7##7%&'7#7##7##7##7##7##7'#577+755?'&'7&'&'775654'773&'73&'73&'736?353'3''?%'35'57=353573573573"13!2514#53&51463'#"&54632&546327&54632#"'21372CCCbCC?!!VCC""vu]!"!!DE!!v^!!!!!!!!!!!!!!!!7 BNh &K? : o1;M "+.'RF vd \Xu?&+s)EhMkHikjQhH #'((J/7*::*7J(('" ) !%)-159=AEIMQUY]aeimquy}!#77533#55#733#57 37'#'#'#'7#'73#%57 3377#735'35'35'3?'7357#?#73 35735735737/73#'#h A `v lG  Cp   r J  _: ;bU  a  8  :w c >fLIQiGGFGhP ( ˧`v m  C5  ^ [  1 f_ U)  bR  8{ y u &ȼ9fHikjQhHII.@8//@0#" ,*  #"Fv/7?=;:7643+ ;643+ :9A87@AC@>=BA98B#0/CBA@@Fv/7? " *#-MVSC"I!H*nH  $,`r!-.+ #1#5%I6o# 3(@<))@*'&$#  &$# (' (Fv/7?@J??@@:95-' <:96*(&$ >= 03=<>!Fv/7?;:3/+LKKL >==>;::; IHHI_^&%UTF('21"!65@[ZWVYX`_XW )aVML:9 TS32$'&-C(%1U1C1Fv/7?/<</<>@?;:54+)%$ 54%$"  ()! ;:.-,+0/1/.10-, =2"!87 )Fv/7?Iha@RX87>8Y254#"77'#75'67213!53&514635333"13!2514#d****}܅~"JI"!!"!!)* Q{# #Q 4"MR?!`   I.     3 #o6#" "2#  &.-!r`,$  HGrdmm ) GF cCK[g@y@nutkjed_^ZRPNA80" rmhZVKC86$" edkjqp_^ut,on2\yxKg\orqnmbapopFv/7?/4"MR?!E37a]\l<2   !OXG&Y; )90 2!$3n   "3 #o6#" "2#  &.-!r`,$  HGrdmm CCcCt*6@>77@843.-  ) %)#%.-436+10'Fv/7/54  F<754-$#(QKM98+;: ?>HO<;87$# 9O:9:Fv/7/=>??<%%&$$%32237610-,)( ;:  '&! +* '.-*)?<:9 >=21&% ;0/,+('Fv/7?#;:985432.-(' <;:987654321"  ('.-$#76<1 +*0%#"$Fv/7?/<<<<</<<hhC #s g%#00#%g " TBddBBC:F@MGG@H,DC>=651# DC>=865$" &,2:9A@/ )F;98:Fv/7?/< 8* *3/W  .1/ 7m" z$TF@CGG@H" F-$>(16 $/+: 4/6Fv/7?" /),HQB@>CC@DBA;B9&%# 50(= ,3,0Fv/7? 8 " z$0W .2 .7n!!SS3&*.z@2//@0)&  .-,+*)('&$#.+-,*'()('Fv/7? 4= f$'#u  !!SS3@5@ Fv/7?<"   - !!SS048@K99@:3,+'&$ 87654321+*#/.! ) 8576412*)321Fv/7?>@?8/-$ =<;:9876"+**+ ( 21=:<;967876Fv/7?Iha@RX87>8Y&'&'32?"#"'&32327654/&5&=4765!5! *6)!0T&*B+,)2 )  -."!% & "}!!SS .26@A77@81('%6543210/+*$  . ,+4*63542/010/Fv/7?<c`NdSIZY_TGFba,HFv/7?+15 ww 5HtXY+?Ew@1FF@G<1)#! / :9@3+Fv/7?F/4SI$ 4  V1  1$#92L82 #'/R2@SS@TQNM54! PJIF<982 JIIJ <;;<  9889GFFG  NM%$RQ*D'&10! 54.>(KJ87 QP21#&%,A'$0AR00Fv/7?`` cc [<<w-,,-lx 5N]"+* "]5 xXE@=FF@G=2*%!  ;:@,440Fv/7?#/*2,H ~@O@       Fv/7?40.#! thc^PMF@42%# &([Za`gfUTkj*ednmF]RehgdcXWfefFv/7?>@?854! =:71.-*)$<;<==:$$%##$:=:;;<2112540/,+(' 98  &%! &-,)(=:87 <;10%$ /.+*'&9Fv/7?Iha@RX87>8Y5##5##5#2514#!"135!53&5143#3353353#213'!wSZSBlB52gRRg25B22񗗗zZ<<w 5,5 w~~~~|vhD&Z b  h  h$< 8%(+/t236@9n<?r@~ABD EZFFIXIJKLNQRTW$XYLZ\]v^T_z`abcdfg>hNirjklmnppr:srtRvx^y{}}~* *B?ABMAAAcbbccccBcccBTgQQJOHX~{k !"$%')./012345679:;>?@ABCDEGINOPQRSTUVWYZ[bcdeijklmnopqrstuvw$$  !"#$%&'()*+,-./0123456789:;<=>?@ABVW`ZjX\ca]CDYEeFbdifghHGIKJL[MONPQSRTU,  %+/5:<?BDFTXbdftx  (.17<>ADFKV[dfkv ,6<>FLLNPPPbfttt  !"#$%&'()*+,-./0123456789:;<=>?@ABVW`ZjX\ca]CDYEeFbdifghHGIKJL[MONPQSRTU^_p                                                2MACR@  `uChess Lucena 7CHER00 _<[[kk=@ `pychess-0.12beta3/pieces/ttf/motif.ttf0000644000175000017470000006276012161415524017005 0ustar tamasuserspFFTM{dGDEF&d(OS/2B%x`cmap(pgaspdglyfVqm`YheadfV6hheaE4$hmtxneNlocaUnmaxpX namegQb(}post5Acvhea d$vmtxZ4e VRA._<+C C Dc! "H2 #D#UTDU##UNUN4DP|DG2ED.Rfxe\jN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a(<Th|>Vn|(Fb 0 n2X$4DNNxFB& (!""~""#H##$$^$$%\%&&J&' 'Z''(F(p() )4)**x*+&+t+,B,,72#"54  # !!#%3###UCDDCC!!!!ϋD #!5#5#5CDCD!333ϋDD!#3#3DD5!5!ZDD !5!3#5353$DCDD72#"54   #'+/37=57!5!'!5!5!'!5 73735373 #7#5#'#73YAfkAU}?DC2C"?A0Xg0hV4vB2d1T2@00Yf/kU/|D131"/1Z/h1gu4W3CfTA12 2#"&546~~2~~~~# 3!533#DCZDDU%3##UCghCC5!!h7#5#5gDChT!3ThD33DgUU533UgCUDhU!!hU#5353DgUhD #'+/37;@FKPW\2#"&546%######7 '#5#5#'#5#57&'3 5#5##7 &~~T2d1u240X0"2DU}fkY0) pl3t0v2~~~~zTfvZw"/31D1U/|f/k0Ym0mKu v1!!Yk%MY]u -19I\nr7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&7676767601>776363"%436'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&'&5&'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'0&5#"'&54763272#"'&5476"327654'&                     @  &    +d    A  )    -$ 9 DZ# !$$% 1.&,! "   " >DZ)(A\*q112 " 1.   %'(6%    >  % '3    # tEM  6  2vEN 6 2U ! :-6G2L6K'*"J-!*#>>;@.>:>>>xB//BxD??;#8FX5%++*5MS2"")&>>>(NO0/ &&e<4>>49lxA;/64RQQWh{=- ?&&47KK<<,,;"%68!!!!89""#!47"3463"#qO8CϢp7PDC  %).26:>DINSZ_cgko&'3 #7#7&'#7&'#7&'#76'#?5##75&'3' #5 #65#'#5#57!&'&547654'&54632&'&547654&#")654''1&7!!7 WTs0c $ۇ2 132( 4U0X02 08 K0:EC2$VDU}fkY*-=po<-)4#cEFb#476(89(2 XU采1!0ȇ 2ۇ11  35U4Z 1 w%/cL H1ZBID1U/|f/k0Y7-fi-83AKkkKB28if-72p;- '77'!-;p28cdbe:)(8#33&%33"&#ˠqUDC8OrDDO5265##525qO8Dϡr9ODD !'+07<BGLPTX\`dhlptx|&'3#7&'&'76?75.'3%&'735&'73&'6753!'#5#57#7'# #?5#7##7##7'#?!!#5#"514;54312321+654&#"321#"&'#"51432654&#"!67&#" !&54632632632,X 0 c3jM&  00Ne2q R. ,%1U}fkYX004F2ވ1߈2̝0GHg1441434334l::x9:v::2g9gHXUIcLH#Y.0J2Z1Sfj3 1A/1 eq S -$1 U/|f/k0YZZ34͉Xf44233244m80qqr34hUUh43rqq72 U54mB@BOOݜ> #'+05;@GLPVZ^chmrx%#7#7!#7!#7%5#7%##757!5!'35&'67&'735&'73%.'35%7'6?'&'7&'#7&'3676'5&&'&'&1#"1326732514#"&54 !&54632632632#5#"514;54312321+!!ݝ02C1@2Y4"0X0YAfkAU},%1 ? R.1e20%  0^c3j  0X+#8 88"a99`%79 :%::v99x::H g1441434334HF34Zw0Yf/kU/| #-$1 S 0 e1A/ 1fj3|1o2.0 #Yc 31 8SR9 32 Zr34hUUh43rB@BOOݜ>f44233244͋`rz~!&7$''&#&'.'.'.5>7>7>767&6'&'.'66'.'666/4+"7"3254!!&'3 #7# &'#7&7#7&'7#7&'7#7%##7"5&'3'&'735&'735&'73!'#5#577   )  ( 2 T)HpA[n. - (33< W Rl$ C76xe[;++( ;^^^n  E*0 _ۇ2S124"0X0D# 0002  3 1U}fkYD  "+  1D1( 8@*"%N8 $gnFM%E0@ADO*')Q&1 )"#,# 2*6Hhr.880LA(''(NOON] F/g ]0ȇ!2ۇh" 1퇇h%3Z1}2  /!-'1V 1U/|f/k0Y4 !&*/37;@EKPUZ`eimquyO&'3 #7# &'#7&7#7&'7#7&'7#7%##7"5&'3'&'735&'735&'73!'#5#577!!2#"54%!&7$''&#&'.'.'.5>7>7>767&6'&'.'66'.'66&#"'.'&'.'&"#.'327>7>326/4312!&547654'&'&547654'&'&7&'&'&'&'&'.'&@  E*0 _ۇ2S124"0X0D# 0002  3 1U}fkYOnUUU.   )  ( 2 T)HpA[n. - (33< W Rl$ C76xe[:3M3SB/'. H  :?  !#1'1'18Tv34I!$)l{   , +  ( F/g ]0ȇ!2ۇh" 1퇇h%3Z1}2  /!-'1V 1U/|f/k0Y41GHHG  "+  1D1( 8@*"%N8 $gnFM%E0@ADO*')Q&1 )"#,# 2*65  /G*  -5G:)-#:@+( 1N1$ sK,33*lXYH5rrDfHH" Vܝ0 7܈2 12 $4"0X0|0aH0m 2DU}fkY#@2rrDfC;S U eFHd(D H('0  U 60ȇo2ۇ 1퇇V2334Z41 s "0b/l31D1U/|f/k0YVϏ#@2BFJNRVZ^bfjnr'.53#7?77 '3  '7'37'7'35'3!'#5#57#7'# #?5#7##7##7'#7'!#"' #"!!2#"&546%327'%6!&76767663276327' @q(Z*#~10GAT(z02 TR1U}fkYX004F2ވ1߈2̝0W#@D~<;~EQH!11!"00!4w6J8#1"o  &A&rY0?O2N*1O31 3/ATX!zO17:$1!SU/|f/k0YZZ34=`-s,tzdGHccHGd+ ^1 @D@ /1)O%')1 ( !'H]aeimquy}#"514;54312321+#1"53'#772+)6'#"54;35335!5#3)5&7535!!57!5#73 '%#73 5 #73 5#7367#73 5 #7'#5#75#7 &#7 &#7 &#7'#7 53!""!$#""""#$$·DDgXVUWgDDcggYUVX2YAfk//V11V22*]00 9f10hUX00U4V2~c1~E2`0BTU9_""G$$G""A##DU~~CCšS;C"DdddddhhdޥAd50Yf/k/U1V) 1-*:/Wg1UZy4U42V31I2Dp0V 69!#4#4#52ʡqCD8OpCDP <BHLPTX\`dhmqvz~72+)6'#"54;35335312=32514+54#1"#"13#73'!!57!5#73 '%#73 5 #73 5#7367#73 5 #7'#5#75#7 &#7 &#7 &#7'#7 53DDgXVUWgDDc$#""""#$!""E· 2YAfk//V11V22*]00 9f10hUX00U4V2~c1~E2`0BTU91CCšS;C"Ddddd-A##A""G$$G""\DU~~ߋ50Yf/k/U1V) 1-*:/Wg1UZy4U42V31I2Dp0V 69*.49=BFKOTX]aeimsx})&'&547654'&5463217!!&'3 #7#7&'#7&'#7&'#76'#?5##75&'3' #5 #65#'#5#57u-)*-=po<='(97)2 WTs0c $ۇ2 132( 4U0X02 08 K0:EC2$VDU}fkYQif-77-fi-83AKkkKB2d:'(9sS XU采1!0ȇ 2ۇ11  35U4Z 1 w%/cL H1ZBID1U/|f/k0Y  #'+/37;?CGKOSW[_ejrx%#7#7!#7!#7%5#7%##757!5!' '35'3'7'3'7  '3 77'?'#7'.53327'%6!&76767663276327'"32654&!!ݝ02C1@2Y4"0X0YAfkAU}R1 21Lz0QT(A[10*(Z@ !5'{@6J8#$:"00"!11HF34Zw0Yf/kU/|S$1sc:19!zOTX /AJ 31O37N*1dO2&rY0&&A  K,R1 @D@ /1)O%')10 dGHccHGdz%/37;?DIMQUY]aeinsw{ 1' '1&7 &716 617&'1.'3#7'3'#'#&'73 ###75'3 7#5 #5#'#5#579IIIIIIII7IIII97IJHH8'02w!#1 B240X00pvv0 2&DU}fkYIIII9IIII89HJII8GGJH 20Ov2A %13CuZ1/vwd 1%D1U/|f/k0YU%"#463CgcGCCEfN!GK!&'&547654'&54632&'&547654&#")654''1&7!!*-=po<-)4#cEFb#476(89(27-fi-83AKkkKB28if-72p;- '77'!-;p28cdbe:)(8UU"&53GcgheGDU253#DgeFDGe*VDLa!!#5#"514;54312321+654&#"321#"&'#"51432654&#"!67&#" !&54632632632$Hg1441434334l::x9:v::2g9gHXUIcLHVXf44233244m80qqr34hUUh43rqq72 U54mB@BOOݜ>*V0`!!#5#"514;54312321+ !&54632632632676'5&&'&'&1#"1326732514#"&54$Hg1441434334H#8 88"a99`%79 :%::v99x::VXf44233244SB@BOOݜ>( 31 8SR9 32 Zr34hUUh43r , ~!!"32546/4+"7!&7$''&#&'.'.'.5>7>7>767&6'&'.'66'.'66`nI^^]k;++( f   )  ( 2 T)HpA[n. - (33< W Rl$ C76xe[VNOONjhr.880LA(''(  "+  1D1( 8@*"%N8 $gnFM%E0@ADO*')Q&1 )"#,# 2*6 ,l&#"'.'&'.'&"#.'327>7>326/4312!&547654'&'&547654'&'&7&'&'&'&'&'.'&7!&7$''&#&'.'.'.5>7>7>767&6'&'.'66'.'662#"54!!:3M3SB/'. H  :?  !#1'1'18Tv34I!$)l{   , +  '   )  ( 2 T)HpA[n. - (33< W Rl$ C76xe[bUUU1n5  /G*  -5G:)-#:@+( 1N1$ sK,33*lXYH5rrDfVϏ#@2rrDfHHny1 38%,,'/+2w׏#@2`-s,szeGGddGGe, ^2 ?C? 1/'N&''0 (D`l.'&'&327>7>326/4312!>5&'&'&'.'.'.'&'.''"'.#"'&'.'&'&!&7$''&#&'.'.'.5>7>7>767>7>7676&'.'&'&76767676&7>767632#"54!!    $ (  ??  !#1(1'29Sv34I!$)k $!# % - (   {`S*HpA[n. . '33<  <       %      .*=601 UUU1` -+ "! #0')-AA+) 0O0$ sK+44)mXXI5= /!376?!5?6767654'&#"'7676763Thc9&Cmc8"*%/Jy; ?!/42a>>i;6S< tiA-8.0?R1; \6?C^nF8V<?!36767632#74763232767&'&'#56765&'&#"'ThB?"$(I3AKP"%h] ,B.(?4i")%:=,( M- &0Q`:'4;QRKJ  4.JW9-5_8$"#D !333##5!55!3Thq9}}i.`n"!3!!5#"'&5472327654%'ThE61-,f`7)=;A++G0)Djb:[W /5(B8L2 %6!3632#"'&547676767774'&#"ThZFL4:s!*-P@\)C<@FM-#)8: %B ,L5?0*0A,7R s\;1- Dr-&VL"%<W@T!3!#5#'Th>U,:*. +<M!3&'&547632#'"'&5476?##327654'&/3767654'&#"Th2D>e_;JG !.-!# KFjdBNc +)K25E>$#A +'%;9$'k#8Ma:5*4VW="!%'.#)l:55?^&&K:!?]E34$#>D=!#%4$2-huI<(?(& @ -3-&  ><%$;.!#)(08V&'"!3!!632#"'&/'&'5732767654'&#:P%##(-6Q4614/6#>?* *OVh<)3E@jKZ" *9Z +-"=J]E]N"$7!!#"'&'&5476325'&'#573754'&'&#"6^>KS@'AMs@0 5  !%8" )gAh0C&,^;<"$ Y=8@=YwE>S"3!!6765'&'5776323!5676=4'&#!49"EHk  ;< L/)% 5h8-(9!?a&'B$" 8-U#&<.!3333!527654/&#"5ϋDM?A -,>= R3!33376?!5?6767654'&#"'7676763ϋD9&Cmc*1*%/Jy: ?!/42a>>i;6S< ti/?:,0?R1; \6?C^nF8V<C!3336767632#74763232767&'&'#56765&'&#"'ϋD?"$(I3AKP"%h] ,B.(?4i")%:<-( L. &/R`:'4;QRKJ  4.JW9-4`8$"#D f !3335!3733##5!5ϋD.9}}i`nx&!333!!5#"'&5472327654%'ϋD{E61-,f`7)=;A-)G0)Djb:[W /5(B8L2 e:!333774'&#"'632#"'&547676767ϋD2 %C ,L53ZFL4:s!).P@\)C<@FM-#)89-&WK!&<Z=T0*0A,7R s\;1- D\!333!#5#'ϋDU,:*. )Q!3333767654'&#"#327654'&/&'&547632#'"'&5476?#ϋD*&%<9$'k)K25E>$#A 2D>e_D=o#9La:5*4VW="!%'.#)l:55?^&&K:@K5!5!54'&'&#"'&54767632327#/#"'&547676?32?9 GK9 $.(,(&M  ;KD=#$$9dF>$2-yDDY I=(?(& @ -2.&  ><%$;.!#)(08V&(/3732767654'&#7632#"'&/'&'575!5!#>?* *OV:P%##(-5R4614/6_- +-#=J]E]N<)3E@jKX$ *9KZDD*.2#"'&'&'&567672#"'&'&#"32?5!5! #*.&1;),! FKS@'AMs@0 5  O!)#*'8GKAy 0C&,=G~^o% ):., 9OZDD &*.'&'&#"#"'&5476763!3?5!5!Z ,5!! XqB79ZO0fg 3-*+/(hy]mL6P;9(*@S"$ X=85(544  _A2*<%<'!'%%#,>^;<ZDD/376765'&'5776323!5676=4'&#!5!5!49"EHk  ;< L/)% 5/8-(9 ?a&'B$#9-U#&<OZDD".!!#"'&'&'&567672#"'&'&#"32? #*.&1;),! F=uD5F68 $I* bDh.*/&/<37WM'<5J' J4[<.Q 7 W {     ' ? c  Chess MotifChess MotifRegularRegularChess MotifChess MotifChess MotifChess MotifVersion 1.0 Version 1.0 ChessMotifChessMotifc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph69 bɉo1C 2VV,,C22CxfPpychess-0.12beta3/pieces/ttf/condal.ttf0000644000175000017470000010523012161415524017115 0ustar tamasuserspFFTM}-GDEF&`(OS/2B%x`cmap(pgaspXglyfVy`~dheadi 6hheaA4$hmtxvNloca: \<maxpX name7<%post5@Pvhea $vmtx`V8$6_<+CC Dc3 "H3 gh gx{ yggxxnn{{AA4UqBGEEE(fcafggnjN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a(<Tj~<Tlz F b ~ j0 !!""""$P%':())*+"+2+-6.R.0$1J24D45&5J5566h67 77888899t99: ::;;;<><==T=>>6>>?2 72#"54g %3##!##x gd##5!!!!dw 7#5#5#5#5g #dfh!3!3{c 3#3#3ddf5!5!yddf #5353!5353 ggyd$e 72#"54 !%)-159=52"333333 573#7%333333""8Lg|rM3"333/4Db4jt4X3  4'483M3g4}43M4Z+LD\`kxV12 2#"&546~~2~~~~gf 53333xg hy$dx%3##x gd##5!!d7#5#5g #d{!3{c 33 dyy533yg y$dy!!dy#5353 gyd$ $)-159=AEJOU[2#"&546 33333%&&'3#7573 !!!! # 5"5 6#~~3t4Xb4j4D3/n33M3|gL8X#h3{_ " 2~~~~qxVJ`k D+o44#3M44}3g3M48 jF4a !!Yk%MY]u -19I\nr7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&7676767601>776363"%436'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&'&5&'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'0&5#"'&54763272#"'&5476"327654'&                     @  &    ,d    A  *    -$ 9 DZ& !%% &  1.&*  "   " >DZ)(A\*q112 " 1-   %''5%    >  % '3   # tEM!  6  2vEN 6 2U ! :-6G2L6K'*"J-!*#>>;@.>:>>>xB//BxD??;#8FX5%++*5MS2"")&>>>(NO0/ &&>49lxA:064RQQWh{=- ?'&47KK<<,,:=MJ7446IS9:=#%68 "" 89"#g!4677#46gc!fObf!7R# [c "&-159=BHMRY^chmrx~'7"3254&547' 63 327"&54767676'6'.6&'.6&'&6&'&.&#"327&'&7676"3254%7654!"'#"&5463267666632#"&547&'&5476'&$632#"'7676767654'&' 6760'&.'"&'73 5&'73 35&'735&'735&'&'73#7573 !'67#&'7&'7#.'76?67#6'73#&' 3&&'2V,+5MML$$'QQ:! 7Oe#B'(V>5f,M7{V78HSgg;  %gLCCD5:ih/=2&(+GddG:/.<^C>Sd7ALa'IE@ H"# R8OnFUx $fnZ]K6! V('B&,/ < 6Tgg+/[DDDDO>p{Lgn cGFe% $! 7%IBBL&_aNO8Tlj0* J]GclVb,?V<'&'&&'&'.6776126321467>%.67&6'&'.7676&766&66&'&&6'&'&67676&766&! '&547&547&547&'.767667>&! ! 2654&#"&#"75'37'&767654'654'&! $! 654&2"5&'#&'7#6?3#&'>7#6767#! 573#7&'357#73&'7553 33 &'35NnnNMnn(M3+RTfpSTofTS*3NlO1 #1Nm +GQE3C2  & ; > #=' BIZ2ERFjMHB '= = : $  ;)*(cc(**U8!2jfxtYXuxgi3 8T0EE01EEc\\ {]]" -@-.@* AC &"D .3v  4r 44mB*4rM3"33 OL3 4 #4Db4jt4XV3 mNMooMNm oHc00@H4==4H@00cHoT2}hi~2UD" ID =& ;! : = =(#8 '" 8"(= > ;  &= BH A)9=& ;)kLLk): &=<'yZ<;NOON;<Zy<))9GE00FF00E- zz[[z2 C2GH1C!0??fu /4, 4)33$'+A4G 43M4A 4E6M  ?  3"3`kxVA W4 5' Sbl!&+16;@FKPTX\afkqw|254#"'7"3254"&54632! '&547&547&547&'.767667>&#"75'37'7$! 6! 6&767>'&'&6'&&6&#"6&7676&'&'&6'&&676! 76'&%&'.'.>77632672067>>'.'&7'654/%254#"&2"5&'#&'7#6?3#&'>7#6767#! 573#7&'357#73&'7553 33 &'3536669986NnnNMnne)*(cc(**U8!2jfxtYXuxgi3 8To\\ {]]QP  $ ; = $;'  BHIA  '= = ; %  "@3 20(/ 1F Q-RK*FE#cS< #)q)*# & 9 : > =(#7!!8#(= = :  &= DI #! 65""]'#Td0IK6<9n (?'`KL`&@ n9<5JI1dT!* [ \.5665u /4, 4)33$'+A4G 43M4A 4E6M  ?  3"3`kxVA W4 5&#(-27=BGLRW_dhlqv{$+4>IUa654'665&67327436%&'267"5&'#&'27#.'767#6'763#.'7#4656?#573#7&'375&'735&'73 67633 &'35'"'&'276"3254676'&%676'&&'&676767676767&76767672636&'&%&'7676'''&76'%676&6'#"''3267&&'76&'&'''76&'&''`b "  z &3 #4^ %!4}m54>E4(3M3"3 T3S3e @ 4jb4jt4X3    73A776*-N))X)+5!# %'3AC9{# +4 8/)1% @z' ]u+3+'V,D $9 !gfA\"B0T #'zh?  );9!!&I$H'+J4ArFA'%*MD%!  7$#8R Y y4B>34  3 -l3jP  ?4yC(43M4:U4@3 3j 1`kxV 5K4####5??J456.)>\l +6S5/A1' '119&u,1g3P_R<6YTO5f$7hOE/ F$ 7 "("N+< #"2T>%]Ha Y HV T51%]AFqB' @&)4>LU]dn #).38>CKPTX]bglqx|673254'665&76&'&''76&'&''3267&&'6'#"'27>'&'7676&2#"5476'%&'&'6&'&676767676767&76767672636&'&%&'7676'''&776767767676&'#&'&7676&'267"5&'#&'27#.'767#6'763#.'7#4656?#573#7&'375&'735&'73 67633 &'35H/VXArFA'%*MD$H'+J4x!!&v  );b3 <+#'zh221T  3AC9{# +4 8/)1% @z' ]u+3+'V,D $9 !gfA\"B0g2 @l$h4_k}""E(TÈIEcWŶY<85{/3(* h)&6Xl) "  z &3 #4^ %!4}m54>E4(3M3"3 T3S3e @ 4jb4jt4X3  .  1 !2AFqB' @[HV T51%]?]Ha Y2T>%_WG# #" ("N+H   >\l +6S5/A1' '119&u,1g3P_R<6YTO5f$7hOE/ F$ 7 "F*b *K2;o//T@[pHuW9SF|1aHiB3 ^K?-NvR Y y4B>34  3 -l3jP  ?4yC(43M4:U4@3 3j 1`kxV 5*/48<@EJQVZ^bfkrw|!567.54765#56767&54632#35&'3 333 73 65&'3#7573 !&'&'67&'&'.'3&'2"5%#7##7+3VWReUAZD)*Y@?Y)&H\>Xfu "3t4Xb4j4D&"3{772!R 33M3| H' 3F"}44346yDD|3*bgPsEP/%H->?YY?Xf@xySh"3  H'H|rM3"3 3V72!RL7&"3/4Db4jt4X "3~4434dSqqSd U.&&-;UVVU6yDD|3*bgPsEP/%H->?YY?2FF21FF14442FF21FF1444Nb~a&%YY%& b4jz NF2wF12FD4444DF21FF12FD44447F20GG02FD4444DF20GG02FD4444B##8#&;) <(kLLk(< '<#xM8)p&.D"D1GH3C D/-.F20GG02FD4334T:j:P&64  4-d bc )2Q'ݦ.&/@zD[0$ ߴD 3]63 4}43M44<3)3)`kȖ#y*5 -=MRV\`eimrv{4&#!"!21!5147&51463'3353353!75#!5+!5# "13!2514+72'?"5'37#'7#&'3#&'3#%5#! 573#7?35#735#7353 #735%735F162EC1G(KL(F1E̫3wC34Dw3P733446"|jm3  U44 34- 54'34rM3"3!3[A23 ,44$ b4j34 v330GG0w2F15$;\]9#71Feffff"HggggHC3443g2-J!"l S.l4ݶ/V4 3ޑ35443M44:473W4!3)`k2;5!#4&'52#4'bg8Oe"bR7!% $(,DHLQ^cgmqvz~!!&#!"21!5147&514637!35%#53'!5!/5#!5##7'33533537!?!)!"13!2514#72'?"5'37#'7#&'3#&'3#%5#! 573#7?35#735#7353 #735%735UUe6fX 1G(KL(F1 ZDT|6cDCa ̫ΫX 4 {w43w3344"|jm3  U44 34- 54'34rM3"3!3[A23 ,44$ b4j34 v333[[тF15$;\]9#71FDDDeffffe~H.//.l2-J!"l S.l4ݶ/V4 3ޑ35443M44:473W4!3)`k2;5( $(-18<@DHMSX]dinsx}AP^lz.'"&'7355&'73 35&'735&'735&'&'73#7573 !'67#&'7&'7#.'76?67#6'73#&'"5&'27'7%52#5254"' 63&732654&#"'6760'�'&%6'&327"&547676767'&"3254%7654!"'#"&5463267666632#"&5477>7'&'&7'&'&7'&'&#"&'&76'&7.'&76'&d  t30 k04Xb4j+ /493h33M3|)4 c ] z 4  |%4:"3$ `P"V+,\+K+FM)3TyyT51:Rji~ 7n/$ ˉTR}X8c19td,$"Q:! 7O|Z44Y J)4CCD5:ih/=2&(+GddG:/.<^C>Sd7ALa'IE@ H"# R8OnFUx 5C +E(Q1+&-D! =%H=#=> ! :66. '   ")}uM5n2:0`kE +3N03X :h44#3M44}i d ]z3Y  } 3 4 4 sP0`00EV<p{Lgn cGFe% $! 7%IBBL&_aNO8Tlj0*  & * ,+Z- 5#1831 5:.#JL!=,8N 3#37;AEIU{ +17;AHMQUY]bfjnrvz76'&! 76! &76254'7'67&$#">327/' 632'6'6"&54632! '&547&547&547%"&54632!"&54632"&54632!"&54327%76'&70327&'7654'7'&'365<575 #:324654'2'7%#654&577&#"#73<54'3'"5%#%#73#654'67#!3 573#75'7753'75. ,..52K LJ >e]>@ooA=Xon)2 `Kll$H6` 8*2FF21FFT&%YY%& b4jz   DD  ?| ..0-D"0JI1!Dq.. Ư '  F20GG02F#&;) <(kLLk(< '<#xM8)prF20GG02FF20GG02F{F21FF12FF2wF12F]EDD /0 /.r&64  4-d bc )2Q'ݦ.&/@zD[0$ ߴD 3]63 4}43M44<3)3)`kȖ#y*5#'+/37;?CGKOSW[_cgkt} 1' '1&7 &716 61%#%333 #5'35#7573 !!#'#' 37'1"5&9&'29IIIIIIII7IIII97IJHH3wt4Xb4j4D333M3|g44 3  "IIII9IIII89HJII8GGJH@5xVJ`k D304ȑ4#3M44}3g3P4S4K  x!467xO8 7Ogk [c'7"3254&547' 63 327"&54767676'6'.6&'.6&'&6&'&.&#"327&'&7676"3254%7654!"'#"&5463267666632#"&547&'&5476'&$632#"'7676767654'&' 6760'&V,+5MML$$'QQ:! 7Oe#B'(V>5f,M7{V78HSgg;  %gLCCD5:ih/=2&(+GddG:/.<^C>Sd7ALa'IE@ H"# R8OnFUx $fnZ]K6! V('B&,/ < 6Tgg+/[DDDDO>p{Lgn cGFe% $! 7%IBBL&_aNO8Tlj0* J]GclVb,?V<'&'&&'&'.6776126321467>%.67&6'&'.7676&766&66&'&&6'&'&67676&766&! '&547&547&547&'.767667>&! ! 2654&#"&#"75'37'&767654'654'&! $! 654NnnNMnn(M3+RTfpSTofTS*3NlO1 #1Nm +GQE3C2  & ; > #=' BIZ2ERFjMHB '= = : $  ;)*(cc(**U8!2jfxtYXuxgi3 8T0EE01EEc\\ {]]" -@-.@* AC mNMooMNm oHc00@H4==4H@00cHoT2}hi~2UD" ID =& ;! : = =(#8 '" 8"(= > ;  &= BH A)9=& ;)kLLk): &=<'yZ<;NOON;<Zy<))9GE00FF00E- zz[[z2 C2GH1C!0?? H Sbl254#"'7"3254"&54632! '&547&547&547&'.767667>&#"75'37'7$! 6! 6&767>'&'&6'&&6&#"6&7676&'&'&6'&&676! 76'&%&'.'.>77632672067>>'.'&7'654/%254#"36669986NnnNMnne)*(cc(**U8!2jfxtYXuxgi3 8To\\ {]]QP  $ ; = $;'  BHIA  '= = ; %  "@3 20(/ 1F Q-RK*FE#cS< #)q)*# & 9 : > =(#7!!8#(= = :  &= DI #! 65""]'#Td0IK6<9n (?'`KL`&@ n9<5JI1dT!* [ \.5665 n3)4>GN673254'665&76&'&''76&'&''3267&&'6'#"'676&76'&'&676767676767&76767672636&'&%&'7676'''&676'&676'&'"3254'"'&'276-3`bArFA'%*MD$H'+J4x!!&v  );#'zhT 3AC9{# +4 8/)1% @z' ]u+3+'V,D $9 !gfA\"B0*5!# %'Z-N))X)+3776   733  7$#8AFqB' @[HV T51%]?]Ha Y2T>% #"m("N+>\l +6S5/A1' '119&u,1g3P_R<6YTO5f$7hOE/ F$ 7 "?J456.)5?####K n3)4>LU]dn&'&76&#"'76&'&''76&'&''3267&&'6'#"'27>'&'7676&2#"5476'%&'&'6&'&676767676767&76767672636&'&%&'7676'''&776767767676&'#&'&7676HXV/ArFA'%*MD$H'+J4x!!&v  );b3 <+#'zh221T  3AC9{# +4 8/)1% @z' ]u+3+'V,D $9 !gfA\"B0g2 @l$h4_k}""E(TÈIEcWŶY<85{/3(* h)&6Xl) 2! 1  .AFqB' @[HV T51%]?]Ha Y2T>%_WG# #" ("N+H   >\l +6S5/A1' '119&u,1g3P_R<6YTO5f$7hOE/ F$ 7 "F*b *K2;o//T@[pHuW9SF|1aHiB3 ^K?-N{*!567.54765#56767&54632#VWReUAZD)*Y@?Y)&H\>Xf6yDD|3*bgPsEP/%H->?YY?Xf@xydSqqSd U.&&-;UVVU6yDD|3*bgPsEP/%H->?YY?2FF21FF14442FF21FF1444Nb~a&%YY%&7'&'&7654!"'#"&5463267666632#"&547"3254767'&6'&327"&547676%7'7732654&#"'6760'�'&# 632#"'7"3254n  ") :66. '  %H=#=> !Q1+&-D! 5C +E5:ih/=2&(+GddG:/.<^C>Sd7ALa'IE@ H"# R8OnFUx CCDZ44Y J)4$"Q:! 7O4V+,m)3TyyT51:Rji~ 7n/$ ˉTR}X8c19td,K+Fp{Lgn cGFe% $! 7%IBBL&_aNO8Tlj0*JCDDCC2Y[5 :>< 9,3NnN9 `00wUTxB/pdZo,5V8+N 7S("K:4RL3}6V<327/' 632'6'6"&54632! '&547&547&547%"&54632!"&54632"&54632!"&54327%76'&. ,..52K LJ >e]>@ooA=Xon)2 `Kll$H6` 8*2FF21FFT&%YY%&'&'&&'&'.67761:327467>%.67&6'&'&7676&7>6&66&'&&6'&'&7676&766&! '&547&547&547&'.767667>&! ! 2654&#"&#"75'37'&747654'254'&!"36! 654sJhhJIii J1'PQ`kN NkaPQ&1JzgK. .Jhy]CMB01>  #;# 8 ; :%7 >EU0BNDiFE> ":$9" ; 7 " 8'('^]''' Q40darqQRqrbd/3Q.BB./AA_XXuXX +=+s,=( 88HmNMnnMNm nHc00@H9G)J@00cHnT3~gi}3T@" HD "<& ; > #;("8! (#!7#):% > : !: &> CI A)9;) ;(jKKi*: (<:) xZ}>;NQQN;>}Zx A)*8FE10FF01E.yz\\z 3 D0G'!1D /??BSd #/7CKU{"54632'254#""54632'254#"%"&54632'254#""&54632'254#".#"32! '&547&547&547654'3254'254'&! 3327>32"&54632'254#"#"/#"' #"/#"/6! qB/.Cq111`qB/.Cq111/BB/.CC.111\/BB/.BB.111J]wx[u#"TT"# *>¾>*$ 77&(76%iv0AA0-CC-001`L8 j"#k 6MC@w1GG1wC4444Cw1GG1wC44447F21GG12FD4444DF21GG12FD4444C"#8$%=';(iKKi*:);!yN7*p%.C!D0GH1D!D...F21GG12FD4444T:k:P G ww)4>MV^eo&'&76&#"'76&'&''76&'&''3267&&'6'#"'27>'.'07676&2#"5476'%&'&'6&'&6767676767>7&767676726363&'&%&'7676'''&776767767676&'#&'&7676!XX.@rFA'%*MB$H'+J9s!!&w !(-p3<+#'zh221S 3AC9{# +5 8/ (2% @z']u-1,&V,D $; ehB[B0h1 Bj) j2_k}""E(TQ=bWĶY<85{/3(  h)'6Wl)M2!!3 . AFqB& ?ZHV T51%eH]Ha X2S=( \W F$ #" !! (#L)G   >\l +6R.6;7' $219't,0i4N_R<6N^P5e$9fPC / E$ 7 !G)b +J2;o//T@YrJqV: TE{1`FjD1  ]K?-NE  (R%6767654'&' 6760#'"%&'&5476'&$632#"'7677654!"'#"&5463267666632#"&547"325463 327"&54767676'6'.6&'.6&'&4&'&.&#"327&'&7676&547' "3254F:`38sd0$Lu*7Tji 7q,!͆SS}6#fnZ\H8 5;ih/<3)(,GccG;//;^C@Qd6ALc%KCB F%!R7PnGUx DDC~}'PQ:" 8Nd!B'(V ?4h*L8{V78IUgg< %gL##:LLM N84RM2W0@1pdZo.3V8.K 7S'!} I]GclVc)AV<o{LgmcGFe% $! 8&HBCK&_aNŷP7 Tlj0*6CDDC+.1NnN9 9V4> U)'B&,0 < 5Tgg+/)67(MLLMEh -=M%4&#!"1!21!5147&51463'3353353!75#!5+!5#!#"13!2514#EG062EC1F'KL(F1E̫3wC34Dw3P7334461GG1x3G14%9]\9$61Gfffff"GhhhhGD4444EO"#NS#32654'&#"'!&'&"3254!567.54765#56767&54632#&#"wmiqqim2U4*6-2VgUUVJTYRdU@[E(*Y??Z*(F]>Vf@xwdSrrSd V-**-;UUUU6yCC~1*cgPtDQ/&F->?ZZ?=.H$2LFvOfaۈ(!3#52676767673{c DF 0D)!3676767654'&'"#4767632!{c55ee'%%$>Y86T;12 /.\[+-}wBA98D>#"A<7$#01JU2100 =NE!3654'&+5327654'&'&#"#4767632#&'&'3676{c_20QG$%$)U33JB00]B89Rf>?\&%;..PMH1# !"*;63 &()69C*/1!31<&&  !3 33##5!73{cEHccUQ=NN=2!33327674'&#"'!!67632"'&'&'&{c\ 7+*,,B*&$L4o%$+*-,89T6'+"cw)(CU,*tV *(0H78"$ #%:N!3676767672#&'&#"6763#"'&'&'&546546327654'&#"{c53Y200V 5+$&+)@<5431B832!$d$#'/,+)*90!"8?4<<,*),87;?[) 23?;89!"():=H t," (&MQ%'#$!3676767!5!{c;767442))#"#|{RP>UL=:::A_at-?O!3#"'&'&'&547&54767632"3254'&'27654'&#"{c>""*,.+.+', qY0/NH21/  !!8)(D9""E@%$. /001((  "-/({2$e++-(+""!C##N 3( "#)08I!!676767676767654'"#476763267#"'"'&'&'6%676765 (#J %&ysR/.C31.*JIr.&([ %7$8 T!)(d)  Xg-('0 ?KO"!%   )K%+!!#367632#"'#%4#"3276nRVD1244Sb.; --6E#$d@)"!;:LI@D+,Q##161]()67 .!!#5#"'&'&54767632327654#"N Q232/C;#"$"F6+-Yd 5I ,+CCGK;:""$ ;[67)(];;-8!!3#"'&'&5476767632!327676%!&'&#"Y)#9<.21("---&"#)'%K'!""I) d ), +EeB=8)# $QuT+,B-,&%!!#53567632#"3#HH27!XXd0FSFP !EF=0H!!67676763253#"'&'&53276=#"'&'&'&76367654'&'&#  *+4*"!VCDb)..#"U! />--C[+$$]% 6$%!!)!d;B<9%'!<8: %$A"%%QD'!41QJ13 96Z=)*%+!!#4'&#"#36767632U<@+,UU# ),-(dV9*+Y( *'!333#52676767673hgc DF 0Df-!333676767654'&'"#4767632!hgc55ea+%%$>Y86T;12 /.\[+-}wBA95!D>#"A<7$#01JU2100 =NcI!333654'&+5327654'&'&#"#4767632#&'&'3676hgc 20QG$%$)T33JB00]B89Rf>?\&%;..PMH1# !"*>33 &()69C*/1!31<&&  a !3333 33##5!hgcEHccU==Nf6!3333327674'&#"'!!67632"'&'&'&hgc\7+*,,B*&%M4o%$+*-,89S7'+"cw)(CU,*tV *(0H78"$ #%gR!333327654'&#"'676767672#&'&#"6763#"'&'&'&546546hgc%#'/-*)):0!"d53Y200V 5+#'+)@;7431A932!$y-! ('LQ%'#'E8?4<<,*),8659!"():=H g!333676767!5!hgc767442))#"#|{RP>UL=:::A_atn)S!33327654'&#""3254'&7#"'&'&'&547&54767632hgcw9""E@$$8/  ! 8)(>"")-.+.+', pY0/NH21C 3( "!+0N""!C##. /001((  "-+,{2$e++-(+lM5!5!676765676767676767654'"#4767632363#"'"'&'&'6g %7$6! T"(%'&G %&yrR.-D31, ,KHs.&)ydd"   *K $!(   Xg-()0 ?JN!#$l/5!5!4#"3276#367632#"'#: --6E#$RV%$6B3142Uc-ydd##170\*)76(" =9LHBC+,Pl35!5!6767672#&'&#327673#"'&'&'&56( 22B-/)! S!!6''81$%U.0;!"&$$yddGB74)+G7 ],,"!8>-- 89P0l25!5!327654#"#5##"'&'&54767632v$#E4--XnN  S0311A;#"yddZ77)(^;;v5I +-BBHK:;""$ l<5!5!!&'&#"3#"'&'&5476767632!327676s!"#H) !Y* 9;/21'"-*0%##)'%K&yddDC-,#%*+ +EeB>8)" %RuR-,l5!5!#53567632#"3#HH17!XXyddFREQ EF=L5!5!6367654'&'&#67676763253#"'&'&533276=#"'&'&'&~$ 5%%!!)$] ,+4($#VCBd'0/""U!!.@+-DZ('&ydd%J01:8X>()$+EB<6(%;:9 &#B"%%QD$#30l#5!5!#4'&#"#36767632U.+ 98Q0 : \      * B i  Chess CondalChess CondalRegularRegularChess CondalChess CondalChess CondalChess CondalVersion 1.0 Version 1.0 ChessCondalChessCondalc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph68 bɉo1C 2333333dwh"pychess-0.12beta3/pieces/ttf/harlequin.ttf0000644000175000017470000007614012161415524017654 0ustar tamasuserspFFTM|{PGDEF&{((OS/2Bx`cmap(pgasp{ glyf`pheadh66hheaC4$hmtxlNloca|ϛ,maxpX namedP0xhpost5Azvhea {l$vmtx_:70{c$_<+C C Dc9 "H gh gUX U=ggUjUj4O)+   d Ok8c=q5b}jN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a(<Tj~ &Tt  B!>!N"""$"##%%L%&$&&'''($(()*+ +z+,,X,--j-..p./>/0 01(1p122p23F334d45>566778 72#"54 g %3##!##x gd##5!!!!dw 7#5#5#5#5g #dfh!3!3{c 3#3#3ddf5!5!yddf #5353!5353 ggyd$e 72#"54  #'+/37;?CGKOSW[_c!#77'37#3333333333%3535353'3535353'353?3]1,,--pwkvyuydy#u|y`y' x~M?4160F1120L02-3O011,,-n12k0t0/e!0x/1b'0 ~0>9E4K.O٦UU 2#"&546ȍUȍȍgf 53333xg hy$dU%3##U ##5!!7#5#5 #X!3X 33 UU533U U$U!!݈U#5353 U$! #'+/37;>AEQV[`fkpuz733333333 ###### '37+7"32654&%#67#2#5&'4' 567#3##0#55 &61O032-L0012F1~' `|#duD-,1ȍ0&11x4Y q O w`C81 x2 Y2Z GxS#ZzOzv.yKyx4yEv~0'0 1bx/!0/et0-,,1ȍȍ&(&x1YW u 12i0aH2x YQ I3-y/%1;!==!Yk%MY]u +/7GZlp7676'&'&7676'&'&7&'&'&7676766+'&'&'&704102167676'6'&'&7676767677'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&5'36'&#'&'&'&76767676167276363"'636'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&5&54'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'4'#"'&54763272#"'&5476"327654'&                    >  %    *^    >   (    +%7A$o#   !"% $  .+$+ !   ! AU(&>X)j./0  ! / +   "%&3"    ; # %0     nBI  3 0pAJ 3 /Q  8+4C.H3G%'F*(!;;8=+<8<<-->qA;;8!6CT2"()(2JP/ &#;;;'JK.+ $$:F,11.@5)=--.*A=...-?   b  &        >   D   $  !     W     ]  "$!%  $$) !%K        90   "NR "  . -p  N  V"   z<4 #  "  ]=  8 &  &   ^slc 1- 8 NMMMMNXG&-J`MNkk:ax92::26fs=7.41NMMScu9+ <$$13IG99**88KG3113FN68;!"4556 !g!4677#46gc!fObf!7R9 &-5?GQYrvy| $(.28<%! 67676% #"' &!  67&'&'&'6324632#"73254#"4632#"73254#"761#"/&7164312#77'3 3 ?#75#37#7 55 #7 5 #7'#7'#7%'#73#?'  5 #>5&'3  0'3  &'73&'  &'73  &'3  .'3?.'3?.'7357.'7373z 5_HhiPX3ݝ`^c߂__]Zkxw<**P m..TE_DWgPP+WD]G0GG0ww44330GG0ww443n0ss0##U1,,-  _Yl1(!gCu2ggN80 U0Wgg /gg!0vgg-"/gg!1ggggF!Y0 ~08b38/ 1<}>15/ {0 |S0X8 0 @+3 0 a0gf33"&%&53gc8Of!cR9#f#52655653b"eOcf#9R8"&*.2OSVY^dhlptx| %5'%5%%!35#5##3 6!  &'67 &#"#&76#535!3#6 #77'3#56'??75?777'''  55 ''3'557'3''35'735%'7373'#73#73573'7353535733#'3#'3#'3#'3#'3#'3#'3#'37t  tC@9:Lֽbgcolj31\1,,-R ZoP(gKQ~ M qbl. 0,, ,\02 2 `3< r ]01+y0g0B1g1x1&00 14[,41g1A0h0D2g3?1g2@/h/C1g1B0g1@1g2Bg2gDC3Dw$dggdnKMffp--3S9 -p:gg. 91,,-<b" ZDn12C0A(0Af/C0/P1[0 ~0j)N3*&s/ 1k&1,'0&0|0+](3&0-'p0^ՙ/+Iggg1x1!3[5+gggggggggggggggggg4"&EIMQUY]aeimquy}67 !&76#5353 6!*#2 333#6!52 3.'*#5 7&!37;#%3#%3#%3#%3#%3#%3#%3#57375353'73573#73#73'73%'735%'735%'37%'375%53''%5%557'''775?75?'6'?#5'37+7n3xx  pq~1  xxg2gx1g20g11g1/h/1g22g30h01g1,4K4 100x11g10g0b+1 ]0 r`3a 2ڮO\0W  0,P b  q M~QQKg:,꾾+ol Z$R-,1-1av9 -p:gǦK!g. 9!KKggggggggggggggggg[5+K31!Ω1xgggg/+ _^'p0&03]0_&0r'0W,Q&1'1&s/)N3~00P1/C0Af/90إC02Dn1=" ZU-,,10 ,@Pbt "&+/48=AEIMQU$'767 76.76&6'.'&54'&'&'&33254'&'&'"33254'&'&'"254'&'&2'654#*'&322#77'367#5.'7#.'#&'#&'&'#&12#&'27#&'727#&'767#4&57>7#46?  5.'35?3  &73'&'73  &'73 35353'353?3^f7ZcX,h'x()n\@5a454`36N0Q)!K|-L1&&#!#$%"# -&P" **-#"% ?"),6+")(/!) S""  1,,-% 2  22 s 1qt1> C i/E"i2. -y3(0$1H~4 4V1pSG30 1wBr120L02-3O01K*>Nw) 1L:b# 3B &U&'Uʹo>2j5M % ## # ## # "#  # # g1,,-R;&p 1v 2  p0t$B0&h /i 0xg/D  1)  0 ~03X/`NK1RF(1kQ0As K.O٦3#/=IRV #(-38?EHKOp>7467&'&'67&'&'2&'&'&'7&'&'&#2&'&'&'&#6&'&'"16'&'62'7&'&'&'67676%>76&'6#'&'#76'7333333 &'73  &'73'&73  ?35.'3546?>7#4&5767#&'727#&'727#&'2#&1#&'&'#&'#.'#.'767#5'37+7%$'767 76031!!c@3 +EB0+EE4* Y9&'K& =<0& &0(,9(T$5+/Y'(|'G&`=Vj%$)36}A ET6]KTFI _U.>1O032-L00Er1  1m30S?1V 4t~o$1O(0 -y3E"i2 i/ Ct1qs 1  2 2f %-,1^f7ZcX,h'x()n\@    ,+;  &$SZ%_hbb lT A'4jF B!9+<'T bx>E';%!=d 0.0&s_/w =3A%)G- .("9zOzv.yKysQ01(K1RNX/3~0 0   1g/)x 0wi /h$B05t  p0 2p 1;&,-,,1oK*>Nw) 1L:b# 3B , !%)-159=AFKPUZ_djpuz!6!&76"&54632!63273#%3#%3#%3#%3#%3#%3###73&'73&'73&'73&'3&'36775'5 6#77'3 3#&'&'&'&'&'&#? 3 55353'353?3" | !Ɏ 9KSOO83h22g11g10h/2h22g31h0603+0-u1 1O0 >14 g   Wtl{1,,-%'2T (H  D  !,' x~F< L02-3O01! K Ɏɍ( gggggggggggggX0:3/+ |u   @F'+g  1AW10;m0z$1,,-F%Q# !%1h2 0 0( E/ /G]1b'0 ~0%3"/MK.O٦-6:>BFJNRV[`ejoty!#"'2654&#"!!6!&763.546323#%3#%3#%3#%3#%3#%3###73&'73&'73&'73&'3&'36775'5 6#77'3 3#&'&'&'&'&'&#? 3 55353'353?3/&*)'2ooqo/" | !1XnɎoW3h22g11g10h/2h22g31h0603+0-u1 1O0 >14 g   Wtl{1,,-%'2T (H  D  !,' x~F< L02-3O01!v qooq3 K )gɍg)FgggggggggggggX0:3/+ |u   @F'+g  1AW10;m0z$1,,-F%Q# !%1h2 0 0( E/ /G]1b'0 ~0%3"/MK.O٦6 !-4:@DIMSW]afjptx|!#77'3#5'7# '6#&676&'&7#%#?3#?3#?267#?67#7>7#7 3 5'35''3 7'37  '73'5&#"735'35&'3'&'3 353?375&76 632 6! -! %! %?! %!  32]1,,- q  2 ,g+w WV)  2A  1f  z1  o/N  s2#(3d!0(' x~l z4M0 11(r r0x6 1-W 1R0} 0#= |2,3O01`{#'XQ! RX)" !41#'@@1񄋇1,,-J,(',]w'*E>1|390zt60,n5/s8018/c o8(1b'0 ~0-3){u+/BM!& 1X!r&s1!4'CW",0 +0 Re*0K  3  zO٦ʠ2$I ,TT+ֶ fxx|mmKfevH'6  $(,@MQUY]aeimquy} !#!5#!'#!2)&76!%!7!53'#5#'!#5!#3!53!'3 #!35!37! 733757''73 %'35%5%5 5?76'&'7''''7#75#5'37+7#73#73#7373#7#73#73#?'7#3#'3##733#'3#'3#'3#'3#'3#3' a`Y`GE`}DLQRJKKDKKGGI8D8IG?T_3_TΦ1O0n02qa04b#>~,!   R %  ,RD2-,13322O110+011441'114@1g1D2g0e013h3@3h2A0h/B0g1B0g1A2g213e 3 D#"kzO="0E#3!02!ad 0!c0M1>/#3~0\"0  1.$0#/$0$0]S2"T1u#-,,11\˫z$'2/gggUgggggggggggg1!#4&'52#4'bg8Oe"bR7!1 AEIMQUY]aeimquy}53'!535)3!3'#!35!37!##!!!5!5!'#5332)&763%!!7337577%'735'35%5%5 5?76'&'7''''7#? 3 '37+7#73#73#7373#7#73#73#?'7#3#'3##733#'3#'3#'3#'3#'3#3'!RQT_3_TۉD{ {Dߦ1O0r0a04b#>~,!   R %  ,RD2+-,13322O110+011441'114@1g1D2g0e013h3@3h2A0h/B0g1B0g1A2g21wgDDDDhx"eDDDDf 3 wgIzO="0E3! 0!ad 0!c0M1>/#3~0\"0  1.$0#/$0$0]S2"T]1-,,11\˫z$'2/gggUgggggggggggg14 9CMQTW\cgkosw{  %! 67676%3254#"3254#"4#1"'&132?6'1&' 327$! 6! #77'3 3 ?#75#37#77'#7'#7'#7'#7%'#73#?'  5 #>5&'3  0'3  &'73&'  &'73  &'3  .'3?.'3?.'7357.'7373z 5_HhiPXa``afaaaaS%%=y  y&'&g1,,- %I-Z2m)2h2CCzh1hDe#g1g/h/gzvg2gg3hg0gg1gxX~.n46 17<0=1! { |1yY90 @0O  2 3$a  01ثPDBӳH>PIqqqqqqq)%%l2yyN9MY11-RR?JK1,,-  _Yl1(!gCu2ggNu0!d0#gg //gg!0vgg-"/gg!1ggggF!Y0 ~08b38/ 1<}>15/ {0 |S0X8 0 @+3 0 a03 )-038=CGNTZ^cgmqw{! %! %7! %! &76 632 6! %#77'3#5'7#  &'&7#%#?3#?3#?267#?67#7>7#7 3 5'35''3 7'37  '73'5&#"735'35&'3'&'3 353?375'^ #20$1 2SS#'XQ! RX)"1,,- q  2 ,  2A  1f  z1  o/N  s2#(3d!0(' x~l z4M0 11(r r0x6 1-W 1R0} 0#= |2,3O01`z+w rrPjjaUU ,TT+ֶ fxx1,,-J,(',1|390zt60,n5/s8018/c o8(1b'0 ~0-3){u+/BM!& 1X!r&s1!4'CW",0 +0 Re*0K  3  zO٦ʠ2$]w'%#'+/38=AEIMQUZ_cgkosx} 1' '1&7 &716 617333333 &'3 &%'3 %#5 #5"35#### &'#'#'#' 3 67 3&'5&'7 3.'1&'37+79IIIIIIII7IIII97IJHH81O032-L001%  *>1V0nT1,& 4(~' `|#9 /V1n1982$|2$P  -,1IIII9IIII89HJII8GGJH"zOzv.yKy! W 0c>1VvnU1/ &63~0'0 1bx/!0/h  V0[0o2iC$51  :-,,1U%#463!cG" Ef jU &-5?GQYr%! 67676% #"' &!  67&'&'&'6324632#"73254#"4632#"73254#"761#"/&7164312z 5_HhiPX3ݝ`^c߂__]Zkxw<**P m..TE_DWgPP+WD]G0GG0ww44330GG0ww443n0ss0##UU"&53GcމeG"U653#"eF"Ge^x 2E%'!&#"67  & !&76#535!3#635#5##3 6! t@ 'coCbgֽ_L$31ԫ@9:3<-3p$fKMfv9 -p:gg. $dggdn^x"&E67 !&76#5353 6!*#2 333#6!52 3.'*#5 7&!n3xx  pq~1  xx-1av9 -p:gǦK!g. 9!Ko0<L^p%767 76$%6'.'&.76&54'&'&'&33254'&'&'"33254'&'&'"254'&'&2'654#*'&322f7ZcX,h'x()n^?^6P1R+ !L~.N2(&_2_-21_,d#!#$%"# -&P" **-#"% ?"),6+")(/!) S""  Nw) 1L:b# 37T*o>2j5L + [*+ ZY% ## # ## # "#  # #  oBFO[iu%767 76$'%>76&'6&'&'676767&'62&'&'"16&'&'&'&#6&'&'&#22&'&'&'&76&67&'&'7>7467&'&'f7ZcX,h'x()n^?^NA ET6]KT?0?[j%$)36*'G'(t$5+/{ &0(,9(g'K& =<0EE4* Y9&` ')'I 'EB0031!!c@3 Nw) 1L:b# 37T*e_/w =.z') .?T=d 0.0&s.x><'T B!9+A'4jF bb lT$SZ%_ F(AA  &i    ,+;U !!6!&76"&54632!6327" | !Ɏ 9KSOO8! K Ɏɍ( U6!#"'2654&#"!!6!&763.54632/&*)'2ooqo/" | !1XnɎoW!v qooq3 K )gɍg)$ 3? 32% 7! %! %! %! %&76 632 6! %6#&676񄋇ꉍG'@@ !41##'XQ! RX)"oWV)H'/v)mmKfek ,TT+ֶ fxxz*E> 3"&*.K!)7!#!5#!'#5#)'#!53'#5#5!)'!#!35!37!#32)&76Y`GE`[ a`I|8IDLQRJKKDKKuT_3_T{ we" 3 =2#4Fe"fE 3 = #!35!37!#32)&76!!!3!3#!!!5!5!'#53'!535T_3_T{ DQDQ" 3 "DDDDDDDDjU 9CM%! 67676%3254#"3254#"4#1"'&132?6'1&' 327$! 6! z 5_HhiPXa``afaaaaS%%=y  y&'&PDBӳH>PIqqqqqqq)%%l2yyN9MY11-RR?JK$ )! %! %7! %! &76 632 6! %^ #20$1 2SS#'XQ! RX)"rrPjjaUU ,TT+ֶ fxx45 1' '1&7 &716 619IIIIIIII7IIII97IJHHIIII9IIII89HJII8GGJH)9,1535#5##3 6327!&76#53533#6&#"'!nyQ.OP,YˣZ]]Zy㎎GqQ3 *]]N) <{z+ !-176'"676%&766326! -7! %! %  32 NMr&!"P00O%y  w~vy&> trLL lkQdd?%5v /kKAFO\jv76767%76$'%676'.'6&'&'676767&'6&'&'*#6&'&'&'&#6&'&'&#22&'&'&#&7667.'&'76767&'&']/N\R']#m#%eU8F#a#?K0TEJ9+v8Q`q" (+0#@" Z4%+f "*$*0)X#D( 48';B2# O0% WXTiF3+*.-!Y?)yGj% t?-D4X! .rfK&ZT*k 6*m$$*8MjZ ++/f{m9 g4&L )0(2)4. WG Ld \Q EW"U>#&=@%#)  %a &(!  (08@GMT]n761#"/&71643123254#"432#"%3254#"432#"&'63267&'&'&#"  #"' ! 676767z5h h4 ?_``_ @````tQ{zR\pclQ[{|ǍzUWwgOH^a=Y>+g g+[ 0000pppp0000pppXO$JAU>qIIQY=V8 <: &&6<#<8,033*+"54767675!3272++*3'!,03!"> /,%"&t~L:*)LOc<@&#"#632#"'./&543232767654'&'&#"!'&763*>(' 9+E;9""-.EGH@E 75,3-)*-PLu S 33GJ24 <@!3.! "bv =;?632#&'&'&'&567676767627674'&'&#"'&39:732 ;;QE36$1.IFR0") 'WEF++1/RE&%#%/+ |]54N636"$*,341bML41  33KKU\AB)*E8))q#&#"'4?!3] TDO:  ' M  k! 45E!37>'.7>'.&'4767632#"'&'&'&5476XYE[hEEZhG:LW:9LX!44H6-.!@W'%$%676767<54654'&'&#"#"5676514'&'43232#!!^ =IAA,,)*=?D&8j  & (zWU-++,WZF 53Se<;  B; ,+OPaUKL./#NR'&74'&'&#*#7"#3273#&+32673!#"5676514'&'&'432!:3673!! /  PGDS) TD'}  " 3 m  CA:  F/   ~IM0'&7&'&'&#"73#&'&##"'4#"#"56765154'&'&'432!:3673!!  0C%d%" 'R   MM   0  >    p #  B)  }QU0'&7&'&'&"267'4'&'&'432325632#"'&'&5476767672!! 7@543%$('=@@K;   BA    !#=7&l]`:< :8PN[@e    $#45>PBA%&:   8%$QO{MDB/-`d6554'&'&'432325632!54'&'&'432325632#"'4#"#"5676=!#"'4#"#"56!!!  MM  p  MM   #  MM  ""  MM LD!    6/     4:F   GF   "b%)-#"547+*#"&+5476767653!3$-#"cGP+/3&76!7.54632:32726654&#"327333 +(Tpcc - 1)bU:;SS;&"gc# uYbb@5 !:TT:>8 <: &%7<#<$,04*+"54767675!3272++*%33333""= /+%#&),1gcL:*)L~;?C&#"#632#"'&'&543232767654'&'&#"!'&76333'*>(' ;*E;:!"-/EEI?G76 +3.(*.OLugc 25EJ24 <@!3/ "bv ;?C632#&'&'&'&567676767627674'&'&#"'&333O9:733 ;'.7>'.{c64H5-0BW'&$%73#"'4#"#"765!5!d A<   II   m  QQ `J "!      ,    udd*7DHL#"7676767654'&'&'&3232#'27654'&'&#53276765&'&#5!5!<     X9;gR*+ LLyUXQ,+),,K%(#$##3Eb "! %&De#23K_34P$#:,! < %4ddB5!5!'&74'&'&3676703#&'&'&'4&5<5476767632&IL36&"43?57!5 &SY`ST682.FESLmydd   $%9=?551,)-j#"IImPA>50 #:>B#"5676514'&'43232#'276767<54654'&'&#"5!5!  & (zWW++,,WW\1EEB+,)*==F.0 A< ,.LPbTKL./P43Tf<; ddNRV'&74'&'&#"#"###3273#&+32673!#"5676514'&'&'432!216735!5!  1  PHDS) TD'}  " 3 m9   C@:  G/  ddHLP0'&7&'&'&#"73#&'&##"'4#"#"56765154'&'&'432!216735!5!  .C%d ' 'R   MM   0>8    o !     C) ddQUY0'&7&'&'&#"267'4'&'&5432325632#"'&'&54767676325!5! 0G725#%('=@@ M9  BA    !=#2+haa9< ;?551+(-j""IKkPAA21 #Ck    3 K {  Chess HarlequinChess HarlequinRegularRegularChess HarlequinChess HarlequinChess HarlequinChess HarlequinVersion 1.0 Version 1.0 ChessHarlequinChessHarlequinc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph69 bɉo1C   UUxxooUUUKpychess-0.12beta3/pieces/ttf/adventurer.ttf0000644000175000017470000012664012161415524020044 0ustar tamasusers0OS/2^F=VPCLT6cmap!"2cvt u"Mp:fpgm3O\glyfRuܦ<6hdmxpDheadВ$6hheam\$hmtx (locaetmaxpi@ name`postrxprep0u&r9 XL F:9, # : r9    XL   F  : 2000 by M@rroquin Design - Mexico. All rights reserved. 2000 by M@rroquin Design - Mexico. All rights reserved.Chess AdventurerChess AdventurerRegularRegularChess AdventurerChess AdventurerMacromedia Fontographer 4.1 Chess AdventurerMacromedia Fontographer 4.1 Chess AdventurerMacromedia Fontographer 4.1 3/02/00Macromedia Fontographer 4.1 3/02/00ChessAdventurerChessAdventurer@,vE %E#ah#h`D-#a=\A5F[ .r"RZ]@- EhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDEhDF+F+EhDEhDW@!@ Fv/7?*   3VU \@% @   Fv/7? w>~g('{*8 >f//ghgxg!#/.##9"   +="//#=+   #4,;3gfcf7=g\//w' :(xfGxgx>w>xf~ 8+g'?11\fwf?@@Fv/7? #<) 7=<> %r",fJZFl~ Rv;!sx +hf-E$;O(+)-MJ-E``E22246/9 $9046.:L $9/@ EaaE11167!D1 Y+kz@l29Ul27U+W<fZO  OYg>DD  kfxUK6#kh/ (S4;Yg 'IS(  B) /od#6KTufl  DFCDDDDCDDCD"&%54d3 3 3 lgfcf7gT#*//-)Uf ~    _g4f4"g1p 8h{f). ffVU J@ @    Fv/7?54'&'&632%2654&#"7'3'57#"'$547654'&'&'&5476763267!'67632 47&! 627654'&#"7 4&5&! 6&547632&'&6%&'&'&#"654&#"676  gego5=RhA#DgcN/%%f!#;w6$Sgz+Ydn+~f#2_{dg`hkO? V?g`ftfR3)>H+3Ԛ")O&&*b.FF+P\C__CD^^]qr0ssBs &j 9~:8OJX_>DD<_XIP8:~9 j& 鱟[po\٭ٱY}|c\O,FE-e)E_ HHXjT@jYGH ^78 ?.f~09efJ pfQFD>3>Tb3*.{CEpJh0WcCRG#>F`==`F>>855>;GcU %_89=;vLJA=OÕ8jcGFdj8R:A L#0?O "',/49>CLP"5432 6767654'&'&#"#4''&#"6 4&5&! 627654'&#""'$547654'&'&'&5476763267!'676323735'75#'#2654&#"&'&'&'&67632677632&73#5 57!35#735%#7355535'735&'7#&'#%#6573#%67#47654'##]]]]].uk,d.-G@i(D(iAG--d-lv-aZ}|[٭ٱ &i 9~:8OJX_>DD<_YIP8:~9 !Mg) 6ll7oo1rl6o3C__CD^^ݘ 79AI!!2.d c.2 "HB77 ")OT>H+3s3R$f?g`f? VkOg`h{22+~fF+Ydw6$Sg!#;%%f/1NA#Dgn5=Rh+oegxg]^^]??C}NH66`$*o@@p*%`56IO|=E?>866>D#GSBkO4gGYEC{.*3bT>3=Vb4*.{CE88[:@n1WcCRG#6oo6mq1oo6l_CC_^DD^$Y$;I BFFB H<#Z$ P,4  3gf`jObVf"Cgh`-zg\//f|(*feXOg!"fS 7'&''&'"'&'&7676767&76732767#&'&325654'&'6?6'&57676'&'6765&#"32&547654'654732676'&67676'&'47&7676764DgFDhDEgEDgE J\33Q$fb80hm27O3fu 1d.4 Yf'/.e(t"DgDPh7|EiL !< e   /A & '/CCDDDDCCDV3 E44gfcf7g*_!//A f33(g)1{94fE'#W*Ag1:ht?feFf3DD!GfÅ j yviL[*Q'!;&3#TJPY3mX/=|E=t }E@r @">8NN . ,t79 Tȳo/0 , $UH`. -C4hf~ 54jY4 G'\ "   0  9  !%)058=AFKOV[^bfjnr}^%#7##7##7##7327#5'73%57!35 5 676&'73!55'35&'3'#'7#'7'7'7#?'7'&'672'&54766'&776''&'"'&'&7676767&76732767''!&5476767>7!65&'&'&#"&'&''&767676767676767&'&763276767432676#66776'&4DgFDhDEgEDgE J\33Q$fb80hm27O3fu 1d.4 Yf'/.e(t"DgD8    !. "6V* &\< ; //) WLLI):M1MCsHWh 7A*7@*@9h7|EiL J &$7n- 0#>  3" fI  ! -'zWR !  ks.  %, )t\o*CCDDDDCCDV3 E44gfcf7g*_!//A f33(g)1{94fE'#W*Ag1:ht?feFf3DD!GfE&"%0# #B  0N)G$ Q'!;&3#TJPY3mX/=|E=t }E@r @">8NN  j yviKZ+ zKGuoT]id,'"&^: A  0 Uv):42= V: %!0 #'#-B43b[~ 45 p?13\ ] 3 6 VR^flptx{276'&'#"'276'&#"'&7+!&54767&54767#"'&767&54632"1;2714#4'&'3#5 57!35 5!5&'3 &'"&'67#7&'#7#&'#7%#7&'454'#7#&#"73&'735Q1!"&ST%"!/SC_Z(hp,7L6-ph&Z_C0_CC_"""#( 3,3R$fb82fb{0 -DgE* Eft/*:EgEDhDk3DgF2gz$#h d?     !!!/gS7$_\3"G + G"3[_$7Tf0CC__CA#""#4OS3gfcf7//%f,d{g /<fCD)"gDs1V55 VV!!VV VVggDgThDh'fCg/fDv\fDgeFdUTf#2gEhUFf U3gFfU3xy3"UUUww͉UwwVVVVVVUUfDCffff D}AhC11CcggDgfgEXfffS//ggEvhUfGEfgVfEgV3vix4# (8LV`n #'1:BFJNRV"&#3254'">'&6'&3&5432&5432276'&"327654'&546767!76#!"727&'+"'35&565476767&'&'&547"5&'&76327&767676763276#%#&'&'&'#6/&'573'767675405&'73!5 #632&'&76 5!35 57#5676'3#7##7##7%3#%#73?@3;&[ -0$] r/77++68     @9$ #4 ! #:Zd^Na6.:0.)0.-)7x%6v8/9aP_dAgW  y'$5/0" `4;d3*~'2 S<#f#2h T eb8fR FO 3 33DgFDhDEgEgEfDgEX"! "Z  F  F "& $$$$ D  kfxUK6#kh/ (S4;Yg 'IS(  B) /od#6KTufl  Df). f%{f 8h14"g f{ _g#   ~ a-)Uf//6gT#*cf7fg  3 3 33&%54wCDDDDCDCCD" !5 #/37=DJ7'%7' 7654'&! 76 7654'&! 76"'$547654'&/&'"54327654'&543263676747&5432267&543276767&5432#47&'6654'&'3#'67654'#4767#'3#67#%#67#&'7&'5%5&'%&'3!5&'5 #2&#"53!35 57#5&'&'3V) UVU++(52Ѵ25)(52ϲ25) 7Ffff CG5 Wff%n0>ff>1 n%ffW 5H6 fffD9i(L&'* r!dgv) UguA2Th03Dga+$/,fa3y.,Ugz6<k 0@Kf#24!&h,oGca8ftfR3 k  3r71*,+U' & << & '' & ;; & '(PB_|%fff/\ jT| Xee1=~%EffE,=Ŧ1eeX |Tj&OfffH_BP(U1179 !#"Sf~!N Tf0;ufTGD8o$h1ra:63gT#fA =!&%gD-0fE=0#%/0K//s.$4&!gcdGaf7fg:/35k&/)4$(,08;BLQV[`ekpux|#"'32?'&5477632&#"3#"'# ##367#%#767#&/676327&'#&'&%&'35 #5!35 5!35 57#5&'3Mso#sk7;aP/^gtgRgxhpag//8f 2Ab4 ? %g()tpd8[+1$f^2]h;b8fR83##X31 &iZx&֢OB@)Pfw&fh116 8/F?#%g]tfg-,&"" *$3f$ //=g\cf7fgY3RW426s@/77@84-,/,(& !54633565433Fv/7?J9JFJ%$LMLKJJFv/7?"@ r@E}FE|=SWx@2XX@YU:6HB@<" USPRWT(VU,TSVWVUTTFv/7?ff>0n%ffW 5G6 fff4c(PB_Hfff/\ jT| Xee1=,EffE%=©1eeX |Tj&Offfh|_BP(w<@@BAA@B>! >>5=7=>9=?>-@='=#! =?@?>==Fv/7?_XJO8:~9 j& #GRCcW0hJpEC{.*3bT>3>Tb3*.{CEpKg4OkBSG#w#:@@ Fv/7?fZO  OYg>DD  kfxUK6#kh/ (S4;Yg 'IS(  B) /od#6KTufl  D##:@@ Fv/7?54'&'&632@jYGH ^0E_ HHXj-\O,FE-e)Y}|Z٭ٱ[po\ &j 9~:8OJX_>DD<_XIP8:~9 j& 鱟 }sssqrC__CD^^?&*b.FF+P\sFdj8R:A LJLJA=OÕ8jc GcU %_89=;>855>K>F`==`F>q#GSBkO4gKpEC{.*3bT>3>Tb3*.{CEpJh0WcCRG#78 ?.vsssBrqd_CC_^DD^1T):9`$ Uc ^0?O"5432 6767654'&'&#"#4''&#"6 4&5&! 627654'&#""'$547654'&'&'&5476763267!'676323735'75#'#2654&#"&'&'&'&67632677632&]]]]].uk,d.-G@i(D(iAG--d-lv-aZ}|[٭ٱ &i 9~:8OJX_>DD<_YIP8:~9 !Mg) 6ll7oo1rl6o3C__CD^^ݘ 79AI!!2.d c.2 "HB77 ]^^]??C}NH66`$*o@@p*%`56IO|=E?>866>D#GSBkO4gGYEC{.*3bT>3=Vb4*.{CE88[:@n1WcCRG#6oo6mq1oo6l_CC_^DD^$Y$;I BFFB H<#Z$ >! lv767676'&67676'&&76732767''!&5476767>7'&''&'"'&'&767676676'&6547766765&#"32676'&6?6'&565&'&32A & '.>   7A*7@*@9h7|EiL$'%{N  !B&GP7$FE+    ] =; 9 "   0 z/=|E=t }E@r @">8NN  j yviL[*Q'!;&3#TJPY3m'\  G(f~ 54jY4&H`. -C4+/0 , $T(. ,t79 >! $q@c@Dſ~zd\ZXEDCB3/#! ůlXOLKJIHGFEDCBA@?>=<;:! x8LML)lFv/7?/<7'&''&'"'&'&767676&'&'&#"&'&''&767676767676767&'&763276767432676#66776#"'!65! // ; l,&&  !. "6n    7A*7@*@9h7|EiL J &$7n- 0#>  3" fI  ! -'zWR !  ks.  %, 'hCG)+"NQo/$'>#B  0NG&"%0# >/=|E=t }E@r @">8NN  j yviL[*Q'!;&3#TJPY3m]id,'"&^: A  0 Uv):42= V: %!0 #'#-B43b[~ 45 p?13\ ] 3 6 S{KGuoT^%R^@B__@`2\[VUCB'& \[VUIEB<72-'$  +Q>KKQYXN4^S54N7Fv/7?/55 VV!!VV VV"UUUww͉UwwVVVVVVUU ?g (8LV`n"&#3254'">'&6'&3&5432&5432276'&"327654'&546767!76#!"727&'+"'35&565476767&'&'&547"5&'&76327&767676763276#3?@3;&[ -0$] r/77++68     @9$ #4 ! #:Zd^Na6.:0.)0.-)7x%6v8/9aP_dX"! "Z  F  F "& $$$$ D  kfxUK6#kh/ (S4;Yg 'IS(  B) /od#6KTufl  D\ !5@Y@ya[SI4$  qiMK:0( sUgoskg]Y}sg_G{>,"6m6GFv/7//////////....................................10IhGIha@RX878Y7'%7' 7654'&! 76 7654'&! 76"'$547654'&/&'"54327654'&543263676747&5432267&543276767&5432#47&'6V) UVU++(52Ѵ25)(52ϲ25) 7Ffff CG5 Wff%n0>ff>1 n%ffW 5H6 fffD9i(L&'*r71*,+U' & << & '' & ;; & '(PB_|%fff/\ jT| Xee1=~%EffE,=Ŧ1eeX |Tj&OfffH_BP(U1179 0$M@%%@& "  Fv/7//..............10Ih%Iha@RX87%8Y#"'32?'&5477632&#"3#"'Mso#sk7;aP/^gt1 &iZx&֢OB@)w*@:++@,  ' '$ ('&)(Fv/7?2GWB3/FD0661DC/5@w#,8g@+99@:/ 5+ &2(-$ Fv/7?2R\\DRUAK.w .z@3//@0# -' )Fv/7/bT\!#'+@:,,@-*#" %$'&)(+*# *)&%+('$Fv/7?p7+K5,$L͈V Y"&CFO"UP8SQ+,4;gbqJ\#.3MH+)_RKS_O1)$U͈VX ;u_pTPO4841J:@OVPCT&*.@E//@0-)#('*) ,+.-#  $#"%$-,)(.+*'Fv/7?>t.26@:77@85*&%0/21%$& .4365$"5410632/Fv/7?z@7??@@=%87:9*2#<;>= ..=<98>;:72Fv/7?2R#';R81!L+&pL3W$' (װbS\" V;>7PcB$=I.2 8VV'1@@22@3.('&,('   & "Fv/7?SKL(VVGe-$G4P"-uAE90@&3@GWA#|@5$$@% #"!  # !  "!Fv/7?P81Y&GC?M.'QVn#1"D>QCRB3>iZX%ZH 0 5V=F=Rpek5 UVV"&@M''@(!&%$#"!    &#$" %$! Fv/7?%#D-`.PPPpKk1'2fXX@UVV"&}@5''@(!&%$#"!  &#$"  %$! Fv/7?42C> G A/5SLU$CI.(ohAhipP?V(B;X7&F G65GI43I #>Q:5!DU6"#8Mc;/#Dw6#%UVV%)-@S..@/($-,+*)('&%$     "'-*+  )&'  ,+('&Fv/7?Y:c+I_F@@f72c77I%'7    740047DO'KQYag254#""5432"5432'254#"67&'& 67&''&'&'#'&#"'"''67&'6%2&'6%6&'527654'&#"3"'&547654'&'&'27767654'327636673272673277673%&547&'&#"6! "5432'254#""5432'254#""5432'254#"J\\\F\\[[6$"&$R 8Gn D::D oF9 {+,863 1C"&69,ڏ؎5;<*&1!  !?<F7HՊ}66(\\\\k\\[[\\\\=\[[\\[[\=sf*6J5      4JEo{H gfQ*,l  H{o= %& &% =#H=Tu+w944k_*3BTiM}#9LhTD2(`kSG9oPAH#=/SP& $m6/=? \[[\=[\\[==[\\[=D!*^f@Cgg@h>&" ]WUQNHC82/+>6Je(a)ON21)($_@cZZA@CFv/7?EM,+OFJPo"[&ZPD9. "2DTh|@m@͸|upi_Q' c[SOME-+)%# W gGg1KBji|{~}5ME+#I/U D3"<;sr}Fv/7?*%&#='-,# e  NOFfU,%-VgEN=YUuGW .)6w+)&&/(&2t(1J) 1i3*!  VHsVZhB6999? j7B|5!--#7|A6o :   :7\QG || GQ\7==  a[lLD1 cZ+ $ K.6Q\ #A !2-! ; % +BR) 4ALj[a=x@4@  Fv/7?>tuMJT@@ Fv/7?7'&''&'"'&'&7676767.'67'547632!65'&'.&''&5476767676767>767&5&767632  1;%2;% 9v|4^1p?_E6=L?74)P vkI*8N)%EA%4E-E=h@O *+CP; 'BIx d^Q B " "1bMKu) + %  /- ]@  #F7&2/3o>8g q=9g :92FFx ^t g_DS%I#5"-LCHO.d:"8: *!%/" Pr@@jcFS_ZP%K'* : . Kk&3/-7 !-# %,?"*9.- )uw.y@4//@0.-#" .  '"! )Fv/7?iZY$1w",{@4--@.)#"! '#"  !Fv/7/$#E'1`.PPPwTKjN;gYY@Dw.;J@8KK@L<-+2 >)9F!6%B%/%Fv/7//!B2?M?RQwT #>R:5DT6"#7Mc<."Eu7 !%OG65"%I43I=;Y7&E1w)@I**@+()(!  #$# &! Fv/7/*@DA`BDrEnG:HHLLpLO@QTWY^[^`$`~bdFfghijklmnpqr>sttuvwy z{v|~ZFf`TBB""j~V6VUV### VV#?#?R@tThDDuZDV]@QuRjDl !"$%')./012345679:;>?@ABCDEGINOPQRSTUVWYZ[bcdeijklmnopqrstuvw$$  !"#$%&'()*+,-./0123456789:;<=>?@AB_`\VWaZkX]db^CDYEfFcejghiHGIKJL[MONPQSRTU,  %+/5:<?BDFTXbdftx  (.17<>ADFKV[dfkv ,6<>FLLNPPPbfttt  !"#$%&'()*+,-./0123456789:;<=>?@AB\VWaZkX]db^CDYEfFcejghiHGIKJL[MONPQSRTU_`p                                                           3%3fMACR@ `uChess Advent 7CHER00,Zh_<AAll.@ Ppychess-0.12beta3/pieces/ttf/maya.ttf0000644000175000017470000010657012161415524016614 0ustar tamasuserspFFTM{4hGDEF&@(OS/2Bkx`cmap(pgasp8glyf`\heade6hhea :4$hmtxkNlocaQtmaxpX nameoqpost5<0vhea $vmtxb,:PxN_<+C C  Dc, "H  s ge g14D1 g g            114TDDTDTDTDTD8+G(&RjN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a$8L`t*8DTbp Z r ^Tf<Tf!#%|%&@&R&d'4'()**+b,,&,-<-.*./01N12t23`34P45>56 667R78889\9::;n;<6<=@=>>>?D?@L@72#"54  g !#53'#!CCD!!!!ψD 1537#5!#CDDee!333eψC!#3#3DDg5!5!gWCCg 3#53!5CChCf72#"54    #/;GS_kw%761'1&'61'1&761'5&61'1&61'1&61'1&61'1& 6'1&%61'1&%61'1& 6'#&61'1&'61'1&61'#& 61'1&Jxxyyvnf2f!n!wTTK^*]>yx~Uyyvnffmw!TTK*^]#$ 2#"&546xxy$xyyxgg #53!3ChCC1%#53DD̈D5!!̈7#53#CC΋D4!34D33D163#53C΋6!!653#5CCˈ  #,5>GPYeq}2#"&546 61'1& 61/&%'#&7 6'1&'1&7 6'1&17& 6'1&61'1&'61'1&'6'1& 61'1&63'1&63'#&6'1&761'1& 61'1&%76'5&xxy\^*&a@Xb~}e)wnffovxyL!xy$xyyx]+^c'aa}&|ewmf2f!n!v! yxyx!!Yk%MY]u.2:J]os7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&767676767172763630%63654'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&5&54'&//17/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'4'#"'&54763272#"'&5476"327654'&1                       @  '      -b    A  )   .&:DY'  "$% & ! 0/%)  !    #  >DZ)(A\+p112  " 1 .   %''5%    ?  $ '4   # tEM   6  2u DM 5 2U ! ;-6F1L6K()!J,!*" >>;?.?;>>>xB//BxC>><"8GX5$*+*6MT2!"(%>>>(NO1.&&=I/331C8+@/00-D?200/B  g  *       A   I     "      [       b  # &"!( "($,  !)N   "    <2  %TU%   .  /v R [" ?! 7 ' '! b@" :(  ! byqh 4/ HRQQ(QQR\K(/MeQRpp>e<4>>49lxA:064RQQWh{=-?'&47KK<<,,:7&&#6'1&?'6=4'61'1&?&'761'1&?&'61'1&7.'613'1&7&'61'#&74'761/&76761'1&?dddCC1DD!dddd " rZ9P5FeeFtHddH8P9^r;# "4dHFe12")%D_ !"#0(: 6.xy2;gA9bxyvӎ!%EO}'D #*G)mGHPB O&'H]w 75HjdeedDDDDdddd9-783j?Q8(eFGddGFe)8Q9x-(,IGeeGA?(,`" !S# ; Q֊-m*Uyxw>_b=yxvj!&<E|>\aHlGfH&$R!H#x9%&,) 7M?>Hgg 33"&%3"gzTUCCUvCg #5265##5TzCvUCC"  ,5>FS[dlu~ ".bvz%5!2514#!5!2514#!561321#76'5&'6?6127'1&7%'1&?'6=4'61'1&?&'761'1&?%3'1&7''#&7%'1&?761'1&6'1&63'#&'1&7'637#76137'1&7&>76&'61'1&7&'61#61'761/&76514'761%"32654&67'7>77.'.=463!&514;21!2>7>514#!"1'7!"&5146;&5146!%"3!!"3!73557#'ChhACg7Q4FefFxy2;gA9b^G)mGH&'HJ Hxyv _3 LXbK     -!((_0w 9PP98QQ%   D6EN@NO9dd7PSBHH.DB$+E6F)%E|HddH4O9fBBhhCwgwww@hgGCAAN8$dGGdJyxw>_bHlGfHH%H$yxv !\5qTL    0#q-,c(0a"#x*.EO $1OD$THK87PddP78GHYW6J'/FF/'I8NNOdGFe"7O@BBGgg{{yy&  $-6?KUZckw%-6?GPXemv6514'761/&7'761#61&'61'1&7&'61&>76'1&737%7#761'63'1&763'#&6'1&761'1&"13!2514#7'7''73557#'21#!"&514637"13!2514#%"13!2514#%!6!&=46"13!2514#!.'.=463!&514;21!2'1&?%'#&7%3'1&7%'1&?&'761'1&?'6=4'61'1&?!27'1&?6?6176'5&&w_0!(( -  7  "bK8 L_3 vxyP!!u"">+@wgwww5GeeGtGddG62""""""""49PPI""!!8DN@NO9dd7PSBHHH 3&'HHG mGA9b;xy3#xaa0(y-,#  5 # TL5n!v! yx""""OGGO?OON{{yyeFHddHFe$$$$""""O7#$7O"""" THK87PddP78GHYH%+HHgGlHb`>_yx S[lx$-6>GO\dmv27>'&#1321#!"&5146;&51467&67>7.'.&'.7>7>576'&7.7>747"3!2=4#"13!2514#761'1&6'1&63'#&%'1&763&'7617'1&7&/6&'&'61'1&7>761&'61&'761/&7&'61'1&?%'#&7%3'1&7%'1&?&'761'1&?'6=4'61'1&?!27'1&?6?6176'5& H_-c-/Q.GeeG{GddG/Q<9|QC00 EKHA;NcR6RoK7E @6,KJIDA- ( B.,r " YO?H 3&'HHG mGA9b;xy  `%bI7"eFGddGFe! 7R]Wyn  D*aD2 KAV I;M.[ECsZW:x*$$++$$ 3E; 0'E\####''''yxvi$hTZ\P-  N/*G"') WE ' AH%+HHgGlHb`>_yx Q]k"+4?HPYbjs{6'&&7676&2 3.'.7>76&'.'6'767672"13!2514#)"13!2514#1321#!"&5146;&51467&67>7.'.&'.7>7>5761'1&6'1&63'#&%'1&763&'7617'1&7&/6&'&'61'1&7>761&'61&'761/&7&'61'1&?%'#&7%3'1&7%'1&?&'761'1&?'6=4'61'1&?!27'1&?6?6176'5&S@A@L;i(': " '8ZH 7Y!U+7 Y'`1~B9b? V9<@ 5Xl%CC1DDhhgg/Q.GeeG{GddG/Q<9|QC00 EKHA;NcR6RoK7E @6,xxyvr B*T \:, N>r " YO?H 3&'HHG mGA9b;xy_%&%bD$ . :C0_   d9GH-0GJ6(\+(vC%,PC03*  -VDDDDghhgI7"eFGddGFe! 7R]Wyn  D*aD2 KAV I;M.[ECsZW:zyxvi$hTZ\P-  N/*G"') WE ' AH%+HHgGlHb`>_yx #/;GPYbgs| &/7?HQ]#+"13!26514&+"'#21#" #"514761'1&6'1&63'#&763'1&7&'761#'1&7&'6'614'61'1&7&'61'61&'761/&7%&'61" #67#"&5146;&54632321+"13:32514#*"32654&'1&?%'#&7%3'1&7%'1&?&'761'1&?#'1&?!27'1&?6?6176'5&f8-*HddHFeeF.+;$#g#xyvfOA$"E a)l'( N A _gC %b eMm9OO9rp7PP7k""ff""f`PppPNrrNH 3&'HHGGA9b;xy#eFHddHFe$'((&yyxveDOb2 E#!*(d%0N0D0)gk#*fQ>9N98P\]P89N&%%&H%+HHgGHb`>_yx ;CLU]fo{ '09AJR[dp%5!2514#!5!&'#5:32514#"#52654432+;21#'1&?%3'1&7''#&7%'1&?/&7'1&7'1&7#'1&7763 63'#&6'1&761'1&!"&5146;2#"&=46;&5463"3"&#"13:3#!!"13!&'761&'6'614'61&'61'61&'761&'61'1&?&'761'1&?!27'1&?6?6176'5&CggImffDDffccs7PP7 kFeeFXG&'HJ HL%  aAfO>vxy HddHj 9OO9rccffCCfflHhhC$"E)l'( N _gCq eHGA9b;xy@hgGJI@DDHccG]P78OeGGd2HH%HD0#!ObUDv! yx&dGGedO87P\GccHDD@JGgh E*(d%0NS)gl#*fHgGb`>_yx%  @HTX\`d &.7@HQYfnw%!254'!#''.'#&''#3267&67&54632>73267"3254.#"677%77'72321#!"&5146;&=46;"13!2514#761'1&6'1&63'#&'1&7%&'63767&'&'761 17 &'76&'61'1&7#'61&'61&'761/&7 6'1&'1&?%'#&7%3'1&7%'1&?&'761'1&?'6=4'61'1&?!27'1&?6?6176'5&~^ceX"Rh.@"t6x$OONZ[U[#!xчn9P5FeeFtHddH8P9CC1DDvxyv!_p6!L%)]-""2') !UH 3&'HHG mGA9b;xya]]a>\'; &'V]S ~K8U!T ,4>XX>5+ T?*E9:ONNONWvvWG9;IDDDDDDDDDDDDDQ8(eFGddGFe)8QDDDDDyxv$@ p5L2#"XCb@2!"!@IH%+HHgGlHb`>_yx,  37;?CGKOSW[_cgk{ #,4<DLT`l"3!2=4#'21#!"&514637675#!35!35!#75#7535#35'#'#'#'#3533535335%3535!53#!5#!5#376'5&'6?6127'1&7%'1&?'1&?&'761'1&?%3'1&7''#&7%'1&?&'61 7>#761561.561 1765761'61&'6%'1&7761'1&7'76337 #763 6'1&761'1&hhggSVFeeFtHddHZ+!/#ɼSG  $EHg hG$GDxy2;gA9b^GhGH&'HJ H=aGum&EdF MaG`Gbn_GFxyggggh!eFGddGFe!׈i#D!t~蜜嘘噙K2霜3"yxw>_bHGfHH%HJ>4UGd_m/$&`eM:45TG=`JGbnG yx !#4&'5#52zTCCUvD# '+/37;?dp| '/7@IU21#!"&514637675#!35!35!#3#3#3#%3#3#%3#%5!3#;#3#3!!5!53'#53'#535#5761'1&6'1&#76337 '763'1&7761'1&7&'6'615761 176.561561#761 7>&'61'1&?%'#&7%3'1&7%'1&?&'761'1&?#'1&?!27'1&?6?6176'5&XFeeFtHddH\* ΊGR%35ESWH˽5xy_Gbn `GaGgnFcd.cmaGOH 3&'HHGGA9b;xy!eFGddGFe!׈i#D!t?ZCVDDFCDNNDCF8yxQGbnG<`KG45:g`e$/_mG4>H%+HHgGHb`>_yx DNZfnw)5AJS_?2321#!"&5146;&=46;.76767&54632/#"'32"13!2514#"13!2514#'1&?6761/&74'761'#&7&'613'1&7.'61'1&7&'61'1&?&'761'1&?'6=4'61'1&?&#6 17>7&&'761'1&763 63'#&6'1&761'1&27'1&?6?6176'5&*)&0 rZ9P5FeeFtHddH8P9^r;# "4dHFe12#$,.24""X""!!u""H%5 ewO&'H: HG mG#*5}'D qE!%>vxydA9b;xy)(), -783j?Q8(eFGddGFe)8Q9x-(,IGeeGA?(,`FC%&&%%%%%iHG?>) 7&,:%#xHZ!$&HgGlHn|>\$E!&v! yxb`>_yx$  %2:CKT]evz~#-5>FOWco{%76'5&'6?6127'1&7%'1&?'6=4'61'1&?&'761'1&?%3'1&7''#&7%'1&?3277'&'7'7'77'7'>732671321#!"&5146;&51467327&67&54632'#"'32"13!2514#"13!2514#6'1& 7 &'761&'61#'61'1&7&'61&'7617 &'761767&'&'63'1&763'#&6'1&761'1&Jxy2;gA9b^G)mGH&'HJ H ) Dh?($K!#Rh.@"t6x$y5R5FeeFtHddH1R6yUzv#5[fR!W?>X'!",)+/CCU####%%&&O}s ')"2-C%)6!Lp !vxy>yxw>_bHlGfHH%HNV'' PM;8MNNNNNNMMOOMMO!U@*D9M7"eFGddGFe-7M}T#T!,4>XX>5N63,%%%%)**)r~r"!!j@2X)5L2#"8 pj@v! yx #+3;GS[cks 1' '1&7 &716 61 '1&77'61 /&776'1& '#&71&'1&'61'17'61 '1&77'61176'1&176'1& '1&77'6%'1&776'1& 63'1&63'#&6'1&761'1& 61'1&%76'5&9IIIIIIII7IIII97IJIIl/nlm  E11=0On}04OovxyL!xyIIII:IIII89IIII7GGIIEl0nkno  :11L1|w%1gYn!v! yxyx1!463"1yUCUxDzc254#""13!2514#"13!2514#72321#!"&5146;&=46;.76767&54632&'.?6&'.'#"'326'.'dddCC1DD!dddd " rZ9P5FeeFtHddH8P9^r;# "4dHFe12")%D_ !"#0(: 6jdeedDDDDdddd9-783j?Q8(eFGddGFe)8Q9x-(,IGeeGA?(,`" !S# ; Q֊-m*1533&1CUyCy5'52'zTDUyCv)5AMY'7'7>77%6>7>514#!"1"32654&'5'37'#5"3!2=4#"3!2=4#%&5146.'.=463!&514;21!261321#!"&51463n   zB$+E6F)%E9PP98QQwwwgBB4BB#hhggP97DN@NO9dd7PSBHH07P2FeeFtHddH3NNOEO $1OD%.*6J'/FF/'I8yy{{BBBBggggG"7OTHK87PddP78GHYO7"eFGddGFe v #/;y'%7'7'"13!2514#"13!2514#"13!2514#%5'37'#5&5146.'.=463!&514;21!261321#!"&51463"13!2514#+""""""""""!!wwwg"P97DN@NO9dd7PSBHH07P2FeeFtHddH!!u""3OONGOO""""$%%$""""yy{{G"7OTHK87PddP78GHYO7"eFGddGFe""""z$0u7.7>74776'&"13!2514#"13!2514#'1321#!"&5146;&51467&67>7.'.&'.7>7>527>'&#AA- ( B.,%%%%(''(I7"eFGddGFe! 7R]Wyn  D*aD2 KAV I;M.[ECsZW:  `%bzQ]k6'&&7676&2 3.'.7>76&'.'6'767672"13!2514#)"13!2514#1321#!"&5146;&51467&67>7.'.&'.7>7>5S@A@L;i(': " '8ZH 7Y!U+7 Y'`1~B9b? V9<@ 5Xl%CC1DDhhgg/Q.GeeG{GddG/Q<9|QC00 EKHA;NcR6RoK7E @6,_%&%bD$ . :C0_   d9GH-0GJ6(\+(vC%,PC03*  -VDDDDghhgI7"eFGddGFe! 7R]Wyn  D*aD2 KAV I;M.[ECsZW:z >JV"32654&;21#!"&5146;2#"&5146;&54632321#%"13!2514#"13!2514#PppPNrrmFeeFtHddHj 9OO9rp7PP7""""##2##beFGddGFeeN98P\]P89N&%%&''''z R^"3!2=4#!!&"13!2514#;21#!"&5146;2#"&5146;&54632321#"32654&hhggklH/MwCC1DDmFeeFtHddHj 9OO9rp7PP7dccbggggJKICDDCeFGddGFeeN98P\]P89Ncccc #PTX\`l"3254.#"67>732671321#!"&5146;&51467327&67&546327%77'7"3!2=4#''.''"''"13!2514#OONZ[U[#!x%Rh.@"t6x$y5R5FeeFtHddH1R6yUzv#5[fR!W?>Xԇnhhgg2#&I9I?hF:2S.2DCC1DDNOONOVwwVG9;I !U@*D9M7"eFGddGFe-7M}T#T!,4>XX>5DDDDDDDDDDDDDgggg?[': &'W]R @DDDDs 37;?CGKOSW[_cgk{"3!2=4#'21#!"&514637675#!35!35!#75#7535#35'#'#'#'#3533535335%3535!53#!5#!5#3hhggSVFeeFtHddHZ+!/#ɼSG  $EHg hG$GDggggh!eFGddGFe!׈i#D!t~蜜嘘噙K2霜33#6#52΋DTzDxs'+/37;?d21#!"&514637675#!35!35!#3#3#3#%3#3#%3#%5!3#;#3#3!!5!53'#53'#535#5XFeeFtHddH\* ΊGR%35ESWH˽5!eFGddGFe!׈i#D!t?ZCVDDFCDNNDCFzDNZf?2321#!"&5146;&=46;.76767&54632/#"'32"13!2514#"13!2514#*)&0 rZ9P5FeeFtHddH8P9^r;# "4dHFe12#$,.24""X""!!u"")(), -783j?Q8(eFGddGFe)8Q9x-(,IGeeGA?(,`FC%&&%%%%% # ]gs3277'&'7'7'77'7'>732671321#!"&5146;&51467327&67&54632'#"'32"13!2514#"13!2514# ) Dh?($K!#Rh.@"t6x$y5R5FeeFtHddH1R6yUzv#5[fR!W?>X'!",)+/CCU####%%&&:NV'' PM;8MNNNNNNMMOOMMO!U@*D9M7"eFGddGFe-7M}T#T!,4>XX>5N63,%%%%)**)42 1' '1&7 &716 619IIIIIIII7IIII97IJIIIIII:IIII89IIII7GGIID'=IUam&5146.'.51463!&514;21!2161321#!"&51463"13!2514#%"13!2514#5'37'#5"32654&>7>514#!"1>7%>#P97EM@NO8dc8PTBHG07P2GeeGtGddGgghh#BB5BBwwwg19OO99PPA$,F6E)$EeW#8OTHJ98PccP89GHYO8"eFHddHFeGhgghBBBB#zz{{#6J'/FF/'I8E45BC55D ,iu}"13!2514#'''.'#&''"13!2514#>732671321#!"&5146;&51467327&67&54632.#"67"3254DD1CCD2#&J8I>iF82S02gghh2Qi-@$r6x$y5R4GeeGtGddG1Q6yWxu$7ZfR!W?>XNZ[T[#!xNNNDDDD@>]': &'V]S hggh!T?*E9M8#eFHddHFe.8L~W T!*5>XX>5VwwVH8;HONNOD DR^1321#!"&5146;&51467&67>7.'.&'.7>7>5)"13!2514#%"13!2514#2 3.'.7>76&'.'6'76767&7676&6'&/Q.GeeG{GddG/Q<9|QC00 EKHA;NcR6RoK7E @6+hhgg$CC1DDZH 7Y!U+7 Y(`1~B9b? V9<@4Yl&;i)&: " '8IJKI8!eFHddHFe"8Q^Wyn  C*bC3 K@V I:M.\EBtZW:hgghDDDD'_   d9GH-0GI6']+'wC%,PC03*  ,VIcD# . :C1_+#$+*#$D'd254#""13!2514#"13!2514#721321#!"&5146;&5146;.56767&54632"'.?6&'.'#"'326'.'5dddDD1DD!dddd!! sZ9Q4GeeGtGddG8P9^r<#"4dGGe2 3"(%D_ !"#0)Hq 6ddddDDDDdddd"61374k@Q9(eFHddHFe'9Q9x-*,JFeeFB> +a$!R$ ; R^r,m* D'#)/37;?gs!53#!5#!5#335353/#!35+3'+!35+'#'#35#75#21#!"&514637675#!35!35!#"13!2514#γoa^ H <;  ɽWVGeeGtGddGZ,  gghh[͜ΘOɜ70 eFHddHFe ׇi"D!thgghD' R^"13!2514#!!&"13!2514#;21#!"&5146;2#"&51463&54632721#"32654&gghhkmH/MvDD1DDmGeeGtGddGj 8OO8rq8PP8dccchgghJKIDCCDeFHddHFedO98P\]P89Occcc9!34'&'&'&567676767616763232#!"'6367676453 )&'!)      )3&  8`   b!3!2767632#!"'676767>767>7>767654'&'&#"#&'67676324Q) J"  +" );#"*''*F(*:?C.1,'#5 <,V3.       ,$ !."GJ)"!'  QB44))2MH* 4$H63a!3#"'&'&'&'6726767654'&'&'"&'&547>76767654'&'"&'&547676324:433 ,)438"6-*)3 1K7//#')<&#),*%((L9%%/""::?=99%%1/ #43B5-, !09  &+-8<9(A@+*$,/*)/0=C76 8<!"'6767676763232+2+"'67676532+/## *!G=HA u u7 !v54:16>?CG($>?N>XME=%  s3  FP!3632#"'&'&'&'476326767654'&'&'&#""'65672#4OTa433$&%%EDM2(*$%/+*A732! !#,E?<oW?w 9IM^=/",-9613-. !+20+3N*)% *'#   6M!367632#"'&'&'67676767672#6767654'&'&#"4<4=>9=33!!*+<5/Q@A''31E@KH> bQQ/0..1-)&'(02021-.>B9=(*''OLrEjRQ31 34WWZ?? !40J6*(+!3!""547465676763!2#"'67>74( ,8Z- "   #1! ,V!32767654'&'&'.765&'&'&#"&'65676767632#&'&'&56764O0000U483$!!6#D((')+'14#$-0.I;: !&'2('FIV^7676322767654'&'&'"L_>43 &$66=   %$72&( ! 2(*+RS:9\:76))    (NT*.1.J445)'I!!&'&#2765#&'&'&'47676324'&'&'&'4767063632+"5' $)D//,+AA0.-11A78 "#$;@WJBC%&1    &;!!67654'&#6767632#&'&'&54767632W;44b12 55C//- (@B=G=<$$((FEU7+,?6LW,'4&>@G&'  6! <:LRED(( !&>0*:!!#"'6;54767632&'&#"32++"5476765:?,(' /` ^ "`$H"' X u   f!!2767654'&'"101&'&'&'67676763:3:;2+#"'&'6723276545(%&'S0#&"!'/IAB!#20J$j Y 1B]`r_=?2 -.?G;9+,2Y;<-3/8'+,$$C8>1*+&&  %$)946&&'-[""/H;EH!!+"56767654'&'&54763267632+"547676=4'&#"q   d ,..,4-+  %&6R&   $v  "'/.?$   "6!59=4'&'&'&547676767676763232#!"'6367676333i53 )'&!)     '4ψC%   8`   >8[_c!2767632#!"'4767676767>7>767654'&'&#"#&'6767632333( J#9" ):$!*'(+F();>C/1,'%6 ;-]+2ψC  %=$ !."EL*! ' QB44'(3MH* 4$O/6+]ae#"'&'&'&'6726767654'&'&'"&'&547>76767654'&'"&'&54767632333431 )*438!7.((3 1K7/-$(*;& "(-)&'(L:$$/""::?;;9%$00ψC!66?5--  " .9 &,-8=8(A?,*% -1()./>D66G.8<@!"'6767676763232+2+"'67676=333, GCBC v v8 !6&-"$ψC/(!A?N>9=35"++<5/Q@C%'23CCIF? cPS./ψCZ?@!34F3-(0,-?@;<)*''OLrEhTQ33 35VXR&*.!""546565676763!2#"'767333 '  ,8ψCZ,   !#1!~);RVZ&'6676767632#&'&'&5676765&'&'&#"2767654'&'&'.333&$-0.H;<!%'2&'FJU_<=77ۖ&('),)22 O000.V585!" !6#BψCH$&" ')/2')P=36!!/0;D::iOa*""(A'({54A@-,&%3)!  G8LPT#"'&'&54767632&'&'&#""'6767632+"5"'"&#"6767655!5!}#0367,-$$DFV&'#'! *$"&,->86#" H# XDD !3*##:%'44//- 23M$ !&&J4$ 0CWCCG8<@2767654'&'&'"'672#&54'&'&'676767632%5!5!%$70(( 2%--!M^;74 &(26=    }ݰS,,2.J445)'S:9[<56*+     (WCCG;?C4767672&'&'&'&'&'"616367632#&'&'&5!5!#"@?N!+'"   *$%(&,c2 #9<>I99 "YJBA(' #    55J:/0A :! YJBB%'1   % :;`i56+yWCCG+7;?6767632#&'&'&54767632'67654'&#5!5!` 54D//. )?>AJ:<$$()EHR4.*?3OK=44d/2"G&& 8 <:MREE'(!!'=0(",'5&>>WCCG6:>#"'6;54767632&'&#"32++"54767655!5!:?, ('  /` ^" G0%J & X u   WCCKFbfj"'&'&'67676763:3:;2+#"'&'672327654'2767654'&'"01015!5!E#3GCC !40J$j Y 2B]\v_=?3 -.?G;95($&(R0#&""FW%$C9<2*-#% &$*944(&'-[!"0F  ;EO-,3Y;<-307(+WCCGDHL+"56767654'&'&54763267632+"547676=4'&#"5!5!q   d ,./+6++  %%7RE$   #w #'..@"  "7@WCC@!!4767672&'&'&'&'&'"361:367632#&'&'&#"@?N!+* )%%(&,c2 !;?;I98!"IC@(' #  46J81.B 9 !=? 4 R s     $ < ] ~ Chess MayaChess MayaRegularRegularChess MayaChess MayaChess MayaChess MayaVersion 1.0 Version 1.0 ChessMayaChessMayac "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph64 bɉo1C $zvvzzzzsszpychess-0.12beta3/pieces/ttf/line.ttf0000644000175000017470000005624012161415524016612 0ustar tamasuserspFFTMz[GDEF&[h(OS/2*Tx`cmap(pgasp[`glyf_`Pheads6hhea B4$hmtx4+Nloca2maxpX namecXqpost5AZXvhea[$vmtx5d[Z%_<+C wC wDc6 "H  U  R fhf  ff9 : b: L G-(jN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a(<Th|"0@Zt. <6T.Xj|LL\@(Nf  : | !d!""d""#*#V#t#$.$\$%%$%%&X&&'B'x'((B72#"54   4 !!!%3# 1gh4bj45!!!!4b24 !!#52gg4R !3!!w6#!!6b !5!!!z 2 !!!#532U 72#"54   #'+/37;?CGKOSW[_c!#7'33#!333333333 33333333333aXY[Z224! >$ x FnNeg 2bl ` a :bd``DcZf`LbQaYXY123c b ;b' _w ^B``obM_`e| 0r   7i =^LVRR  ! nnRmn  !!53  5ibf%!!x!!7#!!jhx!!h3!fj3!!xgzjz!!zj5!!gzi! #'+/37;?CGJMQV[`fkpuz !  33333333 !!!!!! '37!# 6&5#7##67#67&'&' 5#'#'##6nnLbQ`fDcZ`` :bd a eNNKGnMFM L x[NYa 0 G #_4^""e1/).d.L=b7. @]2\(Ag#b/!`ARmn aLV=^  7i `eM_b`oB` ^ _wYYXabA1^.!&fR#^0  1BJb#1b2'>c2Z%AM0 F )9GkA654&+6' 5 .6 7>' >& '.7&546;&714'&#327653#"'&50&'47676324767676321#"'&'&5:1<32767674'&'&'&#"%*#4&567>7>7632#"'&54767>7>7>76#&'&'4&547676727:327#"'<567'27676327#"54767632>?!#&'&'4&547676727:327#"'<567'27676327#"54767632>?!#&'&'4&547676727:32#"'<567'27676327#"54767630>?VɌgggE9bvuEWUBsv`;8d8bwxAEvwa;9ȍggg[&j0%ma<="!10=Q;5 :?JL^r^i4:::_brrae8=j%*GNY@SP'1,.92EYHQ&,r!-(   #=$  ..H;4!&GBfcK:H (E (TN"jYU- $ )--%) (   0'w}.H;2#$H@geI:H(= (TN"jYU/ $ *.-%)-   0'w~/G=3"$H>ieI:H( (SO"jWW/%  *.3) (  0'wȍVgh g X,Sc;9EDwuDF9ab;9EDwtDE9aȍVghC##$>;rI?5,"YKTLO:9#6CZbq|[f7338e`wUAN-0&.CDf+I42-)2FCp3)  &   "!;:3 "+M>C$ *=* %)/ KCB3.f %  !2HJ?,'I&  - 03!00 :.* %'1 LBA4.f ! !2HK>,'I&  - 03!00  :.* %'1 LB?6.f   !2HK>,&J& - &03!8(  :. 4 !43)!&xdkRPb- $(,048<@DHLPTX\`dhlptw|!!!! ! ! '3#35#'37'3 '3  '35'73 333333 575  #7#7# 3#%3#%#53#53#53#5 3 5$9?$|a#}c[ /c2e36A1mg0R0b-0^1`yH`1ta"10bd``DcZf`LbQ  aXY44etd(M`bab]^CbdCeebbNeBh "_$^bYW2c06b3mW1R2W-1[1-I``0t2`<0 =^LV`b^_Jd^Sb?aYX0e50et)0b^Pc`b`:ebM_`egf  3"%7 x!bR 2 #5)!6 6  $(,048<?CGKOSW[`cgkosw{!!5!!! !!!!#!  !!! 333#3#373#%73#3'353'3###3'355 ' 7 7373 #7#7# 3#%3#%#53#53#53#5 3 5rnvrM:~:yJGJGN$zLbQ`fvfewc^U```\bb_Ua_U`Abftg~cbPes2[M'1#&bì?m5()* { a8a aXY44etd(M`bab]^CbdCeebbNe  F")+*! LVussT\TT^b@rbQcs2'Yy;4^v;bc` `<m``2 ?eN9)_@L:aYX0e50et)0b^Pc`b`:ebM_`egf4 #'+/37;@CGKORVY]aeimqux}5 !53#53#53#5#'3#'#3##77!# 3377'55'3#3##'353'3#373#%73#3#33 33 !!5!!!!!% ! !!! eNNbbeeCbdC]^ab`beX;1`Z6D`%s2_#c,b?CKI>y!>=>aYX0e50et)0b^Pc`b`:ebM_`egf0$(,048<@DHLPTX\`dhlptx|!!!#!!!!!!!!!'3#377'55'755'335'35#3'#35'3535 #''3 333 #7#7# 3#%3#%#%3#%3#53#5 3$y#$ $$ 3l[ fds2cQ[aE \ rfsg_ `rba'`s`zasa"'`sbtat`t`2dvcYf`LbQaXY44etd(M`bab]^bdeebbNe!C5 Ys2Qccbbb^__^dWf\ 6a`df q^ q(bira`s``r)a`tsz``#rgerLVaYX0e50et)b`:ebM_`e24 3#524& R2 #'+/37;?CGKOSW[_cgkosw{!!!!!!!!!'3#377'55'755'335'35#3'#35'3535 #''3 333 !!#7#7# 3#%3#%#%3#%3#53#5 3 Y2U2Ya 3{[ fds2cQ[aE \ rfsg_ `rba'`s`zasa"'`sbtat`t`2dvcYf`LbQ 2aXY44etd(M`bab]^bdeebbNe ZZZYs2Qccbbb^__^dWf\ 6a`df q^ q(bira`s``r)a`tsz``#rgerLVaYX0e50et)b`:ebM_`e+  $(,048<@DHLPTX\`dhkptx|'3#35#'37'3 '3  '35'73 333333 !575  #7#7# 3#%3#%#53#53#53#5 3 5[ /c2e36A1mg0R0b-0^1`yH`1ta"10bd``DcZf`LbQ^_ aXY44etd(M`bab]^CbdCeebbNeYW2c06b3mW1R2W-1[1-I``0t2`<0 =^LV^`B`b^_Jd^Sb?aYX0e50et)0b^Pc`b`:ebM_`egf/ #'+/37;@CGKOSW[_cglptx|5 !53#53#53#5#'3#'#3##77!#'73'3'3'3'3'753'3'3'3'35'557'333 !! ! !  eNNbbeeCbdC]^ab`b=!>I>yrCK$bW#c7%s2`D6;1`>eC`;f``D[`ɑFE} nFD"ߙ@Di&-rn55//LJeabZcV8xK!!+&'&'&'&5367654'&'�#"#54767632hsk((TVO77&($"4<)) 13mN//x2!&%BBYMK#%fKLuu--JKj$K+,64h{><"!* ,,Z>+VT"!_`XV$Gx!!3##!5#h#aaw K\Kx'!! #"'76767654'&'&#"!!h2J22QRayx2^OJ32>HU )TY#7!`_ ZW6B0/^,FMs5<$%?=Z[>@^Rz2!!6767654'&'&#"#"'&'&'6767632373#5H) $F/09E8:&33л3e*+Din;"!'D&$45[lwW**')1q Rz7!!676754'&5&'&#"3367632#"'&'#  &2####/#˺0/=SA@ #45A:56z9y9I'(<;h[6P6J32%&q<#%HGfvf10)*;Rz4!!6767654'&'&#"#"'&676763233#5 (, &$ 8;Bh2J ?:J;31z5+A !%&AJ}>((^m:9##>Rz!(!!327653"'&'&'4'!%3#"y1" ++?@PYBB%'$DEco6z10cLN+-Z\5<TUw~}87Rz!!#5347632&#"3#]]:8U;\0&&zguDC$/z6!!2765#""'&6767672753#&'&5332=DEp- (}~?>!!35Hp==?tLMvlz][[ZZ"$HW{ {}sq&' x _^/1IHRz!!336;#4'&'"ݻ:7`2pzq WWBT![- !3!!!##w^ʔ 9*!3!!!!654##47676;wwgoh?ED~ nEC!ߙ@Di6rn55..MJe_d]`Q=N!3!!+&'&'&'&5367654'&'�7654#"#54767632wdk((TVO77&)$$2=)) 13mN/.y2!&%BBZLK#%fKLuu-0GGnK+,66fvC<"!** ,,Z>+VT"!_`XV$( !3!!#3##!5wJaav;K\+!3!! #"'76767654'&'&#"!!w1J12QRayx2`NI32> 2خp4'']Z '*6'  !3!!!#!ww0U 9'N!3!!367654'&#3254'&#5&6763!&'&'&'4'4&5476w|/2Ge :wg@>й5c+)Ehn:$ ";!5!!!3367632#"'&'#676754'&5&'&#"º10DE!!_9z#щvpVT0;:?N^cc 8!5!!!#"'&676763233#56767654'&'&#"{89Dg3K?:J;31 (, &$ z?(']l:9##>_6-A !&&@J}?;!! ,!5!!!3#"327653"'&'&'4'!o6y1" ++?DL\?B%'$DEzz7910dNN +,Z^5<TUw~!5!!!#5347632&#"3#]]:8U;\0&&zfuDC$/*:!5!!!"'&6767672753#&'&5332=2765#"o(}>>!!35Hq<=?tJMvlCFp. z{ ||sq'& x _^/1HI[]ZZZ"$HT!5!!!336;#4'&'"޻:7`0pzp WYCT! [Rz"!!#"'&'6767632#&#"6GK:<BB|L>DE!!_8z$ъtqVT0;:?N_ea  4 R s     $ < ] ~ Chess LineChess LineRegularRegularChess LineChess LineChess LineChess LineVersion 1.0 Version 1.0 ChessLineChessLinec "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph69 bɉo1C o444 z44 n  n   y t zzzzzzzzpychess-0.12beta3/pieces/ttf/mark.ttf0000644000175000017470000007207412161415524016620 0ustar tamasuserspFFTMzs,GDEF&s(OS/2@x`cmap(pgasprglyf^`h headd~6hhea >4$hmtxzk&NlocamaxpX name#npqpost5Aqvhea sH$vmtxX.slg2_<+C C Dc! "H ffc111{w-~-LL~DDDdhDTDsi[WmWsi[WmWjN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a:D JZ p|FT 2 T v P4F ,X LpR< , !7!!67!!>%!&'!&-& 5!5%!5%!5%!5)!!!!!!!!!!!!!!!!!@ (@GC0gERLgayO}eyTfDEwDIHD"D32D"D#D"!C#D,D53DDC$!#DDDDCHDCDDDCDDGDDD!!Yk%MY]u ,08H[mq7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&5'76'&#'&'&'&76767676016776363"%436'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&'&5&'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'0&5#"'&54763272#"'&5476"327654'&                   @  &    *d    A   )   +$ 9 D"Z&  !%!&! ! 3,(,  #   " >DZ)(A\*q112 " 1-    $'(6%    >  % '3     tEM!  6  2vEN 6 2U ! :-6G2L6K'*"J-!*#>>;@.>:>>>xB//BxD??;#8FX5%++*5MS2"")&>>>'OO/. &%=J/332B8,?1/0,EA/101A   h  '       B    I      "    \     b! $ &"!(# '%,  !(O      = 0   *RU#  !,  /x  R [$ ' "|?  7 &  '  b?" :) '   byqg 3/ HRQQ(QQR\K(0NeQRqq=f~=5>>59lxA:064RQQWh{=-?&&46LK;=--;=MJ6445IS9;>#$69 !! 98"#{ !4632#"542#"54xO9ehhgRhhg7Phhhhhggh#  &,27=CIOTY^chmrw{-67!>767%!&'%!.'!!.'!!.'!.'.'!!&'!%.!5%5%!5%%5%!5%!5%!5%!5%!5%!5%!5!!!!.'%5!!!%!&767 &'%&6'&'&47676&7626&"R =( ; ,d T} V2 vA0]22 ] >n+L-j1!!4m d%MM4.MK BB@NUOW! ! WOUNAD$C2H#D D"D$@D'DD""D"D%C.D(D%D!#D)C*D&DDDCHD   DDD+KTYMCaNFI:76y! ! YQQY ! !y67:;wz 3"&"5432%"5432u8O#hhhhhgOhhhhhhhhz #5"54327"5432P7dhhgRhhh9Oyhhhhhhhh # ,PUZ_djpv|!&547&54632654! "32654&'&47676&7626&#"&6'&!!&!!&!&!!&3#.3#.3#>3>%63#!%'!!'!!!5!557#577!5%!5#5'5%5#5!5!'!5!7!5!%!!!!IwehC+srll9OO98PPRBcARQ/:!!:QE>{ZBPNVL4 *V+g0+O zE9 "!{{Pi6zO<9$/>YY>1wɩ""""_AQQA_?kq?/D!hD.rD3vCaD$zD"A uD$zDDDDD)D%D DGD%*D*DZ&G#D)DDC|DDDCDCD# "(-27=CHLPTX]ciouz5!!!!!5!!5!!5!#5%57'57#5!5!5#575!5%!5!!!!!%3#%673>73#>3#.'3#.'!!&%!&'!!&'!!&%&47676&7626&#"&6'&!&547&54632Si {"! ӎE97#  0+OyI\8 @|VBPN{{ERBcARQ/:!!:QIwehC+srgDCDDDADCe)D#D&G*D*DD%g D!%D)DDCDDDDDD$A "D"D$CD3D.D!j_AQQA_?kq?6zO<9$/>YY>1#/5;@FKPUZ_ejqw}6'&%.''&5467$7%!5!7!5!75!7!5!75!%!5!'#53'#537!5!%!5!-5054'!%.'!%>7!-%&'!%.'67>'!%.'!%67!%6?'.'3%.'!!!!!!!53#%!!gm mn lI!!\4r-^Ez*yY?VV??VV??U"=,u>g"vy5 $.lzwr/T8r 1KS " 1R#+   =1<;;=- !LHFFewHLbmFHllGHlmFD!yC"xD(lD"yDbD-qC-qD!hD]D$D,D$C #DDD  \D"@.D*D"D DVCHDVDDDD# $)/5>CIOV[afkpuz%!!%3#!!!!5!!.'!.'36?67!.'!>'!!%.'>%%&>7!.'!054'!%5!5!!5!#53#53!5! 5!!5!5!!5!!5!'&76454365454354#547>7%&76776$ %.''&5467$712 =  #+R 1T  K  1r8r/Tz.'M y5g"Tu9=%gi ig 2T]]\\]`Y\]]?Z]A6g9+`ll!I!!\4r-^Ez*yY?VV??VV??UDDDDD2DC D"D*D.D"@DDD D #D$CDSD,D$DD!C-D-DD"D(C"D!t989:dccbbcdcabca_?_m Oj  fV0jjd !LHFFewHLbmFHllGHlmF#  %+06<BHMSX]bglrvz~%3#53#53#!!!!5!!5!!&'%&'!.'!&'!>7!%.'>7!%5'!5!'%5!75%7!5%7!575!5!>7!3#3#3#!!&432U js-v>  s t~\Z y}q19Jx"r F  @$@A|DDCDDDCe4D0D#D+GDD"DD |D)lDkG#fDYD[DD+"DDCDDGDW6A#(,04:?DINSY^djpv{!!&432"547>54#"#!!53#53#53#%>7!)5!5!5!5%5%%5!!5!%5>7!.'>7!&'!%.'!%&'!%&'%!!!!!!!!3#3#3#@$@A|fh'UgkYey   rx"9Rq}y-Z ~ts >  -v jsU6Ag0!=or< +ghhDDC"DDDDDG#DD)D "DDD +G#D0D4DCHDCDDCDDGD # $).4;AFJPU[afkpu{3#!5!'%5!'!5!'5!'!5!'5!'#53'5%#&'3%&'%!#5%5!3#4&7%%47!%467%>7!%67!%67!%673'6?%%!.'.'3%.'%!!!!!!!!6$&!67667&&'.'.DDY d ukG  /BB8#&UKQ  D&VcP(CClxr \@  ֟C= .NSQ 'b[L2+bA ٟBa,1es*@F:&34%;E@+p_3DD yD dC"zD!eD"zD/sD5yD h""(o3#D eD!D!D)D&C"D1D&D)D.DD& 6"D!D"DCHDCDDB-BOfB-"5QeEN66EeQ5h# #'+/37;?CGKOSW[s!!!!!!!!!!3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#'!4;234;234;24+"!4+"!4+"3#%3#Ug$geiehfg3 4C2!4D45UCHDCDDDeDDDCDDDDGDDDDCDDGDDDCDDDDGDDDDCDDGD ciiCkgAii6667568DDD 3#522#"542#"547P#ggh!hhhPOhhhhhggh##'+/37;?CGKOSW[_cgkosw{3#%3#!4;234;234;23#53#53#53#53#53#53#53#53#3#53#53#53#53#53#53#53#53#!!!!5!!5!!5!!U$geiehfgDDDQciiCkgAiiDDCDDDDCDDDCDDDDCDxD#DDDC# 04?CGLQV[`ejou{%!&767%276&76764'&'&6'&"&6!!.'%5!%!!5!!!5!5!5!5!5!5!5%5!55!5!%.!!&.!.!!.!!.%!.%!&6!>%6 d%MM4.MK / RZT[!"!!YSYQj1!!4mL-s+> ]2 2UA0vK2 C} Bd ;   ( %R ˶+KTY===99~"!"!\TT\!"!"~99#Dg   DDDCeDi&D*D)C!#D%D(D.D%C"D"DWD"yD[D'z@uD$pD"{D rH#eC2uD$zA# %+06;@EKRX]aglrx}6$&!67663#!5!'%5!'!5!'5!'!5!'5!'#53'5%#&'3%&'%!#5%5!3#4&7%%47!%467%>7!%67!%67!%673'6?%%!.'.'3%.'%!!!!!!!!L2+bA ٟBa,1LDDY d ukG  /BB8#&UKQ  D&VcP(CClxr \@  ֟C= .NSQ 'b[B-BOfB->DD yD dC"zD!eD"zD/sD5yD h""(o3#D eD!D!D)D&C"D1D&D)D.DD& 6"D!D"DCHDCDD!##(,06;CGKS[`fjnsw{!!!!!!&'1&3!>!!76!!!5!!'!!!!!!&'!66716-73!7%617!!5!1'%5%7!5!75!75!7!5!'!5!/!%!5'%5!7!5'&'!'%'1' '1&7 &716 61!!!!V X/%#~FDzCD#fyIWDe :  GMI5 @ &k)PI|CA%g2EEXc)8 Zk2 a 1?DCE3C9IIIHIJHHIIIIIJHHCHDCD  D"wD$DDDDD"fDGDDD gC`D CD75D C"eD&DHDDD%hDDDDDiDcD 3  3ACECIIIIIIIJIIIIGGKH DDD-%2#"54iiijhhj~zJ <%!&767 &'%&6'&'&47676&7626&" d%MM4.MK BB@NUOW! ! WOUN˶+KTYMCaNFI:76y! ! YQQY ! !y67:;-.2#"54iijiiii.2#"54ijjiiiii" ,P!&547&54632654! "32654&'&47676&7626&#"&6'&IwehC+srll9OO98PPRBcARQ/:!!:Q6zO<9$/>YY>1wɩ""""_AQQA_?kq?"#9&47676&7626&#"&6'&!&547&54632DRBcARQ/:!!:QIwehC+sr_AQQA_?kq?6zO<9$/>YY>1L/6'&%.''&5467$7gm mn lI!!\4r-^Ez*yY?VV??VV??U<;;=- !LHFFewHLbmFHllGHlmFL'V^%%.''&5467$7454365454354#547>7%&76776$'&76gI!!\4r-^Ez*yY?VV??VV??UeT]]\\]`Y\]]?Z]A6g9+`ll!i ig  !LHFFewHLbmFHllGHlmFccbbcdcabca_?_m Oj  fV0jj989:!!&432@$@A|6A("547>54#"#!!5%!!&432@h'UgkYe$@A|g0!=or< +ghhh6Aq/7&&'.'.6$&!6766es*@F:&34%;E@+p_L2+bA ٟBa,1/"5QeEN66EeQ5hB-BOfB-/4+"!4+"!4+"!4;234;234;23 4C2!4D45u$geiehf26667568gciiCkgAii72#"54ijjijhhj%!4;234;234;2$geiehfciiCkgAii~zJ 0%!&767%276&76764'&'&6'&"&6 d%MM4.MK / RZT[!"!!YSYQ˶+KTY===99~"!"!\TT\!"!"~99q6$&!6766L2+bA ٟBa,1B-BOfB-tu 1' '1&7 &716 61IIIHIJHHIIIIIJHHIIIIIIIJIIIIGGKHDJ ,P!&547&54632654! "32654&'&47676&7626&#"&6'&SIwehC+rrlm9OO98PPSBdASR.9!":Q6zO=9$.?YY?0wʪ!!!!`APPA`?jp?Du/%7&&'.'.6$&!6766Zh&:>5"./!6>9'fUoEx- X9q;W,yc#6QdEM66EdQ6gC-COeC-D'V^%%.''&5467$7454725454254"547>7%&76776$'&76_I!!\4r-^Ez*yY?VV??VV??UeT]]\\]`Y\]]?Z]A6g:*`ll!j ig  !LHFEfwHLbmGHlmGHllGcdabcbd`bb_^?_m Nj fV0jh 9889d` <)&767 &'%&6'&'&47676&7>6&"d%MM4.MK BB@NUOW! ! WOUN,KTZND`OGI976y! ! ZPPZ ! !y679;D 3/%4+"!4+"!4+"!4;234;234;23 4C2!4D45u$geiehfg/666756giiDkgBigD (%"547>54#"#!!5%!!!&432rh'UgkYe$@A|g0!"gggcccdkhhggeeeeggghgggcccdjggghhhgcccc)?1 c i'/7?GOs432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"6767654'&#"#6325!!51ggggcddcggggeeeeggggggggcddcggggghhgcddcS)%?I$%f>0( <+SMR`gggcccdkhhggeeeeggghgggcccdjggghhhgccccEsh&#&/;% "!G #.G33 47+P2?2'Df7pUULtK'gggcccdkhhggeeeeggghgggcccdjggghhhgcccc^C'(J Y(H>#X #$'|4D#,s@;_0< '/7?GOZ_432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"33##5!55!#1ggggcddcggggeeeeggggggggcddcggggghhgcddc|f\gggcccdkhhggeeeeggghgggcccdjggghhhgccccYb  '/7?GOx432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"727654'&#"#!!517632#"'&/1ggggcddcggggeeeeggggggggcddcggggghhgcddc~t&')Jcm  <[E:9HIy\BGgggcccdkhhggeeeeggghgggcccdjggghhhgccccQb(-H27OY>)(C6=vNO*-Y* W'/7?GOw432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"67632#"'&'&56767672#&#"327654'&#"1ggggcddcggggeeeeggggggggcddcggggghhgcddc3<03pDD$$+7A@4'c(,J{eA; fw$-'5P//,-LO20gggcccdkhhggeeeeggghgggcccdjggghhhgccccEGFoD:-$$[ڝj?,H41lx1-$,46LG3320 m'/7?GOW432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"!#!1ggggcddcggggeeeeggggggggcddcggggghhgcddc8~?VgggcccdkhhggeeeeggghgggcccdjggghhhgccccZL W'/7?GOv432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"&'&'&54767632#"'&5476753765&'&#"727654'&#"1ggggcddcggggeeeeggggggggcddcggggghhgcddc#":AHQ?Lt;OzCW)R150G& 63EK273,AA+43)BP.$gggcccdkhhggeeeeggghgggcccdjggghhhgcccc2# (=20%C$%p9  7[>P5@nH5$)G'$eF)%&'#=$&<8'.# i'/7?GO\2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54'2#"542#"54#"3276%6767632#&'#"'&'&'&54767676;4'&#"gggdddckggggeeeeggghgggcccdjggghhhgcccdx@J3E" 0g %7^g6? b6M21  HjKI2 ggggdccdggggeeeeggggggggdccdgggghgghdccdI3P36!$(c*7#$  ( "#!  R%2 i'/7?GOft2#"54%2#"542#"542#"54%2#"54!2#"542#"54%2#"542#"54%2#"5437672#"'&/#327654'&'"dccd.hhg6ggg5ccd.ggg6ggg1eee3ggg5ddc.gggg6a1('L8Bs0)#ggP) $\Q+dccdhgghggggdccdggggggggeeeeggggdccdgggg8QLZ > F8XD8ZJ1 i'/7?GOaq2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54'2#"542#"543#5#"'&747673674'&'&#"gggdddckggggeeeeggghgggcccdjggghhhgcccdff9s2*8Bu]7)L#%*T'ggggdccdggggeeeeggggggggdccdgggghgghdccdBT=}LZ9X3D<9)L< i'/7?GOlt2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54'2#"542#"543673#"'&5476763%!&'&#"gggdddckggggeeeeggghgggcccdjggghhhgcccdt3"qk'24;@?D9Qy$FrggggdccdggggeeeeggggggggdccdgggghgghdccdD); sK1NJ[F?*"OLP!+p i'/7?GOj2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54'2#"542#"545476763'"3###5gggdddckggggeeeeggghgggcccdjggghhhgcccdJ%(&fkggggdccdggggeeeeggggggggdccdgggghgghdccd=U"5 K )?L)L '/7?GOv2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54'2#"542#"543276=#"'&'&5476763253#/3274'&#&gggdddckggggeeeeggghgggcccdjggghhhgcccd u9ih7 ?:La6 f $?P *Nggggdccdggggeeeeggggggggdccdgggghgghdccd<T!7D= +?JH>C*'CB I";$@$FW1? i'/7?GOj2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54'2#"542#"54632#4'&'&#"#gggdddckggggeeeeggghgggcccdjggghhhgcccdo:2-#3f&"n gggggdccdggggeeeeggggggggdccdgggghgghdccdT8C[& K ) s '/7?GOW_673#53%432#"432#"432#"432#"432#"432#"432#"432#"432#"432#":JYf9>"iddddggggggggddddggggggggeeeeggggddddgggg)?1 ccccc-hhg6ggg5ccd.ggg6ggg1eee3hhg6ccd.ggg i#+3;CKS[cksw6767654'&#"#6325!!5432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"!3S)%?I$%f>0( <+SMR`ggggddddggggeeeeggggggggddddggggggggddddEsh&#&/;% "!G #.G33 47+P2?2'Df7pUULtK' ggggddddggggeeeeggggggggddddggggggggdddd^C'(J Y(H>#X #$'|4D#,s@;_0<6gggcccdkhhggeeeeggghgggcccdjggghhhgcccc '/7?GOW_c5!#'33##5!5432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"!3|fggggddddggggeeeeggggggggddddggggggggdddddYbgggcccdkhhggeeeeggghgggcccdjggghhhgcccc (08@HPX`hpx|727654'&#"#!!517632#"'&/432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"!3~t&')Jcm  <[E:9HIy\BGggggddddggggeeeeggggggggddddggggggggddddQb(-H27OY>)(C6=vNO*-Y*Cgggcccdkhhggeeeeggghgggcccdjggghhhgcccc W9AIQYaiqy327654'&#"'67632#"'&'&56767672#&#"432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"!3-'5P//,-LO203<03pDD$$+7A@4'c(,J{eA; fw$ggggddddggggeeeeggggggggddddggggggggdddd-$,46LG3320LEGFoD:-$$[ڝj?,H41lx1rgggcccdkhhggeeeeggghgggcccdjggghhhgcccc m'/7?GOW[!#!432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"!3m~?VggggddddggggeeeeggggggggddddggggggggddddZLhgggcccdkhhggeeeeggghgggcccdjggghhhgccccWFNV^fnv~727654'&#"3765&'&#"7&'&'&54767632#"'&547675432#"432#"432#"432#"432#"432#"432#"432#"432#"432#"!33,AA+43)BP.$50G& 63EK27#":AHQ?Lt;OzCW)Rxggggddddggggeeeeggggggggddddggggggggdddd=$&<8'.#cG'$eF)%&'# (=20%C$%p9  7[>P5@nH5$)ogggcccdkhhggeeeeggghgggcccdjggghhhgcccc i1>FNV^fnv~6767632#&'#"'&'&'&54767676;4'&#"#"32762#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54#2#"542#"545!!& %7^g6? b6M21  HjKI2 @J3E" 0ggggdddckggggeeeeggghgggcccdjggghhhgcccd6!$(c*7#$  ( "#!  R%2I3P3ggggdccdggggeeeeggggggggdccdggggggggdccdЈ i $(08@HPX`hpx327654'&'"37672#"'&/#!!2#"54%2#"54!2#"542#"54%2#"54!2#"542#"54%2#"542#"54%2#"54fP) $\Q+gg6a1('L8Bs0)#gdccd.hhg6ggg5ccd.ggg6ggg1eee3ggg5ddc.gggF8XD8ZJ18QLZ >Hdccdggggggggdccdggggggggeeeeggggdccdgggg i$,4<DLT\dltx&'"727673#"'&547632#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54#2#"542#"545!!n6"Yek $@e@==Hu: gggdddckggggeeeeggghgggcccdjggghhhgcccdr 37?i1MK:)/OJHU=#/.DggggdccdggggeeeeggggggggdccdggggggggdccdЈ i!)19AIQYaiqu3674'&'&#"3#5#"'&747672#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54#2#"542#"545!!h)L#%*T'/ff9s2*8Bu]7gggdddckggggeeeeggghgggcccdjggghhhgcccdX3D<9)L<BT=}LZ9ggggdccdggggeeeeggggggggdccdggggggggdccdЈ i$,4<DLT\dltx!&'&#"3673#"'&54767632#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54#2#"542#"545!!t$Fr 3"qk'24;@?D9QgggdddckggggeeeeggghgggcccdjggghhhgcccdP!+pxD); sK1NJ[F?*"OggggdccdggggeeeeggggggggdccdggggggggdccdЈ i"*2:BJRZbjn5476763'"3###52#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54#2#"542#"545!!J%(&fkAgggdddckggggeeeeggghgggcccdjggghhhgcccd=U"5 K )?L)LggggdccdggggeeeeggggggggdccdggggggggdccdЈ  08@HPX`hpx3274'&#&3276=#"'&'&5476763253#/2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54#2#"542#"545!!m *N u9ih7 ?:La6 f $?xgggdddckggggeeeeggghgggcccdjggghhhgcccdW1?T!7D= +?JH>C*'CB I";$@$ggggdccdggggeeeeggggggggdccdggggggggdccdЈ i"*2:BJRZbjn632#4'&'&#"#2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54#2#"542#"545!!o:2-#3f&"n ggggdddckggggeeeeggghgggcccdjggghhhgcccd|T8C[& K )ggggdccdggggeeeeggggggggdccdggggggggdccdЈ i'/7?GOt2#"542#"54'2#"542#"54'2#"54#2#"542#"54'2#"54'2#"542#"54&'"727673#"'&54763gggdddckggggeeeeggghgggcccdjggghhhgcccdn6"Yek $@e@==Hu: ggggdccdggggeeeeggggggggdccdgggghgghdccdr 37?i1MK:)/OJHU=#/. 4 R s     $ < ] ~ Chess MarkChess MarkRegularRegularChess MarkChess MarkChess MarkChess MarkVersion 1.0 Version 1.0 ChessMarkChessMarkc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph69 bɉo1C ""HJJuJ3pychess-0.12beta3/pieces/ttf/medieval.ttf0000644000175000017470000010235412161415524017447 0ustar tamasuserspFFTM{SGDEF&(OS/2=Kx`cmap(pgaspglyf6x!`xheadeZ6hheaD4$hmtxboNlocaz JmaxpX name post5Avhea $vmtxb9!p|_<+C .C .Dc> "HX   15g111bb##GGD.Z6Z<D8DD^Xq]aGXjN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a&:Nbtp  H` p  6h,dF "$"4"##$$%&'"'()X)h)*f+@+v,h-./j/0\001^122x23&334X445l556L67778489 99:h:; ;;]Zfa:&Y_\l`4*`vvb WeEfe``DG^Aaj!;`!oeGy a_>)!` ^:Pb +jf}O^:_f'z`eck3\)v_` `WE[[``CDB!!Yk%MY]u -19I\nr7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676767'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&7676767601>776363"%436'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&'&5&'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'0&5#"'&54763272#"'&5476"327654'&                     @  &    +d    A  )    -$ 9 DZ# !$$% 1.&,! "   " >DZ)(A\*q112 " 1.   %'(6%    >  % '3    # tEM  6  2vEN 6 2U ! :-6G2L6K'*"J-!*#>>;@.>:>>>xB//BxD??;#8FX5%++*5MS2"")&>>>(NO0/ &&e<4>>49lxA;/64RQQWh{=- ?&&47KK<<,,;"%68!!!!89""2 !467"7#4γ~GcC~eECCC+ '6B]e "%'7!'77%#7%#7#7>76'&$%676''&/67&'&'&7>7654#"'4#!"!%.'&'&7&766!546'7357 37'7?&7&67?5773& 573& 573& 5 3&  &'&.7.7676&#&7 543?'353%V?`@!B_@>b@"A`A@[?=[@ IxTC% vnrYZN=`JV~Q:$7v 9(I 9Z^E~wL?1TDWE2 w,NG>' ߭V/2 0NHLZfa:&Y_n]\^0Y`<`/`'f&\_>9X0aaؗd^/mCgaY `3W#g^X%`$_*_1`;G`["!``CDB][( 33"&%"53·cG~1CCGd;D2 #5265532~FeDdGDDD2 ,8=BRgq  '+/3;?CFINRVZ^bfjnr%!54#!"7!53&54632&7%&#"654&#"67/&#"&'!!;&654&#"!654&#"76325))2%632'#2!54675#"&5'&5463267&533257#4#"#4632'73575357 &'7 7 572>7"#57>7:3&5767:36&54 5 3 5 3&&7&676'7777&'763?'3&'7 53%'7!'77%#7%#7#7DxCCdNSyV#'}Tv 6 Q9x:Q h,j,H<N79M<l vT}'$TzS~@B?B'. 4''o iS77PO89Nh p&(43VUTVVTUVdGFdWZfa&Yӗ( >_%9\?3!<06$J%00].Dxy3UT%TFdhP$]&kI   3oZ``DG*'C E`/_?`@!B_@>b@"A`A@[?=[@!!Gˇ)(Uy S wT h2"9R ,86, R9"t=9:Y  6NN6  `G Tw S yU()1DDA0#R p$":OS8dd8RO7@"$p R!4==<<2GG^:_f_':`(! ^9Qa? <7a$J%0^/R^z}VUa'Ie`Q  /^O`!(__w`s`r[2!"p``CDB*[CNGa?@@A@?@A@AA?@- #(+.26>BFJQV[`einuy~&%#7##7##7#7''7'7'53&'7'37!%&'767777676'7'7&'&'3& 5 3 5736545773&572757 7 '7 &57'5357'73'#2!54675#"&5'&5463267&54632%632"3254"13!2514#654&#"67'&#""13!2514#"13!2514#=[@f@[?cA`Ab>b@^B_@a?`@:_E`WC0*'LGuD_3oZ$+@)  t]&hP$Fd=f`5#3!x`c9\._% &Yӗfa:ZS77PO89Nh p&(43dGFd. 4''o i5bbau%%V%%;Y?!#?Z;""""w%%V%%C?@AAA@?@A@@@)aG[CQ*BCD``@[2!"p+`J``_!(_q`^B e`QI3a'&^[a yas9^ e`(!_':[_f^:OS8dd8RO7@"$p R!42GG20#R p$"w""""s&&Ec5B>'5cE#)=%&&%"""". $0HTan  %*/;?CF%#7##7##7#7''7'76'&'476'&'&676&7>76'&&67>76'6'&676'&2!5463654''.7&'67&76'735773.557& '?&7?&773"&'&7 3&3.3&&'&6&6546 &&7!% '5'5"13!2514##7''3=[@f@[?cA`Ab>b@^B_@a_@`G"%%& ej9x, /+z+ .!R< < &'(*  '(   %&>9QGH=;:>TcET 55JVXZ-YB+P6QHZfa!?Y\lvSU_0'\,1 `!e <` * f$eFd#v]_!Z 6d L:Q f N!D+`:KwM* "" ""Ό_GGC?@AAA@?@A@@#&.&"]PxM1F;o1!t@2# 0+,L 0,,L((8('$< .& O9gg8P fI U$'!V8[ C0vTSFq[U_`I9!^:_f>>_s_:`T8D^)(6ma zlaj^9.I4\H^ {d`.{M_ m_+/U`)hc`P["%CD``)$H`wKa,*""""Z[B, %*/49>BGKSW\bgnsx%2?ow%#7##7##7#7''7''735773.557& '?&7?&773"&'&7 3&3.3&&'&6&6546 &&7!% '5'5#7''367'&76676'#"'&7632654''&767>'&''&767>'&''&%&'676&7>76'&764&56'&'&7>762!5463654''.7&'67&764#!"!=[@f@[?cA`Ab>b@^B_@a_@`Zfa!?Y\lvSU_0'\,1 `!e <` * f$eFd#v]_!Z 6d L:Q f N!D+`:KwM* _GGuX#9.7<4F?%#18Fe521J& &;)1/xhti< &J A98_ (t)##*r 3B$68%%87$#"! $"   %% N9QGH=;:>TcET 55JVXZ-YB+P6QH9DVD2C?@AAA@?@A@@^:_f>>_s_:`T8D^)(6ma zlaj^9.I4\H^ {d`.{M_ m_+/U`)hc`P["%CD``)$H`wKa,*9Z[BuOF$ / 6DT) !%dGF48$!CC(&0v@1#" )10OR~B. *u89_ B9?t%(o;E.\y ```a##7 ") 6}O9gg8P fI U$'!V8[ C0vTSFq[U_`I9DD#& #).38>CHMRW\`dgjnrvz~'7357 3 7>? &'?73&>773&67&'.'7 &&&&6&' 3?'353 '%'77%#7%#7#73&'7!5# 3 !54637.567!5!&5463!"1!'"1;532514#!6514#!2!!2Zfa:&Y_#}W;\yx#%:`x`] f$$ i  `N !'1j>lC%Z=``DG_#$2_@`B_@>b@"A`A@[?=[@dg=``@]$#P9yUl5xV!!44""Tz5 mTx9P^:_f'z`aW~<z^;zzj;^e(HXaf$(`^#j`$b_kMl_K`9Z`X``CDB`e["e[$ @AA@?@A@AA?@"eϓ/$@aBate9P:c}D9OUyu"!""""!"yUO9D@}c:P9e) *29UY]aeoty"32654&'.'##>7!5!&546323!4#!"!!3262!'4637.5673!&''7357 3 7>? &'?73&>773&67&'.'7 &&&&6&' 3?'353 '%'77%#7%#7#73&'7!5# 39NN97PPV$G$Z,,5xVTz2*DWE2DV ÅÅKgQz6OHP9yUlOY9hi9Zfa:&Y_#}W;\yx#%:`x`] f$$ i  `N !'1j>lC%Z=``DG_#$2_@`B_@>b@"A`A@[?=[@dg=``@]:P88OO88PpxwqrvD9NUzzUO8DvzCE"ہjf9P7hf9P:ciγ``^:_f'z`aW~<z^;zzj;^e(HXaf$(`^#j`$b_kMl_K`9Z`X``CDB`e["e[$ @AA@?@A@AA?@"eϓ/$@aBa>DHT\hpx ")-27<@DIMSZ^bglqvz%4#!"!%4635#&'6776'3273273273273277'#2!!5"&54632'254#""&54632'254#"254#""&54632'254#""&54632'254#"'.7 #"&7 #"&5 &/!!!7)67"&54632#7##7##7#7''7'7'53&'7'73&#"?57&'7357&#"7'?'7&'??&5?'773& 57'773&#" 5 '7 5'773& 5'7 3&%75'7%7677&' 3?'3CDxDO82C+'<>)*>AA;'.9C@C"%$?;'/C87Pd:RR:9RR9CCD:RR:9RR9CCD%DDD:QQ:9RR9DDD:QQ:9RR9DDDST C23C;O78NF?N68N5B23DTU IY11_:QQ:9RR=[@f@[?cA`Ab>b@^B_@a?`@:_E`WC0*'LZ$'aF?Y'  #_J%\ \`n'O`^ k f ? M <a GdR|& Ug]8_)~>IO $L ǒ<``DGDD#"9P} WW0xCCOQGGQTCCWW }P9fl}}R99RR99RGDDDD R:9RR9:RHDDDDCDDDDR:9RR9:RHDCCDR99RR99RGDDDD'-AQ3w?XU8G8UX?k3QA-CECB;C C;Q:9RR9:Qy?@AAA@?@A@@@)aG[CQ*:^E_!^` ^~CG&\[o{aؐEQe>0aTk LY~^VLn6a? '[G#PP`}VUo'I^^'%|[JM3_y`| `![``CDB.!'38Z^bfjosy}:3<5*:367*#*#:!5)74632)!/)57'4;23437234;2'7357 3%555&+73557'''''' 3?'35 ?3#'357373?7'#?7'7!'77%#7%#7#7";2=4#!";2=4#yq!D""D%LN9,ffff3MN%ڮN97PfpgCgDEDDgEgC!Zfa:&Y&QP"Cf[>" H0/<``DG$U`:=_1G]\dAcF``E`7aE_%\D\VV?`@!B_@>b@"A`A@[?=[@+ ' vvEDDE%O9"E!tgg7PP7RhvSCGEDC{^:_f'z9a)%ay^D|va>s`^RY` P>_-Q"_FU`1`/[``CDBb'` `#?X\IcDEDDDE3^#^gCZW[@@A@?@A@AA?@ 22 !#42#2eF~DDEe;C) #'+/37<@DGJNRVZ^bfjnrv|%#7##7##7#7''7'7%7#?'7?73573'33#?5'37!%''''''755&+735553'57'73"13!2514#"13!2514#!72514+4&#"#"13)57'4;23437234;2=[@f@[?cA`Ab>b@^B_@a?`@V\D\%aE_A`E`|cF`dG]:=_c`È$GuD/G0 ">[("CfP&&Yfa:Z*0!!|""""T:;S""7DgCgDEDDgEgCC?@AAA@?@A@@@ZW[C2^#^gECDDEc[\Ie#?#0b'`BCD``/[1`U`Q"_P>_zRY`b^!s`vaWDiy^)%a9aE'z_f^V""""3""8OO8""SCGEDC*$0>JY]adgkou| .'&'&7&766!5467"3!2=4#76767''67''&676'&$%53'37!%54'&#&7'7676'7.'.'&'&  3& 573& 573& 573&57?&677?&'7'3'57'73#7##7##7#7''7'7w,NG>' ߭V/2 0NHLg B (HHnBG.`YN Bb`S["M~XF&#_GuD">K!3$ LiU`5] dhWf&`/0л`< Y]\^0b_&Yfa:Z=[@f@[?cA`Ab>b@^B_@a?`@paK- f ,Kfx$"',N7hh4Q####!hZWMh>V! plHhp Ȋ05[(<]BCD``U["!LG`-`; _1_*%`$g^jW#3p`gaY í^/a0a(>9XP\_'^>'z_f^B?@AAA@?@A@@@7 #(,38=CJNSX]aejnt{ %1n%#7##7##7#7''7'7'53&'7'73&#"?57&'7357&#"7'?'7&'??&5?'773& 57'773&#" 5 '7 5'773& 5'7 3&%75'7%7677&' 3?'3"13!2514#"13!2514#"13!2514#"&54632%"&54632"&54632%"&54632"&546324635#&'6776'3273273273273277'#2!=[@f@[?cA`Ab>b@^B_@a?`@:_E`WC0*'LZ$'aF?Y'  #_J%\ \`n'O`^ k f ? M <a GdR|& Ug]8_)~>IO $L ǒ<``DG""C""&&U&&&&U&&:QQ:9RR:QQ:9RR]:QQ:9RR:RR:9RR1:RR:9RRO82C+'<>)*>AA;'.9C@C"%$?;'/C87PC?@AAA@?@A@@@)aG[CQ*:^E_!^` ^~CG&\[o{aؐEQe>0aTk LY~^VLn6a? '[G#PP`}VUo'I^^'%|[JM3_y`| `![``CDBw%&&%""""""""TQ:9RR9:QR99RR99R@R:9RR9:RR:9RR9:R;R99RR99R9P} WW0xCCOQGGQTCCWW }P9f%#'.59=AEIMQUY]bglquy} 1' '1&7 &716 61'7357 3%5 &#"'%''7 5%'3 5%'3 5%'3# 5&''3' '%' '%'' #%'327#654' 33?'3IIIHIJHHIIIIIJHHZfa:&Y!_"' ;w\ \b0C0`#0`"Tz$2vf$3d~>]!'`A"@C01_0`#0_K$1LE2SEb`$0[ 3|e``DGIIIIIIIJIIIIGGKH^:_f'z&!`"v^[}0Ea0a/aV^|2{a0=`$$fB(!C^n00`._2H0M_1`PH.` 4[[``CDB1!4631yUgTxeeb*EMr>76'&$%676''&/67&'&'&7>7654#"'4#!"!%.'&'&7&766!546 IxTC% vnrYZN=`JV~Q:$7v 9(I 9Z^E~wL?1TDWE2 w,NG>' ߭V/2 0NHL Ɋ06bZfj (G+* le(O*=K[xF^f,Qqc+[CE"aK- f ,Kfx$"',N7hh4Q143&1ggUygex4'565yUgVxeg >N >F[kpu5))27'#2!54675#"&5'&5463267&54632%632"3254654&#"7632!3&654&#"!%&'!%67/&#"654&#"3&54632&7%&#"!5!54#!"~@B?BGS77PO89Nh p&(43dGFd. 4''o i6UUT/l vT}'$TzSH<N79M<`j,]h,gx:Q 6 Q9SyV#'}Tv dxCCDDAD:OS8dd8RO7@"$p R!42GG20#R p$"<==<G Tw S yU()1  6NN6  `9:YU=ɸ6, R9"2"9R ,8)(Uy S wT !!G>N4<HT`lx'#2!54675#"&5'&5463267&54632%632"3254"13!2514#654&#"67'&#""13!2514#"13!2514#S77PO89Nh p&(43dGFd. 4''o i5bbau%%V%%;Y?!#?Z;""""w%%V%%:OS8dd8RO7@"$p R!42GG20#R p$"w""""s&&Ec5B>'5cE#)=%&&%""""bh ;HUay"13!2514#32!5463654''.7&'67&767676'&76'6'&&67>676&7>76'&76'&'&76'&'4"" ""E9QGH=;:>TcET 55JVXZ-YB+P6QH8  '(   %&&'(*P< < E9x, /+z+ .!ejh"%%& v""""O9gg8P fI U$'!V8[ C0vTSFq[U_`I9$< .& 9((8(' 0+,L 0,,LC1F;o1!t@2#PxM{#&.&"bh7DQY%4#!"!'2!5463654''.7&'67&76'&7>76'4&56'&'&7667'&76676'#"'&7632654''&767>'&''&767>'&''&%&'676&7>76DVD2F9QGH=;:>TcET 55JVXZ-YB+P6QH6$"   %% $#"!K$68%%87]uX#9.7<4F?%#18Fe521J& &;)1/xhti< &J A98_ (t)##*r 3BDD#O9gg8P fI U$'!V8[ C0vTSFq[U_`I9 ") 6##7F```aMOF$ / 6DT) !%dGF48$!CC(&0v@1#" )10OR~B. *u89_ B9?t%(o;E.\y #x&2>3!2!'4637.567!5!&54632"13!2514#"13!2514# gQz6OHP9yUl5xVTz!!g""26"D@}f9P7hf9P:c}D9OUyyUO""""""""#x"I!&'#!3264#!"!"32654&3!2!'4637.567!5!&54632U G TV ÅRDWE2g9NN97PPe gQz6OHP9yUl5xVTz~XƁCE"fO89NN98OD@}f9P7hf9P:c}D9OUyyUOG` =EQYemu"&54632!7)6?!!7'.7 #"&7 #"&5 &/254#""&54632%254#""&54632%254#"%254#""&54632%254#""&54632!54635#&'6776'3273273273273277'#2!%4#!"!J:QQ:9RRIY11_. ST C23C;O78NF?N68N5B23DTUDDDD:QQ:9RR]DDDD:QQ:9RRuDDDcCCDD:RR:9RR1CCDD:RR:9RRdO82C+'<>)*>AA;'.9C@C"%$?;'/C87PCDxQ:9RR9:Q#B;C C;E-AQ3w?XU8G8UX?k3QA-DDDDGR99RR99RDCCDHR:9RR9:RDDDDCDDDDHR:9RR9:R DDDDGR99RR99R"}}9P} WW0xCCOQGGQTCCWW }P9fgDD# gv(-O3!7)3!5)#374632)!/)57'4;23437234;2yqɇA3ehhdgg4%ggN97PfpgCgDEDDgEgCvv%ggg7PP7RhvSCGEDC3#4'52ggUyeexgv!8DP)57'4;23437234;2!72514+4&#"#"13"13!2514#"13!2514#DgCgDEDDgEgC""T:;S""d!!|""**2SCGEDC4""8OO8""""""b(4Y676'&$67''&76767''"3!2=4#.'&'&7&766!546M~XF&yBb`S[#HHnBG.`YN B w,NG>' ߭V/2 0NHLȊ05kV! plHhp hZWMh####aK- f ,Kfx$"',N7hh4Q G`<HT`lx%4635#&'6776'3273273273273277'#2!"&54632%"&54632"&54632%"&54632"&54632"13!2514#%"13!2514#"13!2514#O82C+'<>)*>AA;'.9C@C"%$?;'/C87P:RR:9RR]:RR:9RR:QQ:9RR1:QQ:9RR :QQ:9RRU&&U&&&&U&&""C""9P} WW0xCCOQGGQTCCWW }P9fJR99RR99R;R:9RR9:RR:9RR9:R@R99RR99RQ:9RR9:Q""""""""K%&&%tu 1' '1&7 &716 61IIIHIJHHIIIIIJHHIIIIIIIJIIIIGGKH D -:J_g%!54#!"7!53&54632&7%&#"654&#" !'&#"!;&654&#"!654&#"7632"3254'#2!54635#"&5'&5463267&54632%6325))2xCCdNSyU +}Tv > Q9,9Q >,H<N79M<l wS}*!TzSUUTvS77PO89Nh p)%43dGFd. 4$*o iG~@B?Bg G̈)(Uz S wS <_"9R +\+ R9"  6MM6  `G Sw S zU()1<==)*?AA;'.:B@C#$$?;'.B97Pd:RR:9RR9DDD:QQ:9RR9DDD%DDD:QQ:9RR9DDD:QQ:9RR9DDD[T D23C;O78MF?N68N5C23C T\IY20_:QQ:9RRjDD#"9P} WW0xCCOQGGQTCCWW }O9fl}}Q:9RR9:QGDDDD R:9RR9:RHDCCDCDDDDR:9RR9:RHDCCDR99RR99RGDDDD,AQ3w@WT9G9TW@k3QA,]fDB;C C;Q:9RR9:QZjt%67'&76676'#"'&7632654''&767>'&''&767>'&''&%&'676&7>76'&676!5463654''.7&'67&766#!"! vX %9-7:6DB&$/9Fe50>@K*%58B<O>0J& &;)10titi9 I B98^ )t*$#*r 3A&86 7:PHH<;8?UbEV 82JVXY,XA,R7OI9DUC1MG#. 6BU(!%dGH27$#BC),*y>0%! )20M S}@.+r+9_ A9@t$(o;C0]w `', E(_OO8gg8P eI T$+U9] C0wQUHpXX_aI8DD$Z)DLq&'&547&%76'&'6'76!>7'&'&76767&#"!54'!%6!546.'.'&'&76$677%CÈSxH鑈_MxD_[8 I'9 2EWD1MHM1 8)W &=DQ-w:8n0 D H)jfZc *N 'ek Z,crcQ.dEx\J$"D?Q4gg8M,'""xfK, +K D(-O%#3!7)3!5)#374632)!/)57'4;234;234;2 qʇB3ehhehh3%hhO87PeqZDgCgDEDEgDgCv&ggf7PP7RgvRDGEEDD"I!&'#!3264#!"!"32654&3!2!'46;.567!5!&54632U G TV ÅRDWE2g9NN97PPe gQz6OHP9yUl5xVTzi~WŁDE"fP79NN97PD@}f9P8gf9P;c}D9OUyyUO!3#"'&'676;2#"'&55ck  W 6!3476763!2#!"'&'67654'&#"&#"&1&5c:9Q;01;2* y .*&'4) "-&A<9##/0,+O<)& #E!3327654&5&'"6323632#"'&'&'65656765co%&?G#$x;&'  ,#=?B./"",-1H55TVK-.10M "# /%$=!((??A>,0""%%CDOrs!3"'6763!2#"'&'6775c"/ 3 *  !C+ '<, +=S!3&'&'4767672#"'&'&56767327654'&'&#"32767654'&'&#5c0.+>B0.3F'%8:JK9;%%9:7  5  +/  !-E!%1/,7-/)+,26//89J@;9'%%&;<@I976!!3[&%&&()&(%/0i*?!!547632#"'&=#"'&'&54767632327654'&'&+   ?]K>>"#&&<;=7%$(%$3Z('$'.O*)dK!  -Z&%GFZeHF#"-;13 A@\B33<>i*H!!3632#&'##"'&547632&'&'&'"11367676]>eL;9" $'/4;p'G"%23&())>4&$dKS*(HJT@:6,+P!    <2112C280# ! 14i,B!!47632#"'&=#"'&'&'4767676322767674'&'&#"#%=O:>!""-.8e=''N=(%#&/8$%dK*  !"''FC[@9;),S\?B !219A34 !22i <!!!&'&'"6767632#!327632#"'&'&'&'6504WP+-IM./b!<;ON=>!8*+1WL  >>EI68!dQ4211yMHD.,+.CGL2:')< #-,683i$(#"56;547672+"32+#"'&5!!*00'%%9Z'?,1?Jr0)8""/ -)0* d}=S!!##&'&'&56767633547632"'&'6732765<5<%27654'&'&#()7K8<!!!<:On'  :=R^[-!#$"%S'(#%0L0.'';3$#d(**GFWVHF&'Q PBA%%6## @>ZB.399d673#!"1/i5!!4763267632#"'&54'&'"#"'&5,)2;00$%?$ ds #33= I?+*!". D!333#"'&'676;2#"'&5͇hDl   P  ^:!333476763!2#!"'&'67654'&#"&#"&1&͇hD^99Q;01;2* y /)%'4) "-&C:9##/05$#%(*=XY!333676763#"'&'&'&5&'676326767654#"'47676765&'&'&#"&'&͇hDv12=8/./C"# !69M7.. !  #j&$$@%1/ !  7)+/242,,47E+2*+%&- ,c !(' !"A"; q .!333#!"'676763232+#"'&5͇hD-$$3 . aX%"G    ]L!3336763!2+632#"'&'&'4763267674'&'&#""'65͇hD "15A00#$,,.-31(( ATB-- + ,! l   $$9;A C24! ! . >,+O<)& # aI!333327654&5&'"6323632#"'&'&'6565676͇hD%%@G#$x;&'  1#=?B./"",-1H55TVK-.10M "# 4 $=!((??A;/0""%%CDOrsG!333"'6763!2#"'&'677͇hDz/ 3 *  !C+ '<, X/AW!333&'&'4767672#"'&'&'6767327654'&'&#"32767654'&'&#͇hD0--=B0.3F'%8:JK9;&%9:7  5 "*/  !.D!%1/,7-/)+,26//89J@;9'%%&;;AH:76!!3[&%&&()&(%/0".C5!%5!547632#"'&=#"'&'&54767632327654'&'&+   @\N;=##&';<<5'&&$%2Z('#&/P(*·DD|! -[&#HF[eHF"#+933A?\C33<<".K5!%5!3632#&'##"'&547632&'&'&'"01367676V?dL;:! %$21>o(   G%%23&')'?6$$·DD|S**GFW?<4-*P"   @./22C282  34"D5!%5!'&'&#"2276767>7632#"'&'&'476767672 $# 6&%#"U     318Q=> !!"26@<-,·DD  1/8SDE  .')CEO<=7/."0F5!%5!47632#"'&=#"'&'&'4767676322767674'&'&#"  "%=P9>!""-15d>''N=(%%&/8$&·DD|*  "$&)DEZ@9;),S\@A !119B22!!12"A5!%5!!&'&'"6767672#!327632#"'&'&'&'06104WP+,JM.0a!<:PN=?!8*+1YJ  >>EI65"!·DDS2203wLHD.++.DEN1;'(< #/,6:2",5!%5!#"56;547672+"32+#"'&5*01'%&8Z'?,1?·DDn0(7$!/ ,(0) 3AW5!%5!##&'&'&56767633547632#"'&'6732765<5<%27654'&'&#',4I:<!!!<8Qm(  :=RaX-!%"%S'(#%0L0.&';5"#·DD)**GFWVHF&'S PBB#&6#" @>Z@03:8d675!!"1/"95!%5!4763267632#"'&54'&'"#"'&5 *)2;00 $&>$ ·DD #33< I>,*!$- iB!!"&'.'&#"22727>767632#"'&'&'476767672   7%'##T     354R<> !!!36@>++dg  0/7TCF  ,('DEO<=8/,#Ck    3 K {  Chess MediaevalChess MediaevalRegularRegularChess MediaevalChess MediaevalChess MediaevalChess MediaevalVersion 1.0 Version 1.0 ChessMediaevalChessMediaevalc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph69 bɉo1C !222H22bNNhhxx`vvb`upychess-0.12beta3/pieces/ttf/leipzig.ttf0000644000175000017470000011464012161415524017325 0ustar tamasuserspFFTMz}GDEF&h(OS/2Bqx`cmap(pgasp`glyf$ ``headc6hheaE4$hmtxmNloca)dmaxpX name⢌post5@Xvhea $vmtxa9*6_<+C XC XDc2 "Hv gh gx{ yggxkxuukG&DVlUGGW{jN\@1Sx    " & 0 : D !""""""""+"H"`"e%1Rx    & 0 9 D !""""""""+"H"`"d%[W@&&߼TC,ݠ6\Z^hnvx  !"#$%&'()*+,-./0123456789:;<D=>?JEASKCMYWN[XZ_\]^`aOBTUR@  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a(<Tj~@Xp~ n62, \"##%%%')h*+,B,.080H1344`46p89:;<<==h==>>>>??l?@@H@AANAB B8BzBCC~CDFDDE@EFFfF'$72#"54$g %3##!##x gd##5!!!!dw 7#5#5#5#5g #dfh!3!3{c 3#3#3ddf5!5!yddf #5353!5353 ggyd$e'$72#"54$ #'+/37=333333 #7573 !!!!!%2"-x-[d-o-F-2- +O-zdG3! Ilz[AdpG/-$,P.-z/e-J-5 -!  2#"&546ttutuutgf 53333xg hy$dx%3##x gd##5!!d7#5#5g #d{!3{c 33 dyy533yg y$dy!!dy#5353 gyd$ #'+/4:?ELQ]!3333 573#7 33333 &'3 4#5 #'"5'52#"&5463GdzsO-!+-2-Fd-ox-[-_ -! iaOh-  demttu-5-J/e-z.,P-/BGUdpz[L -`>j[ e0Ytuut!!Yk%MY]u ,08H[mq7676'&'&7676'&'&7&'&'&7676766''&'&'&704102167676'6'&'&76767676761'&'&'&76767676'&'&'4'&'"3767637676565'"'&'&547676763'&'&'6?'743816767676'&'&'&&76767676'&'&'07&767657'&'&'&76767677'7''7'776/7#&'&'&/76'&#'&'&'&7676767616776361"%436'4'&'&476767636'&'&'254'&#''&'&5&'&'#/74'&#''&'&5&'&//#7/'37'7'/'73#75##75'!'#37'#37!75'7#7#7'#?/37';#75%&#"3276'4&5#"'&54763272#"'&5476"327654'&                @  '    ,d    A  )   -$ 9 D"Z#  !$$& ! 1,(,  #   " >DZ)(A\*q112 " 1-   $'(6%      > % '3   ! tEM!  6 2vEN  6 2U ! :-6G2L6K'*"J-!*#>>;@.>:>>>xB//BxD??;#8FX5%++*5MS2"")&>>>'OO0/ &&>49ky@:064RPPWi|=- ?&&46LK;=--;=MJ6445JR9;>#$69 !! 98"#g!4677#46gc!fObf!7R(  %*.29>CHMUY^bgmuzo&'73 . 333 &'73 5%&'35#7573&'&'7#7&'767#2307#'67#''#&'46565#&'&'2"5"32654&"3254%"32545#5##335##5#53533'6'&632654%'&#"632'%7'#"&'.'&#"&'&7#'&76767632327.5.5%47&54326767&5432327632'"'&'&'&'&#"#"'23:3>7632&7>'&#"'.'&'&'&'&#"7>7632:3276if-WEx-[d-o-FcZ-w\9 V-p+O-KHv/M '$1  [/@ t(p- v$d-)Y -  !t v qqqq+++)))z33da`` YW  jp`]z TigNSv|wYX9XUJ~  pE=^H5(J $ ! . ]fx01aPF\L"]\^^. (?Oc10wf\  -  % J(8E`=Qc26x},=N5 &' 5M=+v71dQ=? (Wh6M- S;>f0F z[AdpGN [u,^$ Vm0ˌ-$,P: I.w5- /Z+#-n"-c**  -? v L(''(*++*))))33+X(((A6#`HE ?@G99'k#5"+ /J  "1e| 0  nf2 +\\( (^^5 K@"U% 0 |e1  K. + "5#=7H  3  a%<  <%a  3  H7=gf33"&%&53gc8Of!cR9#f#52655653b"eOcf#9R, !&+17<AFKPUZ_ejnrv ",KSW!3 573#7 33 #6555%5%"5%#%3#%#%67#&''6?'&'7'&17&'23#73'73'%#"$547&'&5476&'&5>5.'.54676#2!63""3254/7&543'#"75'7#632'.'&#">7.'&7632&547>326.'&#">7&'&#"676'&'&6&'.'47>7666544! ! 7'7654'&#"6>76763267632'6'&#"654'4#"26'&654'&$# 76! IzsO-!+d-ox-[*-qVm l X --z d-o/5 yi !D1)----!-aK_+%', ,_ 5oUm5`+gggGG<@  2GHA= u{vzQ(|F.!   OS  "  3k# 1*k 5.'.54676#2!63"&'.'&$32'6! 3223&76763676327>7632>76'&#"654&'.#".'&'&#".'&#"67&763227&54743267&766"3254'&#"'#3732735'654'75#'%'%654'&$# 76! &#"327&547632254%3632325654'&#"'73#733&'2&17&'76?&'67#'#'3#'#"55555 #633 #7573 !5TiS+%', ,_ 5oUm5`+  ed   ^a    () "9 <  )1$N $ (  % % M$2(   =  :  (& 1FF1wk @??? ?@A:jSi]-T3#')tF-'8vte[dvt9'-G0-A--v1)- !y jo/ d--/- X l ݣjm*-qx-[d-o+O-z>A$A; 4 TxxT!5  <2 ,O8BA{0 _ 0{AB9T*  7@@  ddn[:0i[!3 A%!d *!@:# *KT9# .^('%(`, "9TK*$>;!+ c!$B1"[k.?W3F12EwwA?@?>> @@@A"$A$-"+O3Ch{Z9bMF3(S0L\%%\L0S(3FMb9ZH-ȪK`-t -K,-P/ofc  X  00,l*oz[Adp-$,P.-z! !%-39>DJPUY]cintx|B 5'5"5763#'3#'3#'3#'3#654&57'.57'.'7'&'7.'%&12>73&1%573#7.'3 5?7.'73 333 .'3>76'&#>7676'&6767&7&$'>76'&76>76#"76>76'&7676767"'&'.76767>7>7567>76!&7>767&''5 &  /V/1V10V/.V--V-emp*!-^O-!+E-5 3 -2-Fd-ox-[ F-?$  G?4N 4$    'Q6e?H  , "  $h   3  '   . '* 8'7!< &}H9'+7    .)/Q DF#F"+'7;0 00 GUUUUUUUUUe.  p-  /U-)-Z-,P- 4,373 qGUdpz[PGE    %}Y  4# -  "8{Qz `?`G+#-'(  '  A%"   +  Z ~ = !c%iQRirC'^,-{   -*0 4@IliB|@xH   ,? !%-39>DJPUY]cintx|MYj 5'5"5763#'3#'3#'3#'3#654&57'.57'.'7'&'7.'%&12>73&1%573#7.'3 5?7.'73 333 .'3'&'.76767>7>7567>76!&7>767&'''>7>7676746767676>7676672' 2$32&'&76'&%'&'67.5&'.'.'767>67627&'&7676765 &  /V/1V10V/.V--V-emp*!-^O-!+E-5 3 -2-Fd-ox-[ F- 7 $}H8'+8    /)/P DF#F"+'7D0)$'y   "3 K1;E  &i:|</6`7Q /    &)oB/), U N8&8 )'    # ;0 00 GUUUUUUUUUe.  p-  /U-)-Z-,P- 4,373 qGUdpz[PG : !c%iQShqD'^,-{   -*0 3AIliB|@xH   ,?"K"  # q- #7  Y}%   'Uf8i4uod+}QQ|Ȍ   4B*  ! N5':u;:FB; 55  S > Z  o   %%17>CHMTY^bfjouz%!676767&547>7>7&54632.'"5.'2#&'67&'&'&'&'  573#7 &.'3 &'73 333&'733#'3#'3#'3#U7>7&54632.'\-V-j.W-p0V/j0U1l-y#lx-[d-o-Ff Z-[7-}#+O-C sk~s-^ !2 U!`=@@B>A\ Vq:C$<479)?:rffffL;10O8U7&54632327>7&5432#"'&#"$547&'&'47>767&'&'#"543232'&'32"32$54$7"3254"3254%"3254"3254'%''36! 67>7&$#""3254"3254>7654#"'&547654'&'&'.'.'2632&'&'.6&'&#"6>7&#&'77&'757 #4'7%&'34'2&'7 555"5"#7#7#7%#76 6'&&5.57%&'7&'7 3 573#7&'73 33 673"32654&bBBC'*/;GD10EAWS .E10EZI xiu0EE0 P0) %'  '4Muuu;wH - 'w 556DDC#CCCDDCePd|H\Io  #'  r556CCD  a*D%& /    )))4:e -vl bk9Jؑ} %-f\m-!xrAFa3d&P +-r-{ L-O .R/L^3H _ f uzsO-!+_^-2d-ox-[ -uu0EEzBCCBf8q7  y&K0FF0D, ,70EE0WL x)uE01D #84 TxxT!59   ~uuu$KM   :68DD86:8888DCCDDCCDVCDDC"?"gCCDE%ET1O.CD-K2 +*8888CDDC%I$; q#1 3pp ptC0!NuW?\\?WuT3;|1D nr1 Gr7OB gl-G -l-|7J*|$@g\ *7x tJ, 0`d0P  bpz+KNRL/^a  H2 Ng v -z.,P-1 _dpz[a!tuD10D-  $(,048<AEIMQUY]afjs)5AMYeq}! 573#7 3 '555#73#73#73#73#73 5%"5%3#%3#%3#%3#5%555523#3!57!%#5!#5357&47654'&7654'.7654'&7'357335336327&#""!5.'&#!5#!5#6$32 2764'&"2764'&"2764'&"2764'&"2764'&"2764'&"2764'&"2764'&"2764'&"27>'&"27>'&"72764'&"2764'&"2764'&"^sO-!+d-o iU--T--T-.U-.U-x4 \,U-j.W-p0V/j0U14W!F.V-GGvuGyGD10  35΋42 /1Cɫ:Щ"D!;gg !!z zss!!y! !y 0 0qqrr / / 0 0J / /yrsqe!!z zss!!y! !y.,P-<dp/,j*!TTTTTTTTT+xw0.0- 5UUUUUUUR.3-0----,-`*V]U#XVAAVRt! FF q ICeBI q  GE !uQVI$$_H22$@?XXXXXXYYYYYYYYOZZZZ````YYYYYY!#4&'52#4'bg8Oe"bR7!%  $(-159=AEINRVZ^bfjS_kw%3#5255553#'3#'3#'3#"55 7#73#73#73#735#735%5' 3 #7573  33533)357&47654'&7654'.7654'&7'356$32<513%2514'.#"62"'&6'62&'."6&6&6&6&63276&'&'&47676'&'.76764'&'&4767>'&'&4767>'.62"'&462"'&4'62"'&462"'&4!5F.V-W!40U10V/.W-,U- x.U-.U--T--T-U-i d-o+O-s42 /1CvuD10  35~+++++uuuq n p{_ ! / /   '' / /  / 0 %%  / / !mmqqppmm,UU*V,-----.3-UUUUUUUT- .00+xTTTTTTTnTj*,/dp-$,P.vBI q  GE !uQV!VRt! FF q ICeW !!f'++' ``` b 4  g / "Z# 3 ` $ "Z# / 5 #Z" % ["4 #Z" / b  / kXXYYYYYYDD#  %*.29>CHMUY^bgmuzq&'73 . 333 &'73 5%&'35#7573&'&'7#7&'767#2307#'67#''#&'46565#&'&'2"5%&'.'&#"'3254'&#"632'?&#"'>32''75#5##3353276767654#"6'&#"&'.'&#"&'&7#'&76767632327.5.5%47&54326767&5432327632'"'&'&'&'&#"#"if-WEx-[d-o-FcZ-w\9 V-p+O-KHv/M '$1  [/@ t(p- v$d-)Y -  !t v  4 ) ;OnePWrza``U{sXUXa_XZ,xozzo  $' Z_  utJ~  pE=^H5(J $ ! . ]fx01aPF\L"]\^^. (?Oc10wf\  -  % J(8E`7&#&'77&5%&'757 #4'7%&'34'2&'7 555"5"#7#7#7%#76 6'&&5.57%&'7&'7 3 573#7&'73 33 673367>7&54632327>7&5432#"'&#"$547&'&'47>767&'&'#"543232'&'&546323676&54632"3254%3>3227>7&$#"'%'%'%"3254&'.'.&3256! 32l bk }9Jؑ} %-f\m-!xrAFa3d&P +-r-{ L-O .R/L^3H _ f uzsO-!+_^-2d-ox-[ -NWS .E10EZI xiu0EE0 P0) %'  '4Muuu;wH ._E0u((*/;GD10E778  TT  rwH\I|ePd^888  54    os  ;l-G -l-77J*|$@g\ *7x tJ, 0`d0P  bpz+KNRL/^a  H2 Ng v -z.,P-1 _dpz[a! ,70EE0WL x)uE01D #84 TxxT!59   ~uuu$KM   ]0Eu4+}f8q7  y&K0FF0D:;;:)A&&'$?*21E%ElCCD"?":;;:"11" "!hh!%/37;?CGKOSW[_cgkosw{ 1' '1&7 &716 61 "51 4#0'3' #%' #%' #%' 3 573#7 5%'3''3 5%#335%'3IIIHIJHHIIIIIJHH >T[!u- - ,- /n kIzsO-!+ -&-Oc-d-ox-[{da-IIIIIIIJIIIIGGKHd <T\ Z ---mk/e-z.,P-0 %,*Ocdpz[0bax!467xO8 7Og kr '37BNX\`-"32654&"3254%"32545#5##335##5#53533'6'&632654%'&#"632'%7'#"&'.'&#"&'&7#'&76767632327.5.5%47&54326767&5432327632'"'&'&'&'&#"#"'23:3>7632&7>'&#"'.'&'&'&'&#"7>7632:3276qqqq+++)))z33da`` YW  jp`]z TigNSv|wYX9XUJ~  pE=^H5(J $ ! . ]fx01aPF\L"]\^^. (?Oc10wf\  -  % J(8E`=Qc26x},=N5 &' 5M=+v71dQ=? (Wh6M- S;>l(''(*++*))))33+X(((A6#`HE ?@G99'k#5"+ /J  "1e| 0  nf2 +\\( (^^5 K@"U% 0 |e1  K. + "5#=7H  3  a%<  <%a  3  H7=xy3"&xg 8O gOy#565O8 9Og U FNU\cjn %/@'%#"$547&'&5476&'&5>5.'.54676#2!63""3254/7&543'#"75'7#632'.'&#">7.'&7632&547>326.'&#">7&'&#"676'&'&6&'.'47>7666544! ! 7'7654'&#"6>76763267632'6'&#"654'4#"26'&654'&$# 76! aK_+%', ,_ 5oUm5`+gggGG<@  2GHA= u{vzQ(|F.!   OS  "  3k# 1*k 5.'.54676#2!63"&'.'&$32'6! 3223&76763676327>7632>76'&#"654&'.#".'&'&#".'&#"67&763227&54743267&766"3254'&#"'#3732735'654'75#'%'%654'&$# 76! &#"327&547632254%3632325654'&#"5TiS+%', ,_ 5oUm5`+  ed   ^a    () "9 <  )1$N $ (  % % M$2(   =  :  (& 1FF1wk @??? ?@A:jSi]-T3#')tF-'8vte[dvt9'-G>A$A; 4 TxxT!5  <2 ,O8BA{0 _ 0{AB9T*  7@@  ddn[:0i[!3 A%!d *!@:# *KT9# .^('%(`, "9TK*$>;!+ c!$B1"[k.?W3F12EwwA?@?>> @@@A"$A$-"+O3Ch{Z9bMF3(S0L\%%\L0S(3FMb9Z@*:K]nz>76'&#>7676'&6767&7&$'>76'&76>76#"76>76'&7676767"'&'.76767>7>7567>76!&7>767&''?$  G?4N 4$    'Q6e?H  , "  $h   3  '   . '* 8'7!< &}H9'+7    .)/Q DF#F"+'7D    %}Y  4# -  "8{Qz `?`G+#-'(  '  A%"   +  Z ~ = !c%iQRirC'^,-{   -*0 4@IliB|@xH   ,?@'&76767667627&>7>7676746767676>7676672' 2$32&'&76'&%'&'67.5&'.'.'767>'&'.76767>7>7567>76!&7>767&''   # 8&8 )' I0)$'y   "3 K1;E  &i:|</6`7Q /    &)oB/), U - 7 $}H8'+8    /)/P DF#F"+'7R   %%> Z  "K"  # q- #7  Y}%   'Uf8i4uod+}QQ|Ȍ   4B*  ! N5':u;:FB; 55  S % : !c%iQShqD'^,-{   -*0 3AIliB|@xH   ,? x1%!676767&547>7>7&54632.'U7>7&54632.'U!`=@@B>A\ Vq:C$<479)?:rffffL;10O8U7654#""3254%367>7&54632327>7&5432#"'&#"$547&'&'47>767&'&'#"543232'&'&546323676&54632"3254%36! 67>7&$#"'%'%'"3254%"3254%"3254"3254"3254"32$54$e:e -B)4N    ))%& /B  a*D'CCDWS .E10EZI xiu0EE0 P0) %'  '4Muuu;wH ._E0u((*/;GD10E556  #'  rwH\I|ePduDDC-CCDVCCCWDDC556 Gr7OB "3;|1D nr1 !NuW?\\?WuT 3pp ptC0(%I$; q#1 CDDC ,70EE0WL x)uE01D #84 TxxT!59   ~uuu$KM   ]0Eu4+}f8q7  y&K0FF0D88881O.CD-K2 +*E%ElCCD"?"CDDCDCCDDCCDDCCD 8888:68DD86:uvCMQ\nz 33533)357&47654'&7654'.7654'&7'356327&#"!5%"!5.'&#!5#!5#6$32 2764'&"2764'&"2764'&"2764'&"2764'&"2764'&"2764'&"2764'&"2764'&"27>'&"27>'&"72764'&"2764'&"2764'&"42 /1CvuD10  35ɫ:˕Щ"D!;gg !!z zss!!y! !y 0 0qqrr / / 0 0J / /yrsqe!!z zss!!y! !yvBI q  GE !uQV!VRt! FF q ICeI$$H22$@?XXXXXXYYYYYYYYOZZZZ````YYYYYY3#4'5g 8OgO uvCN`lx 33533)357&47654'&7654'.7654'&7'356$32<513%2514'.#"62"'&6'62&'."6&6&6&6&63276&'&'&47676'&'.76764'&'&4767>'&'&4767>'.62"'&462"'&4'62"'&462"'&4!542 /1CvuD10  35~+++++uuuq n p{_ ! / /   '' / /  / 0 %%  / / !mmqqppmm,vBI q  GE !uQV!VRt! FF q ICeW !!f'++' ``` b 4  g / "Z# 3 ` $ "Z# / 5 #Z" % ["4 #Z" / b  / kXXYYYYYYDDkr"6BWb&'.'&#"'3254'&#"632'?&#"'>32''75#5##3353276767654#"6'&#"&'.'&#"&'&7#'&76767632327.5.5%47&54326767&5432327632'"'&'&'&'&#"#" 4 ) ;OnePWrza``U{sXUXa_XZ,xozzo  $' Z_  utJ~  pE=^H5(J $ ! . ]fx01aPF\L"]\^^. (?Oc10wf\  -  % J(8E`7&54632327>7&5432#"'&#"$547&'&'47>767&'&'#"543232'&'&546323676&54632"3254%3>3227>7&$#"'%'%'%"3254&'.'.&3256! 321WS .E10EZI xiu0EE0 P0) %'  '4Muuu;wH ._E0u((*/;GD10E778  TT  rwH\I|ePd^888  54    os   ,70EE0WL x)uE01D #84 TxxT!59   ~uuu$KM   ]0Eu4+}f8q7  y&K0FF0D:;;:)A&&'$?*21E%ElCCD"?":;;:"11" "!hh!tu 1' '1&7 &716 61IIIHIJHHIIIIIJHHIIIIIIIJIIIIGGKHG~S[bipw)3D654'&! 76! %#"$547.'&5476&'&5>5.'.54676#2!63""3254/7&543'#"75'7#632&'&#">7.'&7632&547>326.'&#"67&'&#"676'&'&6&'.'4767666544! ! 654'&#"6>767632>7632'6'&#"654'4#"26'&654'&$# 76! H).&+$', +`!5nUm4`,gggGG^ $W( 4L`!68& 7 U 8-UuY,2-"+O3CD'/7?S".763 27>7.#""32$54$"3254%"3254"3254"325436! 67>7&$#"327>7&54632327>7&54632#"'1&#"$547&'&'47>747&'&'#"5463232'&'&54327676&5432"325467654#"'&547654'&'&'.'.'2632&'&'.6&'&#"6  f퀀i CCD#DDC#CCCLCCD  "'  s WS .E0uYJ xhE00FF0 M4( %'  '2OuD10E;vH -_uu)(*/:Gu0EDDC a*F$+C     *)+5>c !-(@&67$>)$#:77DD77:DCCDDCCDDCCDCDDC/J-@A*H/)(*,70EuXL x &0EE01D #:4 TwwT#39  ~u0EE0$KN   ^uu3,}f8q7n&KuE0DCDDCFL; q#1  3or p63PuW?\\?WuR360E rg;! Jr9OB VuA'&'.76767>7>7567>76!&7>767&'"''>747676746767676>7676672' 2$32&'&74'&%'&'674'&'.'.'767>>7627&'&7>7>763 4 '~G8'+9    3%.QDF"G",'6D0)$&w   #1 K2>A  ?Wi:}<0 6a6Q  0     %(pB/(*V N -'8 *&     # B  7  !b%iQRjrB(]-,{   0*1 9#K!+ % q. $8  [~$   Vf8h5uod+}QR{ȍ   1F*  " N5';t;;G@= 64  T  ' [ n    #U\ '2>"32654&"3254%"3254###535336'&#632654%67632'.'&#"&#"'&#"#"'.'&#"6'.76327>76'.5.5%47&54326767&5432%632'&#"qqqq+++)))>> YW  jp[]z=Z F3>:r] GH#.>g9?Y2  bBIHCa 3Y?wf/"IF^s9@2E!Y>lPF\L!\\^^. (?O]MN3OljJ)'')++++)(()=q6#`HE t0""8 #,L0  73 O[[O j  0L,# 7" 2 1 mf3+]](  (^^5K@#U$!1" G\ #/;GS_kw2764'&"2764'&"2764'&"27>'&"27>'&"2764'&"2764'&"%2764'&"2764'&"2764'&"#!5#!5#6$3 "!5.'.!56327&#"37533)357.7654'&7654'.7654'&7'335hsssstt&%$$$%&x&$$%&%&&%&%%&>&&%&%%&-sssstt)hg_Z#C!`_K̨:42  /1CvuD10  46.UUYYUU````XXXXTTYYTT̋@?G22#˚#I%$BI q  GE !uQV!VQu! FF q HCeG#+9k%!&'&'&'#"'2654'&'&#"254#"2.'#"'6!676767&547>7>7&54632.'hV%`=B>@A>^%Vp:C$2>@0'A:reeffL;10H? V:E5aE} 3cGEd3 Ec5E9W ?oZKdcLYpܘlXGRZ[QGXlxaaaa(c00c(MˍC[bkWG!=^1CB__BE/^=!GWkb[C!33!527654/&#"5{c|?A ,,>= /!376?!5?6767654'&#"'7676763{c@9&Cmc8"*%/Jy; ?!/42a>>i;6S< tiA-8.0?R1; \6?C^nF8V<?!36767632#74763232767&'&'#56765&'&#"'{c?"$(I3AKP"%h] ,B.(?4i")%:=,( M- &0Q`:'4;QRKJ  4.JW9-5_8$"#D 5!3733##5!53.9}}ic`no"!3!!5#"'&5472327654%'{cE61-,f`7)=;A++G0)Djb:[W /5(B8L2 6!3774'&#"'632#"'&547676767{ca %B ,L53ZFL4:s!*-P@\)C<@FM-#)8:-&VL"%<W@T0*0A,7R s\;1- D!3!#5#'{cU,:*. %M!33767654'&#"#327654'&/&'&547632#'"'&5476?#{c+'%;9$'k)K25E>$#A 2D>e_;JG !.-!# KFjdBNc H!#%4D=o#8Ma:5*4VW="!%'.#)l:55?^&&K:*G!!32?54'&'"#"'&54767632327#/#"'&547676?9>$2- GL9 $.(,(&M  ;KD=#$$9dFd8V&'I<(?(& @ -3-&  ><%$;.!#)("3!!32767654'&#7632#"'&/'&'57#>?* *OV:P%##(-6Q4614/6d +-"=J]E]N<)3E@jKZ" *9"7!!4'&'&#"6#"'&'&5476325'&'#5737^ !%8" )gA#>KS@'AMs@0 5  d(!)#*'8GKAy 0C&,S"$ Y=85(544  _A2*<%<)!'%%#,>^;<"3!!6765'&'5776323!5676=4'&#!49"EHk  ;< L/)% 5d8-(9!?a&'B$" 8-U#&<W3!527654/&#"53!32?A ,$c,>= {+/376?!5?6767654'&#"'76767633!39&Cmc/+*%/Jy; ?!/42a>>i;6S<xc ti4:8.0?R1; \6?C^nF8V<C;?C6767632#74763232767&'&'#56765&'&#"'3!3?"$(I3AKP"%h] ,B.(?4i")%:<-(c L. &0Q`:'4;QRKJ  4.JW9-4`8$"#D  33##5!55!33!39}}i.c`n"&!!5#"'&5472327654%'3!3`E61-,f`7)=;A++G0)Dcjb:[W /5(B8L2 !26:632#"'&547676767774'&#"3!3)ZFL4:s!).P@\)C<@FM-#)89! %B ,L5c?0*0A,7R s\;1- Dr-&WK!&<W@T !#5#'3!3U,:c*. &'8IMQ&'&547632#'"'&5476?##327654'&/3767654'&#"3!352D>e_;JF"!.-!# KFjdBNc +)K25E>$#A +'%;9$'kc#8Ma:5*4VW="!%'.#)l:55?^&&K:!?]E34$#>D=!#%4$2-ydd; I<(?(& @ -3-&  ><%$;.!#)(08V&(/37632#"'&/'&'5732767654'&#5!5!:P%##(-5R4614/6#>?* *OV_ <)3E@jKX$ *9Y +-#=J]E]Ndd*.2#"'&'&'&567672#"'&'&#"32?5!5! #*.&1;),! FKS@'AMs@0 5  !$8" )gA<0C&,^;<"$ Y=8@=YwE>SBdd/376765'&'5776323!5676=4'&#!5!5!49"EHk  ;< L/)% 5/8-(9!?a&'B$#9-U#&<dd".!!#"'&'&'&567672#"'&'&#"32? #*.&1;),! F=uD5F68 $I* bDdn.*/&/<37WM'<5J' J4[<.Q = a      - E o  Chess LeipzigChess LeipzigRegularRegularChess LeipzigChess LeipzigChess LeipzigChess LeipzigVersion 1.0 Version 1.0 ChessLeipzigChessLeipzigc "$%')./012345679:;DEGINOPQRSTUVWYZ[uni001Duni00A0uni2206glyph58 bɉo1C K$$r  xxvvvrvu~upychess-0.12beta3/pieces/alpha/0000755000175000017470000000000012176727272015441 5ustar tamasuserspychess-0.12beta3/pieces/alpha/wr.svg0000644000175000017470000000751412161415524016605 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/bq.svg0000644000175000017470000001217212161415524016553 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/bb.svg0000644000175000017470000000742412161415524016540 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/bn.svg0000644000175000017470000000763612161415524016561 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/bk.svg0000644000175000017470000002016012161415524016541 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/wp.svg0000644000175000017470000001122512161415524016575 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/wq.svg0000644000175000017470000001613512161415524016603 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/wn.svg0000644000175000017470000001105212161415524016571 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/br.svg0000644000175000017470000000521712161415524016556 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/wk.svg0000644000175000017470000001457312161415524016601 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/wb.svg0000644000175000017470000001377512161415524016573 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/alpha/bp.svg0000644000175000017470000000077112161415524016554 0ustar tamasusers pychess-0.12beta3/pieces/Spatial.png0000644000175000017470000004006712176710402016451 0ustar tamasusersPNG  IHDRMbKGD IDATx]wx[~-Kc;NHYM eRF Rh)ehYeH {:ζc'u=?4,6I}=OG|P&`8E`d2Q[D83̀3-- n`d/YjU%>@Q48o2@3NF] 7 GVVf;`RCx8| EEGQ\\R 赝 ~a]&v;-}Vgp> $(04$I%(+MӠ(4 ??WV#wMS먞+Wx<\n<X/B"tnwWe K{t~G8ۍ7|C qp@1) x<@ pBG0,Q=Vv Zv /hHrH H$rYcHJA=G46-G ?y<^444 hllFS~bAT绢~Y=Jz'*xHh H$jĮpO=TL&{|!S^^.\W 4ѣ"tׇ8M&rgQJe(++S |]$B  xw4F@>OQTeWpPU>8nXN4$dH\:"JEs-ضm'^?hZ NŨ ÀhEcJ5V-㸓jIGqEQN4n(5L&ppPNBH VZg:ł_ mEff/JjPuUJۆ--vy>_ AAJcC.o{]3A"ľee'P]]bӞ699>|0FAAIebw |IctɎl8d2E'4n6Hl H׊xi]]K I(*˝N&[㘣p8va Mxb(khBN#GfAA@]]6mCpV+] ;µxKX~E Ccذ 21thdɂ ToL3-OFd\URR8qJ¨r-,E1ƶykk-i|&.3LYl#!</v<T* Hb ߇459#ׅ|D1itY,7d\qe,+A {g?i6Q--6EFF0MjKJRAQVZhtz)eɦT*osAL&M4:&|32tzTT4?9Yb{4]״_%iz`@SS3U__?d2MdU(d>e%8qVgX ^EF9m66Yv-CIV Rr:WJJҴZ%jCg]7H$ۇ ɱ4ˍ˗ :h]fMF?.Eyٓ֊*-b! ė˛4M#%E3ٔJOF˹\6Ŏ/hAN,5[bE^b`Yt^ze z5VY4lG!Ev Jšb2|˗?z[]5 @*kmC!;;&F:T Og i lncR 3,!) Yhg--r!%l6 I5 MS~iҬ(qW*RĂscLjee g׸4Ӄ@ ѤWbc#ii 8k.`p}~葍:뛙yui0 קnic54p U'gJXKJ2iifȧ'#??7Fmذ.W[%)"i8Ǐc~\.:0L<+B[[p@eKf{{G Vcǎtlr㐛\V+z\e BFFZ`"[\XZeW*4H u'hkti'uO?e5 bbXcXb- bfe˖{^RSIm{Сh5BCqqv޽u}ߴ$_=cRVF-'AVO|GML#%S{K\xe">\l/# k7uҥ64ΜIoGhĺTw7{(jSOWB!5GD,2%*8H"[~\PTp,o޼)O om膢42hnv:/z(wL&|YHƒ@bG1Gx>d ^/N2׆vKt,CFgѥ~K& ֯ۮYh5rո*0 ZUU5믿10,ˁap $i6fCIj4rhp^_|ZZ,` 2 M`{XK."//S_.hF{?ʡ)m: "{"XVe$ C@D{ @6j /`tYÈ`QN⪫${a&e±c"&^u4:t[֘>m.R(c+ZeÅ΃mceh}nWڬN&Yqt =OY}LO pքE?@2 gjL&2pJ1@R 444~͚5꟢f<.G pzItkxLZ666O[ iPRR dvhXLg}ܼd2i>;p:](-E18rWSz aW/ zOlMW0zw0@i& <~'4|444}Yxd~ ~;AQfϞhnvAeO/0[ c oTX8b͸qzhYY2Nd2Z5QZZ4 隀?G1Z;/Rקbp Ԝ (?^}zg}Vv^CEشinǎ++ޝNnvu&2 jرr]X vHI'e?s@@4bC0eryloҮt]VV(7x}J2d[o KDgFm۶oԩc$̤(I 4sgQ,e ƝY&&k,]tQuu fAӔt -liieV; p\hjjM#'' ÀexDﱆEBΈXr|p5at~6m\o NgRx(+;nyy9P[a6AQ4N[-K/q6>2#Q3)r̘1QfsAȬwѣ/._V E(}\{ģ3EzzFZC>\ Q .AdYƍ˲ylf#ر:Ն(--}a˖myNmֱ<8ӭVE:2f]('/C5 |gXۻp/a"@}l0ܣعu3͌xh FA=ǽhiq z*EQ/rʑfs˕%%eLg8fp$| d^Hnn]gaD ^4^X;a}a!A:4<?7la-W^X_ر'#i,^v% zhMM-wWެ(!nM%:"YC#-N'ؾ}OD7bGp/x'a6^d2y֮];YEQrg̘R){ǾK4SYyC'u'NGH|N E8cjj СYD YRfg v斈&;x$ Hp‚^?~>n2ڜk2 >**:v7( Ba(r!|&pѝ h ǃ; sMFQ4d2 d2)rd2)JR r NaXtfմmہT | f&BP(>-tr5j?{a6[ JF R TBT`+H  ))^ .L&rD͜˓ZhlUitp6mW\ 6V <雽 d2)0¡Cl/ @3K,σRٷ):dR4bG n-7.a[P~P|_qo`݆7O ˠP!J`ذnz8QH\m/¡C}>yټsdJP8@~atۤIop񂹭B͎~W^s}ߴP?L&%\?׏@DR" ɭBUU;EEGG66Z L@ri2e*{L7`̈N5/c 0}3& J n~?n/jj0fLhV(gc|iZmm'͒xӚlA~hݯ^)0Xh1=~H܈C4W`LKx>xa6[;V+ `YR)yQ8 $xtSق%vKSuf(J\qظs:\4w:&=Z!R =( `MKh/T`zTd21(DһD&wM&SC6tHM36Lp 3@+p$) xWHwGӪTAُ =f0nH}5ǦX,$'nH !y}0QUy>.\E Q*M9ℼA DD@t(gHGd kiƲ\rԔNSEd,!/>~3iBW"dO?0y}#1vEś_*oU_r:u^\Ԍwa) p9.irER!@M0;LS+_^Sada!wKww)RSSoxѼ93Naޓ-78#Ч!~0ItaKh#-- 0e|!jk|SjŃEK:BD󫍙F#}8_. BD"?3g):-~seسkg_EQy^*UG㲳2>~?e4K,tN&x@F υL&Չ]((/+ŕ/Ͼހ4Mӏ?&G]M (~8_oW_mnΝbۻm4d_Xyvձ|z'1$"[}BUyemEiI .]8,À^/^}C_>ޅQ@L%? 6 s SpسgP&' Xb5HMcڴ1P(@ ,# |Yilϼ-?wlpԔ)ֻC%Wzszu^~L1p4}!B˯{wA$mC(V$ƍ{t&\)j_R;bU5XğeR ~~e$ V|yw2-|nGd!72 kRYY@7!{1bH$v>ݴf^6mAEE5Xk7H ؾf{ G{&%#t'~_:zB&q񾲆 Ξ|F$ :́xq)3]Wln # r#p$>='rN 5 QBY,VY]+J7Y+>fc|nwER76GRSS>ioOla)pF2Ҍ DCG-x=C}1M1}ވkW0q׶Bj}nAni: / RcjGW?[^ Eyf?͟uߜUBL-+c܅*~Q2hcJ5@0wx<.z;sfOvl " Af&"F$_.2\lc\lqi9 $p  ǧzP(ڢ׹E ))wԲԔN} &zWp`1'PcJCV ZZlh0ق& Mf,=¿#JQL2=I2/Y0kߔtFD~= AcC=Eɱr76d}#-fXV7p8!">/$Z Jf ,rBV#9;rL9M@Q45no|_?I/ P )s˸/)&Vxkgd#=^zR(Jx<PD-KàKRCF)`B nIdffBR?R #GJ#5bm;;pt~eΜ2KHn ף(bVVnypQs> ME|+נ_~ kaEgX1())_74M#=]KMt;1]E޻6*a-7#E_޻ jZ ZZI(P+eP(P+ed8qCF~ ZCPQQ0ЛȜJde%u;p'˧?v fLtj2ㆾ8Q}n7a(#}~/N#E]u2)(=^ a!J spRӦM$D, H$ό-¥4ýt?oM8ZrbIӉ;wvbݷ`|0,[7̙;YYYO=H8oy0f}REsw!TTԶK6J1cA*ߝ)I.xqh9v=|3 LJX8!ظc@]];_߄ƀ",6+;ǞÆ{x$\:o*Ϛ}#{ vƎ=wdRL8 F CEElDV P*HzFݹp\a=5[pv;l^tp=w fFJkI֏ޞO⑻dXl&=4\.ٽ ˁ~uM QԄړxP8zLa'CS#Mc.+MƧoEa=%DA"PX8~\βLnNa᯿ߚR)LF<^/^_Ppo7؋jFFe͝ "i7z{p\(.ڋ-[aQ0?^(BTB@")J +7> BD4$ #q0n݊ӧp̸sx^iНj,:[)Cyy9 ̓VERR M9 P`O ͆J64ͨàAz"~|{=zt_JJ>{{3L&9gpJ1@RIl6@'q?s7O#pUUU<~ ? N'Zm_Tg0SnjqR ]IQ# ; Dca9vL*+<7RNJkTcQ!*OhF5Ag{:vhUW@ nc !y&N>:r|s( (vHT\OطM#K)BPU:uZOEQya?ӉO׾ "^Āy+ĀB{U־ TPX{* vXfe'*ڋ -M}[mӂ^p{x%O f@{fkh %\0LEO`hayp\Պ־yC7HI█dAskGz*C gٱ~^~? m-#3oAIMyj= 5@EDuHI&k4sg?GcX$ZA#ζDŽ 7D>#p ̝R)PK/Zrnk:v< 3?{>h,k:HdvjU1y|m}6x/?4'A*smJh3o,ɫoh ʂj8.{qs x=1!l5Rr?EKn($nOZ!v;qF#$VXAl6f, ZV=Ɇk[*z %T*7&:YYk5YvIXDVp7u$cgo$<[m\].E ~}l榦Vm"?"!V+62L4-~$L: J5 '&&\UU%v؆ /6~%D9t6v a !w GK FK$\c k3.Ðz g*va|XpuCwG!hgVYgE7Li&LEY,l;?#';Q1am&&-> FF䎌s=fHIRp){u\"t$k155ko.&\¤~tKuM] 2i=DQQJ̌!Yx*Z,M=Бpp)صp̱=v{o~{4uwS!ѽ\ecLi"6۾m+?!gPvSxo(dCqP\AáVlt`1L~aPbZxx7ʐ]y3QR~z}*zkJ.W,/)Pp{v߇5/˸^WpyHiW2(*b9^L+2oDAbÖ]4 zݢ4"PY]ef*ȡ<^_bL)yXEmO%p:eO-@O\~UKqUWc)FyyP][Mf(JTWUACވpE?&4ׇU %'VGppjS8*->Q\}х:\~e78+bFjU*a71'L?3z}؝^S-Qٓsί~cn0[nLޜ2~]^۝MxSJRcJ" `MÌDcSsW}!DQDi̙2.6?#fENGLDg‚EwwWνfZ[]NfJt8?NTbPV:%m:) gOoprW>%ϝ0~PGp7pvQ ^S:CYhp,b9튧 ;oh.^#8z`/b>C|b9Z޾۷n}2̝<:EjkhY֫ ۦq,1@'ӓ R x71izf` ::B6"Шx?@IFJ,4.l7D]L8GB[l|n|)֨g/>7/ANvFl"$+ 0|DCjb<6WtJ*gfB$$[1c1hDܡC6i72_- !jC"~0s:byOzxWs]KCzP&q7cp.A!`?Eo~y#B m#D@' c$x">~E74'pS&MS . ,'XXVQ`qۻDŽnj?<Ҿ+&7ý|BD;QW[1dRӍF j%R̟&WԱpY>qI1I *G@Ly{)}1ol(bpx!Irh ՄbTƗ^m6*]ruCk/-1[bhFų"!"~7I$\Qz(ƾ#}tDh ;<7b6tJS,ֈε w~)˲.N',8ʄIENDB`pychess-0.12beta3/pieces/Skulls.png0000644000175000017470000005263612176710402016336 0ustar tamasusersPNG  IHDRMbKGD IDATxy|T6~u%3LH}.VmUkX_~v}ڷ}|j-Ђ"H d#{2ٷDŽHXE@|9k\Ͻ]_ꩧqWpSO=E}DNp3oM .^#J2sZEx<C:EiiL9yy7͋5`4’ј=w9)phDkQcAナX,yRd/dA-֮y.@H4shݻ!i 딯_tBTf1)04 @Ǒ(X¿u EA0W%!ߡi BȟL8PQzA_UUar4dffp !/{9`n lE/ARPb1 jBAQ)?`hkk =r,gXK ("ch t!)qTB#OfpJ^i\ij!%J$4u63 Eڋ~b!//4Mc2q `4pHDS&V[[( a1<cSr,GQt1H$TM'aWhZW4 _ٴOVu `3TY,lT58 Ai] !J2Z{h<7At L*q)dU $ Ma5"Hॿ AÄL;&:T`Kg'vSrDu9hD砩4nF>`fΞs^#?g(&$(C$>X\x_մf] 5^OIhZ_e%D$_.@<8!:rvx]6CQ5 /2tG`3!MH QV4L,uxJ!::1f9%JpMؾe#n3.-~7uA)F綂VB?7ߊAS[fL?Q1ic i d\8mwjfe`l9}iFPX+M&|gd+bOC'JV:M#Q  ( Ob2 rHɓ?eKpS`6u_ xAei.ʋULg !(v`[#+F`f}_QFD9/nr˪ӽ.p/!*? +%)G$дkl6{RD|\)Q(e?]43b)hmt˭}T,"wq=1DבD;܍(8EAV 2(%OXޯ$IB2M8:^idQD*IQ@Q4!@tQAEQ66|BQEh+FSs UUˤ)j*CUU}(9 UPQ͏[i0 pZhE+4MCS`h2{s^'! )ӉNM6V[CCKC0+t &Ws=J'xPF_5-FR)G97iC?pR)EӐDnFEf H\(󠺢FMh:|ӦM?-KJpjBKh4 %)H 2)ᮅcp4w+ h*Js `s;P1v B8(a6!T  ]g7JjXϱbkj()ȰB4!`64,ר`$1eL^MYJm8[nò^Dy^(DI􇓘0*@/a3/ Ċ|-&D At 2fϞ{F_R8r&QeGJAtN4bFX&X I?Ǒ6%Q҃%9Xv +57%pw&& YeY2lf$σm:u*OH/ 22(𺰵n9nzTe?UP@~vu^Ntt2>{h1w|: ,F )*FQ b E8@al:}f^ H꿴Pʋ ali.4M!:TMC_(E#AtlJBQUx h%Eąd@8bhDFM gBmiis-JgXztAr3uodL[IQ!*n7{n[0 FI`oC;ʋh/28CaZcazis[瀥iS"h H 2(Ǔ,Ay'?Uä̝<hBuQݗX GAiǧ)} Ke9z *DY$E NtCQ (c"FșF8H!eúXtGՏ(#ɡv\=m m2t&pL) 1)?&D%ýh^U#H QvgT!3Ê ]i LD$B/~xJB' c3.gP5 DqUA|zpXhG"%A=sܵS{&3vxMSp-(/bbEIARP܅`$L'tvq FcRx{#KAd9k} /.:TUC$B?U!lf$Yµbז (*dEJ`R, O@V)rt]gJMV<)LF1UnAhoc1oJ92lAnT·x}s}I .//`=tp {1ԃξ .;ƗU`6PtA08;܉<FK5wrsFsz:EU%1gu6M3 70.ke<;ФjPt;ڬ ;'DUT ^,@s4 IoL`Ya1 !OM(7} P (, AAm)\áhj< BD1]%5D0wb3:^^/|#" }jJYQ4lV3F$EB'hqtfN@4fq,VdLNf6y<##x]6=و亱m+l#\63 U M: *f/ŦԄ_t^v䋊M]ڭE9n6ߛ18-K*0YXͶRnG:|IQ~朓9Oʺ#(qLqWKZpE!1` l,TБ>I8MSxV$ yn+zڰbr,Yrי.+ /ܴхY+Kr,.eΩ!!Hp%%/߃W^^H |?_M7݂ΰV E^YI$M eމZpM]܍ph6?_t omG]kdpαCN ARo;_Dqy pkom9.gq]=[3@; IAz7|XB脳`,)RQ~>I EK ƚšnp Q&PU&P\1zYsI (ƎkAC/X= ,E11=-bһΡc8H m}o s0 $NkY v}_Պ |M&#&6Fy8Lg0w`qj/DŧM(/v.vx})|dXSO=_ҝ+pEpWpAqEpWpAqEpWpAqR/'!غpD,Xۓbhiŀ+#L+$׃4+94 f1j2_%DI^EQِ]R3Sjli:}e٘=3as7VX{zJrR`4PϬdT>W躎ػ{'@TPE~a N瑟|躎x͸yN%]di0h6=p,:f#}Xn}gJ*eR2>'$ (sw΄ɐڰ_p] j( O@qq xeGYnw8njxF;Daxn'[2kR􌤾+@?^[_z h=CciO_c|Y`K2 űLo]Ka3c6b5ljr-5E"'|uaѢExx|r<#hii5k>T!Ȱ[jݞ>fxII:`i   /¼WG˙&ef!UIo =eUdYAJ!7Jg6P2Jom$wbŚd!V*}yQ!.j(-+ Jc MQTv_z?(Ae(!}Y׿F~~i6DxGɓꫯСC_HQq躎(ooOb*` IDAT|BYgPh9n;|Qxt*LH rMիT{lS-J `2p% fF6A)` !O')_֡+^t]G$*izFI{fokעD\{|شiT5}/^ BbP$`2K sAT&*A̘9{'Uզ5 €zrcO׻披g4p,P, #O M=UД'+Ê~LMIGA$s=UV(q烦i\.,^x,"࣏>۱pȧb.e3㴢yEYgN_9Ə?{Vj3Uh*j:ky~jU"9%) }M]=)QnNMݡu UܼܲђBuOqi҇-8˅{V=^}U5\gyx>(PXXo}[رcR%,lQ\\u{Pß=T崛,zQdl:u:hzC6$Ǻawc?kZ˨wYRT ];% rN ¿ `Ŋ(H$`,$e#lP2Unؽ ǎ1yȲ:X `vaGa3'}8lf# d"d29$Y u. q̷ @4` ,=)8ܥqiz$EQ0iҤro/ۑ|aȲiӦAőd!eE2!"`Ƶx|l&nļUUU4 xx[lAmm-X5jb#$:A>?@j#cվǧK < jD#!oCkk~,Fc=N57i ,t7ͳSfzKP3pgO 0B {>j5 p8(**—e|zcMB?d" UQ)AƫB$!KѹH8 8D"akXr%$餳K< cٷ/pXtW8M //8g|-'ޔxLAyʙ\7Eu& [0g8p-GSS-ZѣGoooǦMp#wa0+YIQAAKw']Q6> )O2))QG"Ç/_w̷b5ZV})xRD,)@*q04 Ƶ3*3Qb$XJlf p,E&p{Xō7ވ͛7c͚5())A0hD @gg'aC0 B$T] ܅գP^#>8lt\U&1:@`ήP#洚)兊!$ ˪n5P Ma!?9Ԕ#!H`hq9, C C wxhfϞ;wNdKǣZÂYꓢ ӊL0֮E[k#rgxZla7??$L/CG_M]}F'!b;6t? hh4>vւ( ӧea`2p :f`͛7cĉhnik/nJpkSjSVտ8 hjN!)ht&M@S!UI]^pWpj,dGv_bXJ֩^#? DǧcgfT8lڵ礜}q+]]]Q[[p8eY, KښbPxn(\dȊw:ttt vcٸ1uT۷Wƺu`1eʔ/66t:kg6nXrʬSvո;1|~DMM V^|/nPU{`Ic,[lȮuQ!2/^ YYY+EQi6E,Y3f[[nAeBIvo{]0m4|/k|:aŋEafV ,(1Ȳފ 6b'4bpt:p!:B;bMo0}+<>t*77wO===(**:/ Ȳ}{?këVwŽ[FϺS _W&GP(Zpx<.%ID"ѣGXgٕeDÑ$,ևBȠOҥK*dYƦMC,;! 4hM/20ssIm[ʿ^ 㦩?c=:6Jp*UzozA,ƍ!IBb2FfDQDQ=:jZ'-]]]*M"M%Kr322Nk>|>̞=E9~>(R ,qE;wDMM :;;QZZz]4 o2$5 Nt$;ېo[gۯD(<%N&8*77wO?=9(Lb͚5HRGd2 n`1ګ~RQQax' n5ͫF$8*M6;wb'D9I( 0usEkì1YRen[ע'"/Rkw/6>>ٹ]]w:an߽hѢ 6H7 *x=x آ(B!C,c̦/4M> |pJFQ=h`0ߘ1c($ صkϟt.)tp۽uy^5:i:4(/G_ UM?=0Np{+9Evٺil:q/=#dhHH---,'X|uww,8k$ gwk(l6# p`ҥxG ̓$IXnݐgp8h4/dtdṊ.u}bVu [U nBEq6T`{; ê7! 0 7{Pb6l o>g"(ZZZƃbL4 eUuB.ǡi(o܌~Sc郢kooǸqp/\t߇՛d x lC#|4σ[fcwCRw8\@kΝk8*={ț7o!2- 0 ݍz4&I)-9󔖖b۶mg*rJ< N"ȠQSS󅴆5 碮(qey&4yt<H0\ONNT*?O,ˬ7G"۷=XIӴ$I;dY>źix{݂ ЩT*q('Xv())>Z0ڿ?*++n@3Rv·\ \v ( yL,/(+))Q#h`aulv Z;-s}?KE/Rw;x|p_VuK/tN(2a/kӗpra֭={6zϼ677wza`ҤI_(cny/JsqI%+B? Â5c ff… Gc lZ#zzz_*sϭnmmGl0 UYYI-_`,>h>l6 iTVVBE466͘8qTI#˛w6a2n FH$6u8D4) Kd԰"8>~SO=1Ɖ'n^lٲ~]R0b0hvp1aXd):u`B;@zHiJe!&bTaPSYwl`Ӎ!EQ0r,\Cp8a ʾo{ŧ~p,a*:gך (EQ'X.ƌ+VGII 92u˅*6dffΦKD (UHI X4uuqq0E G`(ҟy_|}}}URl OwܹXַEM0 ǣG;4Mvwu3f1g(Q ea6/EqFl߂$eh`F`4 Btfp,֞*+]Sg۷sL,?8`XصkR⪪>z>Cvv҂N#jD0 V+կtƎ A Պ+{O |0) )1)r{Mݘ;R!}N,sssoy_+2h.zVee=w[ZZX]?bxdgg a PVVQqСW(bơCxBZ[[x`XJΥ5% rXEl߂7dU,+EC4Ē" ;5b1U\\m5Ͽ+.Y䍂O-i:H4:::Bȫ,˞`~*DQTUU!6l۶ ~999CdYF^^ޠ8CWWl6F#VXq1X DGa*&Zಛd(*Ai^:yHS!S9+**vuܸqvҥK/UW]uoifɓ'Cu{E9bT iX,B eOhnn>vX,<YijM1`0  $I()h e )#Npe+W,ɡ|Bss3!I.]SO4~ǒdG$ѿo0SL9@\!'b޽;aeo8!0̓eYF4\/"h (u[a2qp;6Ѥܼ+Vwttt(*H---8( ?2x]v-[zޯgVf0 X,T*`0;wÎ;LJDXVP5,(5MbMEw( w, ǁ>f9PQEei6Fg!mG$!7|9~P=Zfpwa4zP<3 q~z$IÈXx1?vw׾5̙3oڣKȗH*((TTTG-ֵSuS;ӵcu:i9gvgsٙNwzuJQP)#* w%Bn$!w?4jqA:9'`_/y]=/a0:u (B&IJE˜9sk{ [n r0uT|>$''n̙3={-͘A@?$fawxxSLAZZ!˥` @EEVX1@"F . w͛Yfh4%ApAlڴ 8<1|466F˖J;\p6 ,bw E.˲$Id23˲)WY}N&,vE%Bz(--EGGFE u}ި;#I-k_8vf3p%{';IDATߏ+V >>3g΄VldÇ@:˅DDŽ|'”m vpd2rJa***j1˲~ n~A`ppvc̙`Y Àax() !99/pIBE6mIj ͆8~ٳ:> ֮]8<aPSS 6L2 U"N< y~ &k8{jJ$\a+:eÂ&D& AVpHBc,˂l( qҐ  p)={ٸpbccz122Vyǁy y ##c©~JQQZ @$>ɸv{0YPq"pdHJ=g 0=7jAӴ$6ahP__rb!)) eeeXbub ?x8? ,Fi5 jƍ'D^& o|MR<|/ ~_ѣGGN?N>XaVN6sgjV 6$&D hoo#))I*=|0DQqBΆ\.LJ~bL2aە 7͞=uUVG?<4|>yX,BR)>_[4SRRݻw2L0Cww7V\ 1<< Պx455`0`͚50Lp8s Ν; e"HOJt:!{jQ---h4J``4Q]] ,y655n˲;wnJOON8k׊_R4M@xYVfDDDppr8KVEQ@`"D?>S梾* sᅬӧ#-- /^DAA:;;qEB!̙3đ#G6jd2%A^ig,HDII z{{#]]]ҥK & @8{,DQfCMM AQF#fu:a}ro[c(J8 ӉԠ˖-C~~>^/N>4իW[v;<>f ns4M022񘘘'Fd̚5 (B[~@?Oe`ݨ@~~>J:deeEVWWk"""_W($- ݌\5//XluᎶ60 NLB!ddd  "99###iRNc``FqT^zK|>)t:aXp BVpݨʼn'@$mۆ~455h4|2T*2227 KT@V}oعs':;;x嗑|{ ga0P(O 8 `֬YHII|w"QѼ%bz(z`0Sttt/,\سg4Mw]]]hll-%% ,Ix'΍TBB' 66nZ p6l؀g"55+WG}(,@ e N ## à٣j,X,Y?86oތ;w@׃8I0xG~x^|g:u$'xi<x$Ν;'vwwcgޕq%h4()).'l8̙3OP(pYX#-- 2 mmmy#iIHHӧvZ(J ୷… ~gϖGɓ'ŋhjjBaa?0n݊g}V|8ũ4\l6mp& ̄b XETTbbbPXX(O @ʧfsNvv|,jjj.'HIIp,_ ,F$&&vi~i Wcƍ8z(:::PTTt_ToKp$I@AA1uQgܹs I.k;S#hnƭ)xZ&Lx ]z5V+~_aѢEX|9jkkap)rP^ I(bp\… {n image/svg+xml pychess-0.12beta3/pieces/maya/bq.svg0000644000175000017470000001542412161415524016420 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/bb.svg0000644000175000017470000000752712161415524016406 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/bn.svg0000644000175000017470000001216312161415524016412 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/bk.svg0000644000175000017470000001311212161415524016402 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/wp.svg0000644000175000017470000001071012161415524016435 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/wq.svg0000644000175000017470000001573112161415524016446 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/wn.svg0000644000175000017470000001424312161415524016440 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/br.svg0000644000175000017470000001021412161415524016411 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/wk.svg0000644000175000017470000001341212161415524016432 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/wb.svg0000644000175000017470000001202412161415524016417 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/maya/bp.svg0000644000175000017470000000722112161415524016413 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/Kilfiger.png0000644000175000017470000003300312176710402016600 0ustar tamasusersPNG  IHDRMbKGD IDATxy\30l(n;yrKzNɎs:=OuNyce)+(">23[&K{/>d…sXpAW-v> pnpWlti(J>LAAAAA 0CapҥKtuZ6l 33+WT*3fLԣGl2~G,Y­[du&1@z<lO)..[ /^ʳ[ @jj*.]B f8p@YUU6mРlee%IIIܾ}lF_h`=0 v֪ 撓CUUUz:tPoyVKII juhCӧٽ{7AAAL:233پ}!~z?coo@VV7oTʫJN]'Y}ZמjoɦXN>Ç)--@&̈#ҥ^yBAtt4=cǎ5xnee% $&&R^^GaԨQӪ Ν;SNQ]]m|-[Fdd$8qBWVՒgح^3Em۸puF˗IKKwތ;;>4hڵsbgѦKIIJ=͛75kѵjsqqSZ"~yzz6nF zu,^=p)/MLL40@rr2.]bĈ <, w^M7330a.d!;vll(7y10x()DwpMzѣGxTWWGRRC w/.رc:u Fc3=znpqqj8p EVC ?pSzE4ƆSq;(]#OAA;wdtA/.BѐA=tZ*U*2b=ޞGyhl .1㞿o3o-P\\lcj)--EF[ um=@~8wM~ָqt3qB\0|6 qej+XmhˋG}b.;///ܹÞ={ϯC7T*eʔ)\RbrssϏ;LnDuu5Rwח!Nk]b8.{F>hۣ̞=[WߟYf><<󽲵@Ĺe3<Y@NdNn` 6={ 4֜4h4777[6[tV*HG1Y#^sf5.'og78wB__ߺuEwn򎎎]k3#GU{@ͤڽ1֦ t 6Do6...ݍ^ 35ĐZùs{.%%%QYYjbkk ;݂vNlZEjoҌ ED4ZIuGP`]kO ̩}iC FCyy9hZ*++hiEEy{{ӵkWmfHjTTT4ޚ&+8@jI~5t b ؅%gIFi >W\Z}iA-mpmȐ!Fam>rKEEE6I A4o MbsqW}!a|IXNNN 6z^D;;wqq18%2h ]O$⾜[u C5pJHOO70/kX)))]30dȐzW^gp-&Z2B`L&㩧bժUz#Ν;IIIˋ\^͛ Ã;wpu2nnn&ی5SڵkV мwO"ҥKƍǾ}tA ==AwHK3G}M jdP(7:q E in4bjwifLnݺEUUR___IS޽Kvv6YYY\r\q4))μap 8 . zU~m.{qC>H$Nʕ+hrD132~ۖ-[8w'OIiԦŭxLQXXȪUjƪU̍{ BZRIZuRxhpBUi\;vknpAy"k0k ";v?Nz` qmBbbb8w gϞitgW#j5]b߾}=H"ƽ6Kv{=z'N\1:S" n0o1_),|PPPSȠggg4zxێ({%ˍkZmۆFofR9}(Z9!4MN8:t(WfϞ=|'_[E-m2I~gΝ3KR#6"ʻ6h(~x1Fø4KII̙3>| 4i// Æ ;v nHR"##~:)); VKLL rܚ@cQHՠCtFd7f޽lܸQjH$< 6b?6Eٿ?[lI-WDIm۶y4s2 g{߈~EHעQF׮] 7-=c (+3 p74c@l>}IWF֭[VI?,>8|Ed .77)S4(A޽"&< '''ˋ'xs4 [l1)grD`Z40"fmF fiIR\jq"[߿Ajmf2 ~bMDQꦰ}b4<<<8~xTXXȵkhkZ57>JO<x }5 𢹅ep!!!$$$48=p>>>eUnݺea}J\θqĉ(}!&n􈵨[\/28{{{={vg2|uWqnN9 QVVf׈F0bs<ߣp @T2|p}唕~ &O\-ciT*zsWf/ 4el!p qSR<zt5j(o ^z%s"$СCL8DV%>>ޚ/EYZ2p q(!ǶZVS%nY? F>T+HAA;w&##lak3Cs Bx^W1TcN RRRёH"##-jda#mDʞe}H%;l/j4iii,Y=z{n;۷Y|و Vm5mrL"jj,f\{ǏϦM{n֮]|3it].Vk4XK޽qssY|ORQZZJnn.:t777 D>}>olpI)7I3 .. FrmAѿ/^Ilhgg:uW^̜9>Cd:رch&#N-E<819dzkT*ٶmR5k0x&!\]]4i&Lȑ#;wI&V ?厨0`\Y|9&M"..aÆYm*5j?MfvaUcM ,=:s~Bil v"f1/o?R7l!ŬZYfxGaa!k׮ݻ}5銘HIQ0qS1@/նT*&LyJL:UL EҐ=l֢%IVZC}6nfX;-vknpW Jc c61l~f ji2cpBBBF#jxᐻwfXfMљIiiNVʕ+ 31ng>0{{{3,C+JHaa!W>ga…Zٳg7T*ٳg)))z@ :Ç7ɵ1wjJJJ4QQQ=SRR=S.҂vEEE^y"Jyw8q"?CfYb.\0жl۶I0W.Ov޸q;J}}}',|թfÆ .]2lBBB{ wɹt)=jԨ~'N_ޣG%DBEEO۷o駟4 | #GdݺuTV-f~e(,l(8 N l~ ^z^2,9""b#G|T*=8kV233oJXk׮Ob r/^̀ظq4D􍝎2{opw֬Y+W4;YVu1cFӧO_qvvހÖrM~{=V\oF\\yyyL<_|Ѩ$B`ɒ%Ӈ͛77_KX)ʯ:Z*MպTݻw^:@*Z[s+Q شi/f֬YH$uƍ!""/F* K.%88Xa$((OOF x≲G=gϞtVkqp[իW'k#~ l߾W^ygyFpϟ5jEEE_2:ٵC"4FMбcsE0jԨFǘJsRVAֽ{(''F7.7*ԬΝkT3m餦"SNe͚5q:tR<Цjz3_3t&w58o`ťRiD"(Vu}WҀQW8[* IRXxꩧ7o^Ұ0&L2?pr9gf;nnnL2Ŭ\{^2eJ&GV\\윐p. ,aaajMFr5 _ެ''']ݻwuBƘ6mof֌ ь52 \.\(h4:Q TZ.Je2YR}K.1}&%16vqc˴Z,cyj]t!11Z >>.]XG~zeee\xtڀ?`+d!$$-P*t~$8Z ws٩n/xoj#_tR,Pj[[[BjztV޽;9FW唔PVVZF"䄻;{%:v숛*3z¢P(t (Vۿ;w"]12{*JLLLڳgÇ|$>̼y%-IƎ̙3#r)B?3j.QIII_{ Nϲe1b 5ʪ3pvI 1GX U"xVUUϙ3G4C^&uh4 wΙF_Tk jK7S Sri0[]IfڴifZ1;|c9%IKZz4}hpBpjnpW Js_i7v+V/ 66bt“O>i_Z;M Yd ^`ݺuZk IJMv'*V##snʱctlpiii̝;#GgR)iXW E {T* Mn#z3wJ%Wo߾{j6oެ,wH… \~ \\\իK z@Dd233Qոү_?V}]]]?OMMPOjB}0|gXbcƌޞ jܹWYͦMغu֤I7$44c?ܹsQT"Hq111 2u?8ӦMcҤItЁ~Gs9d ZmWYYR*j .|rTZh\$;wtsuR:uD=ٳ''OweӦM<̛7[[[{<<<8p.۷og֬Y8;;n10駟]spp`̙DGGdkLTTT*PTƒÊ+6lNAeÆ :ۺFuEEE1B[o%@e|RRRE'OW_u \nBnn.8::F1SSNZT z2nݺœO>iN:t֍:W3gΰf?qFa2F{=˗#Ꝕ!4#ey퉈Fϵ?8~֭[ a9a8 Wxzzj!j5&H_ -=Ks3FbHRwΧ~ʅ _tsfϞ3Rs͂ d_xQpuu]  +b jS|+יݫWw֭;w3%`NCKDD~mrSdyb%(JBCCm ZM\\'O租~ CTT( ***غu+xgwť!'G90 ɂB?Ûzʻ FZSN|L+WfwAiS4F_8wΤ#s,]} ԚЛr XxN>իo*A`…믌5 ׿pB}Yg7Ԙ=$iZ)s ^^^]n޼8gBBBriV~wݺb\.cƌ9rwwwy&锔P\\FAP䄇AAAʱcXv-o+ja0''w}9sN|}}/4i!!|o\t-[0gr&:uĂ ?~:ѵk: S?{\.X ROy>}/_ ""bx)66$,,̳0뿖ڵ+Mժ{9_xZݻ7ٌ;RIyy9~~~666TVVRP*撕E׮]g̙b% ^ v_dɍiӦF}W_eVVV6իW1 =F#Hٳ'UUUPZZJB%S(H$qqq߿ͩ׏>PUUUF$ JҨ@oFXX"2ǁ[ yf^@nݺiA`رs9K/8FV3zիWCLTC0@BZիqNNNу}"J"ՋQT>|7nгgONmd  f߾}={{zzPTZ}ryek/JKK5k}-:CrA@V{{… ˴ZZDDDTk=sL&[rʂ+Wމj2=JPPK$4 *g϶1co #--`A>YzAZaˌ &ҥKcwٿG8oD")Ck4Zvϳ}]!!!Nꔚ8G常 h4`f%@pppTNzIII k5*9N]$==lذapݵ .P(t"1J 6u?sNOAJCCCRRRnرc뇽+V59Fjݻw|Ņ:u*3(??UPTTWW[AT9"'3p@تU0an~q5~'mGGG6mԩS BRul{EP4E󿤠 HI&u1^s}lmm~ZϭQJOOV#;;cgggѩܸqä@Lk^N:1h ^u֯_\.k׮=z3gPQQADD>>>F1**'N }-$x711E\uVtSr=pjn߾ĉ->jL<CuXbncǎ3{BJEII V[yA"qFLx1777ʘI$lllASB"Z6NHRg0BFF=zЫ[EEVPСCg~HKKH%c$ SLa2~xj5/_ɓ믿b/PTTT`kkKtt4Ç'**Pr9n?W^F󳳳u[2LSUUy !11Qn:;w$s޽{SO=YtjRT>y3VSdddǹs8w{_E&D"a„ ;޽{ӽ{wrJo0jC<3,XUVR #00_@_4׿T*o DFF6b&7n6'%%7|yÆ Z7DEwB:n׮]۷oP`y E~~~n7oYr7oޤ(u6o-zvѢEӧ]^^nMVիՋXn ;vTJKK&hMڽ{w9ܹ̕3SNZ8dff,DLRRgDW%Dϒ2Dy~,>ONNxٴ9rуwsLJ)SPXXHyycp5رޙ_UU* |}}I[@691``BuppEwv]@ !<( lF[Fp#\ݱ`]I+MA8f\4ɓ')..f֬Y퍃YVٱc_~%~~~֖Df:99?~NtttiPP)G&IZVHJʕ+Q;vxt͚5_UVVV pwMmI 0w\pssCPWǥKoǧH7(HX#MߧOӿLD"3gGq-֛ |>x`ŋgAYL,4VJJf>G 5uvǠA3g<>m5S?׭n  pJ;wRYYɶmY)...DGG3rHxW"M|:m!!!աͮhd@PWxuӧo|Of*Jmۆ#۷o'<<ѽ 3b ٳg3gN7yyy,[iӦq!"""A"4K.EBBӧOo4}7EF^^UUe4}0+w,L*b&rgĀ` dIJŭ[ݪ)++kWQQ0bM,^e˚RX$R]jҤIw&Zy;mC-$rIENDB`pychess-0.12beta3/pieces/merida/0000755000175000017470000000000012176727272015615 5ustar tamasuserspychess-0.12beta3/pieces/merida/wr.svg0000644000175000017470000000633212161415524016756 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/bq.svg0000644000175000017470000001335612161415524016734 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/bb.svg0000644000175000017470000001553612161415524016717 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/bn.svg0000644000175000017470000001517512161415524016732 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/bk.svg0000644000175000017470000002055412161415524016724 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/wp.svg0000644000175000017470000001277612161415524016765 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/wq.svg0000644000175000017470000001712412161415524016756 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/wn.svg0000644000175000017470000001714612161415524016757 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/br.svg0000644000175000017470000000631512161415524016732 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/wk.svg0000644000175000017470000001533712161415524016754 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/wb.svg0000644000175000017470000002047312161415524016740 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/merida/bp.svg0000644000175000017470000000577412161415524016740 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/cburnett/0000755000175000017470000000000012176727272016202 5ustar tamasuserspychess-0.12beta3/pieces/cburnett/wr.svg0000644000175000017470000000443012161415524017340 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/bq.svg0000644000175000017470000000644212161415524017317 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/bb.svg0000644000175000017470000000523412161415524017276 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/bn.svg0000644000175000017470000000442512161415524017313 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/license.txt0000644000175000017470000000017212161415524020351 0ustar tamasusershttp://en.wikipedia.org/wiki/User:Cburnett/GFDL_images#Chess http://en.wikipedia.org/wiki/GNU_Free_Documentation_License pychess-0.12beta3/pieces/cburnett/bk.svg0000644000175000017470000000555512161415524017315 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/wp.svg0000644000175000017470000000177712161415524017351 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/wq.svg0000644000175000017470000000666712161415524017355 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/wn.svg0000644000175000017470000000422112161415524017332 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/br.svg0000644000175000017470000000630212161415524017313 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/wk.svg0000644000175000017470000000306012161415524017327 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/wb.svg0000644000175000017470000000531712161415524017325 0ustar tamasusers pychess-0.12beta3/pieces/cburnett/bp.svg0000644000175000017470000000177512161415524017322 0ustar tamasusers pychess-0.12beta3/pieces/Pychess.png0000644000175000017470000004230012176710402016462 0ustar tamasusersPNG  IHDRMbKGD IDATx]wXSgO Ȑ:P\u!-hZuUb8nE4"({o !|| $j˜{C ZZZAϞ=pO[7}1t;voGfiXbYWWoal]]],^;[zyhnnFuuo޼Klj444:%{[ؘ7p@ގ;2۷oJKK3Onnݚ)Xرclllx}/u2 =,8y$^~-Ndž @#WWW8uzi9/++{X,bccQQQyyy}Eqqt3Á;~ݽ#\|yT2___kyr1 ̞=`ٚ5kd***ؽ{P{{{j5j>g,^bC@@u2iѣGcѰhjjRe]6#wvԆlFadd/8|Ё> hzsٰhѢzG߽{w)S4Ե/_ؠPWWkkkx]?~81se_|I_>|x+t )))x3LSSP\Jdff^jS@𺬬lൿΤ$c000#?4[n-Xrj߿"?x;e}' V^msNڻwmxxw\𺴴TH>{yyQ3k׮՗bgϞuX'??2?/4muƏ_eii HOOӧOc P"!S!?3._$/oo>$@[[ӦM;`;uqsСC)ѳgOl۶ ӧO$*+++jw^PkNcc#뼼υgE>/<|8PZZ \jjjZ@Quܹ3)4Ќ <%yl6umnn^{mc0DKK u'TwhnnG[ve;FMMX$~{ ۶mCNN=z===4iBBBqFh4J Rz:!!!'N׶ݻwiB+E"W=e&&&)#99(//owFQYY .Wɒ\R---___TKBII ...4i|G#F@NN.\%UdR4ի99d۲2޶nKK ^xqΝ;&MGFjkk }||GO>ֳˑ#|xzzLK~_99ʟ͛7Һ:8q8u?ΟiggWhee/^PeGaݹsgww1244/"7jK.(Xbr\LUU֭mԨQ4i"!44uܹ%%g!tP4iУGCee%-Z}}BScee%n߾}GTp"%%e{999W^edpeߧ>Y4hOӧw}d8;;w%#667n71h L2NNNĞ={?gOa<44u۶ ُϟC_~ +**;lw*((;`ll7oҥKزeD'#""> vލBa# Á@@:(}|{ {8-wGj[Fz3A"D]]-Z6 ///t]Vl}777:u ?=*՘Y,֧0y; ږW֢ &&&u,]D:t(=e˖u*l߾($p 33wchh;;vc|v8qΜ9}Gj#,,Lb{$''S#> \w_~y"`PVV;v,͛'j;YXhPI0|pYF~ƌWWW?33om6CGn@BOO@.w$! D xQQϟÇ͛ơC |>%Kd=;m:::8s RRRp=>ٳ't7oԦ@$%%btfff íU8bԠeeeSz*y@FF?4M8FÐ!C;vLXƌ___TVVb޼y>߿iӦ!** L&Æ -,--ahh}}}ɁbbAKK _A?~n~4 !~$qp|רqpyܽ{!!!0aTTTڊI'JsssOsd't/^P `ΝhG7!OOO*%11VRXWXssszzzRy<lMMM066NmI=~t9=L&A*TUUG͆eee>{,+,,LWI3 x|Xť.F^^V_~ysG?|pQPPPݻw7P_tJBdKahhbW^>꣄LLLTTT`ccm/nj9uTڹŅmz2pd(^G4=_yyyDDDbKf5,Y:|˪*8p111CޝG>bŊ[lvy#g(0,,:?ٳGl8b\\222믿B^^۸I:“'Oׯ_L E\\  fxyy/ꄇS۷LI`0wZ[[[`2ERuls)S֭[`033_]v\ Ej.^h8xzz믿chhh[lm pCݻK.U(9Hcǎnw\x q%݂ӧO3 I%pJJJb?tx)Ml!::"kȈ½󨨨w!lll0j(߿NUUUxACCKK js9rH\Ӫ9=۷#)) W^ŝ;w~nz_ڊ~IsN>ٳ'rQ]]ܾ}[(~'sNNNhnn8!oWp1U68dȐz@p8ѣ;b֬Y]憸8lڴ 4 4Fkk+6mD4t:?_~VVV"Djfd0XbE oV'''ܻwR,u0aMOOGVV=~3\=yf| 9RA?\\\܌7oWxx<̝;gϞ*Ə. tuu)رcٸq`eeSSSܹS~lll(:1Qׯۇ۷СC(*{`0pQp\$l={6.\@yQf 漢XhЫW/(++%%%(--EBB888t)3==tSSfϞ k׮O޽y^^^wqUR ''׵Jn%a#-X@٠3l߾...077B1{llڴ xh4Z[[<..೼ɬӋ&LfR@@m޽墬yyyB.kCq4믿4@Qزe TUU>v]999fϞ GGG@KK :::طo$Qc&A2dH$ ˖-Ӽ|9uuu^/hQF `[(Y,,X/po🆅ErNb?igl6[ٳg055ZKvءc'Oɓ#G$Iׯ__ģ;w.֖b-V= ӧOǾ}џX@.^A`ƌ5j^PVV ÆuTY`ȑa111Ɓ)򎎎4r<+p$NG߾b]e/]]]]{hhhaffFe>}>ލD~~$BSSS۹sǏG1 ><-7??lI/_"""Gi|8!>>kWVYYI|}`wӧ&MNuMMMeìףW^DI~vN]EyyT)c>8q".\Х>LMMxN/%ѣE:N6yԨQ e#mmm\" V 1a„H|'T {F]]N# 爤gz|kCio D^fgϞBh:::033 ѣTTT/AAAnnnPTTD}}=կGMSSRSS/DOTTT &"8<<:L IDATp@I%QIpppp"6>ӬwLd m2{g ᣞ᚛~%ƍ7o^(G}}=jjj@Ѡ-oElիWH따---x"֬Ya߿uuuxb;̙%MLL|_) ߾}{ӦMħ"!!wߡsn5|LŞ={DT8pK.pl6[n`ڵcbbluO 99S:-$177acӧ;y2SXt&322p丸8fPPP|eeey;v =UwGPdžbحRSSQWW'2>>W^)4ܹShBJǚl!CT ` 6oތ+WR +Wbex`ٔ\hmmř3gީ߇ Jʕ+w\]]g@EE[nEQQ 4刋?bʔ)?x`L 8}4xzzrrr˃`+f-Ւz...kkkammWPN[*FCEE˗u}"55R>|:u A`ĉ|2\\\P[[3ggy:CRR:LX-ǏcѢER-?{j+`nnv&vvvpttׯaiiI)ܹm;wϟŋxPRRq9!iK9*&$$ԩS^WPRR"|]'X?KX,\vM^]]w܁=0k,|﨨(;F,^lƢED߿?(>tx<9sF\.RHn߾}رctطo؄n0d$ innFJJ1:.K4CCCܻwO(ww} @uX`28x %t XQVV%B|%-[8r\믿zP˗/H>)GJaQargΜ"nXXP }H'i3| ZH SpBrTTmdĉo`09s&ʕ+4hEV)ƍr i#-[F]tmr~:i: ӦM7/_aÆQzPSSA066Ɨ_~SNa8y$`֬Ys8ܹCm۶!''G"_Gw޽5aA4?ULcbϞ=o>o>}ffѣ~wX,TWWc…سg>}F, , 4 w}G98;;S HHHիW/SXH{9KZO-ZUUUEKK /_sR<4 ӦM~EEEzٳg]zEEExx ***PQQ:{ťKh2dOܯj]VV3gB]]O<+WB==dyW544!Cӧ޼y HNNQQQxjaVRAx<.K.11ϺҿuVt+3رc4ߟ֝[A@OOS6UUU~II D-e9ϟ3gҥKă;voWlnnFuu5@ӡD)jPZZ!}ABF hllDuu5УG7&&&T/.Fp8h4y.Lkkkծ\Hl#5]ş ޽{8.\x/_:o8x ^VVe˖<ׇM;2nC\*!G22vnnn8y$ݻ'5ׯ%'MW,b;v,fϞ :. ̛78<֭[___$%%!''(//pG~~~>A<Rr dI(&8%3L|gСCgACC,K~~~غu+(D@UUUBZZbbb|Ȑ!TOBԤЀ(#GIچF >}:D{ ʐ\ٳg2wƐ!C0rH&&&&455ѯ_?*p;44X6!SVV~e˖Iͯ0tP$$$ ((_Fzz:n޼gϞ!33` <<nBЫW/hjjBGGڰypa| &L @&!Iaې033DgϞSӿݝm3'8{GIs?p :v6m[I?Eӑ)s$AFFء6##5A,}Xx1oɒ%O0h aΜ9rkkk'22q򹹹pttƍ v,ZZZ(L0cǎErr26o,Yiii֓f}@ҍk׮Q^vI06pY5kt:=uJΎ022ɺٳg#88ڸ777o߾8y$ H-p9.--EVV*Zƙ3g&NZ_Ν;Gx@MM .\/l:4deeٳgoܸaZWWǏ#==ӦMCpp0rrru߿+ǃ6UןѣG˓ݐӓj*˃!??FFFhiiRg… W:uՅSʕ8![#11 >l?~90S? ̝;= -EEEXXXPA0YYY}:͛\ҳeذa믅S^b4441:lذN۵kF5tqLT```cccH=z1n$p666񁓓u|1f͚W^uY3f@GGpuu3e:3 ҩrrrzL|NիE`@[1++ }y?z6id/:t:1]a| YYYakwѣm_y<;C"&&)acc#D ;h OoIവ@b;;;\z1b֮][nQFsiYŁVUUɓߊSl&fv{HLL|} } μ"xJw211GDxZR,_f̙͂WWW\~JJJT 'H8r(-- S D:%zxx(x<*bSZuiuuuhEll,L&,Y"y;5˥65vwww)**;vvK.\֭[Q;bϞ=tR/;MMMYYYZ E7n\;b{L0:::pttđ#G`kke;E#o8S>t0Fh4899aذaA­[fW0{lJ1d21vXC__2MݸqQQQx:$2jly&-[@>})))/Ğ={ Aff&Rg W{eSS#]}ٽ{LT`]~:^_x*_سgN<)/GllɩSZK:/_E^z5+tUUUaժUؼy36mdB.{>|8̐+W@vI.ഴ4޽{`2ꫯ͛iӦK,all ]]_%|haa~6fff8r>>ׯbTI .Outtr͑:.${1Aڄ pB <:tLH`j %n}`5 O>˗/QQQ!U555l߾sA}}=JSS[nz0ߧ> ӧOb񰴴˗/k.HHHڤSbɒ%Xd UF֯_O]A^^,[l߼yCyKVƍ޽{ppi;UR̚5 VVVB.+V)K݉'iH055 0x`PuKJJ@H ---888֭kx?>֭[UUUdee ZZZ2=}K?00h $%%_}Tq xbj`0ĦN<,Y"6 AlD?`gglaԉX>sL<999ٳ'rss/ѣG 7uŜe 4ַ 1c iA?+++?'cXblll  "99˗/Gyy9QVVj0LCCCс9 ӧcȑpqq]L댂_p)ʍKQQQ,(iii)m?`7n|}}۩J"TUUBQWW?J5b###鵣ip,YaϞ= xYjZZW_L"ׯ_N+))ȑ#.BWW^^^Ԭݯ_?KEL6 vH:u*+++/3t+55]\߿?FaÆ󈈈:tDq}ZNN?ܱ%%%PTTĸq0tP@WWL&ѣEZX]] ÇQTTDvvv2ezšC(a[Ǐ舌 *ZC:J`oo---:u صS/ hhllo HHHcǨ={RN~ܹsG}[477C[[pqqAw ۤI soDFFbԩN8k]IDATr~7455A^^ ahh###AEE***B,괦())ANN!0333xzzR8yrrrZZZ%#`̙&O ##ݚ@uvo߾o K"""QQQdUJL ^ee%,)&MӅ]}hV?~?#R annGT=Euu5jjj1c`ر5kh)))&nBBBx<)000=Z0  ":<%&&bCm+**H֧O?3f@bbbĀ(?KqqqDzz:jjjPSStjhh󬭭1hР2 Hb͛7x5 Q\\,2 \II ݻ7؃O3ڊ5HIENDB`pychess-0.12beta3/pieces/ttf-Lucena.png0000644000175000017470000002432412176710402017054 0ustar tamasusersPNG  IHDRMbKGD IDATx{:gx*((@ZZׯ_u 2h4^ߓ'OWTT]~]رc٦5vڅ-[ڐf['99ǶΨQ҂c˖-5L1ܺu:t8~8KٳUtt4޽{/LJew6==X^ZmSYYbbbp 8q F2 *fhhhΝ;<*P__R䠬QFLhDAAKóM 님?oܸ!I>Xti(z\\ڼy8iSBBeĉM/pE\x\iii wޥO!̙3hhh@CC޽{lGrI!ΣG_Iv-I;;;؈Ƴ:~-6o߾Ͳ.f̘g0 -,,ӧO 6:u*":_|1ZBBx) {.]dì 릶6Rvvŋpb*<#>(N:7FB]reYYY\ߠ%%%)͙3yŊ{322mƍ֞j\VYAuu5ax:6r7O?Z[[{r---hjjcQ%?~!+gϞ}VSSO* :;;w^TUU lgϞ}vڵ755ɯ^z6ю(˗ nnn_lllhK,T̟?_ܜviV'pD0ٳދ^. ZZZ޽CTT233*)(()S W!Fdddɓ''Gs2~RÇ9ҒW_r?m322ªUêOooo\~hqqq鵬jСQΑ#G^'&&rU \e @RAR2CQQ dII N83T"(,,HnII "##GEEeֈѣannoÆ Cuu5N:vG iii|ט}rTTܹbccQo 4 ?`w=| inM~l)$C9;7//[8뢨$|]Rss]̞=wޅ ?*RʿӧO|Gu/g'WVVS8#H\ Qspٳʵsαq;X[[3=v|Wdل&3g2/..oyđ#G9zALLLkcc#9Q+pBa֮]IC v&N(hiinNN$$$NSWWp(JTDD7cqNƕ<>sqR~pS&Osݚ!!!عs'Ο?YI$BCC;ĭ1'AǖN z1c`luh4ٔr 7n|b NHHH`„ ;w.^~+WB]]ݹ (`nضmvőBdxx8^I#:'„ zxGNNN7a >(,,f̘qaB__e{hjj" G~ 8|p3D4i6\\\L 877wѣ˴0ؕF\p pzf899aǎ&5<'`VyonnOvvv6?-"e"w߁B@KK+GH$bbb@&\^I$_O#''/^b;RO$1G7bɓ>^0&&&X|9TUUacc___ٳg )ഴQWWkkkCVV8yL:VRRHPVVmmm2]]OZh[SEFFPSSٳg\ww}ٳgcٲeFee%M'//sȑ#]|ǀ jjjZMۘ9s&.\8 ./W|Fdd$-Z|_Eaaa!t"$$ѣ6ll~ኋ߸q㐅 r+999$%%F!22z9%%%B[[? tR#>>fGRRRex hؾ};Q=YYY%vP333b׮]Þ={P]]* 33222硥%%%A$t0-6^zqر4888pvU/(**```???̜9RRRszգhPTTĪUj*deeȑ#8x 1o޼Oz7gO===Q2??Gq\tuu舫WA&Q^^%K׮]1g`BBBɓ'ɓĉqF?IJJb޼y eȮÕ;::Jo޼Kɻw ))٫|وP7ŧuaҥkAXyC3H$ť"((#ŷ~iPPPL1y5999dB2#]髺RpEEEb.]Wkll󑝝۷o3=gذa000@UUUﳝTD"хGqG>ׯ{. 5rrrLCVV/l{x{{ƦOC077Grr21fZXXpĉG‰=zĴnjj*SiOOg 1ˀu֍W"44wa֭pvvƈ# ))+XZZ"//q\kk+nݺRD"_ǒYmß2O|pٺu+DE\\NLMMȩ rrrzaŒ:'y=_NxEHN L6 >?7ݺu+|vKKK… :t,++;w٨ ϩ{Ljwb។Rgw<8dˀ&{n9rDAA\]]u|}}ːce!َx!-- NNNddd^ގǏˀFZZ.^7bÆ X|9lllꊝ;wv8;;ܭ7np<@T=~eeehjjVh 4  yǏ<`p6mzӧOc͐Ǻu0m4̞=cƌuss lz=2d{܌I&!==o[_[M}H^KXގ ap˖-rlTUUD"aɰO͛sNy.NhkkÐ!Cxr'rrr`bb"01 L?UK.$ v36445;wn6lu+@iH$.]f놅ax5u8 35570//Çػw/vѓ NsT*!Rjj*a"q 677ѣ\}\OFEEɭ^O< C"655;0aqqq|(//Gbb"C$޽{?fggcɒ%<9Ǐ {z$==&M"lh4TWWСCػ}69c;vڣիW*--Egg'=3Qhݹ6hff͛7~+܎.nrr2 GGǏnRkk+"""?wprr-:::Ƕ[rCC 111XjOiin݊hpMճm̾ "|H6_'fD ߨ0."QWfhD1X?>3BA4|ùWرc¯y˻k׮YYY Höm-,, ]VݏL7Bį?TUU!//4440/ڟ>}8p9fffK~'"̦s=5a5É=aKII \]]~_޻ٳ۵kbƍ[B\\{]@'9f͚ >^pf",_`ϟHCdӃ5͍Çpuu ]]~Nx5z{bbb|+qNVV  .Ĕ)Sp5dggCII ֭2 =z&M¢E=ƌ'O*?y$}岈Kɓ']]]W^ &&0D1oߎP444!!! ڵkUD| //333֢ Ç>XZZr )^m֭غu+<,,콷H#q:!sQF!88r tttDEEaXp!rȑ#bx9>} {{{())1!`Xt*(xW_aڴix,--ׯǢE0bۣYYY>P0Frr2]dg͚5ؽ{71"xs/pB(++͛hll͛7 >.R 6ϝB***2CVV-;^6c B$f}IDAT kHW0\{{;N8 1m4HHH`ԩHLL丮:tttp1νHUsc8vg,0 GR_wƫWv aggdgg999Ɂۆֆ,^cƌa+ 7n(GcpJJJ؋IO-a_JNNNx"lmm@ZZǏ+%%;;;xx9lmm'Æ Əiii#&&8w]-|̙,{nMYYH+,,dQp1˗3󪪪 P(MlpfwPdzvvv8s ]ad}_">>ވݻJ=[[[v@@X&PWWghs„ zjv{RQQPccc>}8ٳgxRR$$$T> СCrJTWW#$$Çͽ/϶PRR7o^^ZZaZuu5V^CB`߾}\II _6 LӧOBh ...}洲{5қ7oH֭3\]] QQQ=BX!%%%K &&fw 333o޼!]tdffSbNEERRR`OOO|7HV=*ׯè渞ǵj`ݺuEرnOajjWӧOQWWGJJ TTT`ddI&}օ***cccԖd&qܹsXfSW ܾ}/FPP?W_prr¶md~GԴk): xv:::+sKƄS$,SNeBݙ?~S|XPiw8bԩS={vzBh1߿OjOOOU4fqKxBAAk[ =PQQ^| }}}CńH\4d(.\r})̟?}6{a%%%BTmbʔ),g B 233y1o޼*QtvvvImCd)++CNNPʁ3{|ue AHHs1w\L8/^鴴J[[[=*J.tuuiGquuɸ,XFjwRSS1~xlذ ˀ333CXXΞ=444\ Ћ ~@FFy6CBB!P6mڄiӦ ľ apO<*f̘! GmmmVA\Ο˽:O<IENDB`pychess-0.12beta3/pieces/Prmi.png0000644000175000017470000006070512176710402015764 0ustar tamasusersPNG  IHDRMbKGD IDATxwu{c8=y 2D")"Ed%Kֶ>ge[Y^{m}ڵdiIT"E$A"g 0'to@x33ou[Un=W'>!Kx|P^hC΄g76^j5 TjYyp/Ǐ/?뺫4M!l[8۶ݏa}kUV]}e7R;x uw'#̏4-H_!mR! $H,}/y L fWvzMәi 2Y٣ #9===h#}팍)FGKz]ͮ!襳s 6.y===RFOπP>.׵k iinR`yg0i) !gټa~GUդW\y>0ha躁>zaK[ftwwAb&3cA4͠P_mۍ{C4LMM۾sP{u||WTȶk}R ~(5RN[?<_vF~|04L&+暫.K[fH)7iu](DWbzՓc^Y~ML}|}SScTU[GFFJ}NFDxN{.J۶=lܸl6,m.{ĉQ  ٙT*aiRojU2Yzznlva|>S,ʼntfHkڲϚ&ǏgffMشijM i&bt:Ν#10O>?^2<'x#G!eM b*Z(AGT8}DՎ>[DwјuZFJR,JE g:_ #TQݽV׵J1uryyrڻvx!zE.B(ƣknNEƓqkQե=_g?{UPۓ+CGx}( Nr z{{U.ZỲ@ @BV0Wf #t7Wȑ=PMU5{ C 6pF;@U躎i(Oͮ$N09`0O$fˢjvxWb鋚pFz&BU5@$ڿnM34EQu@ 2Bac!o``hh%+V mBa绿.%ķRNJ)6b|{\e Wg;4t])mittj099( (*LQcPUuUUIzyA;ww~H$y38vURHFaƉDOn PBp &2ټy}}}\yTX[yBxDZm擦6Tuu[ jzn07WDQE-IQL3D SSםrڵR[\tmdӫQAQ,8\jbDAAJɱ @Mu]xނ{.Ț5ϋxbbqǩ"TcEG(6`069ڿ3 5mb9b_`. H&UHGyo r ۶G,G"_j0Կ!*%H[ѻFNZ}͌ %Ȭ\|0LBRJcϞ}|Ijkggg.2puݯ?D[(*xgD^F<];تMQEb`:{/pDž7ax^ӌ(ӼF)>1fG,lrۭ7>k =盧s#zrb?]8@,f+Q8}\O( FMaE.~K%'ap#9Vh,C0 ]m|lŲZ8Ӎp~X8^YqjF3M3Bz UU6&'mbᮁ͹V_ Dap9RJ %zAQ,#AQ g]EHVy̒ھ(wav:@>ym 31\ΎvLkχJqP8)sgċp<^z{Xtk1:}C" |!8:rV^Q"&VmAUT֬ I;$2=ivvjuf~_DJS7 af'Z B)R"@H/"<'=s3ͷ '7P$ _/%MF"݃m}|DB<ܢgR>!IO'GݽUZ%{]K0 VauH)qV #%Sǰs !zzA/ @JA_z bz[ <\B @QVp8A_EDp|PQEQqusqtDc}3c퉿b_w*ZVqeQUfs\nӒmw'tkյlf?aN^&lV) t,|y^;}Z٬ӻ~j94UEUt͘%0T+!FJel}0 C\hG"ߍKvO, OFyI))NC}!X*а ]7&Phɶ+մOt EBhZ v: 9 JxkbNlUmHp$B Ϸ0!'b^}id:& ZƬfj!;oS,EU_]kfs{8~d_Fos5C7T`r*\CýUwt0Wڍi3D0fzz=C7xcI0A \]Z,x.MpiQ6~È ۛu[~{4!LlV@ZZ ZvD"57|][Rg͚s[􍪢+ pFu9BR'ɀ4B<`[1L8MYv,$B,>jZ4|#[mD"@tfgGH$Rhq];jlr$#C8I wK]:::4eѻrbabg!\koڇIgVev4eZi>'E"$hDLg3пGc!|JVވݬ5eH2x،%^>mh4M"=*tBt]ѣٹm[iU7,74t;i'^T \<GU7{OmCL DF`YuvqscYu)F ]P BxXT%Z:@DBY$~6[>Uf/l6h6 C٬!e5§ժ86ED]7gI]R"xZHyg'ayXV'[+qoΞx2ٓPU]7£V* }yzF`}GfK@OOǎ=϶0/&4kjcBƨVA<ժ-b04*]xng߾޽$NK9B}X>IfL0==cMo*ܻnu6~8(¦Vh6gXx^4/ OC>,R̢( R2>ytqj{¦ZAJ˪jOIry[޼v/©ʦMٸq###ݻZm]Ѵzg#[4Fx;|9ANE>AJ3߷_ )%(\lI4i6B $*Vu)}Q699yׅe`tt^=?y|?BUTT2/?SAQ$DGl6{EC(0GS*aa #N4ZLYhQ飪8( 4.-e&===J%fggKj&ܩPl6xB=ѝcjjBab 0>^w벞SUU5#|3MQ4f66͜\i*(_.R~(#,WT¶m.rO\fzz)%.&8h6oK.cժUضM:f !\*%CBUE^vY9!ZjJ\ C窫n ]Z90/!BpKggx55h>uEQ299m8q0+.oΑ#GLӤ뮻nT\뮻}q5,ݗ^LMM}?~>9x=-.Na\\iq蠣T^̊ח/~'>!/lKx^ ۵t:tn^YJr{a6=CT. s}14-3;;luYP(؊~VYskkp,q=}(*l}=ϸ2x[qO e4MӁ s/xۖLh5j;JXj2*RAmUi4M`cOEK)9R 'qp#"ӳhZD]HR0n4MGt\/L@Qutf H^SNu-U|3fT_- v. +~b")@ J,ј^$\8axxd1v!u=XeQ8:4Ñl"I'9SW5Bv4ˤgK{RkGmL{pz}f^@F'αo߅; *Bի$ MG (RAUTT+B,%X_.K<'w(ӆS&f8q§Q]/|g-8! sҴ&ijwk>ɭصaU9'LLLbi077T*`r8Jrh4*M7WmD*{ͺ>hOofG[}~y033.Th Q*yi^0V䅤]]]RHPj'|*JeM 'PJj ݫ}ntSdv/n[{쉅G*[qK&7F&OyMooo _plۙ2~lnEedd'#:mLV C0<B B4 lö=g6g#Qs,jTQҎgm[޵pcTJe343FgٌY2&sssoFFMB0B$Fsb^kM(,YTV`VQ}=ckS*%|qڱ>uɭ\fF)L-4dpuz6Wܴ5&T)X/G¶"Y֗p7 FuyK>y?GTfH3藖EZ뱧D4 ;}po]U;5W_qNvLMM}.(J+Ktl+VVE4'БQ] Z UtbqLjuv6o~ex׮ڲj-ό~8E") 3MbX}-K&\(d(FS3Gkx[yͯ;׬ŏvQ1u]445L4=TX`0axOO$с#T:?MBG}}+J$sdWVpXH4P\MD VFشjsϞ ս1EEi=Վ%\FjLtEյtu]TiG ",H ]3HrvIJ(M6ka IDATk&=[U˱t79e 3hFywKv5=}C(۠ˤ(Dc3;=R#)tMjh=_R쬗hZ M {>Y\LRҝko}xAfu<4:ܲe=4ӳtM$p+Tb[# %X,?Sl" Ӱ{:Y A$o+NLCڨ#9*I^Gi!>Bx(ΓvF;_{"/bq5u L1 I[tA4DAZòF(4H'(13;s+Ɔ+fRľ#خ˕0[P5 iГ˲c!Eaڕa'ޣ#Z/E@GGM9$ydu6:stv:,vBVDYnosv5PMkWG2\ zsYl峌ϔض-(s-O8@iᙗ,T*ϯ3ۇm0t1/OA4ĶCQY*l9+p>Mvʼ&P(Ÿz}0Q$MLgpJkvM@J35yEQΨ2d'DS04~~J5w3LH%ct^t/cz]GFYї'អ[RmhZh,M*EBx tD7L8gSF)@U%XdYg*{m5gY \צZBsԁm8Ns=߂I4"Ia![?kK5Ҳ,0 nq bA@O6'ۑ?aJDʞ}SPnXBSߣ\={~}q:I0^73{xSLO:afBe![Ribq˪fo[y6m-Z8mkF*jVi*M$ZYߖMoeJ!wl٢JMg:y/7zB زq Fy/~ZI2O8vb!$mpdx+^qg,/&twٳgP-kծmIJx3/A/<19XFeU/]Bmڡ7ˏ~7}W^s5<0 Hy%ih4B P.Vkx<t]EHRkbqX+}_,i(ʣ}nY LSiH6y]ݭBBJD^U'J] Xnll{kZʕ+i6 ?qC׮7ÌK) rJp-}bGOO333TU.roNј_ xigU-0L CGuׯ'l >Rۇsi߲m1/}9:(y7{Z_\ béE/8MisP(>SK&\WW~.26n}x;Ͽl޴˲OͯT*T~=Tpb(LNNΫ_Ʊc(JTU4kC;na7!300(A<ȦMKFLBh6(ʛ4-pW(F;0EQjU%߷9g#4MCJɭJ&s2'k Ǟ?M*W^M.{YN_=?8t 311qڡtww7H$ٿ?r 'N@q]ccc-= el~UU ( i<Ҵ*c8 јsfSJˎ|ivvv>'Wid[iJ'n7ofy֭[Yw2::(a^z988i:t[>~*|DQݚ}jjjj \.8~ukx@Qobbbǹ4^@_i^ l(Yvww?sޙ/_:k~0{<9R:e_hΆkso7|6.E3nM t?=ʣ۟.8JDp­w_ͺUgG|MǷ \~GT_ 4H/Ŧ[8zp?_'14Jr//Íp}_xHܰ*~E_3?n:TW:T*q[uX*~x%A)wt-g? hoq=?~$pHY(D4JE+"m]GNjj4HE8\Q^1jffqՖ H)@J\i-_?Y>04G?+ mgpeU+zR LS#~mMp3ѝhYK{a>D 'ExWn^{t+CR k)cY mg$\W6NXigt|.K,A7 4C#' G\uKX}N1rX8@o~1#T/lUo;|.Li\ |daL Iґ0{ `B<5>ueC{Xb'i$;_x]WmblYͿe lYoJG¢c{ו;=NKD" NLQ!͖p>puښY3==Ŗ aѳ {O-''O#?_ZiLm1tr H8UӵT&ϛo_{|J"0M>kyS?kYْ$cYOs3\  <`vv+Qs휳op}_:BDGowoC Ao>CRY.s.,8#ᎍNŗ~PC#ZjG:׭{xpAC:Kwx˖5ܸ뚦;4^ meq>$W]n>SVgE~wW]Ճ]X'ybk^wU.l&=%,Qϗʵҽpr~icofvƲ2;WbsC7E9pr;+ 2ݥfqwM@pFsARfՋ(~ͬ&`[֯lCr5[,3bLR7rp-o:H!x͵[c{-WϚt ˇ3 of}g=[lC(r}=u)JԪ:ڭ(4#3ضK*Cwި>p+{IuEվa0kmY7A>o|ry֮[$#\ѩ"D˲KbeY嵓״ldUIT`%o=#Nό\C:"﷉'8|R`oi\'0R\q-—GDmńt:m=ϵQ}[)1zxnQBcAӰY3@S@ӰSW?6Ֆ)$qYK4TmtOUU4Ui²:۸̥dfZiv..F#ӪJ)!mS[6 Ds{(PQ t *,Oi{Iȸ>Eg%IG-͉iQ$9eD#ab0X۳!.w{66k&Vkzf/G,;XllVV͆bdc01% =ã zޠcn$fO0M<gOh4B݊^/?H{O[z0 h0&yn+H$$L‘Q4!esSd63v`w&Ң\NY8X"9Qh$#dg(GtQY3 "}=ȉ8]jG<+~7Rmv;+= f21z}v5q(}$dDI jy Be&{|7bZ]S#Æ(Z--ft:Fqay'yCl߷AO(|Ґ<#<@8[FMSX%Nb'En;w֍[5$l6}wϬjXLFA=Fh,j ¼lF9.b3PtFʰQ^GN|75eyn22܄#mx?qϘf`>5{J DT)L`&`FC{΋rL,ns$tϿk7ne]^yo,6`ԏ)0e=Q 1ˬ)dح 3Q]"8$HK{tP dd:R̽Iq+,8Ij% t:X,a0:@h@M%d`6؏!bl`0BG!M+tEZ[;ZUb#* Woޠ83K:t^26% jfdR0GX*."a,lTMcqm% adRfFO*`ݖ]$edO+Ӧ8-).w4@e$DAA1(fYN Ǫ8δ\A7>(s,>UU} U MӰmGt0mR tH:(*1!BCs *.<9llhushB" hHˍhp}q]̙Q=>{S=?y۷MMK9D"z5F֭cp(@"h\¯7U~|"jڶ6dEe̙XV$IXDyfjjjD"̜9>ZZZ?OeFGGtl2|2o<#{pUSOeh59uRժG}a 4U6tuvuʼn?wgϦbKp\{X,jߦ)+)?ܼvba̛7 )š5kZ ټy3~X, dff駟ᠨΝ;9SV?"~Hē2DAdphw-mE)ł*'QoO#G&M$U 2 4x<ؾf^Dݱs_*I4EFIō;遃nY-r˾w*fIpc=@@҉NI MUMAtSv"`WNz0fN].n7Cz0dUݳ}{+ZYp(̽I[v7 e o3>Iy]<+ z|7'ޞ "L}V{NsW^$=l|`hNNn>b<ٰ iki䙇~(ffrmr滸n/S[S繙3Vm`[ W_ wՓgMG/y&)˨ZxK sX.οG?窕aA G"k{7LH@KK [7oK%W|@n1Q\ą z|l޹m7ݑA~ 6:;;KщBJz( \x2̝>.)'Ol7?L(WxnVU7 M=wҬbx _??~osܔr^|C3X(b[({bFU@=zRr]XK=>T7_!T(*. -=ypaʼucڸ< r0S:wSj4!EW~^};6OWVˋx7&ҫ,Hѻ &۶[hm)hcOk6`eMa`Y'-'C4 s\\b)Xh$ۛvk$dLEwM8DoIMwC8T7]_+ǯY~BUSx"G秭t纞t 2M֮݁S6n]]eO.MCUn3IEV!e%\K?[vImcܩ|3ƒ;U//Y˟z㗞9"4M#ld~\rͭ)Lyͷ K,' _>ky*Ý~0F U%Ev= "q3s$Ħ!Z:wJ}~v7w0sw MzŇP5ESDUQSZP0DWo?@аkKOИݑ1a@UXWITU_\V hȨʲ\NS3̞TdU!)$97^(hhJJ;w=ʩÕ,'yULTL`8; ں{FcTȜqq*ʁ~[3SYRD; -,S(vߟʴSP+Mp\mi =㰘xBF4$IBE::;I/!DTTdTdU6K].hj*N$a$v0.E,*,j*1 EHȚO=>j<! zY*a9,JN'@,Ej&.:TT5%(w([zyשPêu?&f 'o[=Qwr>2E8C8yN3<<.''C0ٙ4 zƘVU0 ج&+ eмYp=h˞1 `DˉjFBƴbMMD#dجL.ɢy?K*J])yvVvv N&+N,G#TCc <@~o3S+J1H|ɚ(qkSl5<ڛ\|1E >i- ‰ fSRhG ;;H"F\I 9ޘ8lol!b4(ws9(-KQ5M]4g:nWz~?Zϊ%☌HC~YY7,'9TyDpEG^{|H,PTj UUP5ej "co3V,c.?|0L:zoll40kZU~dhcXLh"8v `(<~({Vވ,˼i;~ :vqfǺLUUٶ-shlRJ,F/S4v  ni`yzYUm fC$ iV[-fA/I,?_xo9S;2};3m < ̪d`(h4j Gy5foc+ ENaɠilȆ-;ٱEU8l6lV3&AB a`(opM7w\ 377[Z>amQ"-% 7XtʢS,ZuP;;SEs?Hkg7=Ǽ\˽n\6KHMsV"[S{7/^4amQ"- 6lƔTY%a 3#xT #fd44S&NOCK-38H,n`0W@,@Q!7P %"qfK@S{o4bώhB;t?縜dg`Èz{z<rg"*E 1\n~w47Лm̙U)3ʠjY.7\lv:ffϬr7h-i~o07Лl̞QKmt f4D2\x< F"299y,;-ֽj4| nn@TۻrfEw@'سg###TTTLDS3F# {N5 "}~T |,]9XY9lhnL:QdosZryhE3^[KKs37 %u,]8 OVqh7olֱs> g4)++cx8.JH*mݜ~Rw;Dϖ\J$N@gO#QfΚEAADқHɸcw_K۔) Y| 8nZvJ"D8ЕCTU}x=`Aʪ*{x· *fi̮n5G&+  qN_ ݒ%KnG'8t:TVVh4jPRRp(ƭ H^_?#jjjp\HeeeZ]G88LUx|(&EQrt:=xQjMc *z}M~EQV"ۦtb;Rt:UR]C= oKox<٨f5Dpŷ/->7h ,Yr[Zc8M QWWǎ;ʯ_+cle[G't1e$nYCruVjjjHOج(#='TV_~Wr (+)Eۼ38觧 괫g(|XUՙIY1MhQ +J__k̚ ZVIDAT(+pSq"t:~|> xiw6Þ3y<×]YfN'Gáo}w$'?;>gQ S1sd2}b!?ÿeM ZZIENDB`pychess-0.12beta3/pieces/Fantasy.png0000644000175000017470000005327512176710402016466 0ustar tamasusersPNG  IHDRMbKGD IDATx}w|N۝V.ɽcccl1ŔPBKrR.#ƀI~R/t B mlLql]Zm>cvW\T(6~Ϯf֗AgqP,>c|Ǎ;p]hIVAQvLyp2MִYrO?Hvh aGaX₹ܨIAbF }I".0 56+3Z P ah4 qe鏭`0%^ݫFq_XN`XvS#̞VRu] 0  [s_XnmzųN5ZYpHY=Z<Cݻ,)#hLa Mip,e .Hu@UX-,MUŁZ;T i7BV4pl !$ADUQuTtE&oESs4En ;ۆ\?fnjiCY D`0޵m>+ ㉞{=J  {թ@ۈ8$fH#SSk"ki{(zRI@ FGG B`[E޿`ӺϦ4y}jł[fqB ]cMcЯ/_ 46ފ8aipEp0(2r9uZu@ jhnCskXbM`hN2$AQf5銽nUP{\ف9l5Me{衇r ol8ecs& ཱྀ)BʚonR/_ńַtve+,g^S[ bsAvZ׭{$x꺁h,nG8G\p9Ƭ㡪!QZ .hhD(( C#7 we4'5?Be1W4Mk Z7kEYIݻz#7SDkr̛9?0p\n@om݁CK-׮]hӯ?Y5m8L#4u /C5.8\[77~UR?k$&v0@A{WdY[%>u],<1>mHoig; Dz20s8VKJ d#>7|{}%YmF`D]3f oF(*%_zБBסvcxcY Mr]Ki*-AQմ1RT5aS Um(IiS)E,^IRqPjz1;%\:TUjA7QVFTmlI80 GJ@A4CGq8\r:x~:m Ha`0/,|5͟SfY_.K _˲`A4&+P5 /(*Ņ~P4&aA34u݈4K@B"G!';H|N7 b':m*%fGCx} `y/2aqQ!A8AulI7!Hb1*|:ի\i*o2x۽f͚m'g~QX7_s1|'b.v/O[Aymݰv|(+A^wC\P2$"! }x`\g̔:rqep q1wƄN)О['M(ʰ9 _' Æ wB0 $iन ^E\v (?W4#lq7?#w2@8AX4:9^ #S0df{sf24#MuV S3Zt`!honEͱf;tlލGh#f{キȯv.v!pǡܘ >eEu ʩ~AWL?x1 6$RTz12;Wn=Y-<ASTU,F"p+g7ӄd㭸h7ʌx GfDk(eX6Ph̘J EYX-gݛjrؐu!#Bz\aZc$K ],à{us)fh:%U فRpURoY LJ x{) Nذͭy`hqA‡FE7vCUYPSۉhTXB03R rd hEV *t()M35kZSSE:`MWhf'L~7fpA9"sI f8  &`PI6+\֔"\nqJh| Ѩ3!j0ΏP:!Izg#( 81oDSD2}j W2nT˼XZUNLt i뗄+-=ͣfI8\8hY1@0 M ewZx}:x8cPbL̀\l|x8!9>c4$p6Ǝ,F^nvKVE(0Y"C3 ` $iT$"["e#抌E89QUlceKH.;A-Xl DRV{Ю3p? 5 G!J4L0]{{=efnH0&DQ$)`9Enm₪*Ǫb2d{`Xt!+21{(BRV eJ9E ^<6;tI\r^EՀݭ0{z*|iD@oe?QPz==DdYoaq*(I>  J*XynZX̟= k v+ZP[ߊX\E蔲r!Ijn<n=!SӚp#c8`L"s`B}2272>5n,;z]Gl/ThH2s\W^|.ChjŊ fI'u`ʔؚ5k~aXgޅ(`hJPGͱ6P >."zap(鍣/,9#%bq`ߡTman#CBkT 4ͤyRSl\m]l<nuNvi4*wbaQ{}aa.Es,K±]ha C%tvG ﷣؊[@Ч>F%WPVTsLIe:4MߥSXMST} } ɓ}p:GN8Ͻu9/$kx,C'.8Pa $isEQ  69 ![A]FGgP vtFʠ $g;,%"13 m'J3?& ZmVk qIhfh\1gzI"LԆHXaU4Mq %h@V+2&'HM7NzjEQA ,J>- w8oL I-3gMӜRj~myVU]ba)Q IV Q$k@CQ(BV Mee([~1,0>}.P kf~En`DAkV{%xyß9Z3 u]5 aiYv`Xl'e)$BHu9\C= XZ0,4 MNͦE٘f$"oniI FǮ3ǁcaƼӐ g+ q ƙ?g w /r,>HQ\oZVʆ '3͂ˑY} "jg.UULJ;3뺁9XHݽ^}48kZwߪo xeaOgObAG1gfYF.@_$ &.9𑣂_g_^H4N1A\vڭh'!s1A;o.= v Sjap|,."#n?ˋ֎aǧJˆWz? +^,ȫVr@մg-۩s_e[,>"UVC9]7w#7+2 @6ڔx,qy,0Ϗ&g߰Elp?jW%QYIS|Mv ֹcpiAKs#"(6 Q>yr",Ko! +-o3/(ɰ<Ν2*>u`򄒓0<A.} UfP]=}YXC;YȹnѼ,@5x$}wc֭{dJ566Civ#U|axϿGS'RA\ /EQ9ւwB$*7ރ`Bo( \6B LT2VG{ˢq?-N~[; 5u0k併iuNވ ҂{׬?Aω+/U_GkK9ahhiGM]SFɬ69TSƃD.76lC\ xc~ {B+j-,bسZb9=SV0{ey1>~8h8{ׯ[ o1&(Dbq֖<׊zx.cDq9Y }C?O4dL >ni%/)znc|ϟ&OΛr^]]fu@VTlh(@%?} L0 lV+$IAQ^.lu EQw@@IctE E儐͐Ikjw. a\i14dK;a93ư`-Igu Z^f0}r:>PuMncq prSR @tNj|o~]Vʍ[M4t5:"vA ђ.\oX> 3 `IFVTq v;𻑛þcCFP_t#vG:?ۃΌHQ0qރ hL| gy$FD8+47B ՜:CNf32̔h<~O/IJBDq( G?ep8x=9GDx6m a š(,y" =~v@M_I8^Pꜙ*tb&v.anکΙ}6$IŽю X2on⥰[YH]ݨ>Z}xoSN7YY٣ GZ^ ېCiQsOƤqEhjAgWm(fAUx\Db4X GbOnݶ(MVrjln&]vVN ELIR(xɊڵk__fMj a;oÝ:.X|E" %|Xn;\7Ο;,zu`R3;C+t]}Xz4CG@S lnq:, _h ~oӇ8$AJ$ID%PmX½y3"bjJ5#ߟ믾+v]8 ˁl .7U3m2X A ŀem88zʪ&{b0|tglIB0W[©ׯiN,~3A5;{.S4::),N\uB,  EGGz1h͵wF0 vse,/M& I0) 0 ְ$\oo/6nxyۿa̩X؏ tM5]xqc( 8W@VK^<w#Ν7GQRPY/C324 '/?}KJB8!ƐSL8S?'B_oHEJE"Ku1 ̙1 '0`-_b?4/eA)xGJChXtDEa"Ti_MWdX;eµ` /E@`0E!K~'lz)YLa.[_R$o0y|DI=m Ô&aP,M`)|2i_$vkeM fyԮJB?vp,eNpvuzv[=Z0\!31BQ8ÚP,l? eM)ڃPU+lƗej1sQuݔ|0 5h{@WIH$%SV=8SElx1{j #+qWnCqk6-y>5! \sݍ2(B[8H޾@ /*_n碬86?#|%PU 0Eѡ3B0//Ȓ 9hBBx,0ŸNk׾xϽ[Q\0 4`LTP~H=BAqwްpǁƶ,3cUXp7SX92vq; 3 8;5)b$ Ys愲ho^D2߳g7}O8Tq0|8Fmm-8ð qNU,MϺK]*BeTWƂ8tpƵ#[H\mM =І-Euu' M8eמcބ_[x \?}0˟O4%y'mmٺfʸ{f`J=w0 A׋YiT GNcqeF8ghk/+Y>-LT2%epe +,EwQRV.͘>m羦Dža.ضk/~glExoK/y;o[Vth7=;tE0#E(‘#1y$PUY9b>|زe3 @iY6m:Z[[454|k}vYW?\h @Rs;pӋN99H틆 '->Ȳo#ֆ os-ƞ;ӉP_{ܹf{3OG[gֱ/sz:0  ʍI$\~ 2NVZV"0R#c SO[lAWt-~s4s_p#6a]w v#~Mq/ЂD|[`i9&Wa/_ebFlں͸lbi%և`y̨]iXh>n k"4Uëۂu#2m:ϟ?]:`:{7b 2U kmQqʄ+t{W ENXb}8PU۷m׮0452ATprkhw@jOl4@UwNK"^~s+dUC2˞N;TVH:6Np-4 [D}cr ^W?_drUbQAJdc{.|֯[i4]ko/~ x ,"ꅅs?眱i.Ȳ:#Nt@,6d~)0K/^wͣo:4 &XSn>rFn+a-~EmmkIP;o%KWހ" x`9R]!PEhTHJ~䮾ᚕnx0 GjpMGȐ/_\O?p GboK2ǥ,چ8|0tݥ8 pmju~*:tzqa 0wT߷$Q4j2:~g4X|,7͙8;s7Da>*p SO)<0t\\Ws,(;קhjj M{U`;aX'M+U03LDYa._,7ԋNtqQҎvu+ Dql:`"1voC`s`a0 t̑d40, _pi`&eMn\I CV5!H7qjPu_O?ǿ &Q6M_,NlIUfqY7uA$4o1D듁8Sk8#k6 l6:(|,BUhh@ɔ(8"1|9,ƕRuNFpp劋@A{g7~_=p'spckGUU Py~ƭhCSU2F7 a(kۇ,~2X<;:ijTU;FCsuM=hك.d|4%e3 dY죏ohz״n߽x_Z`Cony=TzyBi̫/tz&uݼ5@^>ؾ nySiTֶ6$\|M awU;&Lr @crgD%1%*j<Cנi=7dy1y},Hi5u>,L ?cwr\? O>5 سw7^6$#Clp:?22]"V(}Ņ9ୣ+Wq<;\{{gvV&׬8қȥxpx@g@Qd'!㯯/\jiRM; r۠*Rbj*#F҅3H 1A4'HT ȣ&ܩPL6Ox+K\6Ah$॰4 #R8g\hnm+=veӦ);# veߒ5хq($7w%^ŕ5m"HI0cH_( .X{hlnAU14vX zVBőLa  Dc"bq #.(e5c]/Dp줼lj`^xk.|Kgz5y%և__D] +2Q ~xm}5`G{QY]qΌl,ج4B0*7!H*tP`(@"&Oο`8Ct[jÐ{ep=}ї^_u׿|stt8;7(ephGDI^p)E!CWW'<\^{3&]{3g 0 TU; ]mMN[U$&`;_09-[o]}Vm6$Kݐ"8M@cilf\ܩbXm_+hĞq0*ퟘV@ +{CQ%֏.M#f&PUUu^CF~B'|23pIB[}" [K}SAfCqq ƕtO{O g\m(,>!rGAlD1&Si8p`?>hl?Ϙ1>3 c"Bښ/_[;Mc98 vg>¹nȲ@ derR'~_eO 7uD"31&S*0 n/.;a  AeE34h̲LT> @ }"퀢( DIFm}+n73Y7 taD;r0e*<^8 +)|>}N; Cg WO钤tL;1$(:;:0?VCAAV+l64M "AUdh Uq磿EEEylݼ'da- *s0nvر:K8A;"p^g鲬R E7v /qV ؿt\Fӊ+Vo8kj$cCeP>T4F4^LhF(}M_6! JEzFq'R^#l;=lP#'͈,%e>uɀGS}5~z>U'kq]^R ĝP˒Ǧ5h'ĉz:Qdf%5CO*P 5,˿b;;{/+0}f;,&ՀQ*,ꗯ) E?HuX M?t@(9V1m p͞Inu8$ a+ lN jH0hh4t@(b ӧOR '\ SPрSXА;2$)soĊ5b5a~ݯ? IREYU=v5v9' f<ٽ]d2s 'fibjyZ4T4st:ݤYӽP{ {dg29h2HMT4?A( ٹi=0Pk~dRP3Ȕ ( xq,`((cEtx}{4E! ;!ؾ} @QCLI@f(hkh2@e.2|`>x+?5$0x0=d73418qL4:ml{ (L:JhqpQ?UuM8DbֽRd1Cnj9b?6("xCa1/~Nr=&N,Fyy9E@9x6_9Q`pEf̼W4؀l{3 B*h/+#-mW׻`$5Ib7-lc[;|ajUo>o0K:[ 4jf($V,&XPkԽlgeJNEUMI7kj놀U <Q >߲6n bt$h:8+l@7':;<(NաQ%տ@N'ʻEsAזG[{T*vL[ +'oуQQw&deS>" :E(54Ey?fMjYު8IU*XJg2H`& O$axǡvAWYgzM@! N4Qԯ(,hr(5I}45S JOXC0x^$KVI,_^j"8\x};Ph0*LЯO.3wsos8a {F"TUaG1d0a8I*ܹ+nnDvNRRR `&,-$/my9X  V7B,=δT `jFŒլ`IuXLHhxAQ8pywY(imm}ownNZ U!HrYSSReTtË *jb+; D&! R pո呅s:XGLèl4`(??@0T%Tшw+?ZᖛⳭbEmm ZZ`iI hllݑ84|>L:u 1u֔ogݖ2g3OxW5gUVU 1NͷW>YRZYM"lY gk_( ShոGGh*4@hRD'+NOH$ WC&( Z Gﻵ%|D^_2_X+?zZ<*YE]C$.O{; Z zm=H4z ݷ,CY0,زy#N*xyiohze{.Q e?>p|zS _keYV ͗ۯ=w?2Ol!h MNtW|vx$ G+[$m,w~?[ܨE߼,EEu=Zy1*9a@PZ|~S90*D`0\YUp*jƱxDR^JEi"A"$S8IZ9&WpYWnoJ( 0*Xf8VTՈ97wbR$AAȲ1#+Q&>{صk D+21yh4fKEcCxZ !<)(<hyY@Ꚗu̽ V?mVl5eH9FdH4 $Qmpp {CR:] [Y:]m/vly yB;F0B@h5x@f*: 4ZZqE $ novqHtN Ͳ-wH> BdΖ@{]sg pz=_p{VIENDB`pychess-0.12beta3/pieces/freestaunton/0000755000175000017470000000000012176727272017071 5ustar tamasuserspychess-0.12beta3/pieces/freestaunton/wr.svg0000644000175000017470000003150612161415524020233 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/bq.svg0000644000175000017470000006473412161415524020216 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/bb.svg0000644000175000017470000004027212161415524020166 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/bn.svg0000644000175000017470000006431412161415524020205 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/license.txt0000644000175000017470000000026412161415524021242 0ustar tamasusershttp://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=6786 http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=8336 http://www.benvanvlierden.nl/Download/FSOpaque.zip pychess-0.12beta3/pieces/freestaunton/bk.svg0000644000175000017470000004320112161415524020172 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/wp.svg0000644000175000017470000003705712161415524020240 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/wq.svg0000644000175000017470000006505212161415524020235 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/wn.svg0000644000175000017470000006254312161415524020234 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/br.svg0000644000175000017470000003271212161415524020206 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/wk.svg0000644000175000017470000004444212161415524020227 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/wb.svg0000644000175000017470000004203012161415524020205 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/freestaunton/bp.svg0000644000175000017470000003417012161415524020204 0ustar tamasusers image/svg+xml pychess-0.12beta3/pieces/ttf-Motif.png0000644000175000017470000002715712176710403016733 0ustar tamasusersPNG  IHDRMbKGD IDATxy\M_vVJJ}N I$cIJ&cu|3cHE4YJRh(ҾΙn.E}>}>z|||8!`K_k΀{o555FBNNyݩS'ן>}B~~>y &vӧ+x.\9s%m &ЫW/򺰰?#y}&飢p&g@åf:*@II zI^߻w|9f\6Ԋ5LLLo>8}}}xxxH\ӵYǝ;wpϏ9#GbHLL$Q\\rm;!9yyyqAYz«W$-~a'N(IJJb~4&77VK}q?~d_,L&]vϟcBCCCYYdې5@llr(W8+oRR^YYٴfttt"֢ ΝCJJ Wڒƍf.\CSS(**6[Õ@__sWWWp8\]]500@II Ʈ~S~׮]gϞ_r%ӆl|rfIII̝;w{zz\r%ɓ'Өܰxb_7nDVV lٲknd_ƫW lܸXx1V^t |B^ر555MҔٙ+?=x{{7OISLZzuŋud`ٴ}]Vȑo3i|}ƍO.\;:fڴi(;WSWW˗/GYY׳B[nԩS1m4/_F߾}999cp_{͛7}sN={`ii7-ƍ‚.,,ӭO< Æ CPPL& 55, 4h_hF!loDDDˆ KTl4]8<066==]r̚5IV]]() SuQ}O'''(x4p8HKKа/Zlcڅ}ڵk+*=z+MKKnF)l6hYNN#GJŖ2w6bNtIhu[ ޽{hlСC7x\ʹsp9Gb_~dmE===пt" 7puuuBQQ:uByy9|||PYYN:AQQGbO8::P` E׮]E}QEMp!h8pcƌd5Av={򝀬Ĵi3DGGcƌ`HHHQYY3_XXz!vwΎRZeee 8ڀSLHC t: ЧOx{{#%%G}}=VZ///]HIIaii h4̟?g9ڴ]~]$duu5K.޽{9s&&aaakڴiNAԩSEYiӸ\ܹѣqa/Ǝ,aHLLDnn.NoW̟pϟ/[ay@8q +++Ί+jݻ|p_:޽gVX% ݻ׮]Ú5kh" *a28~8h^NNN"IG[hƒe\{wiR__fFCk 52ZhU-;MVhUd'U9VE$kmuĺ%'d2XԤ XEvv6l6~7J*뒢ڰ0##l6PQ*E+ܤ6Xg0A>}4|p2}vv6.^K.-. , [n+Mi&փ򠡱zTT"""fll ooo<}^Œ3DXmmmxyy;wDjj*)x}vTWWÃ<#+), HMMFRR>~(D5!ޡCtfff_bhh ""ĺʜ /_NƍѡC\Ϟ=kqFCaa!N:7#z%1M L&\]ZRb`РLu}:xAt2ÇnaC`` ~Pk,l2[޽S,Ǝ CCC⢤KKKݻ<۵kѧOv$5WGH__UXӳJ)++ŋѡ$..Xt)h4N:٩S@ӱdYfXZZRJ7t(de:! eeedgg++\;d X:URRi&`0ș~4GH3L|?\~={4N[tӧOR---2 uQaX`0y&-[:M65I Xl //j!#fh4(0]VVOK|G%7mDN!()))m޼HdPUUzJjׄ$ uQ¯J[lQ;w.?fѣG066ڵkvkh4<{L$1wa˖-7o>)!>k,lݺ1ܪдh%֩ '',\^”)ScDFFr9رcᅮ*puuׯ[< FÓ'ODVn"8jjj8y$={/))_% d'>uA9ӠWsNуR ̛7>>ː! 2ѪHm'^Ϟ=ggg'x3000hrU.]N^tǎ |M/Iᒓ#GJd[npww:^zXhycǎ&޽˗/7Ȧ֐IDAT@bٳ'v؁\޽{͛7gk:UUUCUUݻwǧOX[[n߾$_~~>ƍG^l g,Ԑ@HpMwQ\\,lЯ_?DFF",, &L;w]μ8|0>u5j,q#eee… Án:W"YFЯ_?҇KOO'uuݻWdȐ;{Zbx1.\ ;wqqq9-ͣG /^_,u(pPPP@AAjkkQYYÇSRR4ܸq@^~sXr%"%3700h|-BYYt:FNӧO ENNm6@ii)|||&&&*#ܿ믿燜-))4qDիW/_\yM 6T^ܕgÆ &@^… <=߿?>@^| zǎ\ʚM4ؑN'Mt]uuušC`jj$M}}=\WWWܿ}]ɓ'#99:uѣGaooe`刌ŋq '8pZ42x‰P K55j:uꄐQQQOzܸq#kԩ (,,$\ϟ[lٹA[[{8_jjjL0c # ?|EEv!5h066ƪUPWW#$$ـ'IIIٳ'addL:f9n߾3gV:99q͛ptt = ߿w-jjjpo;vlY:tիqqq~-2%O.3f̚5#p4~:(pww+0C2`\>Ǐ*`ddD6 ӧ䑓? QTTDYD?)) &MZ͛@曝d)88džK.BCC1gΜ&,,,mҤIsC`ggtI@k̄ߥ*b-.4*yySǏ'k(M$2fϞ uKx|SSSbʔ)fǏ4 rΟ?333$$$dTUUU 558x0N?/!DlzvxW"Q4\GhuKXƜ9sm۶QQQ?2LyyyA]]ԃc٨?cf͚U+j+ !] ?LLk\eczjBN1nܸt:AAAիWɼ6lلnڴ~ @C}СضmY+WAAAرc׳Aۇr!v:\G8~:e#o߾%8NS;"V 0`#PTT7o@&Mod4hB9֭î]"''=BBBP\\QFo߾***(T`ҤI(//o1.-- GAZ<)//… qe0 xyyANNpqq:oeb̘1W`ذaKX,nܸd&^EEFFF\Bnnn }AAAhd*{>ogg*ʏ2&q%TWWcʔ);.5ܹ.]p, W\% |Bpp0쀽=Ƴ/ؖp^qGggg 6l@nn.p=2^;"""`bb/_ }􁡡a垍7x vtt,myr ѱ˗/ݝĥK0b8::bȑ?x6L&z@ֆ3`0EΑuo[n!%%ÇowHKKChh(1|pS&l6`0pppôp}SJ wwwh#M?[vK#ӇѪPz@_XVV$8;;={6EQTTF-.II '!>}y>AI|*2|~ݪIENDB`pychess-0.12beta3/pieces/ttf-Harlequin.png0000644000175000017470000004352312176710402017577 0ustar tamasusersPNG  IHDRMbKGD IDATxuTiC4 "va`b"`-+& "%JI23z9OxA N=~?;~/d2 /ʕ+^^^IJJѣG4?l '''y"$ d2mmm4QVVF_~(--vy...&44T ===FGGgرcz햖d2FFFhii777h;88/q]QkL&###wޥyg``)SDVUWWc׮]4wMs!99杝 ԍ3&333ܹstЩɓVmiիWLGa1cPUKP@rr2dddն ]a#HV >4kjj>^|Iwy me|B󞏏)))T:U^%peee]~;ɓ\mǿ3{_VVw___|j_pqq!%%w!\:u*EQQe>}JU.77lיܽ{7 ŧ?FQQiv껹U]2077zBŅt*aڗ3aQLMMK,.˙Ç,ڊ,J,u竦M&V O>zv=H$ 2_|???6=X [FFQ@ϟOWE?UUU,F}}=\ 2+u"""t=22rʱF wYVAAs!C[5 @~͞=ovm,zݒ >}7C[[>}bnݺUϟ[|Ybb"GtUΝ;<eF^^=Arr2kW¦@+e8881BIIh֮ׯ_VJ]J HdݻHIIkŅLarI7JJJ(**y7~x(++wFaa!?N\II lG^^@_uq.2*C˗/3ٳg˦LB50|pܸq;w`Μ9])v-LMM#V~ GGGxyyd2h"7x111PZx9ũ{,i;"##ܗ/_ɓ \hh(5,,,Y?O<9'##CJ.ܾ}sΥQRfIH$֮]K.+++V`\j:rrr`ll\vOueW@RR2˗/ 3fLh>4eɓ'&L@" :u`gRRRqeeeRujkkGWԹnrLjx%$$toqq񠎿"88󐐐TBXc333[#%NNN43"FBv>KK3t^F%BCCU;8õ;>憐Էg!!!8r6l+]f8qTKjG###wJJJ]]]ѼOMM 87?~KKYYRzJ|ر78*z$:::ƍh!.߿t>|\\\TXn9,+^^^K2 \`` &OL(3g͚@wk B*ϫƊ@VV։jTVV(5sLYQEE\\\>~xx ]]]xzz첝 6DaݟbIG@@BBB0p@… g…"$$gM(++rrrի0_J[(DURR;﯂׹ؼy3\]]q]ܿg˗5,,+++̘1vvv 8tH$DDD_2Dŋ1f}(//Gqq1*++Q__HKKCTT055Ŝ9sk׮Ȇ:ӫNZZ{1; P={Fj^,%rrrؽ{7N<˗cٲeXd x#55555TKš`رC^^vڅϣrrr.d2C^^|||@ii)>{!--ptt:.]wwwv)l@/8Vv9!66種 j>%3"""6l,--1sLHJJBRRRRRm:ѿ,_TWT˗/ĹszQX9l ӦM̙3aoo777"99C^^}BHHԄ>xxxP\\ ???8A\\P nܸ+W(j?T9^^^W^`hh2gرbUS<<<{aƍf%,,,;[YYÇF%%%EEE---Zbm#+**6())쵲z]/_0iE`Gغd Ni1nܸ4{Q6&<H?y/zҏWpQ7ߕ_ .-p???t v;no!!!t;BA#((bᗂhjEEEm['%%7b߾}3틺:ڵ [lOׯAAAlyfCeuDCC<<<}6222خόs̑ĉ|||{fͪx fmЃcxwųg;bժUഋ^+Vzzz,Օß عs'ttFA__ǶmP]<|[B\\gvڗrKKe`#߿?\]]n:\p444sEUUJmmmXbtuu@YYpe¶olY0Hbݺu111\rbkkk+]^^!!!3N.""TN!H8~8dee)B~~>U/_ɓpvv4(z*>f;woް-Ȑ'NTQ<>K˖-CSSqϫЍ 2 ͛NU8;;***`oo HKKEDDM???UFFiiippp pÃ5kgxb'3\r,<&&ׯ_gJ D BqqqW^ޞw⯿.^ȶm &&===;wџH-[W^u{Zb wnnnt?\799لmkkk˖+ve ^ªUJ+,_7LMM=f9g`ǎPSSz_ZZÇ4i---lڴ~j pjkk3\:hy[2`@NN1k,L>VVV000@~p5}v7XZZbΝĦM?~ puu"tuuV̓ϟ 6͍&OG닓'O~>>>hhh ''~ Æ >455Y]҂ ~qqqx!` 󩢢"5kܤ8\z֭<6"HǏqyY۷oٳgvn[PP0\UU!G3\uu5 S2[L:=[!h7oFnn.999 Ǐ$%%>>>HJJBGGƍêU yyy:tyyyЮq(gVu X[[qCƒ%K),,ăXZ8ZZZxb;v C ƍakk EEEѣG8r1o<f`mmӧO#** qqqČ$((MMMPķ+Ax /_ĤIhpµk׾P2v$//C 1n8J~~>"##ӧsN۷oߟ!c߲2888 33puuzdhjj焍BCC*>>>$&&bРAjkk免7BLL ɐ@JJ ڊ&wxgcc7nƍi]v 5jNxSLݺK3 ''4"-- gիWpttz6x`%))  8K.accC\֬YmaKKK9{leNhStSLAdd$\BD?z(WQQ ݶIII ttt`ee2 _aСTwɝL󻬬lO^h\N Ҽ{ :hw[0t(uvCC^G۷رc{ZZݻ_"..~~~T_֭[&yxx+*EEE8nBXXښIy<~͛7>,IIITa|򅸪"ɘ5kxxx`jjJW[[[ `޼y!CGCf)؁HzذaضmPZZ7n̖n \CCdddhR\[YYO>6*hhhΝ;9O"cǎnrss{{{s\3<Ƙ9s&dee ++ ghM-{.Ν .p4ӐI&qTw֬Y>(_~i3s)vxr\~?)2˱ 0X` ,@TTSTY1vX2G2gd =~؛nyaҥt˴!//ef87obĉ2d#F%-hHѼġb eРA߿󥿁.^ˈ<<Ҟ={0_VVF|CRM,p$p*** bj ^^^foyf ɓ'ȑ#믿(++jc{oܸ1@{6???u{{{^CC***EEE ۷o,[EEgûwqFTUU!%%ŏ^=NRR;ve˺ `ѢEؽ{wXfd2;'b׮]ĩu֭<=zbݰ{|>1Ƭ[[IIYdɒ۷owY~˗/ ؈2)6޽{aݻtgԩSoV^ѣGS^zEsϟsss899g׷$==)SNT_~ehX[UUEW^555TEtt4FÇWFsssCLL짽 300 ̊H___xyyT#bbb۷`ʕ=fNޙU3fV>>>ԀL&  xUTT`ƍPTT:,deeqπK܌26.]DlΝ;rڵ 4Vd2n݂VP?8NbݧǏX`lقgϞaҥ4? \[[~z¾}?#صk"޽{K\(--2ưwn]A"0`Ξ=g v킍 Û X|9; )455ĉptt1'2LwQVOFvv6N|8A.]bCjk׮ěy1?^^^=~SF111]&0a^Jλ3=ѣGo8mKAAĒ555 :-Ss===9sK.%=}}}X? ǪUX*b Ν;,?s <+W"44cƌAUUS ֮] ''':u ˖-… Aq 0zhDGGc HVYYYl߾rˎA١[> Ԅ3f`̘1ׇ.cJVV̐,\xib)\\\A8>|222 1;;;<~/_Fff&RSSaaavh?,}ccm8{,MݻwCJJ  CLL n޼Ja߾}g0|cԩXp!222" "!!n"^y&>}JG[[iiiXx1쐞yӧ23Ԟ(OCCDDD5i٘6m{ ޽+V6lGGGRFFFʠA8Ά{{{lذ6661}t̟?9998u*+++WҘecɒ%ذa6l===8::Ǐ 1c;;;cٲe`ձB"6(..ۇ0gYf477Ν;̀,_rrrXn]ϟr*KqMb۶mtعs'޿hL<HNN& ;*02 l6M+**ZkgggJl۷o#44fffTyyyXhjj";;^Z={N@ߋ/0bܹs7nDuu5Dθz*&MGQ+++Þ={c"RdYYXqq1Ϗx̘1ի;^zl޼%0n,++KD{w^׃ ۶m:ƌkkkg̘1PSS;Ugx_ڲe hBL8&Lcǎ `jj;wؼy30yd466BP=̙򂆆ܹ8^^^6mrss ... :3gTTT //~O>Akk+PVV"99QQQ8z(`jjh<~͍!Ct:t(G)ݸq7F =؊lق'N@DD4{ĉ H///O*))pQ[>ƎK($ }Emm-0uT"?ϟya„ )aI8s 233ł 8٥x‚~z888Psttٳz?ƴiѣG7p,p@555555 999ӧRRR ''`ƌ(**롩$CXXuuuhjj–-[~)=d^uEAUU[_IdF]o޼ =z!>|q0kիWОLj###CuUVVFVV~ eee5j,YcȀ.]p簶FCCaggRܔhkk***z$A}TIIܹs%%%q֭nE>D\\aAvv6aĉhhh n(Ձ~ ...hkk#yzz2wd2H$d2~R.ۦ\dժU>}ŋQVVF"҂Gb8p p}B01!66puuahhkkk(((Ύ*ٳqQ(**¡Cp1DXεkF̙36u~~~>|rš۷HMM/˻-t\\\0`\]]Ϗ8 77JJJTeĀ6m6XG$%%yMOOMz{{CUU,7TXX3f wԪ!C`ƌ(((addBt8///ܽ{၊  xxx;w˫G2vёnǚ8%%AAA[ZZ0fKֆɓ4ip}8pӧO2`ܹ ?z̀8L8֭cYGֆkb֬Yaz%Cɫ)tA<%H077'_߿CAADŽ pq?/^L#UUU#G2 .[lAZZ!mmmx"aveddd`ڵ=6ތ,SоgNpTuu ?>#%%sss_EXX8@NKK{STT4,//7R)Z;R<| 1bK ŋrJnnng;D•+WX*Cazg.] z/Ք///WߴiE[[NAaHLLDee%233{dCyy9gDΌ bСػw/QTT+y }+3g.3_r[ׯ_]YY5krBBB!!!P999xfΜI$HOO7dXEd2<==`xyyo___&L@nn.?Ç2ώ88VOOOw tyyk׮x+PXXg…iiiEYPBBÇ'w[koll4`Μ9066&BO03LLL`gg$&&g O}"Uey\ܽ{mBСCHIIATT-Z}`iiٳ,X zB[ 0 YYY񁁁񼢢w)SRSS===gLd26l؀?RY|z vvvʤ0|p444ի ċ/tHIIY0w\8p=8sb֬YHII_TTQ__VR[v~(\zTj*ԩSHLLDbb"JcGA^^(yyyTe;2r*Ά03 &&nq? yyyl$$$}Arr2|r?033S/<<GVV!))K/`7*$:O///v f͢JpA7j{C% 555077G`` .\ϟ$ Ç2Eniiˉ߷n }jY|ILJ/^AAA044ӧ1fs|,{؈cȐ!@{i6l؀#33 ;Lb$(>>>TlSSKYZZ}X{o۷~hfh׏^)H2f [ꤣhXk6_G]/_ @)<11 ͛b ''8ruȑ#PWWGNN7i[C#p$ VVVIJx{{cذa?zwDHHiiiT{/@(E BEE::: 󞚚Ѕiiiǻ ooс K\...6]*++qtQkgaaף7nv爀؀D"QvCHHx90d\xK.œ'Oڊ08qcקOroڴ HJJ:dddp3&6rH"0w!11Ĉ#p >uuu۷/K\PP 4gl߾7o&@8::R="Rl2N***6mV\ EEEO>x)狀"""T.tmmmUC\\JisnE+pIIIFPP#G˗E謭:L;w 6111CHHa9\YEEJ5777Rjj==k255Y}v$$$:t^~lĈÇ PPP(gi#Uܹ#Gbܸq$ $&&B]ښ"޽{j7<ʊ88X[[o߾􄣣#add@bcc… Xt)III"GPP7&x! ??K&$$LY!..=x %'CMZZ:^YvsFM%lPRR9ܹݮ( ѣzXYY!??ӧOǡChc$``` .`ٲeػw/쐛 +++!..=nnn@HHWɓ'333: ᳴IT͍c"44;33sS׮] ~~~bbbJl֡GMss3d2(B3d2DlimϞ=ؼy3/FFFކ@*WVV&fUVСC @PNNСC^)YYYQ?jhh Vh_i ''---aYDPPuuuPUU0MKKٞ,kz .''&&& Ą `aa`888`ƍ4BGb@]va˖vmpp0Ǝ nnnԔBGTTT:}qQi (((f\[[[cժU(..`U]bg|-TUUQ\\;su1Ma.g5Fhh(Wsqq|rx{{Sգ{J&LIUUJH׭[B$$$/^h8RSEGGgQm Qnj\7o^}#,,  ÇUUU Dee%`ddpbO1cpyQ^^ÇT%ӧɓ*d25hnnFNN΃ǏΘ1ڗ'O紴Dbb",)-BBB7tL3K EKK xyy!** eeepss@UUd2e˳ꐴIDAT|Ēdq7oƄ  477˘tLZZ8zRxx8؈/A$yrOsPgϞ'] ޿thK{|||BZJJ 5kMIIIHJJ"55eee4hG 9vsqqڻw/1|cҤIEXXoVVV􄜜9???aΜ99s&oqqqvUŋ@Eӣ k֬'U{9nܸ+W!t)pGPPtttp%ڵ ߿ĉo>9GSS>~Hc޼yPPP;/^L#qE[[;UNNRRRؼy3>wÇČM@ׯDEEM޾}K} 5558rf͚qqqׯ9 4dcǎPVVfX.77`kkKu\|:sNG1Ww ggg^_tttR?~˗/ݻwQSSu=:풐#QWW("==Fuu5h҂#`ffFcd;Mn nѣ ;n6 X ellWV XDMM 8s Z[[1wnيuTvO>-mSxTTTbvPSSÑ#GpxfwlpB[Ǐ(@'%%SNAVV„g='(++OO>%~B~&L`Ygaa͛7 N:Ŵ%ƴiӺ ԄZ:tp޹sgZbJTUU!++坩2,gW(++IKKWUUŨQ0g34Ǭ@&0ܾ}є/ 'O;adѯMn|= "**oTFI&̙3="l@%j*qy$//ߓ'O= 6 :::҂&Rj~ Bvv6TUU1i$lٲ'N"z&8;;c֭غu7RQQ'Oٳx7[Pd2cc|ŋ8x F_̫6\ر'OD^^ $$$())C"555hiiaܹ5jjL&CZZ8'\\\LpIHII1MPTUUo>|ǧlg ,`bDRRr;֭[#Gb̘1011ݻ /&466qqqbŋGLL v;899رcXf zX޶mGGGG(++,pqq3gV֎@z̀̈gϞۇVHJJB]]jjj!(~uuuE^^>~^^^cĈM6iiikhhT\pϤ:,Zl ʼn|[*ِdbti8p`>f;==}|IIw((( UUU!??#&&~~~X[[cbbpn}/_ϟ?q7A ;w$\6 \ii7 IߙiGGG9=X7߷Q?R~͎IENDB`pychess-0.12beta3/pieces/Magnetic.png0000644000175000017470000003261412176710402016602 0ustar tamasusersPNG  IHDRMbKGD IDATxwxTևi酒 @B/ D TET>xAX.*x$H P4H)R ާ}fdJf2Hys> ke{j򐻄.gusXRٳcooo5kS&''D5)JZZ8((X\KՔq:t耓MsNfB$9pN:=Vl۶lnݺr˵LFë#!!;w@NlR] ;;K.isrr|NK.s\ [KOK/>B}8r۷Bau3dvرcRtT*6l؀#f[ 8nU5쀊c( Μ9Cyy9YYY0x`RL3bMޗU.\ xҹccppp`=zC€lkH$HRtlQM `6Fʍ>z'&CxG)h!(((NHKK m8?fYV@:"b= tnZdgguVu/߽yiܸqQ ."""jmS5)yFJHH 55֭[utto! SRZZ^PPst>D M6P Yf=\RdϞ=Ֆ9D6)aVy`xpB/ght,bbbzO&LСCe„ YF{=))=++H Cz78HD.]ȰZhAӦMm٬Gw~a\nFӻi0ֻ]N?-mQ*&˝>}ZSLwU W^z*Vj>3)>@t ~]{gv XHRR111:֤I_~YW@^ˋb̙ŋuJ]vq-zU&33y///BBB8|_}6ο+`&#^c6طo^^^l2mjs޼y<ۗBӼys{/_-FT^!D߻ip.@X ___<==3f̠UVlkijxnnn jy=ꂥ͇\-l=4cfױcGx.^=vpp`ҥ K.ٝ{Tn}cp:xe46]=tL̙?L7 ~~~:jŋ8 kؽ{77nɓlܸC8p T*/^ӳiFop^AqHFF5Z*`Ko=z7|ă;v01@ꫯ#G8|0C i8y}J7xd'O3ؿ?GbBCuvpyy0XXf7888^re;@矷]M{^oPPT/''\իΘnʔ)1kwk@w#ХKd D"ix2Ryg?N8Cpp0ϟRSS={6SN~cժUfy̟?tǪUt>CGGGy |&aILxK,{\|СC8q>>>#>}: ..X˖-{ RV:T*{ߜF9880tPwbbbʺ0vX͍8|0?YBT' ur}JUTV,^4@ pI\?g"o>SNJȑ#[3e˖CY}o^n!fdr7E&3diٲ% :gϲtRIϞ= ^/ .''䄠I& 2Doa2|ppH$bZWigggz-gpwUO&&&#kxc=Ze,vT(߿/80`9lܹ3Æ 3y_R+zj>7[UVnqqq66DQQǏ'..L0~LExC[VVE5)!!Aĉf˖-d2yDBTT̚5KYfMTTg(زe 72~x|| Z,6*0/bf̘իWlL&m۶4lzip@ c&H|ؠYYLcРA:K5d5/-[d2y#eн{wmq_gggڵkgÁu(d WWWJJJl$][DZm~Ŋ [#С={~|>"ˊkF]{=!wJ4^5 ^>[=fZMAAADD"--%66vA  ͛7W:88 slÝ?ݻwSZZ6t?3n8IMMYf<RQ͛7w?y,**rkѢEƍ:tsYYlϗ%)1X hݸq={?ЦM.^?+-Z27nLjj*7777AƵB'mժUjuT*ISLWhԚ2p,T/Ǝˈ#੧ܹs ?~k׮Rϟ?Jnݚ~қl߾} O:uťL&H$%rMb?' NT}#]\\1~(//gΝ:&P(\r+W?nҡ s W{5c⊊ CR{ ZWQf2ICvظq#O&//SNiӦcJn:֪U+Zje0]֤̘hێ$#HDrVz!@Н+WEjoZJ  @;`4̓BAAݽE"Wl=qℭ^~f.Tc=g̙JץHdMDvڥ#+m۶zͥKsE"=>(ݻw׹pBFYDW(\|٠%L<ٵkI d;w\z59&&bb؍ttzpuIOO9Ҩă`cD;ðav5jİaxw EQ^}XhˆUEEE2byHbpM.OXmp {tSTU7uK [bcc[bE>}\\Oѣgxxp2 09Φo_gӇ,k?z! WJ֭[uD5py~'B Mg}v Nl۶?~qŊ;/WJɦ3 z,zX5KLL]/f6mpss#))ɠ,烂*sւ >SKU(vPՒ#F [fM@bbVIHHG5x=$$7fU IA7d#U2^~SL`޼yK$q5XapM5уn߶4CӦMM_~];.S(&:u6/XB"v>޽/dw}wcǎ޷2!Ec$\]]͍dDHHW\18/))H|ØT*%$T.s*9s޽{XÃBCC'\z5~S;wN+P;994i"СCٵٳԮyಲݻV!*NNNӧsy7nLΝ9w/^Ϗhݺu3f> 553<ή_Wtܹ5~kU KJJn\zof&Hڼ*+UCݍSO=UAAAnWclߺuk[jN)4hpS555) U3GllljZhIGc8:: kgt/ɘp;!00 8e.XBAΝkX\cI"V*/B{- ޼ b$%%1{l6mJvv6˖-cϞ=Q^^Nyy9R^\SƎ[#m]"#aAV)4EܹS'5={g?' ?:J"!!F[}nnntԩ6 ;#]/玐$\˖-yWjޢj&+iiiF{[m|QWWk䆯EWXX5ݻ5MV@gTj ~C|c+1C"sss#!!bb6U˗/#ɌnϤPQQ *qww'??_{DTj|7nֆWm% ӳD"ݺu#%%j@زѣ5۪\pDk=z4]t!))dV~ٰ혡el,500_???&2jX̨Q,}}A=?jhz͍/qb)`¢8fȤIyh–!n OOOƍgp*JiҤ =҉{mGÀn4[F; ^^^oC' 4 YĝC߇UPeuQW?3۟!wJM B~`!–CR-55˜zCcjjpj@`̼ƍ{_۰]6#//]v߳wZ{Z___WTѣ`h 0alܸ^7끦D٧O[~<((,?NvFM6kOO{*M_ߨT5iD(JŢE~ywD"+**ꚿGDR<F,N4P3͊ߵk͚5||R!X>5kθ=}YggrWW?of+U?"p mFi1^RRBTT4EM{ O>W?[VVmD"Qw}ٳ l!{4T*ёK. iz_UT_VB0 ><166)w@d2Y^rrrްaRRR<[|6)//g֭_OOO֮]˥Ky&dddp5֯_OFGTTTguօO2%aq1ϰ0Iuh333ٷodرǵkHIIח~m6nܸQv,HZD.\sssq坻vvZ4D"QFr! )iիWwʕ+:ϟ+Ӿ}{>[J[j;NiԨQ UPQQqwAd2Y ɬ,9grҥK4jԈ\{NPw^߯2m4FŰa F5sD`0\LpŋZekZեK/0dȐ>/k 咒x'tyꩧ'7|3<ӛ2j( #BԘ*fϞ{|iDDDh]QEEŴjY#F ~ma6K@ҹs^y5"=<> gg]ePZm&!l nh޽9ͮ]jjw-gΜv}gJnl޼!f9]pqq{ d2̙Ü9sbܸqk˗/gԩt)EQ֦B0]*>P"}ϝ;̝@{h(_0~ cAJp5U압?[#M_Pkת!?{џ'Mt7ڙ !;ӦM;aQ0m6m$!nm۶%33 T5&KNNH5IDAT5M*SԆ 9!&&=$$?&5jT\TTtq+!fjiiӦk׎Eu*l(]VӾ}{k5T6uTFgے.]:hɒ%5J5jԕpy۶mnnnH򌌌[k.ݻww(..~ u0ykF >/Ç)4cooOyyV*Nܹs̚Ul?e`M*Kܓb#Gիh9s(*ؾ}{I&T7Ǎ֭[rss!h[F/38LСCIKKue֭[WcbM*K cTԅ  \gӧ3}tT*UZiiiZH$CCHBR֮]I#!((H;~g)JnJDD-S/1W&Z5`7oޮpu7TC巁kmJ5!u3e˖H$bbb,rLIIA.זd\"kƹOa3Dk;88DedžLBF)F'Q*ܹScgg̙3uo:DRR2 \NRRO=Zfrj5tf\l* }q@Fٷo_]._|cYYr?܍k 㤦ťKsrrz*񤧧sE\Bnn̥K֭[[_S(9sFC `wpppS:#׺}t,X'9.**B$ՕϵXmpEEEh' 憋 4A `#G}> BHd o9Wq$RiDOj޽uʨj=LHW&//<Ξ={_$9egguVu/߽ykc8hooowfŽ ZI&l ()) t既6ԱX)JlСCYp?-[0m4[{NVr|cFD"NPkw^LGOqdddX>iggU:u3fMwՋw}I&TG$ie*VYxvrzjf͚oAϞ=G*/O7|]#R#,s޶m[1۷o^FXs[߿f!~333 |WTID"̬&Vyu떎믿NJ0>}:۷~[C4"-[2i$@E.gu 7I9s@ WW.ܻw$ಫKOu׮]ZKҐf/ >:vѣG9y$ (KC[ B7|VեF+ɴr.\O0p@c\`r K;u42--^{ܦM@w,?~̊Ν;UTTh4j;u헹2ݺu[Xh Ϗ֭[3o< O?T͛ ~;CMDB9s~IE7ߤu֦"Ԇ~:2Xdɒ%4nX󍑯Z*;g=׮];@,h^M<ƛԟ+++2>>>dƉ'ػw/ l.WM۰a^%DGG`$;gy}{nN:EhhHoݺepSСCxC׋4?HbAX|_Vu_Ջ9s0tPX|9w~˪>AXϧ<==UNҥKDꫯҫW/<==k"? zBReDDDx'{D"^m۶]ZZTޒ[j555Mൡ5HNffq}Do_)88֬Ye;v`ԨQ^s‡_0d<==K.ȑ#ٴi֡7d<ٳGb_rmi!Z}oŭx RyEPU)7nܸVTT $552ZP(*+*T,{W믿WտY!gddݖz饗pO=}:}4111\xQ/oAYY֭cj:w?8;;S\\LAA \xX| /된LΝ sG%OD'P(ݛ) çNH ב#Gڷo_@t2>>~T*-OJtJ򚫫kSR9aj~~8pFGa„ L6{]VPP 6d֬YܙjÇӫW/͛;w.t6l;v_g[ݛÇk***5kJ,(?rR޼y4ϟEEE)%I֭[ŀի5oll+WT*O`,ARYm֭[uߤd2hpbpς ؽ{7&L 44f̘A>}u9Jۗ3fPPP@hh('Ndݼ[>^'[5X222,qn48BxaFFllܹ3Æ ;oVK/tX+̔FH$ڵ뿍]W*.\80;)222x' ^5jv!\.3ebbbʅqző̲epwwɬMg;;;Zr\κ4VX l#G[M /@dd$˖-_ a,Ԏ7ٳ+\j6m`߾}`R /̛oRd5185Β%Kv/Y{f靯P|/w-.'˵\O2jZ{۷ת~9;;;k2l"T[ JJJ7Xnl֩T*>>>SZZjp`]à ;v66 ΝӖ̌3Iq+kiܸ1\x t-A<{U곙ލ7hѢޮ `tVjD$''Ӿ}{[5`i޼92BT*)--eĉTBHBC7o}vm}U mkW5PT_fϞuaÌ3zUC&Ѷm[kl9}`m)))lܸh4xѣ5'N\.gܹ?ފ_Rۛn5^7rf(++HfΜI^())AV;vg}|cooT*E&!3f L<gggǎ;ϯ7hIq딤;|5ZP*LGFFbժUq'NU)rHGEE7v%ZqqqӧQyyyY,VI8`_EsNÇξ}bʕ ǃ+ ͛7RNKL$= 8;;+Tf#>|/^۷oONw eee_l6QvnٲN 6B $$HOOBMGz puVVV,̋/Z@\\  /,,+GkZn=#}Ž{dJp8 E]]o.s9`X P\\E!$$$ 666033Cn`aa###tTUUG~~>*+ J\dH`DEEM8tɔZuu5X, {pr `R~~~HiiHL&ӤQpss:u$!,DHNNVHG)S޽uuubnCCh4`ee?(ͬY\jM6r8 ˙7o^<{{r7oܹU˴,bdwl 2E**8aB}}ۚaݧ0bHPRRhii &&&N'`llnݺk׮(//WZ؄[(X`͚5?n5NJJŋz-rssIqqq=>>>HOOܶH8;;Cm3j[NyGtt4^|)u%&ƍC>}T҆9s/i>?o޼Vp7o޴Jr`X"##qΝ{Vv1LXXXPl>0tP$''Kt:󸹹!##ClZᒒ'=SNUFÆ &933vPIϜ9#Qq<>쳛f~؃mݺ)))Xp:v [/_[nNFx<ķJ555011QF,,,\ԳHpkkk/E]*f`00~xtj op M744DHH?. FLLLPUUpyIz#E={v1c/Ӕd̘1 m#22::{\lYkkk=zTh={H};)k&PCSiQϟc׮]b3g௿L4R%/hY+$ᏪK\uv7o˗/ŦIZl{y;-//qƕzyyRT`*Z iN`(*jɿ 80DJ%zS+Tnݺ&&&0668t444 77L&, L& EmY _EL0T*LMMallmPa٤z466JJJD\oo=j[^﫯sss qI"77yyy`XhnnLnN!p AAAY;;U Q^^-YdmCCCmm'ZZZt Y5?X[[;@[[;c*kWff&QSS2 &zI' B\Da#H044JA]]aSS^/)-..NɚᘓHj:DJoKJLP(FC}}=***DTOl6[!g[txҥ h4*++Q]] (((h!MP`ee t 氶 455k-22rRVVV@}}^YYQQQvQQFii)D䠱d2LLLFFFAT6CCCeee(++Caa!aM#dXYYsss 2ͣ;aٲeR-!Z܌<hݻ7ϟ:w$@NNK&&& џ̜9Sf 8::bΜ9M$rFUBCCxz%IŋMk޽{U=',--Ejjj$$$-lҨFJJ|VtttdW4xjal6ޕS Jz"q>BuB+5 ҥ GU,vXS9QK1nI{ Jm}_ý#DiiiZ0<$$vlllZbKMq\P=.SUw8oFFFJV7nN>>byfƍ bMO>}jmffx֭+Vh8:d:,ZHb:ZZZ iVbܹxصkx<m6,]TҸHym rʙK.}v)56sm()Q JELLL3 EDY,N:󺜜ndavy)%p=z`ɒ%$VٳG["yyyxQcƌ{nשIxx%88x޽{WȚ_ Ν;ؾ};8M6999ܢSiw8p RYSFd訔 GV~ذaocs=BDӧ#1Lh4ipJiiiTZ J<(ML[x<T*l<ʞchҥK%{QqqqR 믿 'V]tQzJbڡCY^k.VzNtkkk|w+Rgdd===477pU.\7Jm3Ɠ'O6׻Q[>|O5olMG)kll$z(~ǃ>:3J#UkBCC''' I&>}CcccbF-ғF]BKKp?p5FOUx7⮓H$ 2O?vvv^4k֬$nLPR z8e:DO?}}} >>ؙr#)n6mڴn߾M ;k֬$AÇ{={Vfڕ+,pt:6l&N:E:ׯ.].] 55.\PA 9EQUX&>}s+K//y#""m޼9;==]f%`ccԼ <ʕ+1fcXv-=z#F(zNLMM366J&111O>=+ۏ?!bpK>>>V8sرbFEoi`Xr%nܸ!U/Nȑ#U>ȑ#]-WSSPtf„ L_MMM\zO?=$H$X7 zg/ e ׯBÏ;&I̙3}I$7mnn&z *)/ܣI6 {{{Fm_`ȑV(eha{KIa٩\]]8}}}5 ĪUVY[[˕_@EEBe͛7dRU{J*lmei9;;Ϗг_~@hq[РPA`pj ~nv正85oyP{m̀{85oy'NGG<jb ޽ɓ'oSUT BAFF9B 6 nnnx#?~믿laa1̙3&LReTAFFbccE]~}3j|CAAV^l*̙3QQQVԼ%8+<]2\ns򢩩Ixu  ݩ=\`Bzݻĉ7V&$$TmfVfCE###!EGG7o^pEEw_ Fbb"/[|y'ڣѲ@"'x~Y$oTӾwؑ())Anp9hkkabbtw2e'6'$$,k/ 2tDM6mZ]IMME\\ÇUʕ+xZ/YJKK=;z-B2nnnHIIAPPd2hѢ6o>'M`X3fܹs~:X,d2'???_?233U2Bbcci?ȥR$s8\r3gf+XiDFFAOOùsPd۷H$8ѣGUE]x5klt˗/&?<=W s=SI[8‰"_i۽ZiiRgh)wD2=-j&L@@@BCC1zh jy n߾ XN-Vaa!K_04{!Tes:,m9vppPz$(pϟyn`jjÇ\/Zׯ_'>xRi{:2<\.'N@ff&F 7778F8sqq!"w܁.KN>=޽{u֙xyy݂yxxQlH>sxxLe 駟=4_iiihnnFRRTG1S0)**""{xxw0aBDbbgfϛ7o_ȬY&Κ,P3tb3~ݺu|z8*?~u6͛7+QHqƝܿ _yxx4MHV'wppPAZ]]|||1cDODL&CBwX/[U\jyhS`0jjjH] 2gΜyyy Hزe =zDOJBУ@߾}sx+W?aHHH<`0|ۻ=w$9yR+k9\0ijj"66]tD{{{޽ֶ]݌= jo!Y|UTT( WɄQQQ'O$V "C8Db2y!##ϟ?)@RSS˗/o%Ү\B_PP@2IUeAGttt  *AflIDAT>:}tF= 077'"Xl,rn:_<((Hh4-333CERK|eeuvV Jŋ/p022ҥKIg͚E.&O?IJ\.wq1b8~0>>~ԩSt#FϞ= |}}x. Lƍ7pE˖~~~r 2RSS ^^^šCwߵ)lK}GZZnܸ{{{YŋuVTUUᣏ>+ T*bbb ᡸ3~Z!af˖-2)$pgϞ -1G?*§~JXԗ\}}=a, FCC+<~p1̝;Wf[rr2¢ӭd) "##fWd =zDCUi"|&@6p\֭[HMMu&Laa!X,( N$7}:;>>>,??lkk˝0a'Z{ل .ʢ6O0arv: OؓuAi3nd2Z.;vwQp133gܸq!Bꔽ{^X踽=ۨC vBQQncc3giiiϴ3#11W^kIXX&^zaÆ FNN6 y9z쉍7YYYؿ7BOO7vލ+W"z)"lL?55?BBB }}}D~(-pSNǏ JUɋނ /ND 7/ƪU?W%X|9c6l@AAZZx~: 7HLLҥK;JC9?CGGVVV2e zEk.?$~<*]EII x<,--7ߠo߾ ;@pN'Τ ++~}F^\]]q"_ZZ&&&3E"Mggg###L,--qIڵkcĉq yjm{8kkkl۶ [lAyy9!++ 6mƍ [ff&a8o<-.] (..&LX clܸ27!1>h"ɤ >}L&~!f͚5F񆑑>} dgg3gL7~C w߱H!y]vŗ_~9si~-N:=܉'E|Cmm- 33^^^سg`kk_yyyDy mmm\ٳGiu믿$''c(--EHH\]]+h:99mz5k֬}Z>:ۛgLfϟ?_gXYY)))Zj۠ AP,YBx=w[Tgd"! lUUUí[EA]],X;;;"((4 [n%/Djj*PUUׯ_#8837oބLu444BoܸAv؁LܹsAD" NRRRk׮Jڵk2%“|)Mg%LϞ=i&lڴ })Y+pa2:t(N:??~r ϟ?GAA>|Xb1p@`ٲe8tqX455ۛVׯ1n1^Q__[t#AAAnMMM4hS0L\0[~=p_^n]$H n;x>> v9а͹֭[۷oc033Ccc#,--E׈D"eee"6lӓ'O>}z/hLVrrп|g?~<Ξ=5k80L)S|Æ 7d\ݻ[bDP[[@̝;^^^Ɂ:uuu4rZ}$uKdKT*:޽{sh' LW0!.݋;vgddh m޼T*ׯ_ʕ+Y>Fo={%44@%Κ5+XQa(,,@`ҥw$R]\\rxBb 7_}&L Ə?&>mmmS 0p@ܿ;w$08;;={6G_۳g977ѣ'+jF'OFѭ[7eee(++˗/q}\r8-֙%'"99<D yL&#++ W˦=rM&'iYYY``ժUJqP}=bnn.444pa,\0u7n&INx`#GZfٲeؾۙtڕ}vNϙ37onE7o$4 Ρh8wfΜ>}DS133ʕWq)f``+++A"0|H%SmN(;bAAAKiӦ,BQQM. 7BZ;rHp88p~~~Xv-*1|p,XU3_#::0x` 8Pe^hĪU‚)AvGBիWSD}}=&NH<@___PI&q <<\.DO'.\ vqo> NL2EQP(ĐګW/" MG͵3ɓDSEYjoرJ|'d0L_ qBwAǏGd!,,,MwYS/U۶-lO*̙3>zjx޽??4P:2݀2$Ɔ·3 R !RVVWG0g=677#88XEDDk֬Q01yd.$$$(8??0:uʆS"s_yz8挈L&yyyٳ3f oӝ;qq9rߺu W(u^OCCCĎnʔ)1c /0tpYbq&iS |HTgIB}3f˘1cpm,YDĪXL&]xJ̙3CgCuРA Dll,̙60Q8YLL qGo ̞=p8 /\ZXX& C&aD¨QDl9RYY[>|\2ӧ1+++QZZY BL#ҒS@騴 Ξ=+zi(cZRRmX,k@YԔrbn& 77J.iS)|O͛7"P[[K?)//W7oըRiE'R,FA?iTkuU_N'ooo˾x}na(à85oڋ>-7IENDB`pychess-0.12beta3/PKG-INFO0000644000175000017470000000471412176727272014207 0ustar tamasusersMetadata-Version: 1.0 Name: pychess Version: 0.12beta3 Summary: Gnome chess game Home-page: http://pychess.org Author: Thomas Dybdahl Ahle Author-email: pychess-people@googlegroups.com License: GPL3 Download-URL: http://code.google.com/p/pychess/downloads/list Description: PyChess is a Gtk chess client, originally developed for Gnome, but running well under all other Linux desktops. (Which we know of, at least). PyChess is 100% python code, from the top of the UI to the bottom of the chess engine, and all code is licensed under the GNU General Public License. The goal of PyChess is to provide an advanced chess client for Linux following the Gnome Human Interface Guidelines. The client should be usable to those new to chess, who just want to play a short game and get back to their work, as well as those who wants to use the computer to further enhance their play. Keywords: python gtk chess xboard gnuchess game pgn epd board linux Platform: UNKNOWN Classifier: Development Status :: 3 - Alpha Classifier: Environment :: X11 Applications :: Gnome Classifier: Intended Audience :: End Users/Desktop Classifier: License :: OSI Approved :: GNU General Public License (GPL) Classifier: Operating System :: POSIX Classifier: Programming Language :: Python Classifier: Topic :: Desktop Environment :: Gnome Classifier: Topic :: Games/Entertainment :: Board Games Classifier: Natural Language :: Arabic Classifier: Natural Language :: Bulgarian Classifier: Natural Language :: Catalan Classifier: Natural Language :: Czech Classifier: Natural Language :: Danish Classifier: Natural Language :: Dutch Classifier: Natural Language :: English Classifier: Natural Language :: Finnish Classifier: Natural Language :: French Classifier: Natural Language :: German Classifier: Natural Language :: Greek Classifier: Natural Language :: Hebrew Classifier: Natural Language :: Hindi Classifier: Natural Language :: Hungarian Classifier: Natural Language :: Italian Classifier: Natural Language :: Japanese Classifier: Natural Language :: Norwegian Classifier: Natural Language :: Persian Classifier: Natural Language :: Polish Classifier: Natural Language :: Portuguese Classifier: Natural Language :: Portuguese (Brazilian) Classifier: Natural Language :: Romanian Classifier: Natural Language :: Russian Classifier: Natural Language :: Slovak Classifier: Natural Language :: Spanish Classifier: Natural Language :: Swedish Classifier: Natural Language :: Turkish pychess-0.12beta3/AUTHORS0000755000175000017470000000031112162647400014137 0ustar tamasusersChristopher King Daniel Malmer Jonas Thiem Justin Blanchard Leonardo Gregianin Matthew Gatto Norbert Fabritius Pierre Boulenguez Tamás Bajusz Thijs Vermeir Thomas Dybdahl Ahle Wojciech Halicki-Piszko