QtQuick使用百度翻译api

百度翻译API

百度现在免费提供在线翻译工具,简单的申请tokenkey后就可以以get的方式取得翻译结果

可以先查看XMLHttpRequest对象的相关文档:via ,其实在QtQuick中使用XMLHttpRequest对象不支持同步请求。但在这种api型的http应答与请求中没什么影响。

在百度翻译的文档中说到,使用get的方式就可以获取对应语句的翻译

翻译API描述

  • 功能:将指定内容从指定源语言语种翻译为指定目标语言语种。
  • URL
    http://openapi.baidu.com/public/2.0/bmt/translate

查看下面的例子:

查询 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
 *[email protected]
 */

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使用。





你可能感兴趣的:(qml,百度翻译api,QtQuick)