UNPKG

asksuite-core

Version:
106 lines (88 loc) 2.75 kB
const Translate = require('@google-cloud/translate'); const AsksuiteUtil = require('./../asksuite.util')(); const languagesMap = new Map(); class Translator { constructor(INFOCHAT_DATA_SERVER, GOOGLE_TRANSLATE_KEY) { this.INFOCHAT_DATA_SERVER = INFOCHAT_DATA_SERVER; this.GOOGLE_TRANSLATE_KEY = GOOGLE_TRANSLATE_KEY; } static get DEFAULT_LANGUAGE() { return 'pt-br'; } googleTranslateIfNeeded(text, language, languages) { const GOOGLE_TRANSLATE_KEY = this.GOOGLE_TRANSLATE_KEY; return new Promise(function(resolve, reject) { try { const definedLanguage = AsksuiteUtil.resolveLanguageGoogle( language, languages, 'formatGoogle', ); if (definedLanguage === Translator.DEFAULT_LANGUAGE) { resolve({ translated: false, translation: text, }); } else { const translate = new Translate({ key: GOOGLE_TRANSLATE_KEY, }); translate .translate(text, { from: definedLanguage, to: Translator.DEFAULT_LANGUAGE, }) .then(results => { const translation = results[0]; console.log(`Text: ${text}`); console.log( `Translation ${definedLanguage} -> ${Translator.DEFAULT_LANGUAGE}: ${translation}`, ); resolve({ translated: true, translation, }); }) .catch(err => { console.error('ERROR:', err); reject(err); }); } } catch (e) { reject(e); } }); } static async getLanguageByCode(googleTranslateKey, languageCode, outputLanguageCode) { if (!languagesMap.has(outputLanguageCode)) { const translate = new Translate({ key: googleTranslateKey, }); const [languages] = await translate.getLanguages(outputLanguageCode); languagesMap.set(outputLanguageCode, languages); } return languagesMap.get(outputLanguageCode).find(lang => lang.code === languageCode); } static detectLanguage(googleTranslateKey, text) { const translate = new Translate({ key: googleTranslateKey, }); return translate.detect(text); } static defineLanguage(language) { try { language = language.toLowerCase(); if (language.indexOf('en') >= 0) { language = 'en'; } else if (language.indexOf('es') >= 0) { language = 'es'; } else { throw Translator.DEFAULT_LANGUAGE; } } catch (defaultLang) { language = defaultLang; } return language; } } module.exports = Translator;