百度翻譯開放平臺:點擊打開連接json
1. 定義類用於保存解析json獲得的結果api
public class Translation { public string Src { get; set; } public string Dst { get; set; } } public class TranslationResult { //錯誤碼,翻譯結果沒法正常返回 public string Error_code { get; set; } public string Error_msg { get; set; } public string From { get; set; } public string To { get; set; } public string Query { get; set; } //翻譯正確,返回的結果 //這裏是數組的緣由是百度翻譯支持多個單詞或多段文本的翻譯,在發送的字段q中用換行符(\n)分隔 public Translation[] Trans_result { get; set; } }
2. 定義枚舉保存一些經常使用語言數組
public enum Language { //百度翻譯API官網提供了多種語言,這裏只列了幾種 auto = 0, zh = 1, en = 2, cht = 3, }
3. 由於百度翻譯要求對發送數據中的一部分作md加密,因此這裏給出對字符串作md5加密的函數app
//對字符串作md5加密 private static string GetMD5WithString(string input) { if (input == null) { return null; } MD5 md5Hash = MD5.Create(); //將輸入字符串轉換爲字節數組並計算哈希數據 byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); //建立一個 Stringbuilder 來收集字節並建立字符串 StringBuilder sBuilder = new StringBuilder(); //循環遍歷哈希數據的每個字節並格式化爲十六進制字符串 for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } //返回十六進制字符串 return sBuilder.ToString(); }
4. 調用百度翻譯API的函數。記得去申請appiddom
/// <summary> /// 調用百度翻譯API進行翻譯 /// 詳情可參考http://api.fanyi.baidu.com/api/trans/product/apidoc /// </summary> /// <param name="q">待翻譯字符</param> /// <param name="from">源語言</param> /// <param name="to">目標語言</param> /// <returns></returns> private static TranslationResult GetTranslationFromBaiduFanyi(string q, Language from, Language to) { //能夠直接到百度翻譯API的官網申請 //必定要去申請,否則程序的翻譯功能不能使用 string appId = "0123456789"; string password = "0123456789"; string jsonResult = String.Empty; //源語言 string languageFrom = from.ToString().ToLower(); //目標語言 string languageTo = to.ToString().ToLower(); //隨機數 string randomNum = System.DateTime.Now.Millisecond.ToString(); //md5加密 string md5Sign = GetMD5WithString(appId + q + randomNum + password); //url string url = String.Format("http://api.fanyi.baidu.com/api/trans/vip/translate?q={0}&from={1}&to={2}&appid={3}&salt={4}&sign={5}", HttpUtility.UrlEncode(q, Encoding.UTF8), languageFrom, languageTo, appId, randomNum, md5Sign ); WebClient wc = new WebClient(); try { jsonResult = wc.DownloadString(url); } catch { jsonResult = string.Empty; } //解析json JavaScriptSerializer jss = new JavaScriptSerializer(); TranslationResult result = jss.Deserialize<TranslationResult>(jsonResult); return result; }
5. 對獲取的翻譯結果進行提取函數
/// <summary> /// 將中文翻譯爲英文 /// </summary> /// <param name="source"></param> /// <returns></returns> public static string translation(string source) { TranslationResult result = GetTranslationFromBaiduFanyi(source, Language.zh, Language.en); //判斷是否出錯 if(result.Error_code == null) { return result.Trans_result[0].Dst; } else { //檢查appid和密鑰是否正確 return "翻譯出錯,錯誤碼:" + result.Error_code + ",錯誤信息:" + result.Error_msg; } }