WINFORM调用百度翻译API

来源:互联网 发布:疲劳检测算法 编辑:程序博客网 时间:2024/05/21 19:46

目前在做一个小东西,有一个国家代码表,里面的国家名称都是英文的,现在要把它翻译成中文,以方便使用。可是我又不想一个一个的去翻译,于是就看了一下百度翻译的API文档,写了个小程序去自动翻译。网上搜了一个教程,但有点过时,我自己改了一下,下面是目前最新的使用方法:

1、查看百度翻译API接入文档。

2、申请接入。

3、查看自己的APP ID和密钥。如下图所示:

4、编写代码

public string GetTransReslut(string BeforeStr)
        {
            WebClient client = new WebClient();  //引用System.Net
            string appid = "201707***********";//改成自己的APP ID
            string rand = DateTime.Now.ToString("yyyyMMddhhmmss"); //这个是随机数,不用改
            string key = "mC_9Pak************"; //改成自己的密钥
            string CmdStr = $"{appid}{BeforeStr}{rand}{key}";
            byte[] result = Encoding.UTF8.GetBytes(CmdStr);
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] output = md5.ComputeHash(result);
            string md5Str = BitConverter.ToString(output).Replace("-", "").ToLower();//转换成MD5,且一定要小写
            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}", UrlEncode(BeforeStr), tranClass.From, tranClass.To, appid, rand, md5Str);
            var buffer = client.DownloadData(url);
            string result2 = Encoding.UTF8.GetString(buffer);
            StringReader sr = new StringReader(result2);
            JsonTextReader jsonReader = new JsonTextReader(sr);  //引用Newtonsoft.Json 自带
            JsonSerializer serializer = new JsonSerializer();
            var r = serializer.Deserialize<TranClass>(jsonReader); //Json转换成结果类
            return r.Trans_result[0].dst;  //返回结果
        }
        public static string UrlEncode(string str)
        {
            StringBuilder sb = new StringBuilder();
            byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str); 
            for (int i = 0; i < byStr.Length; i++)
            {
                sb.Append(@"%" + Convert.ToString(byStr[i], 16));
            }
            return (sb.ToString());
        }

另外的两个类:

public class TranClass

    {
public string From { get; set; }
        public string To { get; set; }
        public List<Trans_result> Trans_result { get; set; }
 }
    public class Trans_result
    {
        public string src { get; set; }
        public string dst { get; set; }
    }

OK,到此结束,上面的代码应该都能看懂吧得意。另外补充一下:tranClass.From, tranClass.To这两个是怎么来的,我这里是定义的一个全局的TranClasstranClass =new TranClass();

然后给tranClass.From,tranClass.To赋值,tranClass.From="en",tranClass.To="zh"就表示是英译汉。更多的语言缩写可以查看百度翻译API文档。