UNPKG

asksuite-core

Version:
139 lines (122 loc) 3.19 kB
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; };