VSoft/Source/VSoft_Dll/Tools/Trans/FrmTrans.cs

139 lines
4.8 KiB
C#
Raw Normal View History

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace VSoft.Tools
{
public partial class FrmTrans : Skins.SKinForm
{
public FrmTrans()
{
InitializeComponent();
CbbLngFrom.SelectedIndex = 0;
CbbLngTo.SelectedIndex = 0;
}
private string Tran(string from_txt,string lng_from,string lng_to)
{
try
{
if (from_txt.Length == 0) { return ""; }
// 原文
string q = from_txt;
// 源语言
string from = lng_from;
// 目标语言
string to = lng_to;
// 改成您的APP ID
string appId = "20220508001207657";
Random rd = new Random();
string salt = rd.Next(100000).ToString();
// 改成您的密钥
string secretKey = "l6ngE7GjtdvRESJqQzDL";
2023-12-04 01:26:23 +00:00
RyWeb.QuickWeb web = new RyWeb.QuickWeb();
string sign = EncryptString(appId + q + salt + secretKey);
2023-12-04 01:26:23 +00:00
string post_data = "q=" + web.UrlEncode(q);
post_data += "&from=" + from;
post_data += "&to=" + to;
post_data += "&appid=" + appId;
post_data += "&salt=" + salt;
post_data += "&sign=" + sign;
var http= web.Post("http://api.fanyi.baidu.com/api/trans/vip/translate", post_data);
JObject jo = JObject.Parse(http.Html);
var trans_result = jo["trans_result"];
if (trans_result != null)
{
var jarr = (JArray)trans_result;
var text = "";
for (int i = 0; i < jarr.Count; i++)
{
if (text.Length > 0) { text += "\r\n"; }
if (jarr[i] != null)
{
var dst = jarr[i]["dst"];
if (dst != null) { text+= dst.ToString(); }
}
}
last_text = from_txt;
return text;
}
return "";
}
catch(Exception ex) { return "错误=>"+ex.Message; }
}
string last_text = "";
// 计算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();
}
private void Trans()
{
var lng_from = lng_convert(CbbLngFrom.Text);
var lng_to = lng_convert(CbbLngTo.Text);
string lng_convert(string lng_text)
{
if (lng_text == "自动") { return "auto"; }
else if (lng_text == "中文") { return "zh"; }
else if (lng_text == "英文") { return "en"; }
else if (lng_text == "日语") { return "jp"; }
else if (lng_text == "韩语") { return "kor"; }
else { return ""; }
}
var from_text = RichText.Text;
Thread th = new Thread(Start);
th.Start();
void Start()
{
var to_text= Tran(from_text, lng_from, lng_to);
this.Invoke(new Action(() =>
{
RichResult.Text = to_text;
}));
}
}
private void CbbFrom_SelectedIndexChanged(object sender, EventArgs e)
{
Trans();
}
private void CbbTo_SelectedIndexChanged(object sender, EventArgs e)
{
Trans();
}
private void RichText_TextChanged(object sender, EventArgs e)
{
Trans();
}
private void FrmTrans_Load(object sender, EventArgs e)
{
var screen = Screen.FromPoint(MousePosition).WorkingArea;
this.Location = new Point(screen.Left+ ((screen.Width-this.Width)/2),screen.Top+ ((screen.Height - this.Height) / 2));
}
}
}