Como a API do Google Translate precisa ser cobrada, pensei em uma maneira de roubá-la.
1. Use HttpClient para enviar uma solicitação http://translate.google.com
2. Em seguida, use Jsoupparse html para extrair o texto traduzido.
Copie o código do código da seguinte forma:
/**
* Copyright (c) blackbear, Inc. Todos os direitos reservados.
*/
pacoteorg.bb.util.i18n;
importar java.io.InputStream;
importar java.net.URLEncoder;
importar java.text.MessageFormat;
importar org.apache.commons.io.IOUtils;
importar org.bb.util.net.http.HttpClientUtil;
importar org.jsoup.Jsoup;
importar org.jsoup.nodes.Document;
importar org.jsoup.nodes.Element;
/**
* TraduzirUtil
*
* <pré>Ferramenta de tradução
*PS: através do google tradutor
* </pré>
*
* @autor gato
* @versão 1.0, criada em 02/09/2011
*/
classe pública TranslateUtil {
String final estática protegida URL_TEMPLATE = "http://translate.google.com/?langpair={0}&text={1}";
final estático protegido String ID_RESULTBOX = "result_box";
final estático protegido String ENCODING = "UTF-8";
protected static final String AUTO = "auto"; // o Google autodetermina o sistema de origem
final estático protegido String TAIWAN = "zh-TW" // Chinês tradicional
final estático protegido String CHINA = "zh-CN" // meio
final estático protegido String INGLÊS = "en" // Inglês;
final estático protegido String JAPÃO = "ja" // dia
/**
* <pré>Google traduzido
*PS: Deixe que o Google determine o sistema de origem
* </pré>
*
* @param texto
* @param target_lang sistema de destino
* @retornar
* @throwsException
*/
public static String traduzir (string final texto, string final target_lang) lança exceção {
return traduzir(texto, AUTO, target_lang);
}
/**
* <pré>Traduzido pelo Google</pre>
*
* @param texto
* @param sistema de origem src_lang
* @param target_lang sistema de destino
* @retornar
* @throwsException
*/
public static String traduzir (texto da string final, string final src_lang, string final target_lang)
lança exceção {
InputStream é = nulo;
Documento doc = null;
Elemento elemento = nulo;
tentar {
// cria uma string de URL
String url = MessageFormat.format(URL_TEMPLATE,
URLEncoder.encode(src_lang + "|" + target_lang, ENCODING),
URLEncoder.encode(texto, ENCODING));
// conecta e baixa html
é = HttpClientUtil.downloadAsStream(url);
// analisa html por Jsoup
doc = Jsoup.parse(é, ENCODING, "");
ele = doc.getElementById(ID_RESULTBOX);
String resultado = ele.text();
resultado de retorno;
} finalmente {
IOUtils.closeQuietly(é);
é = nulo;
documento = nulo;
ele = nulo;
}
}
/**
* <pre>Tradução do Google: Chinês -> Chinês Tradicional</pre>
*
* @param texto
* @retornar
* @throwsException
*/
string estática pública cn2tw (texto da string final) lança exceção {
retornar traduzir(texto, CHINA, TAIWAN);
}
/**
* <pre>Tradução do Google: chinês tradicional-->中文</pre>
*
* @param texto
* @retornar
* @throwsException
*/
string estática pública tw2cn (texto final da string) lança exceção {
retornar traduzir(texto, TAIWAN, CHINA);
}
/**
* <pre>Tradução do Google: Inglês-->Chinês Tradicional</pre>
*
* @param texto
* @retornar
* @throwsException
*/
string estática pública en2tw (texto da string final) lança exceção {
return traduzir(texto, INGLÊS, TAIWAN);
}
/**
* <pre>Tradução do Google: chinês tradicional-->inglês</pre>
*
* @param texto
* @retornar
* @throwsException
*/
public static String tw2en(texto da String final) lança Exceção {
retornar traduzir(texto, TAIWAN, INGLÊS);
}
/**
* <pre>Tradução do Google: Japonês-->Chinês Tradicional</pre>
*
* @param texto
* @retornar
* @throwsException
*/
string estática pública jp2tw (texto da string final) lança exceção {
return traduzir(texto, JAPÃO, TAIWAN);
}
/**
* <pre>Tradução do Google: chinês tradicional-->japonês</pre>
*
* @param texto
* @retornar
* @throwsException
*/
string estática pública tw2jp (texto final da string) lança exceção {
return traduzir(texto, TAIWAN, JAPÃO);
}
}
HttpClientUtil.java
Copie o código do código da seguinte forma:
/**
* Copyright (c) Blackbear, Inc. Todos os direitos reservados.
*/
pacoteorg.bb.util.net.http;
importar java.io.BufferedInputStream;
importar java.io.File;
importar java.io.FileOutputStream;
importar java.io.InputStream;
importar java.util.Map;
importe org.apache.commons.io.IOUtils;
importar org.apache.commons.logging.Log;
importar org.apache.commons.logging.LogFactory;
importar org.apache.http.HttpEntity;
importar org.apache.http.HttpResponse;
importar org.apache.http.client.HttpClient;
importar org.apache.http.client.methods.HttpGet;
importar org.apache.http.client.methods.HttpPost;
importar org.apache.http.client.methods.HttpRequestBase;
importar org.apache.http.conn.scheme.PlainSocketFactory;
importar org.apache.http.conn.scheme.Scheme;
importar org.apache.http.conn.scheme.SchemeRegistry;
importar org.apache.http.conn.ssl.SSLSocketFactory;
importar org.apache.http.entity.BufferedHttpEntity;
importar org.apache.http.impl.client.DefaultHttpClient;
importar org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
importar org.apache.http.params.BasicHttpParams;
/**
*PostUtil.java
*
* @autor gato
* @versão 1.0, criada em 20/02/2008
*/
classe pública HttpClientUtil {
log de log estático protegido = LogFactory.getLog (HttpClientUtil.class);
protegido estático HttpClient httpclient = null;
estático protegido int maxTotal = 200;
protegido estático int maxPerRoute = 20;
String estática protegida userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, como Gecko) Chrome/16.0.912.77 Safari/535.7";
estático {
if (httpclient == null) {
// ~~~~~~~~~~~~~~~~~~~~
//cria httpclient
// ~~~~~~~~~~~~~~~~~~~~
SchemeRegistry reg = new SchemeRegistry();
reg.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
reg.register(novo esquema("https", 443, SSLSocketFactory.getSocketFactory()));
ThreadSafeClientConnManager cm = novo ThreadSafeClientConnManager(reg);
cm.setMaxTotal(maxTotal);
cm.setDefaultMaxPerRoute(maxPerRoute);
httpclient = novo DefaultHttpClient(cm);
}
}
/**
* <pre>Retorne ao Inputstream na próxima vez</pre>
*
*@paramurl
* @retornar
* @throwsException
*/
public static InputStream downloadAsStream (String url) lança exceção {
InputStream é = (InputStream) download(url, nulo, nulo, falso);
retorno é;
}
/**
* <pre>Salvar em arquivo após o download</pre>
*
*@paramurl
* @param saveFile
* @throwsException
*/
public static void download (String url, arquivo saveFile) lança exceção {
download(url, saveFile, null, false);
}
/**
* <pré>下</pré>
*
*@paramurl
* @param saveFile
* @param parâmetros
* @param isPost
* @return Se saveFile==null retorna para inputstream, caso contrário retorna para saveFile
* @throwsException
*/
download de objeto estático público (url de string final, saveFile de arquivo final, parâmetros Map<String, String> finais,
final booleano isPost) lança Exception {
booleano saveToFile = saveFile != null;
// verifica se o diretório existe ??
if (saveToFile && saveFile.getParentFile().exists() == falso) {
saveFile.getParentFile().mkdirs();
}
Exceção err = nulo;
Solicitação HttpRequestBase = null;
Resposta HttpResponse = null;
Entidade HttpEntity = null;
FileOutputStream fos = null;
Resultado do objeto = null;
tentar {
//cria solicitação
if (éPost) {
solicitação = novo HttpPost(url);
} outro {
solicitação = novo HttpGet(url);
}
//adiciona cabeçalho e parâmetros
addHeaderAndParams(solicitação, params);
//conectar
resposta = httpclient.execute(solicitação);
entidade = resposta.getEntity();
entidade = novo BufferedHttpEntity(entidade);
//obtém o resultado
if (saveToFile) {// salva no disco
fos = new FileOutputStream(saveFile);
IOUtils.copy(entity.getContent(),fos);
resultado = salvarArquivo;
} else { // teletransporta para inpustream
resultado = novo BufferedInputStream(entity.getContent());
}
} catch (Exceção e) {
errar = e;
} finalmente {
// fechar
IOUtils.closeQuietly(fos);
// claro
solicitação = nulo;
resposta = nulo;
entidade = nulo;
if (err! = nulo) {
lançar errar;
}
resultado de retorno;
}
}
protegido estático void addHeaderAndParams(solicitação HttpRequestBase final, parâmetros Map<String, String> finais) {
//adiciona cabeçalho padrão
request.addHeader("User-Agent", userAgent);
//adiciona parâmetros
if (parâmetros! = nulo) {
//mapa --> HttpParams
BasicHttpParams meusParams = new BasicHttpParams();
for (chave de string: params.keySet()) {
myParams.setParameter(chave, params.get(chave));
}
request.setParams(meusParams);
}
}
public static HttpClient getHttpclient() {
retornar httpclient;
}
public static void setHttpclient(HttpClient httpclient) {
HttpClientUtil.httpclient = httpclient;
}
public static int getMaxTotal() {
retornar maxTotal;
}
public static void setMaxTotal(int maxTotal) {
HttpClientUtil.maxTotal = maxTotal;
}
public static int getMaxPerRoute() {
retornar maxPerRoute;
}
public static void setMaxPerRoute(int maxPerRoute) {
HttpClientUtil.maxPerRoute = maxPerRoute;
}
string estática pública getUserAgent() {
retornar agente do usuário;
}
public static void setUserAgent(String userAgent) {
HttpClientUtil.userAgent = userAgent;
}
}