2018年8月8日 星期三

Sita 的即時翻譯功能


外遊在即,雖然我的日語尚算靈光,但老人家少不免會一時忘記句子說法;為了解決這個問題,於是花了一小時教懂了私人助理 Sita 多國語言。在有需要時可以隨時請 Sita 幫忙。

相信大家能估到背後使用了 Google API;不過,不是收費或需要信用卡資料的 Google Cloud API。重點是免費。原來 Google 有一條免費的 API 可供隨時使用。不過,在開發時遇到小問題;當要由中文轉成英文,或日文轉換成英文時,結果卻是爛字。花了好一會時間,才發現需要加入 User Agent 去解決。以下是相關 PHP 程式碼:
//----------------------------------------------------------------------------------------
//  Translation
//  zh-tw: = Colon is at position 5
$count = substr_count($incomingMessage, ":");
if ($count >= 2)  {

 $array = explode(":", $incomingMessage);
 $count = count($array);
 if ($count >= 3)  {

  $sourceLanguage = $array[0];
  $targetLanguage = $array[1];

  $position = strlen($sourceLanguage)+1+strlen($targetLanguage)+1;
  $text = mb_substr($incomingMessage, $position);

  $url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=".$sourceLanguage."&tl=".$targetLanguage."&dt=t&q=".urlencode($text);

  $curl = curl_init();
  curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_TIMEOUT, 10);
  curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($curl);
  curl_close($curl);

  if ($response != null)  {

   $json = json_decode($response);
   $translatedText = $json[0][0][0];
   $_lineBot->sendText($replyToken, $translatedText." ($text)");
   break;

  }  else  {
   $_lineBot->sendText($replyToken, "Translation API return null...");
   break;
  }
 }  else  {
  $_lineBot->sendText($replyToken, "We need 3 translation parameters, but only $count now...");
  break;
 }
}

沒有留言: