之前為了將系統的多語化,其中一個議題就是要產生各種語系的訊息資源檔。繁簡中文的對譯,只要透過 Word 就行了,要是英日語,就得人工作業。靈機一動,想說何不借助既有的翻譯服務,為 resource 檔提供預設的簡中、英、日翻譯。
就這樣,找到了一些應用 Google Translate API 的討論。試用了之後,多少都有語系編碼的問題。我最後實作了一個版本,可以在輸入正體中文時,正常產出簡中、英、日語系的翻譯。
一開始我是採用 C# 語言測試,程式碼如下:
public static string TranslateText(string fromLang, string toLang, string msg) { string target = "http://www.google.com/translate_t?ie=UTF-8&oe=UTF-8&text={2}&langpair={0}|{1}"; string url = String.Format(target, fromLang, toLang, msg); WebClient webClient = new WebClient(); webClient.Encoding = System.Text.Encoding.UTF8; string result = webClient.DownloadString(url); string sign = "<div id=result_box dir=\"ltr\">"; result = result.Substring(result.IndexOf(sign) + sign.Length); result = result.Substring(0, result.IndexOf("</div")); return result.Replace("<br>", "\n");; }
後來又做了一個 Java 的版本,程式碼如下:
public static String translateText(String fromLang, String toLang, String msg) throws IOException{ String target = "http://www.google.com/translate_t?ie=UTF-8&oe=UTF-8&langpair=%s|%s&text=%s"; String url = String.format(target, fromLang, toLang, URLEncoder.encode(msg, "utf-8")); String result = getUrlContent(url); String sign = "<div id=result_box dir=\"ltr\">"; result = result.substring(result.indexOf(sign) + sign.length()); result = result.substring(0, result.indexOf("</div")); return result.replaceAll("<br>", "\n"); } public static String getUrlContent(String url) throws IOException { URL u = new URL(url); HttpURLConnection conn = (HttpURLConnection)u.openConnection(); conn.setRequestProperty("User-agent","Mozilla/4.0"); conn.setRequestProperty("Content-Language","UTF-8" ); conn.connect(); return slurp(conn.getInputStream()); } public static String slurp (InputStream in) throws IOException { StringBuffer out = new StringBuffer(); byte[] b = new byte[4096]; for (int n; (n = in.read(b)) != -1;) { out.append(new String(b, 0, n, "UTF-8")); } return out.toString(); }
測試程式長得像這樣:
public static void main(String []argv) throws IOException{ System.out.println(GoogleTranslate.translateText("zh-TW", "zh-CN", "書不同文、車不同軌、世界不大同!")); System.out.println(GoogleTranslate.translateText("zh-TW", "en", "書不同文、車不同軌、世界不大同!")); System.out.println(GoogleTranslate.translateText("zh-TW", "ja", "書不同文、車不同軌、世界不大同!")); }
稍微說明一下我的測試心得。
首先,就是使用 Google Translate 時,最好是明確指定你所用的輸入編碼及輸出編碼,即上面 URL 連結中的 ie=UTF-8&oe=UTF-8。若不明確指定,Google 可是會依據你的輸入語言,而決定輸出編碼。例如,你輸入的語言是 "zh-CN",它預設會採用 gb2312 編碼回應。這會造成處理上的困擾。
其次,由於 .NET 與 Java 平台內建皆採用 UTF-8 編碼,因此在我們指定輸入編碼及輸出編碼時,當然是優先考量 UTF-8。
最後,如果你用 Eclipse 做測試,你可能會發現 console 裡有部分亂碼。請依照下圖,在 Run/Run Configurations... 裡面做設定,將 Console Encoding 指定為 UTF-8:
最後就能產出正常的顯示了。
1 則留言:
Google translate 真的是很好用, 只是中英還是依照字面翻, 不知何年何月才能依照原意轉換得償所望~
張貼留言