Android 百度翻译api接口调用
Boss说 我们的软件必须国际化 要五国翻译,额 如果拼音也算一种的话 那是六国
调用接口识别目标想翻译成哪一国语言
private void getTranslate(String L) {
new Thread(L) {
public void run() {
Message msg = new Message();
Bundle data = new Bundle();
String longuage = "";
if(tolonguage == "to_ch"){
longuage = HttpUtil.translate(add_sub.getText().toString(), HttpUtil.LONGUAGE_ZH);
}else if(tolonguage == "to_jp"){
longuage = HttpUtil.translate(add_sub.getText().toString(), HttpUtil.LONGUAGE_JP);
}else if(tolonguage == "to_en"){
longuage = HttpUtil.translate(add_sub.getText().toString(), HttpUtil.LONGUAGE_EN);
}else if(tolonguage == "to_kor"){
longuage = HttpUtil.translate(add_sub.getText().toString(), HttpUtil.LONGUAGE_KOR);
}else if(tolonguage == "to_fra"){
longuage = HttpUtil.translate(add_sub.getText().toString(), HttpUtil.LONGUAGE_FRA);
}
data.putString("value", longuage);
msg.setData(data);
// 发送一个消息 更新界面。
handler.sendMessage(msg);
};
}.start();
}
网络请求 返回json 并解析
/*
中文 zh
英语 en
日语 jp
法语 fra
韩语 kor
*/
public static String LONGUAGE_ZH = "zh";
public static String LONGUAGE_JP = "jp";
public static String LONGUAGE_EN = "en";
public static String LONGUAGE_KOR = "kor";
public static String LONGUAGE_FRA = "fra";
public static String translate(String source, String language) {
String api_url;
try {
api_url = new StringBuilder("http://openapi.baidu.com/public/2.0/bmt/translate?client_id=" + appkey + "&q=" + URLEncoder.encode(source, "utf-8") + "&from=auto&to=" + URLEncoder.encode(language, "utf-8")).toString();
String json = Url2Json(api_url);
LanguageMode translateMode = JSON.parseObject(json, LanguageMode.class);
if (translateMode != null && translateMode.getTrans_result() != null && translateMode.getTrans_result().size() == 1) {
return translateMode.getTrans_result().get(0).getDst();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
根据URL解析成字符串 并返回
public static String Url2Json(String http) {
URL url;
try {
url = new URL(http);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod("POST");
// ANR
conn.setConnectTimeout(4000);
int code = conn.getResponseCode();
if (code == 200) {
InputStream stream = conn.getInputStream();
String fromStream = StreamTools.readFromStream(stream);
return fromStream;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
输入流InputStream 返回字符串
/**
* @param is 输入流
* @return String 返回的字符串
* @throws IOException
*/
public static String readFromStream(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
is.close();
String result = URLDecoder.decode(baos.toString(), "UTF-8");
baos.close();
return result;
}
解析json 所用到的 model
package com.minitalk.model;
import java.io.Serializable;
import java.util.List;
public class LanguageMode implements Serializable{
String from,to;
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;
}
List<trans_result> trans_result;
public class trans_result implements Serializable{
String dst,src;
public String getDst() {
return dst;
}
public void setDst(String dst) {
this.dst = dst;
}
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
}
public List<trans_result> getTrans_result() {
return trans_result;
}
public void setTrans_result(List<trans_result> trans_result) {
this.trans_result = trans_result;
}
}
恩 具体的操作就是这样 主要涉及json解析 和网络访问 都挺简单 拼音目前可以同开源框架pinyin4j 实现 可是boss 说要带声调的 目前虽然有些进展但还不完善就不放出来了