asksuite-core
Version:
139 lines (122 loc) • 3.19 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',
'nextDialog',
'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',
'bookingId',
'nextDialogTimeout',
'formType',
];
const ignoreBranches = ['parameters', 'iterator', 'companyId'];
const ignorePaths = [['choices', 'value']];
const removeAttributesRegex = [
/^[0-9]*$/g, // numbers,
/^[{]{2,3}\s*[\w\.]+\s*[}]{2,3}$/g, // mustache variables
];
module.exports = function (config) {
const translator = {};
const redisCache = {};
const translateObject = initializeTranslateObject({
url: (config.CONTROL_TRANSLATE_URL || config.INFOCHAT_DATA_SERVER) + '/',
redis: {
url: config.REDIS_TRANSLATE_URL || config.REDIS_URL,
db: 0, // translates
},
});
console.log('[asksuite-core] translator -> translateObject:', translateObject);
translator.translate = function (data, languageTo, languageFrom, languages, options) {
let chatTreeId = data.chatTreeId;
let test = false;
if (
(chatTreeId && (chatTreeId.indexOf('.') > 0 || chatTreeId.match(/(temp|version)__(.*)__/))) ||
(options && options.isTest)
) {
if (chatTreeId) {
// remove random prefix from test trees
chatTreeId = chatTreeId
.substr(chatTreeId.indexOf('.') + 1)
.replace(/(temp|version)__(.*)__/, '');
}
test = !options.isSophia;
}
const json = data.json;
return translateObject(
json,
languageFrom,
languageTo,
defaultAttributes.concat(removeAttributesRegex),
chatTreeId,
{ test },
languages,
ignoreBranches,
ignorePaths,
options && options.useCache ? redisCache : undefined,
)
.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;
};