1.定义调用google翻译的工具类
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import com.elex.chatservice.model.ConfigManager;
//提供翻译的工具类
public class TranslateUtil {
//异步加载翻译,等待调用google翻译返回译文后再加载译文
public static void loadTranslate(final String text,final TranslateListener translateListener)
{
//定义处理消息的Handler
final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String translateMsg = data.getString("translateMsg");
String originalLang = data.getString("originalLang");
System.out.println("translateMsg:"+translateMsg+" originalLang:"+originalLang);
if(translateListener!=null)
{
translateListener.onTranslateFinish(translateMsg,originalLang);
}
}
};
//定义发送异步消息的线程
Runnable runnable = new Runnable(){
@Override
public void run() {
String ret= translate(text);
String translateMsg=getTranslateText(ret);
String originalLang=getOriginalLang(ret);
Message msg = new Message();
Bundle data = new Bundle();
data.putString("translateMsg",translateMsg);
data.putString("originalLang",originalLang);
msg.setData(data);
handler.sendMessage(msg);
}
};
new Thread(runnable).start();
}
// 将文本进行URL编码
private static String encodeText(String text){
String str=text;
try {
str = URLEncoder.encode(text,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}
//通过http协议调用google翻译接口获取翻译译文
public static String translate(String text) {
InputStream inputStream=null;
ByteArrayOutputStream output=new ByteArrayOutputStream();
BufferedInputStream bufferInputStream=null;
String engineUrl ="https://translate.google.com/translate_a/single?client=t&sl=auto&tl="+ConfigManager.getInstance().gameLang+"&dt=t&ie=UTF-8&oe=UTF-8&source=btn&q=";
String urlstr=engineUrl + encodeText(text);
URL url = null;
String res="";
HttpURLConnection connection = null;
try {
url = new URL(urlstr);
System.out.println(url);
connection = (HttpURLConnection)url.openConnection();
connection.connect();
inputStream = connection.getInputStream();
bufferInputStream = new BufferedInputStream(inputStream, 4096);
int i = -1;
byte buf[] = new byte[4 * 1024];
while ((i = bufferInputStream.read(buf)) != -1)
{
output.write(buf, 0, i);
}
res =new String(output.toByteArray(),"UTF-8");
inputStream.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(res);
return res;
}
//提取译文文本中的原文字段
public static String getOriginalLang(String text)
{
if(text.lastIndexOf(",,,,")<4|| text.lastIndexOf("\"]],,")<0 || text.lastIndexOf(",,[[\"")<0 || text.lastIndexOf("\"],,")<0 || text.lastIndexOf(",,[[\"")+5>text.lastIndexOf("\"],,"))
return "";
return text.substring(text.lastIndexOf(",,[[\"")+5, text.lastIndexOf("\"],,"));
}
//从返回的google翻译文本中提取译文
public static String getTranslateText(String text)
{
if(text.lastIndexOf(",,,,")<4)
return text;
String temp=text.substring(4, text.lastIndexOf(",,,,"));
System.out.println("temp:"+temp);
if(temp.lastIndexOf("\"]],,")<0)
return text;
temp=temp.substring(0, temp.lastIndexOf("\"]],,"));
System.out.println("test2:"+temp);
String replaceStr=TranslateUtil.class.getSimpleName()+System.currentTimeMillis();
System.out.println("replaceStr:"+replaceStr);
String temp2=temp.replace("\"],[\"",replaceStr);
System.out.println("temp2:"+temp2);
String[] testArr=temp2.split(replaceStr);
String result="";
for(int i=0;i
{
if(i
testArr[i]+="\"],[\"";
else
{
if(testArr[i].indexOf("\",\"")<0)
return text;
testArr[i]=testArr[i].substring(0, testArr[i].indexOf("\",\""));
}
testArr[i]=testArr[i].replace("\\\"", "\"");
System.out.println("testArr["+i+"]"+testArr[i]);
result+=testArr[i];
}
System.out.println("result:"+result);
return decodeUnicode(result).toString();
}
//将译文中的unicode码解析成原来的符号
public static StringBuffer decodeUnicode(final String dataStr) {
final StringBuffer buffer = new StringBuffer();
String tempStr = "";
String operStr = dataStr;
if (operStr != null && operStr.indexOf("\\u") == -1)
return buffer.append(operStr); //
if (operStr != null && !operStr.equals("") && !operStr.startsWith("\\u")) { //
tempStr = operStr.substring(0, operStr.indexOf("\\u")); //
operStr = operStr.substring(operStr.indexOf("\\u"), operStr.length());// operStr字符一定是以unicode编码字符打头的字符串
}
buffer.append(tempStr);
while (operStr != null && !operStr.equals("") && operStr.startsWith("\\u")) { // 循环处理,处理对象一定是以unicode编码字符打头的字符串
tempStr = operStr.substring(0, 6);
operStr = operStr.substring(6, operStr.length());
String charStr = "";
charStr = tempStr.substring(2, tempStr.length());
char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。
buffer.append(new Character(letter).toString());
if (operStr.indexOf("\\u") == -1) { //
buffer.append(operStr);
} else { // 处理operStr使其打头字符为unicode字符
tempStr = operStr.substring(0, operStr.indexOf("\\u"));
operStr = operStr.substring(operStr.indexOf("\\u"), operStr.length());
buffer.append(tempStr);
}
}
return buffer;
}
}
2.然后定义一个接口
public interface TranslateListener {
void onTranslateFinish(String translateMsg,String originalLang);
}
3.在需要调用google翻译的地方调用TranslateUtil.loadTranslate方法
TranslateUtil.loadTranslate(item.msg,new TranslateListener() {
@Override
public void onTranslateFinish(String translateMsg,String originalLang)
{
if(!originalLang.equals("")&&!translateMsg.equals(""))
{
textView.setText(translateMsg);
}
});