项目因为要用到即是的多语言,网上找了不少的翻译API,包括有道,google翻译,阿里云等。因为之前有接触过腾讯的语音,就直接用的腾讯系列的机器翻译。
机器翻译包括文本,语音,图像翻译,现阶段只用到文本,所以只接入文本部分。
腾讯云机器翻译入口:https://cloud.tencent.com/product/tmt
本身cocos是有XMLHttpRequest.setRequestHeader() 可以直接发送http get和post请求,具体代码如下:
https://cvm.tencentcloudapi.com/
Authorization: TC3-HMAC-SHA256 Credential=AKIDEXAMPLE/2018-05-30/cvm/tc3_request, SignedHeaders=content-type;host, Signature=582c400e06b5924a6f2b5d7d672d79c15b13162d9279b0855cfba6789a8edb4c
Content-Type: application/json
Host: cvm.tencentcloudapi.com
X-TC-Action: DescribeInstances
X-TC-Version: 2017-03-12
X-TC-Timestamp: 1527672334
X-TC-Region: ap-guangzhou
{"Offset":0,"Limit":10}
测试一下不知道是不是腾讯后台参数和密钥获取不对还是怎样,用XMLHttpRequest不能返回正常的翻译结果,有成功的朋友麻烦留言分享,thx。
只能自己手动接入平台SDK。首先想不用分平台接入腾讯的机器翻译,可以用php在web服务端接入翻译SDK,这样在每次翻译会有一条http消息交互,效率不是太高,最后确定尝试接入java端翻译的SDK。
java sdk api:https://github.com/TencentCloud/tencentcloud-sdk-java
原来想着java端直接接入在android stuido里面就可以直接用了。后来发现java端sdk并不能直接在安卓平台上直接使用。在编译的过程中还会有个jar缺失报错,这个在腾讯云翻译的sdk里面没有的,得从网上下载,jar名:javax.xml.bind.jar。不过这个jar到最后还是没用上,因为jar里面的DatatypeConverter安卓平台没有。
最后能够编译通过了,但有运行进错误。返回的翻译结果也是不成功,如下图:
clipboard.png
查看报错,发现DatatypeConverter这个类在android平台并没有,是java se才有的。想在android上使用得直接找相应替代方法。
总共有两个文件包含DatatypeConverter的调用,修改代码如下
//最后一个才是正确的,前面注释的代码查测试过程用的代码
com\tencentcloudapi\common\AbstractClient.java
//String signature = DatatypeConverter.printHexBinary(Sign.hmac256(secretSigning, stringToSign)).toLowerCase();
//String signature = Base64.encodeToString(Sign.hmac256(secretSigning, stringToSign), Base64.URL_SAFE).toLowerCase();
//String signature = byte2HexStr(Sign.hmac256(secretSigning, stringToSign)).toLowerCase();
String signature =new String(org.apache.commons.codec.binary.Hex.encodeHex(Sign.hmac256(secretSigning, stringToSign))).toLowerCase();
//最后一个才是正确的,前面注释的代码查测试过程用的代码
com\tencentcloudapi\common\Sign.java
//return DatatypeConverter.printHexBinary(d).toLowerCase();
//return Base64.encodeToString(d, Base64.URL_SAFE).toLowerCase();
return new String(org.apache.commons.codec.binary.Hex.encodeHex(d)).toLowerCase();
/**
* bytes转换成十六进制字符串
* @param byte[] b byte数组
* @return String 每个Byte值之间空格分隔
*/
public static String byte2HexStr(byte[] b)
{
String stmp="";
StringBuilder sb = new StringBuilder("");
for (int n=0;n<b.length;n++)
{
stmp = Integer.toHexString(b[n] & 0xFF);
sb.append((stmp.length()==1)? "0"+stmp : stmp);
sb.append(" ");
}
return sb.toString().toUpperCase().trim();
}
这样修改替换完之后,将翻译源设成auto,再把java端的代码复制到android studio里面就能正常翻译了。
在改的过程还会出现另外一个错,表示解出来的密钥不对,腾讯云机器翻译sdk直接返回了校验错误:
clipboard1.png
总结:
1 想要不分平台还是直接接入php的sdk会好一些,这样只要调用一个get或者post就可以直接翻译
2 语音翻译的功能在腾讯的GVoice里面也有集成的,感觉比这个好用,就我个人的应用场合来说,GVoice会更适合一些。
网友评论