You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
7.2 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Newtonsoft.Json;
using POSV.Helper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace POSV.Proxy.Translation
{
public class TranslationProxy
{
private Tuple<bool, string, TranslateData> TranslationAPI(string values, string type)
{
try
{
string url = "http://fanyi.youdao.com/translate";
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("doctype", "json");
parameters.Add("type", type);
parameters.Add("i", values);
var _data = JsonConvert.DeserializeObject<TranslateData>(HttpGet(string.Format("http://fanyi.youdao.com/translate?doctype=json&type=ZH_CN2EN&i={0}", values).Trim()));
// var _data = JsonConvert.DeserializeObject<TranslateData>(HttpHelper.Get(url, parameters).Trim());
return new Tuple<bool, string, TranslateData>(true, "", _data);
}
catch (Exception ex)
{
return new Tuple<bool, string, TranslateData>(false, "", null);
}
}
/// <summary>
/// 发起一个HTTP请求以GET方式
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public string HttpGet(string url)
{
System.Net.WebRequest myWebRequest = System.Net.WebRequest.Create(url);
System.Net.WebResponse myWebResponse = myWebRequest.GetResponse();
System.IO.Stream ReceiveStream = myWebResponse.GetResponseStream();
string responseStr = "";
if (ReceiveStream != null)
{
System.IO.StreamReader reader = new System.IO.StreamReader(ReceiveStream, Encoding.UTF8);
responseStr = reader.ReadToEnd();
reader.Close();
}
myWebResponse.Close();
return responseStr;
}
public string ToTranslationString(string values, LanguageTyle languageTyle)
{
// 原文
string q = values;
// 源语言
string from = "zh";
// 目标语言
string to = "en";
// 改成您的APP ID
string appId = "20190902000331348";
Random rd = new Random();
string salt = rd.Next(100000).ToString();
// 改成您的密钥
string secretKey = "pTgm3KRWD2CkIqWthIIH";
string sign = EncryptString(appId + q + salt + secretKey);
string url = "http://api.fanyi.baidu.com/api/trans/vip/translate?";
url += "q=" + System.Web.HttpUtility.UrlEncode(q);
url += "&from=" + from;
url += "&to=" + to;
url += "&appid=" + appId;
url += "&salt=" + salt;
url += "&sign=" + sign;
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
request.UserAgent = null;
request.Timeout = 6000;
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.Stream myResponseStream = response.GetResponseStream();
System.IO.StreamReader myStreamReader = new System.IO.StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
var _data = JsonConvert.DeserializeObject<TranslateData>(retString);
return _data.TransResults[0].Dst;
//try
//{
// var _data = this.TranslationAPI(values, ToLanguageTyleString(languageTyle));
// if (!_data.Item1)
// {
// return values;
// }
// return _data.Item3.TranslateResult[0][0].Tgt;
//}
//catch (Exception)
//{
// return values;
//}
}
// 计算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 string ToLanguageTyleString(LanguageTyle languageTyle)
{
switch (languageTyle)
{
case LanguageTyle.English:
return "ZH_CN2EN";
case LanguageTyle.Japanese:
return "ZH_CN2JA";
default:
return "";
}
}
}
public class TranslateData
{
private string from;
private string to;
private List<TransResult> transResults;
private string type;
private string errorCode;
private string elapsedTime;
private List<List<TranslateResult>> translateResult;
[JsonProperty(PropertyName = "translateResult")]
public List<List<TranslateResult>> TranslateResult { get => translateResult; set => translateResult = value; }
[JsonProperty(PropertyName = "type")]
public string Type { get => type; set => type = value; }
[JsonProperty(PropertyName = "errorCode")]
public string ErrorCode { get => errorCode; set => errorCode = value; }
[JsonProperty(PropertyName = "elapsedTime")]
public string ElapsedTime { get => elapsedTime; set => elapsedTime = value; }
[JsonProperty(PropertyName = "trans_result")]
public List<TransResult> TransResults { get => transResults; set => transResults = value; }
[JsonProperty(PropertyName = "from")]
public string From { get => from; set => from = value; }
[JsonProperty(PropertyName = "to")]
public string To { get => to; set => to = value; }
}
public class TranslateResult
{
private string src;
private string tgt;
[JsonProperty(PropertyName = "src")]
public string Src { get => src; set => src = value; }
[JsonProperty(PropertyName = "tgt")]
public string Tgt { get => tgt; set => tgt = value; }
}
public class TransResult
{
private string src;
private string dst;
[JsonProperty(PropertyName = "src")]
public string Src { get => src; set => src = value; }
[JsonProperty(PropertyName = "dst")]
public string Dst { get => dst; set => dst = value; }
}
public enum LanguageTyle
{
/// <summary>
/// 英语
/// </summary>
English,
/// <summary>
/// 日语
/// </summary>
Japanese
}
}