终于拿到了景优的offer,等入职后没什么问题的话,工作的事就暂时稳定了,今天(2018/6/8)把KizunaNana与图灵交流的地方进行了优化,添加了即时翻译,因为不知道怎么申请Google的API,所以用的是百度翻译的API,API的接入其实上次就完成了,但是因为转码和算法问题,导致无法翻译中文,今天终于把这个问题解决了,心情大好。下面记录关键代码:
这里是调用百度翻译取得Json返回值的
public static TranslationResult GetTranslationFromBaiduFanyi(string source, Language from = Language.Auto, Language to = Language.Auto)
string jsonResult = String.Empty;
string languageFrom = from.ToString().ToLower();
string languageTo = to.ToString().ToLower();
string randomNum = DateTime.Now.Millisecond.ToString();
string so = HttpUtility.UrlEncode(source,Encoding.UTF8);
byte[] sign = Encoding.UTF8.GetBytes(appid+source+randomNum+apppwd);
string md5Sign = GetMD5HashFromFile(sign);
string url = @"https://api.fanyi.baidu.com/api/trans/vip/translate?q=" + so + "&from=" + languageFrom + "&to=" +
languageTo + "&appid=" + appid + "&salt=" + randomNum + "&sign=" + md5Sign;
WebClient wc = new WebClient();
try
{
jsonResult = wc.DownloadString(url);
}
catch (Exception e)
{
jsonResult = string.Empty;
Console.WriteLine(e.Message);
}
JavaScriptSerializer jss = new JavaScriptSerializer();
TranslationResult ret = jss.Deserialize<TranslationResult>(jsonResult);
return ret;
这里是使用MD5按照百度翻译API帮助文档的要求对Appid等参数进行加密的
private static string GetMD5HashFromFile(byte[] dataBytes)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] output = md5.ComputeHash(dataBytes);
return BitConverter.ToString(output).Replace("-", "").ToLower();
}
一个枚举类型来枚举所有可翻译的语言
public enum Language
{
Auto = 0,
ZH = 1,
JP = 2,
EN = 3,
KOR = 4,
SPA = 5,
FRA = 6,
TH = 7,
ARA = 8,
RU = 9,
PT = 10,
YUE = 11,
WYW = 12,
DE = 13,
NL = 14,
IT = 15,
EL = 16
}
这里是将返回的Json解析并读取
private BaiduTranslate.TranslationResult result = new BaiduTranslate.TranslationResult();
result = BaiduTranslate.GetTranslationFromBaiduFanyi(reader.Value.ToString(), BaiduTranslate.Language.Auto, bLanguage);
string txtVal = null;
for (int i = 0; i < result.trans_result.Length; i++)
{
txtVal = result.trans_result[i].Dst;
}
result1 = null;
效果图
因为图灵默认我的语言是中文,所以发送外文过去会变成翻译,然后百度翻译API将Hello翻译为日语发送
图灵接收到后,默认是接收了一个外语,默认处理方式为翻译,所以就翻译了Hello回来
然后在回来的时候又接受到百度翻译API的处理,所以这句Hello发送出去后,会出现两句一样的话。