1.背景最近有一个项目包含了中英翻译的功能需求,合理合理,应该支持。
2. 技术选择2.1. 实现自己编写翻译软件是不切实际的(我也做不到)。因此,您需要寻找现有的解决方案。
2.2. 目前市面上的翻译目前比较知名的翻译有百度翻译、谷歌翻译、有道翻译、金山翻译……都有相应的API支持。 这里附上相关官方地址信息:https://fanyi.baidu.com/home、https://translate.google.cn/、https://ai.youdao.com/keyfrom=old-openapi#/ 其中,百度翻译相关产品信息如下:
有道翻译产品相关信息如下。
2.3、最终选择综合考虑后,如果标准版免费的话,我们选择了百度翻译! PS:和阿里云翻译一样,其实和有道翻译类似,以资源包的形式提供业务支持。
3. 接入流程3.1. 百度翻译平台注册 接入百度翻译需要账号支持,但您可以按照常规账号注册方式按照操作说明注册账号。 选择服务。我选择了通用翻译的标准版本。 设置API服务信息。主要配置服务器IP(其他IP无法访问API)。 整体操作完成后,控制台如下所示:下面继续:
3.2. 接入说明:这里有一些官方文字说明(更多信息请访问官方平台:https://fanyi-api.baidu.com/doc/21) 通用翻译API支持通过HTTP提供多语言翻译服务。界面。只需调用通用翻译API,传入要翻译的内容,指定要翻译的源语言(支持自动源语言检测)以及目标语言类型即可得到相应的翻译结果。
通用翻译API HTTP 地址:http://api.fanyi.baidu.com/api/trans/vip/translate 通用翻译API HTTPS 地址:https://fanyi-api.baidu.com/api/trans/vip/translate 请求方式:可以使用GET 或POST方法,使用POST方法时,请指定Content-Type如下:application/x-www-form-urlencoded 字符编码:统一使用UTF-8编码格式查询长度大小:为保证翻译质量,请控制单个请求的长度不超过6000字节。 (约2000个汉字)
3.3. 核心代码部分翻译工具类
public class TransUtil { @Value('${baiduTranslate.appid}') private String appid; @Value('${baiduTranslate.securityKey}') private String securityKey; private static Final String TRANS_API_HOST='http://api.fanyi.baidu.com /api/trans/vip/translate'; public String getTransResult(String query, String from, String to) { Map params=buildParams(query, from, to); return HttpClientUtil.doGet(TRANS_API_HOST, params); } private Map buildParams (String query, String from, String to) { Map params=new HashMap(); params.put('q', query); params.put('from', from); params.put('to', to ); params.put('appid', appid); /* 随机数*/String Salt=String.valueOf(System.currentTimeMillis()); params.put('salt', Salt); /* 签名,加密前原文*/String src=appid + query + Salt + securityKey; params.put('sign', MD5.md5(src)); return params; }} Java MD5工具类
public class MD5 { /* 首先初始化一个字符数组来存储每个十六进制字符*/private static Final char[] hexDigits={ '0', '1', '2', '3', '4', '5 ', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };/** * 获取字符串的MD5值* * @param input 输入字符串* @return 输入字符串的MD5值* */public static String md5(String input) { if (input==null){ return null; } try { /* 获取MD5 转换器(如果要将SHA1 参数更改为“SHA1”) */MessageDigest messageDigest=MessageDigest.getInstance('MD5'); /* 将输入字符串转换为字节数组*/byte [] inputByteArray=new byte[0]; try { inputByteArray=input.getBytes('utf-8'); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } /* inputByteArray 是输入字符串这是从section array*/messageDigest.update(inputByteArray); /* 转换并返回结果(也是16个元素的字节数组)*/byte[] resultByteArray=messageDigest.digest(); /* 将字符数组转换为字符串并返回它*/return byteArrayToHex(resultByteArray); } catch (NoSuchAlgorithmException e) { return null; } } /** * 获取文件的MD5值* * @param file * @return */public static String md5(File file ) { try { if (!file.isFile()) { System.err.println('文件' + file.getAbsolutePath() + '不存在或不是文件'); return null; } FileInputStream in=new FileInputStream( file); String result=md5(in); in.close(); 返回结果; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; public static String md5(InputStream in) { try { MessageDigest messagedigest=MessageDigest.getInstance('MD5'); byte[]buffer=new byte[1024]; int read=0; while ((read=in.read( buffer) )) !=-1 ) { messagedigest.update(buffer, 0, read); } in.close(); String result=byteArrayToHex(messagedigest.digest()) ; 返回结果; } catch (NoSuchAlgorithmException e) { e. printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } private static String byteArrayToHex(byte[] byteArray) { /* new 一个字符数组,用于组成结果字符串(说明:一个字节是一个8位二进制,即两个十六进制字符(2的8次方)等于16的平方)) */char[] resultCharArray=new char[ byteArray.length * 2]; /* 遍历字节数组,通过位操作将其转换为字符(位操作效率很高)),转为字符数组*/int Index=0; for (byte b : byteArray) { resultCharArray[index++]=hexDigits[b 40xf]; resultCharArray[index++]=hexDigits[b0xf]; } /* 字符数组合并成字符串并返回*/return new String(resultCharArray); }}爪哇
3.4. 测试结果
4. P.S.其实通过搜索免费翻译平台API就可以找到很多资料,有的平台甚至支持免费试用。我尝试了谷歌翻译和有道翻译的免费API,发现一个致命的问题,如果调用太多,它们就会受到限制(这是正常的)。以谷歌翻译API为例,调用超过60次(间隔2秒)就受到限制,但有道翻译的API就比较好,调用超过170次(间隔2秒)也能使用。 2秒。我想过投票给有道或谷歌翻译,但仍然存在流量有限的风险,这非常不适合在线项目。那么这里有的朋友可能会说,目前版本的通用翻译标准的QPS只有1,可能不符合你的业务情况。因此,在这种情况下,您实际上可以多注册几个帐户并轮询并使用多个API。当然,如果你此时还不满意,你只能说,以你现在的业务量,不能再这样做了。无用的性!老实说,订阅高级版本(每月仍然可以获得200 万个字符)。