百度翻译API
百度现在免费提供在线翻译工具,简单的申请tokenkey后就可以以get的方式取得翻译结果
可以先查看XMLHttpRequest对象的相关文档:via ,其实在QtQuick中使用XMLHttpRequest对象不支持同步请求。但在这种api型的http应答与请求中没什么影响。
在百度翻译的文档中说到,使用get的方式就可以获取对应语句的翻译
翻译API描述
- 功能:将指定内容从指定源语言语种翻译为指定目标语言语种。
- URL
查看下面的例子:
查询 today 是什么意思
就可以通过以下这个链接获取结果:
http://openapi.baidu.com/public/2.0/bmt/translate?client_id=YourApiKey&q=today&from=auto&to=auto
返回的结果如下:(是一个json)
{"from":"en","to":"zh","trans_result":[{"src":"today","dst":"\u4eca\u5929"}]}
好了废话不多说了,直接上代码:
BaiduTranslationApi.qml
/*
*by qyvlik
*qyvlik@qq.com
*/
import QtQuick 1.1
QtObject {
id:tr
property string apiKey // 开发者在百度开发者中心注册得到的授权API key
property string from :"auto"
property string to :"auto"
property string word // 待翻译内容 该字段必须为UTF-8编码,并且以GET方式调用API时,需要进行 urlencode 编码。
property variant translation // 翻译的内容
property int count:0; // 翻译内容的适配个数
function stratTranslate(w){
word = w;
tr.translater();
}
function translater(){
var translateUrl = new String("http://openapi.baidu.com/public/2.0/bmt/translate");
var doc = new XMLHttpRequest()
doc.onreadystatechange =
function() {
if (doc.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
console.log("HEADERS_RECEIVED");
}else if (doc.readyState == XMLHttpRequest.DONE) {
if(doc.status == 200){
translation = doc.responseText;
console.log("responseText:"+doc.responseText);
}else {
console.log("status:"+doc.status);
}
}
}
doc.open("GET", translateUrl+"?client_id="+apiKey+"&q="+word+"&from="+from+"&to="+to);
doc.send();
}
}
通过上述的stratTranslate() 函数,开始通过XMLHttpRequest进行get请求,但这个对象只能获取到原始的json字符串,如何去显示就看看下面的代码吧!
ListModel {
id:model
ListElement {
src: "src"
dst: "dst"
}
function getTranslation(result){
var obj = eval('(' + result + ')');
var temp = obj.trans_result;// 这是实际的翻译数据,是一个数组
var i;
for(i=0;i<temp.length; i++){
model.append({"src":temp[i].src,"dst":temp[i].dst});
}
}
}
这里实例化一个ListModel对象,接着,只要前面的BaiduTranslateApi对象成功get到数据,就可以通过当前ListModel实例的getTranslation函数,将BaiduTranslateApi的translation导入到ListModel中去,供接下来的ListView使用。