File size: 1,990 Bytes
038b679
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
const generateFinalToken = require("../utils/token_gen");

function constructTranslationUrl({
  translateFrom,
  translateTo,
  generatedToken,
}) {
  const baseUrl = "https://translate.googleapis.com/translate_a/t";
  const queryParams = new URLSearchParams({
    client: "te",
    v: "1.0",
    sl: translateFrom,
    tl: translateTo,
    tk: generatedToken,
  });

  return `${baseUrl}?${queryParams.toString()}`;
}

function getHeaders() {
  const headers = new Headers();
  headers.append("accept", "*/*");
  headers.append("Content-Type", "application/x-www-form-urlencoded");
  return headers;
}

function getEncodedBody({ phrases }) {
  const urlencodedBody = new URLSearchParams();
  phrases.forEach((phrase) => urlencodedBody.append("q", phrase));
  return urlencodedBody;
}
async function translateText({
  listOfWordsToTranslate,
  translateFrom = "en",
  translateTo = "en",
}) {
  var _result = listOfWordsToTranslate.map((originalPhrase, index) => ({
    original: originalPhrase,
    translation: originalPhrase,
  }));
  if (translateFrom === translateTo) {
    return _result;
  }
  var generatedToken = generateFinalToken(listOfWordsToTranslate);

  const url = constructTranslationUrl({
    generatedToken: generatedToken,
    translateFrom: translateFrom,
    translateTo: translateTo,
  });

  const headers = getHeaders();
  const urlencodedBody = getEncodedBody({
    phrases: listOfWordsToTranslate,
  });
  // Create requestOptions
  const requestOptions = {
    method: "POST",
    headers: headers,
    body: urlencodedBody,
    redirect: "follow",
  };

  try {
    const response = await fetch(url, requestOptions);
    var result = await response.json();
    _result = listOfWordsToTranslate.map((originalPhrase, index) => ({
      original: originalPhrase,
      translation: result[index].length == 0 ? originalPhrase : result[index],
    }));
  } catch (error) {
    console.error("Error:", error);
  }
  return _result;
}

module.exports = translateText;