在做一些網站的時候偶爾會遇到需要中英文翻譯的部分,也許是提供用戶在線翻譯的功能,也可能是把用戶輸入的一整段文字進行翻譯。小龍最近就遇到這么一個事兒,對接中外兩方用戶的溝通,為了對語言不那么順暢的用戶提供一點點幫助,在網站里嵌入了自動翻譯的功能,就簡化了用戶復制黏貼,再打開百度翻譯的步驟了。
小龍用的是有道提供的api,普通用戶就可以免費使用的。有道提供了網頁模塊的調用法和數據接口型的,網頁模塊的會比較簡單一些,在他們官網上把寫好的代碼復制進html就好,這邊簡單展開以下數據接口型的調用。
首先,我們需要一個key,做過百度api的朋友對這個應該是完全不陌生了。申請地址:http://ai.youdao.com/,注冊后就可以申請了。
有道提供的api很簡單:
http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻譯的文本
一個很標准的GET形式的數據傳輸,想看結果的朋友可以直接申請key以后,將這段鏈接復制進瀏覽器的地址欄,打開,就可以看到回傳的數據了,記得數據類型必須是utf8的,還要url轉碼哦。
小龍給一個PHP的DEMO給參考下:
function simple_translate($sentence){ $url_sentence = urlencode($sentence); $url = "http://fanyi.youdao.com/openapi.do?keyfrom=xinlei&key=759115437&type=data&doctype=json&version=1.1&q=".$url_sentence; $str_json = file_get_contents($url); if ($str_json){ $info = json_decode($str_json); $translation = $info->translation; $result_sentence = $translation[0]; }else{ $result_sentence = $sentence; } return $result_sentence; }
這個api有個小小的缺點,就是只能翻譯200個字符以內的段落,多了,他就OOXX了~~~~
我們的解決方法嘛,小龍就把段落切成了句子,然后一句句翻,翻完了拼起來唄。。。最原始的方法了,不過,很好使
給一個加強版的DEMO,會調用到上面的function
function translate($string){ if ($string){ $symbol_array = array(".", "?", "!", ")", "(", "[", "]","{", "}",":"); $i = 0; $result = ""; while($i < strlen($string)){ if (in_array($string[$i], $symbol_array)){ $s = $string[$i]; $string1 = substr($string, 0, $i); $string2 = substr($string, $i+1); $result = simple_translate($string1).$s.translate($string2); break; } $i++; } if (!$result){ $result = simple_translate($string); } return $result; }else{ return ""; } }
按照 . , ? ! : () [] {} 對於段落進行了切割,然后逐句翻譯,最后再整個拼起來。