LineBot多國語言翻譯

最新常看到許多人趁著寒暑假出國遊玩,尤其愈來愈多人選擇自由行,為什麼?現在的google翻譯實在太方便了,所以外語能力不好的人(就是我......)也開始敢在外國自己趴趴走。雖然google翻譯已經很方便了,但還是想要用LineBot設計一個適合自己使用的各國翻譯功能。今天實作的LineBot翻譯機,能讓您可以自由輸入各國語言,再轉換成您希望翻譯成的語言。

當然,在這個LineBot背後的翻譯機制,還是靠google來完成的,在這裡的翻譯是純文字翻譯,沒辦法在Line上轉成語音,所以是一個小缺憾,但我希望有空時,再改良這個LineBot,當我用Line和外國人聊天時,能即時利用LineBot把聊天內容轉換成對方語言傳送過去,那就更方便了。(其實最近真的有一些外國朋友和我聯絡......)

輸入?可以查看所有翻譯指令

也可以自動偵測輸入的文字是哪一國的,並加以翻譯

可將中文翻譯成各國文字

今天這支程式,需要用到的package有google-translate-api,所以請依照之前的文章,把這個package裝起來。

var linebot = require('linebot');
var express = require('express');
var translate = require('google-translate-api');

var bot = linebot({
  channelId: '請輸入LineBot的channelId',
  channelSecret: '請輸入LineBot的channelSecret',
  channelAccessToken: '請輸入LineBot的channelAccessToken'
});

var users=[];
//預設翻譯語言是英文
var defaultLangNum=2;

//以下各國語言陣列,可自行加減,語言代碼參照,請參考以下連結
//https://cloud.google.com/translate/docs/languages
var languages=[
    {language: '繁體中文', code: 'zh-tw'},
    {language: '簡體中文', code: 'zh-cn'},
    {language: '英文', code: 'en'},
    {language: '日文', code: 'ja'},
    {language: '韓文', code: 'ko'},
    {language: '泰文', code: 'th'},
    {language: '越南文', code: 'vi'},
    {language: '印尼文', code: 'id'},
    {language: '德文', code: 'de'},
    {language: '法文', code: 'fr'},
    {language: '俄文', code: 'ru'}
];

//取得第一次交談時的歡迎詞
var welcomeStr=getWelcomeStr();

bot.on('message', function(event) {
   var myReply='';
   var myId=event.source.userId;
   if (event.message.type === 'text') {
      if (users[myId]===undefined){
         users[myId]=[];
         users[myId].userId=myId;
         users[myId].defaultLangNum=defaultLangNum;
         myReply=welcomeStr+'目前的設定的翻譯語言為:'+languages[users[myId].defaultLangNum].language;
      }else if(event.message.text==='?'){
         myReply=welcomeStr+'目前的設定的翻譯語言為:'+languages[users[myId].defaultLangNum].language;
      }else if(!isNaN(event.message.text)){
         if (Number(event.message.text)<languages.length)
            setLanguage(myId,Number(event.message.text));
      }else{
         translate(event.message.text, {to: languages[users[myId].defaultLangNum].code}).then(res => {
         bot.push(myId,res.text);
         }).catch(err => {
            console.error(err);
         });
      }
      event.reply(myReply).then(function(data) {
         // success 
         console.log(myReply);
      }).catch(function(error){   
         // error 
         console.log('error');
      });
   }
});


//傳送訊息的函式
function sendMessage(eve,msg){
   eve.reply(msg).then(function(data) {
      // success 
      return true;
   }).catch(function(error) {
      // error 
      return false;
   });
}

//此為設定翻譯語言之函式
function setLanguage(userId,myLangNum){
   users[userId].defaultLangNum=myLangNum;
   bot.push(userId,'翻譯的語言已設定為:'+languages[myLangNum].language);
}

//此為處理語言設定字串之函式
function getWelcomeStr(){
   var myResult='您好,歡迎來到吉哥的即時翻譯LineBot,讓您用Line就可以翻譯各國語言。您可以輸入各國語言,轉換成您想要翻譯的語言,所以,請先設定您想要轉換成的語言,輸入數字即可設定完成:\n';
   for(var i=0;i<languages.length;i++){
      myResult+=(i+':'+languages[i].language+'\n');
   }
   myResult+='?:列出語言設定指令\n';
   return myResult;
}

const app = express();
const linebotParser = bot.parser();
app.post('/', linebotParser);

//因為 express 預設走 port 3000,而 heroku 上預設卻不是,要透過下列程式轉換
var server = app.listen(process.env.PORT || 8080, function() {
  var port = server.address().port;
  console.log("App now running on port", port);
});