• 调用百度翻译 API 来翻译网站信息


    之前说过jquery.i18n.js 来做网站的中英翻译,前提就得做一套中文内容,一套英文内容来解决,好处是中英翻译可以准确无误,本篇文章我们来看一下调用百度翻译的 API 来进行网站的翻译,但是翻译可能会有些许不如意,毕竟是机器翻译嘛。

    前期准备:md5.js 和 jquery.js

    百度翻译技术文档为我们做了不同语言的 demo:http://api.fanyi.baidu.com/api/trans/product/apidoc

    我们现在要做的是 js 的 demo。

    前提是我们得注册百度翻译账号,然后才能获取到 appid 和 key。

    我们下载下来的 js demo 如下:

     1 <!doctype html>
     2 <head>
     3     <meta charset="utf-8"/>
     4 </head>
     5 <body>
     6 <div>可打开浏览器控制台查看结果</div>
     7 <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
     8 <script src="./md5.js"></script>
     9 <script type="text/javascript">
    10 var appid = '2015063000000001';
    11 var key = '12345678';
    12 var salt = (new Date).getTime();
    13 var query = 'apple';
    14 // 多个query可以用
    连接  如 query='apple
    orange
    banana
    pear'
    15 var from = 'en';
    16 var to = 'zh';
    17 var str1 = appid + query + salt +key;
    18 var sign = MD5(str1);
    19 $.ajax({
    20     url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
    21     type: 'get',
    22     dataType: 'jsonp',
    23     data: {
    24         q: query,
    25         appid: appid,
    26         salt: salt,
    27         from: from,
    28         to: to,
    29         sign: sign
    30     },
    31     success: function (data) {
    32         console.log(data);
    33     } 
    34 });
    35 
    36 </script>
    37 </body>

    根据上面的 demo 我们可以发现需要 appid 和 key 两个必须字段,然后将根据 demo 将我们需要翻译的内容根据 ajax 传参就可以了。根据上面的 demo,我们做出一下方法:

     1 <!doctype html>
     2 <head>
     3     <meta charset="utf-8"/>
     4 </head>
     5 <body>
     6 <div class="main">
     7     <p>苹果</p>
     8 </div>
     9 <script src="./jquery-1.11.3.min.js"></script>
    10 <script src="./md5.js"></script>
    11 <script type="text/javascript">
    12 
    13     function GetBaidu(query, obj) {
    14         var q = query;
    15         var appid = "2015063000000001"; // 请自行获取
    16         var key = "12345678"; // 请自行获取
    17         var salt = (new Date).getTime();
    18         var str1 = appid + q + salt + key;
    19         var sign = MD5(str1);
    20         $.ajax({
    21             url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
    22             type: 'post',
    23             dataType: 'jsonp',
    24             data: {
    25                 q: q,
    26                 from: 'auto',
    27                 to: 'en',
    28                 appid: appid,
    29                 salt: salt,
    30                 sign: sign
    31             },
    32             success: function (msg) {
    33                 console.log(msg)
    34                 var html = "";
    35                 for (var i = 0; i < msg.trans_result.length; i++) {
    36                     console.log(msg.trans_result[i].dst);
    37                     html += msg.trans_result[i].dst
    38                 }
    39                 obj.html(html)
    40             }
    41         });
    42     }
    43 
    44     var text = $('.main p').html(function (i, text) {
    45         GetBaidu(text, $(this));
    46     });
    47 
    48 </script>
    49 </body>

    运行结果如下:

    我们发现确实给我们翻译出了 苹果,翻译结果还是很准确的,但是当我们再多加几个名称,如香蕉,橘子,如下:

    1 <div class="main">
    2     <p>苹果</p>
    3     <p>香蕉</p>
    4     <p>橘子</p>
    5 </div>

    我们再调用上面的 GetBaidu( ) 的方法,运行结果如下:

    我们发现返回一个 54003 的错误码,通过百度翻译的技术开发文档我们知道该错误码为:

    这就比较尴尬了,不能频率过高,那我们该如何是好呢?

    在我们下载的 demo 中有这样一句话:

    // 多个query可以用
    连接  如 query='apple
    orange
    banana
    pear'

    那我们可以将我们想翻译的内容拼成上述形式,值请求一次 ajax 请求就可以了,如下:

     1 <!doctype html>
     2 <head>
     3     <meta charset="utf-8"/>
     4 </head>
     5 <body>
     6 <div class="main">
     7     <button class="btn">点击切换</button>
     8     <p transfer-toggle="transfer">苹果</p>
     9     <p transfer-toggle="transfer">香蕉</p>
    10     <p transfer-toggle="transfer">橘子</p>
    11 </div>
    12 <script src="./jquery-1.11.3.min.js"></script>
    13 <script src="./md5.js"></script>
    14 <script type="text/javascript">
    15     
    16     function getArr() {
    17         var arrHtml = [];
    18         var arrThis = [];
    19         var text = $("[transfer-toggle='transfer']").text(function (i, text) {
    20             // console.log(i + text.replace("
    ", "").replace(/s+/g, ' '));
    21             arrHtml.push(text.replace("
    ", " ")); // 将我们想要翻译的内容存进数组里,并且将回车 
     匹配成空格,避免翻译时 
     与我们定义的冲突
    22             arrThis.push($(this))
    23         });
    24         return [arrHtml, arrThis]
    25     }
    26 
    27 
    28     function GetBaidu(from, to, query, obj) {
    29         console.log(query)
    30         var q = query.join("
    "); // 将内容数组用 
     拼接
    31         var appid = "2015063000000001"; // 请自行获取
    32         var key = "12345678"; // 请自行获取
    33         var salt = (new Date).getTime();
    34         var str1 = appid + q + salt + key;
    35         var sign = MD5(str1);
    36         $.ajax({
    37             url: 'http://api.fanyi.baidu.com/api/trans/vip/translate',
    38             type: 'post',
    39             dataType: 'jsonp',
    40             data: {
    41                 q: q,
    42                 from: from,
    43                 to: to,
    44                 appid: appid,
    45                 salt: salt,
    46                 sign: sign
    47             },
    48             success: function (msg) {
    49                 var html = "";
    50                 for (var i = 0; i < msg.trans_result.length; i++) {
    51                     console.log(msg.trans_result[i].dst);
    52                     html = msg.trans_result[i].dst;
    53                     obj[i].html(html)
    54                 }
    55             }
    56         });
    57     }
    58 
    59 
    60     var num = 0;
    61     $(".btn").on("click", function () {
    62         if (num === 0) {
    63             num = 1;
    64             GetBaidu("zh", "en", getArr()[0], getArr()[1]);
    65         } else {
    66             num = 0;
    67             GetBaidu("en", "zh", getArr()[0], getArr()[1]);
    68         }
    69     })
    70 
    71 
    72 </script>
    73 </body>

    最终结果如下:

    第一次点击

    第二次点击

     第三次点击

     

    第四次点击 

     

    我们发现经过几次点击最后的 橘子 已经被翻译成了橙色,翻译的不是很友好,但整体来说还是挺好的。

    需要注意的是我们点击按钮的频率不能太快了,否则灰分 50043 的错误码,因为我们的请求频率过快了。

  • 相关阅读:
    小程序支付
    小程序传参
    git
    学习过程遇到问题的解决方法
    进程创建注意事项:函数及对应包
    进程创建:函数及对应包
    mac解决eclipse 端口占用问题
    暴力
    doc2vec
    Java正则表达式的解释说明
  • 原文地址:https://www.cnblogs.com/weijiutao/p/11315726.html
Copyright © 2020-2023  润新知