文章目录

  • 在线演示demo
  • 1、准备服务器
  • 2、创建项目
  • 导入用到的Maven依赖
  • 3、调用API,需要使用到一部分工具类附上
  • 1、MD5编码(由于调用百度翻译的部分参数需要使用MD5加密)
  • 2、Sha256编码(由于调用有道翻译的部分参数需要使用Sha256加密)
  • 3、获取时间戳(精确到秒)(有道翻译接口需要用到)
  • 4、 最后一个HttpUtil,发送请求api的相应工具类,请前往我的另一个博文获取
  • 4、使用百度提供的Api翻译接口
  • 百度翻译api接口的版本
  • 调百度翻译api接口
  • 参数对象代码(附注释)
  • 开始调用百度翻译接口
  • 接口编写
  • 使用postman测试接口如图,结果正确!!
  • 5、有道翻译API接口的调用。
  • 注册登录并开通翻译服务
  • 同百度翻译,根据需要的参数,我们创建一个参数对象进行封装方便调用接口
  • 参数对象实体类
  • 编写有道翻译工具类
  • 调用工具类执行结果
  • 响应数据如下
  • 大功告成!!如有疑问,欢迎大家评论交流:heart::heart:


在线演示demo

配合百度翻译接口,编写的前端并发布的网站


1、准备服务器

首先,我们需要一个云服务器,将我们的网站发布到云服务器供大家使用

如果没有,我们可以运行在自己的电脑,这样只能保证在局域网的用户才能访问你的网站

2、创建项目

导入用到的Maven依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.13.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

3、调用API,需要使用到一部分工具类附上

1、MD5编码(由于调用百度翻译的部分参数需要使用MD5加密)

package com.xjt.demo1.Utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
	private final static String[] hexDigits = {
		"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"
	};
	
	private static String byteArrayToHexString(byte[] b)
	{
		StringBuffer resultSb = new StringBuffer();
		for (int i=0;i<b.length;i++)
		{
			resultSb.append(byteToHexString(b[i]));
		}
		return resultSb.toString();
	}

	private static Object byteToHexString(byte b) 
	{
		int n=b;
		if (n<0)
			n = 256 + n;
		int d1 = n/16;
		int d2 = n%16;
		
		return hexDigits[d1] + hexDigits[d2];
	}
	/**
	 * 加密方法
	 * @param origin 原始字符
	 * @return  加密后字符内容
	 */
	public static String compile(String origin)
	{
		String resultString = null;
		
		MessageDigest md;
		try 
		{
			resultString = new String(origin);
			md = MessageDigest.getInstance("MD5");
			resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
		} 
		catch (NoSuchAlgorithmException e) 
		{
			e.printStackTrace();
		}
		return resultString;
	}
}

2、Sha256编码(由于调用有道翻译的部分参数需要使用Sha256加密)

package com.xjt.demo1.Utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @author xu
 * @Description
 * @createTime 2021年04月16日 14:46:00
 */
public class Sha256Util {

    /**
     * 生成加密字段
     */
    public static String getDigest(String string) {
        if (string == null) {
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        byte[] btInput = string.getBytes();
        try {
            MessageDigest mdInst = MessageDigest.getInstance("SHA-256");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

}

3、获取时间戳(精确到秒)(有道翻译接口需要用到)

package com.xjt.demo1.Utils;

import java.util.Date;

/**
 * @author xu
 * @Description
 * @createTime 2021年04月16日 14:47:00
 */
public class DataUtil {

    public static int getSecondTimestamp(Date date){
        if (null == date) {
            return 0;
        }
        String timestamp = String.valueOf(date.getTime());
        int length = timestamp.length();
        if (length > 3) {
            return Integer.valueOf(timestamp.substring(0,length-3));
        } else {
            return 0;
        }
    }
}

4、 最后一个HttpUtil,发送请求api的相应工具类,请前往我的另一个博文获取

4、使用百度提供的Api翻译接口

百度翻译api接口的版本

前往开发平台注册登录,并且认证开通通用翻译api(免费)

对用三个版本

  • 标准版(最基本的翻译功能) 免费使用、访问量有限制
  • 高级版(需要个人认证) 访问量速度提高,每月可以免费翻译200万字符(我使用的)
  • 尊享版(需要企业认证) 增加语音播报,并包含词典术语(有条件的可以使用)

springboot项目中繁体简体转换的依赖包_java

调百度翻译api接口

通过官网了解发现,调用百度翻译的api地址与需要的参数介绍

springboot项目中繁体简体转换的依赖包_java_02

我们将需要的参数封装成一个对象。更方便我们调用接口使用

参数对象代码(附注释)

package com.xjt.demo1.enity;


/**
 * @author xu
 * @Description
 * @createTime 2021年04月15日 14:40:00
 */

public class BaiduTranslate {

    String q;           //需要翻译的内容
    String from;            //需要翻译的语种,	可设置为 auto,自动识别
    String to;              //翻译目标语种,	不可设置为 auto
    String appid;           //你在百度翻译注册的appid
    String salt;            //随机数,可通过UUID生成
    String sign;                //签名,	appid+q+salt+密钥 的MD5值

    public String getQ() {
        return q;
    }

    public void setQ(String q) {
        this.q = q;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public String getSign() {
        return sign;
    }

    public void setSign(String sign) {
        this.sign = sign;
    }

    public BaiduTranslate(String q, String from, String to, String appid, String salt, String sign) {
        this.q = q;
        this.from = from;
        this.to = to;
        this.appid = appid;
        this.salt = salt;
        this.sign = sign;
    }

    public BaiduTranslate() {
    }


    @Override
    public String toString(){			//重写toString方法,生成需要的参数
        return "q="+q+"&from="+from+"&to="+to+"&appid="+appid+"&salt="+salt+"&sign="+sign;
    }


}

开始调用百度翻译接口

由于我们翻译目标的语种不能设为auto,我们可以通过要翻译的内容进行正则判断,只要包含字母空格,我们就知道需要是英译汉

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

    private static final String FROM="auto";
    private static final String TO="en";
    private static final String TO2="zh";
    private static final String APPID="你在百度翻译注册后的appid";
    private static final String ACCESSTOKEN="对应的密钥";

    
    @Test
    public void test() throws UnsupportedEncodingException {
        String keyWord="你好";
        BaiduTranslate baiduTranslate=null;
        String salt = UUID.randomUUID().toString();
        String sign=APPID+keyWord+salt+ACCESSTOKEN;
        if (keyWord.matches("[a-z ,,.。A-Z]+")){                 //如果翻译的内容包含字母和空格,就可以确定用户需要英译汉
            baiduTranslate = new BaiduTranslate(URLEncoder.encode(keyWord,"utf-8"), FROM, TO2, APPID, salt, MD5.compile(sign));
        }else {     //否则汉译英
            baiduTranslate = new BaiduTranslate(URLEncoder.encode(keyWord,"utf-8"), FROM, TO, APPID, salt, MD5.compile(sign));
        }
        String s = HttpUtil.sendGet(URl, baiduTranslate.toString());
        System.out.println(s);
    }

执行结果如图!

springboot项目中繁体简体转换的依赖包_有道翻译_03


如图所示,从返回的json格式的数据中可以看到,我们需要的翻译的内容是键为trans_result的数组,数组中可能包含多个对象。

每个对象有键为dst的,就是我们需要的翻译结果。

我们编写一个方法。获取数组索引为0的,在从对象中获取dst的翻译值并返回

/**
     * 将字符串转map再获取value值返回
     * @param result
     */
    public static String StringToMapValue(String result){
        Map<String,Object> map = JSON.parseObject(result, Map.class);
        List<Map<String,String>> resul = (List<Map<String, String>>) map.get("trans_result");
        String dst = resul.get(0).get("dst");
        return dst;
    }

完成以上,我们就可以给keyword不同的值就可以翻译我们需要的内容

接口编写

我们接受参数需要翻译的内容。

@ResponseBody
    @GetMapping("/get")
    public String translateToEn(String keyWord) throws UnsupportedEncodingException {
        BaiduTranslate baiduTranslate=null;
        String salt = UUID.randomUUID().toString();
        String sign=APPID+keyWord+salt+ACCESSTOKEN;
        if (keyWord.matches("[a-z ,,.。A-Z]+")){             //如果翻译的内容包含字母和空格,就可以确定用户需要英译汉
            baiduTranslate = new BaiduTranslate(URLEncoder.encode(keyWord,"utf-8"), FROM, TO2, APPID, salt, MD5.compile(sign));
        }else {     //否则汉译英
            baiduTranslate = new BaiduTranslate(URLEncoder.encode(keyWord,"utf-8"), FROM, TO, APPID, salt, MD5.compile(sign));
        }
        String s = HttpUtil.sendGet(URl, baiduTranslate.toString());
        return StringToMapValue(s);
//        return "index";
    }

现在我们只要调用这个接口,传递需要翻译的内容。就可以返回翻译接口。

使用postman测试接口如图,结果正确!!

springboot项目中繁体简体转换的依赖包_百度翻译_04


百度翻译接口联调完成!!!

5、有道翻译API接口的调用。

注册登录并开通翻译服务

  1. 同样注册并登录有道翻译开放平台(新用户会赠送100元体验金)
  2. 开通翻译业务,同时我们需要选中语音合成(翻译结果包含语音播报,开通绑定语音合成才能生效)

完成以上,我们也可以得到appid与相应的密钥

同百度翻译,根据需要的参数,我们创建一个参数对象进行封装方便调用接口

springboot项目中繁体简体转换的依赖包_百度翻译_05

参数对象实体类

package com.xjt.demo1.enity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author xu
 * @Description
 * @createTime 2021年04月16日 14:33:00
 */
@Data
@NoArgsConstructor
public class YouDaoTranslate {
    String q;
    String from;
    String to;
    String appKey;
    String salt;
    String sign;
    final String signType="v3";
    String curtime;
    final String ext="mp3";
    String voice;
    String vocabId;

    public YouDaoTranslate(String q,String from,String to,String appKey,String salt,String sign,String curtime,String voice,String vocabId){		//有vocabId的构造
        this.q=q;
        this.from=from;
        this.to=to;
        this.appKey=appKey;
        this.salt=salt;
        this.sign=sign;
        this.curtime=curtime;
        this.voice=voice;
        this.vocabId=vocabId;
    }

    public YouDaoTranslate(String q,String from,String to,String appKey,String salt,String sign,String curtime,String voice){		//无vocabId的构造
        this.q=q;
        this.from=from;
        this.to=to;
        this.appKey=appKey;
        this.salt=salt;
        this.sign=sign;
        this.curtime=curtime;
        this.voice=voice;
    }

    @Override
    public String toString(){			//由于vocabId可能为空,重写toString方法,分情况输出
        if (vocabId==null){
            return "q="+q+"&" +
                    "from="+from+"&" +
                    "to="+to+"&" +
                    "appKey="+appKey+"&" +
                    "salt="+salt+"&" +
                    "sign="+sign+"&" +
                    "signType="+signType+"&" +
                    "curtime="+curtime+"&" +
                    "ext="+ext+"&" +
                    "voice="+voice;
        }else {
            return "q="+q+"&" +
                    "from="+from+"&" +
                    "to="+to+"&" +
                    "appKey="+appKey+"&" +
                    "salt="+salt+"&" +
                    "sign="+sign+"&" +
                    "signType="+signType+"&" +
                    "curtime="+curtime+"&" +
                    "ext="+ext+"&" +
                    "voice="+voice+"&" +
                    "vocabId="+vocabId;
        }

    }
}

编写有道翻译工具类

package com.xjt.demo1.Utils;

import com.xjt.demo1.enity.YouDaoTranslate;

import java.io.IOException;
import java.util.Date;
import java.util.UUID;

/**
 * @author xu
 * @Description
 * @createTime 2021年04月16日 15:16:00
 */
public class YoudaoTranslateUtil {

    private final static String APPKEY="你注册的appid";
    private static final String FROM="auto";
    private static final String TO="auto";
    private static final String ACCESSTOKEN="对应的密钥";
    private static final String URL="https://openapi.youdao.com/api";

    public static String Translate(String keyword) throws IOException {
        String s = UUID.randomUUID().toString();
        int secondTimestamp = DataUtil.getSecondTimestamp(new Date());
        String sign = Sha256Util.getDigest(APPKEY + keyword + s + secondTimestamp + ACCESSTOKEN);
        YouDaoTranslate youDaoTranslate = new YouDaoTranslate(keyword,FROM,TO,APPKEY,s,sign,secondTimestamp+"","0");
        String s1 = HttpUtil.sendGetRequest(URL+"?"+youDaoTranslate.toString());
        System.out.println(s1);
        return s1;
    }
}

调用工具类执行结果

springboot项目中繁体简体转换的依赖包_spring_06

响应数据如下

{
    "tSpeakUrl":"http://openapi.youdao.com/ttsapi?q=Hello+World&langType=en&sign=B717DFAFC1F497975080A71B9575C6BB&salt=1618818552870&voice=0&format=mp3&appKey=49f34d73d933c8fd&ttsVoiceStrict=false",
    "web":[
        {
            "value":[
                "hello world"
            ],
            "key":"你好世界"
        },
        {
            "value":[
                "hello world press and key"
            ],
            "key":"你好世界新闻和密钥"
        },
        {
            "value":[
                "hello world press and key"
            ],
            "key":"你好世界新闻和关键"
        }
    ],
    "requestId":"988638ee-5142-4491-9306-0ff237c7eeff",
    "query":"你好世界",
    "translation":[
        "Hello World"
    ],
    "errorCode":"0",
    "dict":{
        "url":"yddict://m.youdao.com/dict?le=eng&q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C"
    },
    "webdict":{
        "url":"http://mobile.youdao.com/dict?le=eng&q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C"
    },
    "l":"zh-CHS2en",
    "isWord":false,
    "speakUrl":"http://openapi.youdao.com/ttsapi?q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C&langType=zh-CHS&sign=91ED2256FAAEE45B8264072962F44995&salt=1618818552870&voice=0&format=mp3&appKey=49f34d73d933c8fd&ttsVoiceStrict=false"
}

返回结果对用官网所示。

springboot项目中繁体简体转换的依赖包_spring_07

剩下的,我们只需要从结果中获取我们需要的数据,并返回前端显示。