我正嘗試在Node.js Bot Builder SDK中開發的bot中實現翻譯功能。我發現sample其中該翻譯是這樣完成的:Bot Framework Node.js根據喜好的語言與Bing Translate API進行翻譯
bot.use({
receive: function (event, next) {
var token = tokenHandler.token();
if (token && token !== ""){ //not null or empty string
var urlencodedtext = urlencode(event.text); // convert foreign characters to utf8
var options = {
method: 'GET',
url: 'http://api.microsofttranslator.com/v2/Http.svc/Translate'+'?text=' + urlencodedtext + '&from=' + FROMLOCALE +'&to=' + TOLOCALE,
headers: {
'Authorization': 'Bearer ' + token
}
};
request(options, function (error, response, body){
//Check for error
if(error){
return console.log('Error:', error);
} else if(response.statusCode !== 200){
return console.log('Invalid Status Code Returned:', response.statusCode);
} else {
// Returns in xml format, no json option :(
parseString(body, function (err, result) {
console.log(result.string._);
event.text = result.string._;
next();
});
}
});
} else {
console.log("No token");
next();
}
});
我需要這樣做,因爲我需要利用LUIS,它不支持與我的用戶可以與機器人(斯洛伐克)溝通的語言。但是,bot是多語言的,這意味着我也支持英語。如果我的用戶使用英語(他或她設置了它,並且此首選項存儲在session.preferredLocale內),我正在進行不需要的翻譯。
如何在接收中間件中訪問會話,以便我可以檢查是否需要進行翻譯?另外,如何在翻譯之前發送「打字」?它有時可能需要更長的時間,所以殭屍程序變得無法響應。
請注意,我不能使用event.textLocale,因爲我打算髮布機器人到信使,它不會發布此信息。我也不想將Locale Recognizer API用作另一種認知服務。
謝謝!
我不知道你所說_「我也不想用語言環境識別API作爲另一個認知服務」 _的意思,但還有另一個端點,告訴您該語言的文本在:http://api.microsofttranslator.com/v2/Http.svc/Detect?text' – stuartd
這就是我所說的語言環境識別器。 (翻譯者是Azure認知服務產品的一部分,包括detrect aka語言環境識別器),另一個調用將增加解決方案的運營成本。我只想在會話中使用首選語言環境 –
@stuartd請問您知道關於如何使用session.preferredLocale解決翻譯的問題 –