asksuite-core
Version:
121 lines (106 loc) • 2.59 kB
JavaScript
const initializeTranslateObject = require('./translate-object');
const Translate = require('@google-cloud/translate');
const defaultAttributes = [
'response',
'registerData',
'revision',
'chatTreeId',
'question',
'dateEnd',
'dateInit',
'isLink',
'holiday',
'trackId',
'dialog',
'intent',
'tags',
'goToDialog',
'type',
'search',
'image',
'registerData',
'id',
'subject',
'to',
'default',
'hsystemKey',
'statusRevision',
'dialogNewRequest',
'compareSuites',
'url',
'otherParams',
'cupom',
'typeBookingEngine',
'randomId',
'itemName',
'variableName',
'onFailGoToDialog',
'onInvalidGoToDialog',
'snippetId',
'identifier',
'events',
'onNoSuggestionsGoToDialog',
];
const ignoreBranches = ['parameters', 'iterator'];
const removeAttributesRegex = [
/^[0-9]*$/g, // numbers,
/^[{]{2,3}\s*[\w\.]+\s*[}]{2,3}$/g, // mustache variables
];
module.exports = function(config) {
const translator = {};
const translateObject = initializeTranslateObject({
url: config.INFOCHAT_DATA_SERVER + '/',
redis: {
url: config.REDIS_URL,
db: 0, // translates
},
});
translator.translate = function(data, languageTo, languageFrom, languages, options) {
let chatTreeId = data.chatTreeId;
let test = false;
if (chatTreeId && chatTreeId.indexOf('.') > 0) {
// remove random prefix from test trees
chatTreeId = chatTreeId.substr(chatTreeId.indexOf('.') + 1);
test = true;
}
const json = data.json;
return translateObject(
json,
languageFrom,
languageTo,
defaultAttributes.concat(removeAttributesRegex),
chatTreeId,
{ test },
languages,
ignoreBranches,
)
.then(json => Object.assign({}, data, { json }))
.catch(error => {
if (options && options.catchOnError) {
throw error;
}
console.log('error', error);
return data;
});
};
translator.googleTranslateIfNeed = function(text, target) {
const translate = new Translate({
key: config.GOOGLE_TRANSLATE_KEY,
});
return new Promise(function(resolve, reject) {
translate
.translate(text, { from: target, to: 'pt-br' })
.then(results => {
const translation = results[0];
console.log(`Text: ${text}`);
console.log(`Translation: ${translation}`);
resolve(translation);
})
.catch(err => {
console.error('ERROR:', err);
reject(err);
});
});
};
return translator;
};