|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
}
|