Nhìn vào kết quả trả về như ở trên, bạn hoàn toàn đã biết được khi dịch văn bản gửi lên dịch vụ
Google Translator những tham số gì. URL này ta sẽ note lại để lát viết code sử dụng.
Bạn click vào URL bên dưới panel của
FireBug sẽ ra các thông tin về Request / Response. Và cái mà chúng ta đang quan tâm đó chính là dữ liệu trả về:
Dữ liệu trả về là
JSON Data. Đây là thông tin cuối cùng mà chúng ta muốn biết để có thể thao tác lấy về dữ liệu trong Java Code. Bấy nhiêu là đủ, bây giờ có thể viết code xử lý được rồi.
Viết mã xử lý cho công cụ.
Với phần mã lệnh này tôi cố gắng thiết kế nó ở dạng POJO và đóng gói lại trong 1 class duy nhất để dễ sử dụng. Bạn có thể sử dụng API này cho Swing, Console, JSP / JSF, Web Service....Tôi sẽ không đi sâu vào phần giao diện vì nó tốn khá nhiều thời gian, vì vậy tôi tập trung xử lý phần core của công cụ này.
Tạo dự án mới và đặt tên là GoogleTranslator và import thư viện Json Simple vào dự án.
Mã xử lý: GoogleTranslator.java
package translator;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
*
* @author Code4LifeVn
*/
public class GoogleTranslator {
private final String googleTranslatorURL = "http://translate.google.com/translate_a/t?";
private LANGUAGE srcLang = LANGUAGE.AUTO;
private LANGUAGE destLang = LANGUAGE.VIETNAMESE;
private String userAgent = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16";
public String translate(String query) throws MalformedURLException, IOException, ParseException {
URL url = new URL(this.buildURLRequestWith(query));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.addRequestProperty("User-Agent", this.userAgent);
conn.setRequestMethod("GET");
conn.setConnectTimeout(30000);
conn.connect();
InputStream inputStream = conn.getInputStream();
BufferedReader bis = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String respContent = bis.readLine();
inputStream.close();
bis.close();
conn.disconnect();
StringBuilder contentBuilder = new StringBuilder();
JSONParser parser = new JSONParser();
JSONObject jsonData = (JSONObject) parser.parse(respContent);
JSONArray sentences = (JSONArray) jsonData.get("sentences");
for (Object sentence : sentences) {
contentBuilder.append(((JSONObject) sentence).get("trans").toString().trim());
}
return contentBuilder.toString().trim().replace(" .", ". ");
}
private String buildURLRequestWith(String query) {
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append(this.googleTranslatorURL);
urlBuilder.append("client=webapp");
urlBuilder.append("&sl=auto");
urlBuilder.append("&tl=").append(this.destLang);
urlBuilder.append("&hl=").append(this.srcLang);
urlBuilder.append("&sc=1");
String queryEncoded = "";
try {
queryEncoded = URLEncoder.encode(query, "UTF-8");
} catch (Exception e) {
}
urlBuilder.append("&q=").append(queryEncoded);
return urlBuilder.toString();
}
public LANGUAGE getSrcLang() {
return srcLang;
}
public void setSrcLang(LANGUAGE srcLang) {
this.srcLang = srcLang;
}
public LANGUAGE getDestLang() {
return destLang;
}
public void setDestLang(LANGUAGE destLang) {
this.destLang = destLang;
}
public String getUserAgent() {
return userAgent;
}
public void setUserAgent(String userAgent) {
this.userAgent = userAgent;
}
public static enum LANGUAGE {
ENGLISH("en"),
VIETNAMESE("vi"),
AUTO("auto");
private String lang = "";
private LANGUAGE(String lang) {
this.lang = lang;
}
@Override
public String toString() {
return this.lang;
}
}
}
Với mã trên, bạn phải chú ý gửi kèm
User-Agent khi request lên dịch vụ
Google Translator, nếu không dịch vụ sẽ reject request của bạn.
Dữ liệu trả về là JSON nên tôi sẽ dùng thư viện hỗ trợ thao tác với các
JSON Object để bóc tách dữ liệu và hiển thị chúng.
Với bài viết này, tôi demo sử dụng 2 ngôn ngữ
ENGLISH và
VIETNAMESE, bạn hoàn toàn có thể thêm các
Language Code vào trong
LANGUAGE enum.
Để chạy thử mã xử lý trên, tôi tạo 1 Class để test, ví dụ class
Demo:
import java.io.IOException;
import translator.GoogleTranslator;
import java.net.MalformedURLException;
import org.json.simple.parser.ParseException;
import static translator.GoogleTranslator.*;
/**
*
* @author Code4LifeVn
*/
public class Demo {
public static void main(String[] args) throws MalformedURLException, IOException, ParseException {
GoogleTranslator translator = new GoogleTranslator();
translator.setSrcLang(LANGUAGE.ENGLISH);
translator.setDestLang(LANGUAGE.VIETNAMESE);
String data = translator.translate("Hello Java");
System.out.println(data);
}
}
Kết quả trả về như sau: