第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > C#调用百度翻译API实现自己的简单翻译工具

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

时间:2024-09-20 08:25:20

相关推荐

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

前几天因为频繁使用翻译功能,但是市面上的翻译软件都臃肿了,对我我这个只需要翻译的人没有什么太大用处,反而有更多弊端。

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

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

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

这是我拖好的界面,是丑了点,我也没过多美化。

[img=http://img./upload/08/12/1407823957_816144.png][/img]

使用了两个ComboBox控件,是当前语言的选择和目标语言的选择。语言支持请看这里:[url=/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9[img=/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=/refresh/archive//07/14/2591503.html]ComboBox绑定Dictionary做为数据源[/url]

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

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

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

百度翻译API的接口Get请求方式:

[code=csharp]/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("/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

下载地址:/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。所以,返回的结果就是我们所需要的内容。

….

现在貌似就已经搞定了。

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

我写的源代码下载地址:链接: /s/1i3zdpTb 密码: pyo8

[[url=]银鸥的博客[/url]]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。