C#调用百度翻译API实现自己的简单翻译工具

来源:互联网 发布:高一数学优化方案答案 编辑:程序博客网 时间:2024/05/24 04:15
前几天因为频繁使用翻译功能,但是市面上的翻译软件都臃肿了,对我我这个只需要翻译的人没有什么太大用处,反而有更多弊端。


于是在百度开发者中心申请了一个百度翻译的API。自己写了一个简单的翻译功能。仅供自己平时开发使用。


首先肯定是需要百度开发者中心去申请一个百度翻译的API的。申请方式具体可以去这里看:百度翻译API帮助中心,我就简单说一下:登录之后,新建一个工程。在控制面板里面有一个其它API的选项。进入选择百度翻译API。[[url=http://www.godlyl.com]银鸥的博客[/url]]提交申请之后,会显示正在提交申请之类的,不用管,拿到key就行了。


接下来打开visual studio,新建一个winform项目。可以先把窗体空间拖好。


这是我拖好的界面,是丑了点,我也没过多美化。
[img=http://img.bbs.csdn.net/upload/201408/12/1407823957_816144.png][/img]
使用了两个ComboBox控件,是当前语言的选择和目标语言的选择。语言支持请看这里:[url=http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9[img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/26.gif][/img]%A6%96%E9%A1%B5/%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91/%E7%BF%BB%E8%AF%91API]翻译API语言列表以及json[/url]


这是百度的官方文档。因为我们仔细发送语言的时侯,不是通过中文发送的,而是使用的对应的英文,例如:英语==en,简体中文==zh


这应该很容易理解。在C#里面可以通过键值对的集合来保存语言列表。
[code=csharp]
//能够选择的当前语言信息
            Dictionary<String, String> NowLanguage = new Dictionary<string, string>();
            NowLanguage.Add("auto", "自动检测");
            NowLanguage.Add("zh", "简体中文");
            NowLanguage.Add("en", "英语");
            NowLanguage.Add("de", "德语");
            NowLanguage.Add("jp", "日语");
            NowLanguage.Add("spa", "西班牙语");
            NowLanguage.Add("th", "泰语");
            NowLanguage.Add("ru", "俄罗斯语");
            NowLanguage.Add("yue", "粤语");
            NowLanguage.Add("kor", "韩语");
            NowLanguage.Add("fra", "法语");
            NowLanguage.Add("it", "意大利语");
            NowLanguage.Add("ara", "阿拉伯语");
            NowLanguage.Add("pt", "葡萄牙语");
            NowLanguage.Add("wyw", "文言文");
            //能够选择的目标语言信息
            TargetLanguage = new Dictionary<string, string>();
            TargetLanguage.Add("auto", "自动检测");
            TargetLanguage.Add("zh", "简体中文");
            TargetLanguage.Add("en", "英语");
            TargetLanguage.Add("de", "德语");
            TargetLanguage.Add("jp", "日语");
            TargetLanguage.Add("spa", "西班牙语");
            TargetLanguage.Add("th", "泰语");
            TargetLanguage.Add("ru", "俄罗斯语");
            TargetLanguage.Add("yue", "粤语");
            TargetLanguage.Add("kor", "韩语");
            TargetLanguage.Add("fra", "法语");
            TargetLanguage.Add("it", "意大利语");
            TargetLanguage.Add("ara", "阿拉伯语");
            TargetLanguage.Add("pt", "葡萄牙语");
            TargetLanguage.Add("wyw", "文言文");
[/code]


以上的内容是文档里面提供的,我直接使用了Dictionary集合储存了语言列表,然后再添加到了ComboBox(绑定数据源)。绑定数据源应该不需要再说吧。如果不会的可以看这里:[url=http://www.cnblogs.com/refresh/archive/2012/07/14/2591503.html]ComboBox绑定Dictionary做为数据源[/url]


使用ComboBox的事件:SelectedIndexChanged   来获取用户选择的语言,使用属性SelectedValue。


现在最主要通过API获取返回的翻译结果。百度官方的文档可以知道返回的结果是json代码。主要还是可以自己看看上面所发的第二个链接,也就是百度官方的使用文档。


我[[url=http://www.godlyl.com]银鸥的博客[/url]]现在就主要说C#如何发送请求获得JSON代码。


百度翻译API的接口Get请求方式:
[code=csharp]http://openapi.baidu.com/public/2.0/bmt/translate?client_id=你申请的Key&q=查询内容&from=源语言&to=目标语言[/code]


其中的from和to是两个ComboBox的选择值。


有了API接口之后,我们需要的就是发送请求了。可以使用实例化一个WebClient,然后使用方法:DownloadString方法。里面传入API的Get请求网址。


具体的实现方法:
[code=csharp]/// <summary>
        /// 调用百度API的翻译方法
        /// </summary>
        /// <param name="NowLanguage">当前语言</param>
        /// <param name="TargetLanguage">目标语言</param>
        /// <param name="Content">翻译内容</param>
        /// <returns>翻译的结果</returns>
        public String TranslationMain(String NowLanguage, String TargetLanguage,String Content)
        {
            String api = String.Format("http://openapi.baidu.com/public/2.0/bmt/translate?client_id=你的Key&q={0}&from={1}&to={2}", Content, NowLanguage, TargetLanguage);
            WebClient client = new WebClient();
            return client.DownloadString(api);
        }[/code]


这个方法返回一个JSON字符串。


格式如下:
[code=csharp]{"from":"en","to":"zh","trans_result":[{"src":"today","dst":"\u4eca\u5929"}]}[/code]


看到JSON之后,我们可以看到当前语言、目标语言、翻译内容、翻译结果。很明显,翻译结果是Unicode码。所以到后面还需要转换成UTF-8代码。这个先不急,先把trans_result里面的dst获取到,因为dst就是翻译结果。


仔细看JSON代码,可以看成是两层内容。所以要分两次解析。


解析JSON可以通过一个dll:Newtonsoft.Json


下载地址:http://pan.baidu.com/s/1pJ2UM8N   提取密码:24lp


包里面有很多dll,选择自己.net版本相对应的dll添加到项目中的引用即可。


现在就可以写一个解析JSON的方法了:


[code=csharp]/// <summary>
        ///解析Json代码
        /// </summary>
        /// <param name="jsonCode">JSON代码</param>
        /// <returns>返回翻译的字符串</returns>
        public String Analytical(String JsonCode)
        {
            JObject ResultParent = JObject.Parse(JsonCode);
            String trans_result = ResultParent["trans_result"].ToString();
            JObject ResultChild = JObject.Parse(trans_result.Replace("[", " ").Replace("]", " "));
            //翻译后的目标结果
            String target = ResultChild["dst"].ToString();
            return target;
        }[/code]


很明显,我上面就解析了两次,其中的trans_result为解析的第一次,也就是解析出来trans_result的内容。后面又将trans_result里面的方括号给转换成了空格,如果不转换,那么就不是一个正确的json代码,所以我使用空格将json大括号前后的方括号去掉。String ResultChild就是解析出来的src和dst内容。然后我再将dst取出来,放到target变量中,返回target。也就返回了翻译结果。在解析JSON中,其中的Unicode码也就直接被翻译成了UTF-8。所以,返回的结果就是我们所需要的内容。


….


现在貌似就已经搞定了。


这次写的教程写得比较乱,如果看得不懂的地方可以提出来。


我写的源代码下载地址:链接: http://pan.baidu.com/s/1i3zdpTb   密码: pyo8
[[url=http://www.godlyl.com]银鸥的博客[/url]]
0 0