调用百度翻译api实现中英文翻译

需要首先申请自己的开发者id和证书,我申请的是通用翻译,可以参考这个申请百度翻译

直接上代码

**
 * 百度翻译引擎java示例代码
 */
public class BaiduTranslateDemo{

    private static final String UTF8 = "utf-8";

    //申请者开发者id,实际使用时请修改成开发者自己的appid
    private static final String appId = "自己的appid";

    //申请成功后的证书token,实际使用时请修改成开发者自己的token
    private static final String token = "自己的token";

    private static final String url = "http://api.fanyi.baidu.com/api/trans/vip/translate";

    //随机数,用于生成md5值,开发者使用时请激活下边第四行代码
    private static final Random random = new Random();

    public String translate(String q, String from, String to) throws Exception{
        //用于md5加密
        int salt = random.nextInt(10000);

        // 对appId+源文+随机数+token计算md5值
        StringBuilder md5String = new StringBuilder();
        md5String.append(appId).append(q).append(salt).append(token);
        String md5 = DigestUtils.md5Hex(md5String.toString());

        //使用Post方式,组装参数
        HttpPost httpost = new HttpPost(url);
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("q", q));
        nvps.add(new BasicNameValuePair("from", from));
        nvps.add(new BasicNameValuePair("to", to));
        nvps.add(new BasicNameValuePair("appid", appId));
        nvps.add(new BasicNameValuePair("salt", String.valueOf(salt)));
        nvps.add(new BasicNameValuePair("sign", md5));
        httpost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));

        //创建httpclient链接,并执行
        CloseableHttpClient httpclient = HttpClients.createDefault();
        CloseableHttpResponse response = httpclient.execute(httpost);

        //对于返回实体进行解析
        HttpEntity entity = response.getEntity();
        InputStream returnStream = entity.getContent();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(returnStream, UTF8));
        StringBuilder result = new StringBuilder();
        String str = null;
        while ((str = reader.readLine()) != null) {
            result.append(str).append("\n");
        }
        System.out.println(result.toString());
        //转化为json对象,注:Json解析的jar包可选其它
        JSONObject resultJson = new JSONObject(result.toString());

        //开发者自行处理错误,本示例失败返回为null
        try {
            String error_code = resultJson.getString("error_code");
            if (error_code != null) {
                System.out.println("出错代码:" + error_code);
                System.out.println("出错信息:" + resultJson.getString("error_msg"));
                return null;
            }
        } catch (Exception e) {}

        //获取返回翻译结果
        JSONArray array = (JSONArray) resultJson.get("trans_result");
        JSONObject dst = (JSONObject) array.get(0);
        String text = dst.getString("dst");
        text = URLDecoder.decode(text, UTF8);

        return text;
    }

    /**
     * 实际抛出异常由开发者自己处理 中文翻译英文
     * @param q
     * @return
     * @throws Exception
     */
    public String translateZhToEn(String q) throws Exception{

        String result = null;
        try {
            result = translate(q, "zh", "en");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    /**
     * 实际抛出异常由开发者自己处理 英文翻译中文
     * @param q
     * @return
     * @throws Exception
     */
    public String translateEnToZh(String q) throws Exception{

        String result = null;
        try {
            result = this.translate(q, "en", "zh");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    public static void main(String[] args) {
        BaiduTranslateDemo baiduTranslateDemo = new BaiduTranslateDemo();
        String result="";
        long start=System.currentTimeMillis();
        try {
            result=baiduTranslateDemo.translateZhToEn("开放地摊经济,本来初衷是为了帮助一些小型个体户和店家。但是不料这几天网络的发酵,让摆地摊成为一种全民的狂欢,最近有网友在街上,看到很多上市公司的CEO,都出来摆地摊卖自家的产品了。");

        } catch (Exception e) {
            e.printStackTrace();
        }
        long end=System.currentTimeMillis();
        System.out.println("耗时:"+(end-start)/1000+"秒");
        System.out.println("翻译结果:"+result);
    }

}
package guojihua;

import java.io.*;

/**
 * 直接运行main方法即可输出翻译结果
 */
public class Main {

    public static void main(String[] args) throws Exception {
        BaiduTranslateDemo baiduTranslateDemo = new BaiduTranslateDemo();
        // translateZhToEn(baiduTranslateDemo);
        // translateEnToZh(baiduTranslateDemo);
        translateTxtInfo(baiduTranslateDemo);
    }

    /**
     * 中文翻译为英文
     */
    public static void translateZhToEn(BaiduTranslateDemo baiduTranslateDemo) {

        String source = "今天天气真不错";
        String result;
        try {
            result = baiduTranslateDemo.translateZhToEn(source);
            if (result == null) {
                System.out.println("翻译出错");
                return;
            }
            System.out.println(source + ":" + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 英文翻译为中文
     */
    public static void translateEnToZh(BaiduTranslateDemo baiduTranslateDemo) {

        String source = "it's a nice day today";
        String result;
        try {
            result = baiduTranslateDemo.translateEnToZh(source);
            if (result == null) {
                System.out.println("翻译出错。");
                return;
            }
            System.out.println(source + ":" + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取txt文件内容翻译为中文
     */
    public static void translateTxtInfo(BaiduTranslateDemo baiduTranslateDemo) {
        
        String sorceFilePath = "C:\\Users\\Administrator\\Desktop\\中文1.txt";
        //输出结果文件
        String resultFilePath = "C:\\Users\\Administrator\\Desktop\\英文.txt";
        // 构建指定文件
        File resultFile = new File(resultFilePath);
        FileReader fr = null;
        FileWriter fw = null;
        BufferedWriter bw = null;
        BufferedReader br = null;
        OutputStream out = null;
        String result;
        String line = "";
        try {
            // 根据文件创建文件的输入流
            fr = new FileReader(sorceFilePath);
            br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(sorceFilePath)),"UTF-8"));
            fw = new FileWriter(new File(resultFilePath));
            // 写入中文字符时会出现乱码
            bw = new BufferedWriter(new BufferedWriter(
                    new OutputStreamWriter(new FileOutputStream(new File(resultFilePath)), "UTF-8")));

            // 根据文件创建文件的输出流
            out = new FileOutputStream(resultFile);
            // 创建字节数组
            byte[] data = new byte[1024];
            StringBuffer resultBuffer=new StringBuffer();
            // 读取内容,放到字节数组里面
            while ((line = br.readLine()) != null) {
                String message = line.trim();
                System.out.println(message);
                // 英文翻译为中文
                if(message.trim()!=null&& !message.trim().equals("")) {
                    if(message.trim().indexOf("Answer")>-1) {
                        resultBuffer.append(message+"\t\n");
                    }else {
                        result = baiduTranslateDemo.translateZhToEn(message.trim());
                        System.out.println(result);
                        resultBuffer.append(message+"("+result+")"+"\t\n");
                    }

                }

            }
            // 把内容转换成字节数组
            byte[] resultdata = resultBuffer.toString().getBytes();
            // 向文件写入内容
            out.write(resultdata);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭输入流
                br.close();
                fr.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

}

普通版的话,读取速率很慢,多行翻译很大概率会报错,但是没有字数限制;

如果翻译文件的话,还是申请高级版的,一天200万字数限制,超过会收费。

通用翻译API接入文档

https://fanyi-api.baidu.com/doc/21

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 JavaScript 调用百度翻译 API,可以按照以下步骤进行操作: 1. 在百度开发者平台上创建一个账号,并创建一个翻译应用,获取 API 密钥。 2. 在你的 HTML 文件引入 jQuery 库,可以通过以下方式添加: ```html <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> ``` 3. 创建一个 JavaScript 函数来调用百度翻译 API。下面是一个简单的示例: ```javascript function translateText(text) { var apiKey = 'YOUR_API_KEY'; var apiUrl = 'https://fanyi-api.baidu.com/api/trans/vip/translate'; $.ajax({ url: apiUrl, type: 'get', dataType: 'jsonp', data: { q: text, appid: 'YOUR_APP_ID', salt: new Date().getTime(), from: 'auto', to: 'en', sign: md5('YOUR_APP_ID' + text + new Date().getTime() + 'YOUR_API_KEY') }, success: function(response) { var translatedText = response.trans_result[0].dst; console.log(translatedText); }, error: function(xhr, status, error) { console.log(error); } }); } ``` 请确保替换 `YOUR_API_KEY` 和 `YOUR_APP_ID` 为你在百度开发者平台上创建的应用的 API 密钥和应用ID。 4. 在你的页面调用这个函数,例如: ```javascript translateText('你好'); ``` 这将翻译 "你好" 成英文,并将结果打印到控制台。 请注意,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。同时,为了保护你的 API 密钥,你可能需要在后端进行翻译请求,而不是直接在前端调用 API
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值