UNPKG

2.75 kBJavaScriptView Raw
1const Translate = require('@google-cloud/translate');
2const AsksuiteUtil = require('./../asksuite.util')();
3const languagesMap = new Map();
4
5class Translator {
6 constructor(INFOCHAT_DATA_SERVER, GOOGLE_TRANSLATE_KEY) {
7 this.INFOCHAT_DATA_SERVER = INFOCHAT_DATA_SERVER;
8 this.GOOGLE_TRANSLATE_KEY = GOOGLE_TRANSLATE_KEY;
9 }
10
11 static get DEFAULT_LANGUAGE() {
12 return 'pt-br';
13 }
14
15 googleTranslateIfNeeded(text, language, languages) {
16 const GOOGLE_TRANSLATE_KEY = this.GOOGLE_TRANSLATE_KEY;
17
18 return new Promise(function(resolve, reject) {
19 try {
20 const definedLanguage = AsksuiteUtil.resolveLanguageGoogle(
21 language,
22 languages,
23 'formatGoogle',
24 );
25
26 if (definedLanguage === Translator.DEFAULT_LANGUAGE) {
27 resolve({
28 translated: false,
29 translation: text,
30 });
31 } else {
32 const translate = new Translate({
33 key: GOOGLE_TRANSLATE_KEY,
34 });
35
36 translate
37 .translate(text, {
38 from: definedLanguage,
39 to: Translator.DEFAULT_LANGUAGE,
40 })
41 .then(results => {
42 const translation = results[0];
43
44 console.log(`Text: ${text}`);
45 console.log(
46 `Translation ${definedLanguage} -> ${Translator.DEFAULT_LANGUAGE}: ${translation}`,
47 );
48
49 resolve({
50 translated: true,
51 translation,
52 });
53 })
54 .catch(err => {
55 console.error('ERROR:', err);
56 reject(err);
57 });
58 }
59 } catch (e) {
60 reject(e);
61 }
62 });
63 }
64
65 static async getLanguageByCode(googleTranslateKey, languageCode, outputLanguageCode) {
66 if (!languagesMap.has(outputLanguageCode)) {
67 const translate = new Translate({
68 key: googleTranslateKey,
69 });
70
71 const [languages] = await translate.getLanguages(outputLanguageCode);
72 languagesMap.set(outputLanguageCode, languages);
73 }
74
75 return languagesMap.get(outputLanguageCode).find(lang => lang.code === languageCode);
76 }
77
78 static detectLanguage(googleTranslateKey, text) {
79 const translate = new Translate({
80 key: googleTranslateKey,
81 });
82
83 return translate.detect(text);
84 }
85
86 static defineLanguage(language) {
87 try {
88 language = language.toLowerCase();
89
90 if (language.indexOf('en') >= 0) {
91 language = 'en';
92 } else if (language.indexOf('es') >= 0) {
93 language = 'es';
94 } else {
95 throw Translator.DEFAULT_LANGUAGE;
96 }
97 } catch (defaultLang) {
98 language = defaultLang;
99 }
100
101 return language;
102 }
103}
104
105module.exports = Translator;