asksuite-core
Version:
106 lines (88 loc) • 2.75 kB
JavaScript
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;