【发布时间】:2017-11-10 13:22:03
【问题描述】:
我正在尝试在使用 Node.js Bot Builder SDK 开发的机器人中实现翻译功能。我找到了sample,这个翻译是这样完成的:
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,而且它不支持我的用户可以与机器人进行通信的语言(斯洛伐克语)。但是,机器人是多语言的,这意味着我也支持英语。如果我的用户使用英语(他或她设置了它并且此首选项存储在 session.preferredLocale 中),我正在做不需要的翻译。
如何在receive中间件中访问session,查看是否需要翻译?还有,在翻译之前我怎么能发送打字?有时可能需要更长的时间,因此机器人变得无响应。
请注意,我不能使用 event.textLocale,因为我计划将机器人发布到 messenger,并且它不会发布此信息。我也不想将语言环境识别器 API 用作另一种认知服务。
谢谢!
【问题讨论】:
-
我不确定您所说的 “我也不想使用区域设置识别器 API 作为另一个认知服务”是什么意思,但是还有另一个端点可以告诉您所使用的语言文字在:
http://api.microsofttranslator.com/v2/Http.svc/Detect?text -
这就是我所说的语言环境识别器。 (翻译器是 Azure 认知服务产品的一部分,包括 detrect aka 语言环境识别器),另一个调用将增加解决方案的运营成本。我只是想在会话中使用首选区域设置
-
@stuartd 请问你知道如何使用 session.preferredLocale 解决翻译问题
-
我没有看到任何方法可以做到这一点in the docs 但我过去使用的一个技巧是检查翻译过程中改变了多少单词并将其用作指标 - 所以"Ahoj svet" => "Hello world" 将被视为已翻译,因为这两个词都发生了变化..
标签: javascript node.js locale botframework translate