From 18ff0a71b6afe2aeff604b0c91f78b4474fc19b6 Mon Sep 17 00:00:00 2001 From: ZGGSONG Date: Thu, 15 Dec 2022 18:54:22 +0800 Subject: [PATCH] feat: add baidu fanyi --- STranslate/Images/translate.ico | Bin 0 -> 14336 bytes STranslate/Images/translate.svg | 1 + STranslate/Images/translate_x128.png | Bin 0 -> 7406 bytes STranslate/Images/translate_x256.png | Bin 0 -> 14314 bytes STranslate/Images/translate_x64.png | Bin 0 -> 3752 bytes STranslate/MainWindow.xaml | 3 +- STranslate/Model/BaiduModel.cs | 37 ++++++ STranslate/Model/LanguageEnum.cs | 1 + STranslate/Properties/Resources.Designer.cs | 113 ++++++++++++++++ STranslate/Properties/Resources.resx | 136 ++++++++++++++++++++ STranslate/STranslate.csproj | 39 ++++++ STranslate/Utils/HttpUtil.cs | 37 ++++++ STranslate/Utils/TranslateUtil.cs | 81 +++++++++++- STranslate/ViewModel/MainVM.cs | 21 ++- 14 files changed, 464 insertions(+), 5 deletions(-) create mode 100644 STranslate/Images/translate.ico create mode 100644 STranslate/Images/translate.svg create mode 100644 STranslate/Images/translate_x128.png create mode 100644 STranslate/Images/translate_x256.png create mode 100644 STranslate/Images/translate_x64.png create mode 100644 STranslate/Model/BaiduModel.cs create mode 100644 STranslate/Properties/Resources.Designer.cs create mode 100644 STranslate/Properties/Resources.resx diff --git a/STranslate/Images/translate.ico b/STranslate/Images/translate.ico new file mode 100644 index 0000000000000000000000000000000000000000..f1840be78627787c0a6743b442a9f7fbdce58bd0 GIT binary patch literal 14336 zcmXwA2|UyP|Nm?ZbA$<@a+91nQi(0feRVoRLUJFKdmBPZQRGTUAvYmJHb+s&kx;qoAfj>w;Lz_Sd;^1Ta!l2Bo0}vR&=lKheF#Uh{g6~DiQ@e=}RtSa0|FR+9#-|_Xaz=5Uh znbv`0Lrr-xL)7WyA?g!@qHSq{1K`ED+3w$}*dS+wQ?FDXh&r*%uD>WL5Tr{&R%9eVULWgV5r;u-% zc1=pPxid=%t*Wgb4u`%+Vjhx5JDy~ITOA90KtHp1qg~<9(5uqvW=;z0ff4#wfpEo^ ziXa%q`H7lG3ie9(fR(myk7CAi2g^;|a?5Zgw7w7LWqUlil+OS3=>}iEsBrZy%lMNg z(H1?*?=eh{-sETSPB*@%Sq`t)tFNbijgu;y7&K5VjOj7%E*eMx)(s z)|Z~l=cGzc6z{`Eb3jb!XM?5mgi2e-OFJi3O`;Lww3^m|UTexX8R&VN@-ry?teu*y z{GLKaev31tU9q34FNn7%S68_?T;8!!HMx%P-EExGw8MR$3Mz!0FI3YU?L&7eQm_Tx z1BNZ9aV(}AMlm_tB%`nMN%bKQ;$8n9^~m$Iy1*x$)S1aYcvhh}ErlF&d+@GeuI#Or z01w^bwDWulNx9o5MaZnJ>k1+HkL>6x*Dynz`8o2{>KBT(Kd|Q4(4YwN+h`ZBVXo=D zxiFVk7=8QDw9F}Zh@M!R(tz6fwANrS(xnp-diszHIVNn7^OQwm9ERnGi*AIZEhOOi zQSsksmN&PzD^wIIjvt6QSM1GoGdCZf7bI0p1|E9@*>j;?MyAw`P_AFBPIsYcONjsB z&(Be=zT{98BE9sXhBox+Ydq<(nl@1rPW9k{r1HE@U4U$)WKMc#5A>$l{4SsW%3(tI z$Szj)I?MF**f$QWBpZf{T-}Dh{OmkgPeCq&bYu^okw0zRqbwv}uo34&aF`mt55*pS zj~9TFMe_y*SdQ#vW#kV;?NO~^Qa$OTp4}C)Fn1WX6Cb!`7`&~(Nwo-r4JFv-=crX* zvMoYL7gm;`oBmj7QT2I=ly7!t*~Hc&2YNGXjw-S&8ytbDOcm@5DnResdXdC6iZrTg zOCretDrFuBh&{4bnvvgXtgNud2d1)()gb!bfO5AD-?Wxf1Ji(E6SCm=yH~o;aEN`*Y|vkv?@@Tlf2W7=9(vUZ zrqGE*yL881Jwma8y>baJT3>TZ{rq_x-ls)f5g_JX95&?SWa0q>$QCAA?PRE#oQoM> z^^}LiDG!yPpjPfh+=@3!{iQGhEpB0yf?gYb&6xkt^bpxb`f1Og}ZHx|b zD|%%La~H+lIZzpbF5kfI9G*9@38{gdI?66aXW>T6fFO(XPH^d4M7=0E4C5VZVt(q%zj?#q2v$x%k|2dU*6d!rD&gho@VPnWkSxj8Rd~v>4A%=qqmx+hE6$!uH_r&+o zDZO@4Q8{J-`VR(rb8Ohtgc(b}Duc(NI=ZZ?rG-doT=UqY)Sp!L%;3l?c_A; z<*9NUY@;jiB8xs5qodvAtc}?)B(l65)Y<-f)*W_Mw(z;-j*z-ZORK}`O=T#stK!sD zTvOHBfqk?T&U7xy*2u^R{l$8qd#dg%J7e!^IdbV4T2iWoJhG4suhEccevV%C{-YP6 z9gn>RijsX~lql+H*3f@niHV$WU|1J7{J`5nentGk%sN3vYUX|JdbN8h+?5@JBUhgc zOFKIwFvU!iIxSZwe!4&NkE!mji*IJk{k$#|EXSKCX-B5kb2j`Ej^|PkN`LVpL8rP8P zDgk~;E*`qmPhMYRK4WItE#(2fj#{jevgG42OT=9|t-<$lnx=Y8V(v@(y^&BtdV7BX zWJ(D`5n1!w~&<3PfSphYZCG#@0qx4>AhIW~@wV zzJr#hNa9iVMtt}3rr+FFh9uh(1tB#~>o-?|7*=nN6jR;2DdDWNYoOn(U<|2K#QSUI zdlU&rc^R&j#B?Y#dSU_YCrrEX_d&wmOABkSTp7lpk4r;_*4G*enE!iy&(~$yFuP^Bx|lJKF$6uaEpmil#+f*a-aRA7I7AH)H~MZ~Mq;+e zB^FS-X7?(t!=QaVTdAFB!G~{{wb~==Ib26wIDPpFSeH91R*6r-xtYz>Ft|mLF?(A+ zV)~AL^+p;JTgHz6gS^|ZvM3I5QVXCO5N`XX0`n#(!WP&TPlaV?nzv-VoafX&bRlp@ zL8I_h!4jv2Y<|I-y2hV-M1oOUs`sl~q0;i4Rb;eT_e6x`b=eb&AhK0x!Z1-Lg)b46 z5f*COo1?y;MClZRx*2X9C0fWBOW&Q?`YfA+)gSWmat@Q6W?0YMeL0A!mS(SCF_s{J zSxh*(+HWA*Ub1ujaboHo1-a zsuC<;{Gz7{IWS~(+t(<-T-+AoYgM2hS2_ASCm7+xO(=r~nF(@`KUq(|?B{*#nxne6 zj67rxp9o)jh$I*zpoV}w8Ft#rS?eebMPMn)mmwzG390kC+EC+SbIEY|RuX zeHy!u2`y!eVLanc4K0cG$I9rH2H*SNq#k*zFgA=57(K&Qk{_#-5#zdV3OB?=NzP+f zhzCE^PHU>^zD%^V8>M0VdHL%OGw(9 zCm*xp=AC%@%+PW}6{QogFaGY$nkP47EIT60GvAOrH!Wyry_>oj%^i_)piY*#Bg3Hgc^PR$!} zuI;j1QIvXlT!Sw$d3bCeT96>L)^CTk()7yPgv6Zx8Qa5y?sjB}!1@cpb{Hlq1EH0t!9&B{T7 z?8IakZuyY_N<06FlCA-ee6_-Rym=gGOuq((1qIF#=v%HLQ) zP1tbsvtkD;ym{_UJZ22i<6j3s*l`ZxuBBjn=9Lc|&9+l@W(zYyE+g4|Po_H9oUFfM zYoI6993$88lCZx2)}BS~l7Z|fe-I#sZZoUYEXg44nN$8QJBs-amVlu z3?riw)xz$y_*ui9(t!VOts+<(=KtLC-E0t>n)#+(^{gDl{+1M^)V!AVn0B?!C0ca4 zwiXdFB1;|D4p8B&jG0Km!{OHT2M`1qW_%?5;ikM)z})GyHqmF7F%q8(lF4$HrChFP zATz7enR~8wW6@r}y-??E&p4~Dxy$$nK9%^|hl$lVi5146CCiOTN$UEla4nOvnMtn^yCc+j&jOeD^eOvJNMktA5KP zUVc&#h1aGQ^WfFUi9c}n+vn3hv*0c*s!ul-$2au{#0IN~bv4WmFZJD=zBpmnn&A+2 z5RSk8UP5i{6Ok{?g_oH0$Dj|6CzQl-i=Mg*a(e;uB_&9h%BTT~f2?ZV8RmVGesM$u z`xt(&S4k|=Z(}?1kwagjM;ECt`gyx=OMr7^cI;V7gX!z?Kw<3hZWXZ;LGQ9jQI6ZZW zD=%JaYD*{d5w1J&uIStCM^5i1Jl=!7vXpJyu}FXr1{$m@9_UU5qdsVlO8T~u@Rtpm!YO}Z-~9;dQpCL(7~39P#EV@ zlhO2pf_pxDZF7T3;@#G^OXRNFS*ud$^k$AO2lQos`26@*sN(KZI3ZhlQi(Flhv%Yh z!u_n4M4Mc=I0y$|XS>sfxd^<>Vw%(>9n+{)<3p{zuB4W>H!T%b$a*{I0OhhGL`qfj z8g}HQ`i-So&6{0qsYrpE(#j1uoOZ^x^N2yrgr8EA=9F1p{2}UFxL-%AqcV$w$%ljI z83kILAXdL=(ZGiy&b03qqr8&Ie-cJ&l9#83KEXF4ETzRjV7n{{?G8=cSUTf>6*ss0 zGSlud2SESFIK6=a59-S(&z< zYx9i6mgb9T5lwZHc2&F4$c$C8eTr|K`sdI-eE9Ss9Q9Efn1dc#TPP_ZxT~TB(MOn7 zu!YEfo;LOLD3NSya&Gn)LkdZeLJI!z%e^*NbL#>(gmEnl1EZ-UE)t#(|4ct+jwz>cci-DT!X(7<+Dr;#QwPu?9S*4dh+Y{?l3wlp7 z9ZjR0WgZjL+YiHpYM%dAzYD^PsAw??#u>AMV_-f>?mOva1Q7(3VSSuQ5&uzf)HOzw z&kh+*-`kR^^Ac93zD4<+v%uV>eBgj!VBId`tBv!_!dMdbmEZ+8Dc@Z8(<4qx9hqLgDVuGM)=X+}W~ZqsVs`)nb3P4#z& zu$@_%(nmlYLT391cLTh)Yt4w6;HdTgXcyTsAh|iDcYGNz4}j-8#9|mJDhcUOp7MaS zdYu8kOW{dy`qvHm?IRR%z0r!JEP#|?sdW@@3py+*Syx*rRP~2PqpfaWEfy2&ebTVU zGBQ}>&?HyZHr=?x>{A)~73tHGl+?*KajN|nhkC>EiKcTuwBB`A4Q(Di>5+WhTQ=zrtp z{#E{RKHv*C;eG;G2biVLHUf5}VK#_T&Q~mex2Aj#q^0{b?Wc$n7VC|oGU$RqExy69 zK_fmevtPP-DT0^^ap)YR!fYAvQ?y`jf5aLI4!iqm-bjF0k&#edtYL@Cm<*D_YqP%M zf*oWB`8Efd!RKsAi-D=2EEi+Y;KXi!-O-DB^FX?d`|rpP2@wXR3f8@~GxKRa4>8Gx zz08)|p)Q8NZc^!=)b=}WbeJ){gJY$cCmm0Gkb^aig*;$B_FkfT!+@xK9wP5%FQ**m zT1bJsrs@RomjD>QBtbzul+c0Ji8J^$4O4D^=Vr36)x^*(xg zo@wF!dvnCqXZyAo{;~YCKKOw*{yAUa_+YEy7mc*193JZ2XsMD{2Nm%TtlEQq@iX8v zs7yNBZuG&~G6?NndxyNXH;RhEIEw^=o&aop;@f=z%vtB74fM%K_l2umg!Hj@YXZVp z3NAL<_?sBmuX7w2kj(Wa4gEgz5CyP?Uf7#k4=_Pq+uyRF0|)ff*!|#6%@bRLT!m9{ z)cZm#6g8aE<_FOxR!b3T4vuzmr&@kkGY_E>_*0^;wc;dP$92hC5kbD3%7cZYSSH(FMc+hDTi1BoOW>a!U8NeEF>PnHK zD9bt+0^J^TJK3a;>R|)@>=Nl4$B}+~d(*-l65*>A`h%NB-TH}h)F1;oFjCT>zYG@~ z^)!5MW4M?H>`O5(aY4HS1dkL`$-^pKH{R0Tqb^wjxIFpCz!g;L%8hK=B*NC@wVoF4 zoStW=xyE;tuQq)ALpBir7H#w$aS3*U1I_%Ci5Qdf2)K0Ne9{!_DO1=8;?ZtvE4N@c zvELy8B(LUR#nArVl+P!N@uKn&Wh^65@T?-W0lW70C^PVE4M6Z(U3rP%v92CSB6A>} zs7?9qFd{-UppKR_ym>np!6Te=_Gbi1yNAe~aoTgAFxJz7H_YIL3^VYiOlT%bR27ui zHPE!`TD;Y$Ya0^JLSORpwlbDs$KJDQI}D(d>an{0?`MLBoA>UwCh|gC4JE_A>(=bc zhS09GN-4b?W2piS0DUh1d!(@lyQgG5<3g(!h)F?y z3!jOQ2jRPa>V61-c(Jmd=u{xcqaDIx3;CPM3~CCOZ-~ARet3k!wAz*BvsVSjn;yxG z5+D|MYZX~KH2No(PBg__QZACb?KzY@lziy5I1?8GlIpMyXT;y!D@hxAJVD#6^GX4* zy|SICYy^RNt!qSaw;%9{N+`itO*4DB;;kL-Lvn_zv z{BgtSB`V7f@4NTw(|8zZJu2rxqcnye)G);Ykd)J3kMqD2FLz5HzFK#im0t2(Gak3C z5C=#or(3t5o22eJGfy@IaM(hNi2QM<@`=H_rRSuzI}=E zGzsql>zj-NT|W*YKe>(CEc-RHV zkvn9&{h8D~Ar>c#o%aEMPI1grKXmmM?hTcBV_JOWp%=Ybjlo63iv(RbgwzhF81i6) zOz>9FX>y4J#6!}S4dp`IoxI^ox`sMld!O^v?W=2K!kypxL0!tmQ1=$AulM=VjW}x5 zr;#@{?y%CEBkk~a;Txgr=O6i41=0FjNZd9D0v|KPb2#Cu&Z;`o`R!A|5^DWstMRJv<0|rSeU7 zu9SZNoZnW@YWw?%v>b$9-IOek)AcCmF3}YNWYfR|~q~_m| zE!f-bG1nm5OQjVR$&IE^c~nl<>qBuFJ`v@? z6mREiQmWVf3QzZk+Ne_lkhv4_T`t|zx1}UBMvETkv`s$5eLYi1+73Jinl9@#4GShZ zX=M(>dqd40*UDa-=rAe9&zz9l$4Mm*iKg;Dh(y1vO!(t^FUHXj3NXP4z(yFYeN0o( z!NnD%AundRdNe|@yCSE)GMjTe=>Gb3=(fQU_tl7;h6hGcYx7!RUCK4omAj6`&}rdk z{ct=^GnkhRjt^v-nlJ+GLUIsGvb9L>|=k zcY7Y5d*TEyf;k*jx**@I)tj}14Z~5aOTd4s@5@w^c-_fuIyg$!0T>{JlbF%^(AfM; z68;(>v3>-^o}GRASprf@O)*7fTsEYZcyzw59sSgIwIiNY%^deU^1C>db9pbLci;DM z<0dO#X}%kZ5>pw7ramnuoS&OGi380^HD;TXmiehR_Yz@wv96f4vRY7yR~oYJVcngc zipkTaa*IZE>U?#cwCL=X7LA}*nM|dbz^k+P|DjY%KI#}er^P$X$o+%8I`sgIEX`it zqLir{_1WzS{(eY%MF8(J{9-rdZMY0F_MDbVwuL$AkPu?hO6Nh7o94H|xgmP~jYWb# znjOnV)e7HPO!Qr!pik=Tl44_WI7*dja#o)mzoDZH91$~2UvF4@0;&gSxA(I+Oq_AV zA}|b#YFS0^XS3xjLUkEhv0qMTkgTh$N$s9DP_{MN`JuSle;>jkyD~HA$_bFzpXY^P z#IQ{&0<~Yu2vqhxtak5ki9Mrt?njBf@o3YpYbBNbFKrC66TJ0R#y1w4P~%83DYcwn zAGGmKRzsJ*Cpl2)6KA{%nQ7*mN!r%$W{{NtRiV-ol=+x7VfR`pCINCvlW0mxffJGd z@kUBuc86ESIi>-eeQQjNFSS(q*lBH8PfKsO&sf%nncB^gak8fkw3oT>1%l^k%9o!X zJttx+(imihdA@(q??yB z`7xNk>eKz@ck@A=eO-$LvJ-ASj9d6Sip- zn$<6!88xVSC!<#{TyM9sG`zRaP)-gJA?EM)0-nG#CqGJSQA% z0T@T*2nU{p;DMMNcmRgt9F2&g^f>D0sjcmgoVWr_b+^s6CH&P6I((yrWCC-vfCm@- zI{r8MTSVs`&EQep1;KT|RRPjREM+ZCNecm>DgeCluzt87GhllIe7A3JY2%nq`JzZ> zVMdedAyUGdto23^?N&5VESX4z z$!`}v;v=_?Us&m>4nyJxg)DLg+JuR7>WrL=)jTA2{kKRwDN8!xK(V3U;w{t_m5j44bIFGKC>{#d z9V>)9S|kSgm+`&JwyMSDk({1CEKcvc^>dZZ|8;z7Q# z5hm6^nRx+Y0gSP^`1XS2RDQEZ6diOho!ew#=Fp?bAY&*r)-k@Mxkd^qoWiAE`*wR_ zkM^~Aj)NVt^|6*aQo9kyAN8dbC~2;eze+i=WAZy9ijY_hwp>#7@fs-Vy6j`_6?ASZ zx9=aI1Cr(-qEBTXJlS7xlCmuY!Fi%YrSWHBumu?QB?n;k8caKnU_>eX;gdZ4w3;ZC zI(6L){ddOQv+<(x-xU0W1N;#)vBmdaAGwT;SmLH(3nkz9qTizII>jwmKgZ#N7!qdi zgtpKoC=D?3WRa_oEnal>*E7}P3*YI6@D1U{Iz7WCLq=>7{ zDW)g^zU(CIHIlIiWwPFB&*5BzC1_Ibz7;)g@~L(Oq){Gg98>~7)KV%#iD5L)3K(L9 zhf?^ot)Lf)yHWY?DhU(c$bm?U$|oji6~Gers^befN!5H&s{Wadv8DT#s8 z^S{cUYaxjoZes~OG_PcTNt^lvA;yfRA_kbn7#;Rsj79}P=hoY>Gf6;>bVFo?b7pP> zjiuHHSwP}=QE5Mn^JPy4sA<^k~{oa$9gSCvq5)1 zH5_FrNqxeoJugCTOQd};PTQd)&!7uy_rJevzv;OI#7mSwcpF!y`*G;5f%P2oc z4vhRBseTyg#EePCH!_l{9YsT#VNRC-YU*;EcBGY!i-`cvyPPjw0ub7@8zt!#zk+9eMb3 zRU|p{(>|t|*qmKzvaH2OBk~m+F>ZUTXEbOGPPheQV{mw$>_o4_Mk)INJ#j{v!-Z!+y1q#w)B4}oGP)~frQ=vJ-!cXpd8R>MDZ zk%W2A-&gJl5XUm}eIgw*LC;1L;bi}>ksz`Oh=US%&gm&pmQEPqPh~FlDw8m_^UYJw zaX6a!5u$^bh=Ld*p~K)yxek=?*D$-cr$ut2be7j#=5N}7UJsNOTj1>us|mXE4ngy6 z-eyt6pNCy5U|6>RfP=@c!)&27&$I>vR!J*!D;YT@aE7Axpev(d)})T8>;SO=<`d|- zfbK{HYdB%X+Gh~acI;;kcBkkf`8t9au}OS<9iRnU3Ud1a)icKpb5@&f^kuKt&agDu?1 z=kE=lGJ-*99KEo2S|gD6U)wd66X4hthf!q~&|x?LA|%xpG5i4w1!-HS*|DF!)_-A`>S`+z+9ECo-Ij_{$FFP8T*BD3H zERpq`4nZum8}QBsJTK(3UVhzeNm-3yc`R5ZpjXkKSksJHf$Oy@+d@@B-S1GVq9SlF**wf;J4>w4DXNl-zReA}7$r4~p(1XMonf{*?^eS3UA{`*d&BV>Ad zUQv(3$@rVSdUt3fz+O5)x{3L4W9HyTpq@PbGLv)VoolNvJFyIO=xUdkckcVr7lJpF zEF^)?;WzhTETMRzlaacBRDe)6I?0^c*iYnt${;?Xh55MDuhQ>FV3e`0_*ESQH+49!L-BZY@e&Z+8sE4SkHQN~1*vo3QJ7Nx zP}oVFpd@5?@Sd1<+Fi386Tm7xsS>&K`1~k$_1~XEx;=)G2_tvzWlq^GGIYgn5597H zjcLlsJkTc)7!d{2W z+MMe}}_(}JWb7lz|$-*Y=+5p){#T%P5^oPPD z*Ue4ZUtRKOE6#dEs6eEwtuUn&DKVG`;yPPNbLcUqt z?|Pyn%$=X+OW3<&$w(;dY=7kNDkU3*oFk44X8%kN()N25M4MqBZ&faVa`P@!hfjl3 zER|-+W%b$;d7$v!l`zs@c8u?T1Y;8%|Hiu7`9LSVfFHIX3i8>7srfga6KBR-NUE?( z64Qn1uR?wFViw?b3nJJcHm9l8(DOu3{(pv#KoGxhzH*IGwWM3*|9^hAYU8%436CkC z40-^KWaGd6kX6#y&6J-4JzD@hgqbVniQ;-hk~Q>Vnwk77EOMDzU$ac=9&$X*u*Cs# z+XUS}6g|WRxKHTl(co+bHUYm@|DdZ3vJP8{SU|JbT zA1u9mY^b!+fAKr+xGG~H+o?FOv9}kk0E3C&4FP(Q^6W%oQxTr0Spve(Qy#llxy_Bl z!j$b+RGdB?W_hR3(1uBq3(Mn^l2wtJk`SOFhrCvIrf+*W@O75ddKQJ86N~U1vi#a1 z^K&u8Cu9wDJQv{$TtM5bVj{`EKba@qcTe_l+VHZNvd<5To?hnF){hZ`)JtOMo77_! zy*5XYwAIfI%i~aJ6mXf{-gNN2*V#8hVUEs?^ym@~em-JX?b1EpOIhwPm;I?#g>VsG z2Dms`icdF^uey#C^%My4f4MtFciodwZFzD;7#m!%-V)9Fj-er{>D>^3(7+!!Z6p1M zA~`8&Cr8@G)t{4BU`;h1T0%KVM|Wl&-E~zPZUg6S1J0>%31Nd;ahjlVKeL}bPQks! z3JSHYpKABnjuDEho>%^j0-629j+X_jZ)$53q=6Ck1oNx}emu@zHKgdp_gQ#wnENX&hJHz1{E~F^CnoY?!$#s5V>? zLl;z7_$CnKe1dY_ZyOIGN{I{SxX3(AQq}*cL?{@SFg}IC+17ePxbGc&) z`2iP^vEuV!v`SA}N1@B(9Pbps|JYV#P(GTX#&KtIa1mAH4DuS7JLn>T-T9D;bI}#L(^cVUkJ=8=t9GH_K2m=?wvo=8 zitDXAsCA8vQU#xk1{l#MuOtin|#F#a{eoFTLQ8RwGP(s<6$1(by`0 zx_>LtUsKuu2dqDvY7CmjR^7?W^t^Zcv5a=NIOCzxMI#z8pmA4-pRp>bdw_zvH%w0c zjeE8PKoj3TE3@ilJ==kc*Ix0obmbDprZ45V2QnWJ!1|O=905fm$UF@20L9QA8MhW%+3zK2 zMZI5W)2e$F2YJo!d|(4p11`&l?I5Ff$dan3RJ#3_dN(26m81WzRIDc6e~6h_Z==>Z zmjC?H>WdyujKO()YdRdbrym7?{}&?n_l7N~e3x4rA|&k@qdnbJW=kfttc}x29=KQG z`ox{WryBSvIxdlu13><)7={K$6SRdAvUwJY)&t#AjX8#xRr=_Y#Se6*1}-%>V1x86 z$b^s$VIjeT;&~g~G}FZ!-3m{wFt^6Mt%%%T6T%r22Hf*OvSU+t46}a61CPCozjWRI zF2z*JV0>Vda~~eJ$^JOldb2fAWKFLQXYVH!Iy+HaMR(NS-6fQ+ueqjv2G6A!eAu)3 zGK2$N+}JorW3Lt*Wh!oY6l-G4655079YWWiU%b(!@Nj=AGRXvLsWNie%=_R~EWn=wy!Wri#vOSIN@W1u$en!amM$qs95p{|y3i z;2}y2;Q1ASz5{+M8GWG z_^jalZH@NW-?8`%BYSeePZX@Txumi@fQ9C3F;qtO?DY1@E!N!~TJ=Eh6B}U#Lf^s} z&UG}<^8}LRrSZI2af^>EEHvB2`A!9{G{;M0hZtgaP;(_4NQUd~9ND9$=l@;hPE=I0 z!(9V+uJF8k(TVBf*lL%eN|hxGAtJqJKYnLQbWwCwcFmh$^JcicGu>mnt>PLiVV!$V zZO!}FNYx88xSMm#B+j+gmfo+dip?oUi+;qd?uFw literal 0 HcmV?d00001 diff --git a/STranslate/Images/translate.svg b/STranslate/Images/translate.svg new file mode 100644 index 0000000..aa4c158 --- /dev/null +++ b/STranslate/Images/translate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/STranslate/Images/translate_x128.png b/STranslate/Images/translate_x128.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f1b3ec10afab4ceceae54f3afe3f58701f81a4 GIT binary patch literal 7406 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 XhkS$!=^rtS4NPFDZ=zRu*(vgWS(s#M literal 0 HcmV?d00001 diff --git a/STranslate/Images/translate_x256.png b/STranslate/Images/translate_x256.png new file mode 100644 index 0000000000000000000000000000000000000000..77ef186ed5ec5ebccca8edf449429207bd7ac2a9 GIT binary patch literal 14314 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 + Width="400" + Icon="/Images/translate.ico"> diff --git a/STranslate/Model/BaiduModel.cs b/STranslate/Model/BaiduModel.cs new file mode 100644 index 0000000..6b6d310 --- /dev/null +++ b/STranslate/Model/BaiduModel.cs @@ -0,0 +1,37 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace STranslate.Model +{ + public class BaiduModel + { + public string Text { get; set; } + public string From { get; set; } + public string TO { get; set; } + public string AppId { get; set; } + public string Salt { get; set; } + public string Sign { get; set; } + } + public class BaiduResp + { + [JsonProperty("from")] + public string From { get; set; } + [JsonProperty("to")] + public string To { get; set; } + [JsonProperty("trans_result")] + public TransResult[] TransResult { get; set; } + } + + public class TransResult + { + + [JsonProperty("src")] + public string Src { get; set; } + [JsonProperty("dst")] + public string Dst { get; set; } + } +} diff --git a/STranslate/Model/LanguageEnum.cs b/STranslate/Model/LanguageEnum.cs index 3c6b912..d37c20c 100644 --- a/STranslate/Model/LanguageEnum.cs +++ b/STranslate/Model/LanguageEnum.cs @@ -8,6 +8,7 @@ namespace STranslate.Model { public enum LanguageEnum { + auto, //自动 DE, //德语 EN, //英语 ES, //西班牙语 diff --git a/STranslate/Properties/Resources.Designer.cs b/STranslate/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2c315c9 --- /dev/null +++ b/STranslate/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace STranslate.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("STranslate.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] translate { + get { + object obj = ResourceManager.GetObject("translate", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] translate_x128 { + get { + object obj = ResourceManager.GetObject("translate_x128", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] translate_x256 { + get { + object obj = ResourceManager.GetObject("translate_x256", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] translate_x64 { + get { + object obj = ResourceManager.GetObject("translate_x64", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// 查找 System.Byte[] 类型的本地化资源。 + /// + internal static byte[] translate1 { + get { + object obj = ResourceManager.GetObject("translate1", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/STranslate/Properties/Resources.resx b/STranslate/Properties/Resources.resx new file mode 100644 index 0000000..7147c61 --- /dev/null +++ b/STranslate/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\images\translate.svg;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\images\translate.ico;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\images\translate_x128.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\images\translate_x256.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\images\translate_x64.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/STranslate/STranslate.csproj b/STranslate/STranslate.csproj index 51be18d..993cf6a 100644 --- a/STranslate/STranslate.csproj +++ b/STranslate/STranslate.csproj @@ -4,10 +4,16 @@ WinExe net5.0-windows true + Images\translate.ico + + + + + @@ -16,4 +22,37 @@ + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + diff --git a/STranslate/Utils/HttpUtil.cs b/STranslate/Utils/HttpUtil.cs index 9c2a87b..183dd0a 100644 --- a/STranslate/Utils/HttpUtil.cs +++ b/STranslate/Utils/HttpUtil.cs @@ -31,5 +31,42 @@ namespace STranslate.Utils var resp = JsonConvert.DeserializeObject(responseString); return resp; } + + /// + /// 异步Post请求 + /// + /// + /// + /// + public static async Task PostAsync(string url, string req) + { + + using (var client = new HttpClient()) + { + var content = new StringContent(req, Encoding.UTF8, "application/json"); + + var respContent = await client.PostAsync(url, content); + + string respStr = await respContent.Content.ReadAsStringAsync(); +; + return respStr; + } + } + /// + /// 异步Get请求 + /// + /// + /// + public static async Task GetAsync(string urlpath) + { + using (var client = new HttpClient()) + { + var respContent = await client.GetAsync(urlpath); + + string respStr = await respContent.Content.ReadAsStringAsync(); + + return respStr; + } + } } } diff --git a/STranslate/Utils/TranslateUtil.cs b/STranslate/Utils/TranslateUtil.cs index 50b9408..93990ac 100644 --- a/STranslate/Utils/TranslateUtil.cs +++ b/STranslate/Utils/TranslateUtil.cs @@ -1,13 +1,18 @@ -using STranslate.Model; +using Newtonsoft.Json; +using STranslate.Model; using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Net; +using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; +using System.Web; namespace STranslate.Utils { - public static class TranslateUtil + public class TranslateUtil { private static readonly string _url = "http://172.17.209.47:8080/translate"; public static string Translate(string input, LanguageEnum source, LanguageEnum target) @@ -25,5 +30,77 @@ namespace STranslate.Utils } return string.Empty; } + + public static async Task TranslateDeepLAsync(string text, LanguageEnum target, LanguageEnum source = LanguageEnum.auto) + { + var req = new DeeplReq() + { + Text = text, + SourceLang = source.ToString(), + TargetLang = target.ToString(), + }; + var reqStr = JsonConvert.SerializeObject(req); + var respStr = await HttpUtil.PostAsync(_url, reqStr); + var resp = JsonConvert.DeserializeObject(respStr); + + if (resp.Code == 200) + { + return resp.Data; + } + return string.Empty; + } + + public static async Task TranslateBaiduAsync(string appID, string secretKey, string text, LanguageEnum target, LanguageEnum source = LanguageEnum.auto) + { + Random rd = new Random(); + string salt = rd.Next(100000).ToString(); + string sign = EncryptString(appID + text + salt + secretKey); + string url = "http://api.fanyi.baidu.com/api/trans/vip/translate?"; + url += "q=" + HttpUtility.UrlEncode(text); + url += "&from=" + source.ToString().ToLower(); + url += "&to=" + target.ToString().ToLower(); + url += "&appid=" + appID; + url += "&salt=" + salt; + url += "&sign=" + sign; +#if false + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "GET"; + request.ContentType = "text/html;charset=UTF-8"; + request.UserAgent = null; + request.Timeout = 6000; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream myResponseStream = response.GetResponseStream(); + StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); + string retString = myStreamReader.ReadToEnd(); + myStreamReader.Close(); + myResponseStream.Close(); +#endif + + var retString = await HttpUtil.GetAsync(url); + var resp = JsonConvert.DeserializeObject(retString); + if (resp.From != null) + { + return resp.TransResult[0]?.Dst; + } + return string.Empty; + } + // 计算MD5值 + public static string EncryptString(string str) + { + MD5 md5 = MD5.Create(); + // 将字符串转换成字节数组 + byte[] byteOld = Encoding.UTF8.GetBytes(str); + // 调用加密方法 + byte[] byteNew = md5.ComputeHash(byteOld); + // 将加密结果转换为字符串 + StringBuilder sb = new StringBuilder(); + foreach (byte b in byteNew) + { + // 将字节转换成16进制表示的字符串, + sb.Append(b.ToString("x2")); + } + // 返回加密的字符串 + return sb.ToString(); + } } } diff --git a/STranslate/ViewModel/MainVM.cs b/STranslate/ViewModel/MainVM.cs index 9722069..4fcb691 100644 --- a/STranslate/ViewModel/MainVM.cs +++ b/STranslate/ViewModel/MainVM.cs @@ -11,17 +11,34 @@ namespace STranslate.ViewModel { public class MainVM : BaseVM { + private string Text; public MainVM() { TranslateCmd = new RelayCommand((_) => { return string.IsNullOrEmpty(InputTxt) ? false : true; - }, (_) => + }, async (_) => { - OutputTxt = TranslateUtil.Translate(InputTxt, LanguageEnum.ZH, LanguageEnum.EN); + Text = InputTxt; + //清空输入框 InputTxt = ""; + OutputTxt = "翻译中..."; + + //获取结果 + //var translateResp = await TranslateUtil.TranslateDeepLAsync(InputTxt, LanguageEnum.EN, LanguageEnum.auto); + + var appId = ""; + var secretKey = ""; + var translateResp = await TranslateUtil.TranslateBaiduAsync(appId, secretKey, Text, LanguageEnum.EN, LanguageEnum.auto); + + if (translateResp == string.Empty) + { + OutputTxt = "翻译出错,请稍候再试..."; + return; + } + OutputTxt = translateResp; }); }