JimmyK300 commited on
Commit
038b679
·
verified ·
1 Parent(s): 2c3130c

Upload 15 files

Browse files
node_modules/.package-lock.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "translators",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "node_modules/open-google-translator": {
8
+ "version": "1.0.5",
9
+ "resolved": "https://registry.npmjs.org/open-google-translator/-/open-google-translator-1.0.5.tgz",
10
+ "integrity": "sha512-4J1KBqxCXmIG5IyW2OwFMdR0dgya6ph0Cx7DpRaKytnq8Tsgw/lK1JdlhtpJjGccNmGvmU05pBMzdUHDAZgqbw=="
11
+ }
12
+ }
13
+ }
node_modules/open-google-translator/.github/workflows/npm-publish.yml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2
+ # For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
3
+
4
+ name: Node.js Package
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v3
16
+ - uses: actions/setup-node@v3
17
+ with:
18
+ node-version: 16
19
+ - run: npm install -g browserify
20
+ - run: npm run build
21
+
22
+ publish-npm:
23
+ needs: build
24
+ runs-on: ubuntu-latest
25
+ steps:
26
+ - uses: actions/checkout@v3
27
+ - uses: actions/setup-node@v3
28
+ with:
29
+ node-version: 16
30
+ registry-url: https://registry.npmjs.org/
31
+ - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc
32
+ - run: npm publish --access public
33
+ env:
34
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
node_modules/open-google-translator/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Vidya Sagar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
node_modules/open-google-translator/dist/bundle.js ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2
+ const generateFinalToken = require("../utils/token_gen");
3
+
4
+ function constructTranslationUrl({
5
+ translateFrom,
6
+ translateTo,
7
+ generatedToken,
8
+ }) {
9
+ const baseUrl = "https://translate.googleapis.com/translate_a/t";
10
+ const queryParams = new URLSearchParams({
11
+ client: "te",
12
+ v: "1.0",
13
+ sl: translateFrom,
14
+ tl: translateTo,
15
+ tk: generatedToken,
16
+ });
17
+
18
+ return `${baseUrl}?${queryParams.toString()}`;
19
+ }
20
+
21
+ function getHeaders() {
22
+ const headers = new Headers();
23
+ headers.append("accept", "*/*");
24
+ headers.append("Content-Type", "application/x-www-form-urlencoded");
25
+ return headers;
26
+ }
27
+
28
+ function getEncodedBody({ phrases }) {
29
+ const urlencodedBody = new URLSearchParams();
30
+ phrases.forEach((phrase) => urlencodedBody.append("q", phrase));
31
+ return urlencodedBody;
32
+ }
33
+ async function translateText({
34
+ listOfWordsToTranslate,
35
+ translateFrom = "en",
36
+ translateTo = "en",
37
+ }) {
38
+ var _result = listOfWordsToTranslate.map((originalPhrase, index) => ({
39
+ original: originalPhrase,
40
+ translation: originalPhrase,
41
+ }));
42
+ if (translateFrom === translateTo) {
43
+ return _result;
44
+ }
45
+ var generatedToken = generateFinalToken(listOfWordsToTranslate);
46
+
47
+ const url = constructTranslationUrl({
48
+ generatedToken: generatedToken,
49
+ translateFrom: translateFrom,
50
+ translateTo: translateTo,
51
+ });
52
+
53
+ const headers = getHeaders();
54
+ const urlencodedBody = getEncodedBody({
55
+ phrases: listOfWordsToTranslate,
56
+ });
57
+ // Create requestOptions
58
+ const requestOptions = {
59
+ method: "POST",
60
+ headers: headers,
61
+ body: urlencodedBody,
62
+ redirect: "follow",
63
+ };
64
+
65
+ try {
66
+ const response = await fetch(url, requestOptions);
67
+ var result = await response.json();
68
+ _result = listOfWordsToTranslate.map((originalPhrase, index) => ({
69
+ original: originalPhrase,
70
+ translation: result[index].length == 0 ? originalPhrase : result[index],
71
+ }));
72
+ } catch (error) {
73
+ console.error("Error:", error);
74
+ }
75
+ return _result;
76
+ }
77
+
78
+ module.exports = translateText;
79
+
80
+ },{"../utils/token_gen":4}],2:[function(require,module,exports){
81
+ const translateText = require("./api/translate_api");
82
+ const SUPPORTED_LANGUAGES = require("./utils/languages");
83
+
84
+ async function TranslateLanguageData({
85
+ listOfWordsToTranslate,
86
+ fromLanguage,
87
+ toLanguage,
88
+ }) {
89
+ var translatedData = await translateText({
90
+ listOfWordsToTranslate: listOfWordsToTranslate,
91
+ translateFrom: fromLanguage,
92
+ translateTo: toLanguage,
93
+ });
94
+ return translatedData;
95
+ }
96
+ function supportedLanguages() {
97
+ return SUPPORTED_LANGUAGES;
98
+ }
99
+ if (typeof window !== "undefined") {
100
+ window.openGoogleTranslator = { TranslateLanguageData, supportedLanguages };
101
+ } else {
102
+ module.exports = { TranslateLanguageData, supportedLanguages };
103
+ }
104
+
105
+ },{"./api/translate_api":1,"./utils/languages":3}],3:[function(require,module,exports){
106
+ const SUPPORTED_LANGUAGES = {
107
+ af: "Afrikaans",
108
+ sq: "Albanian",
109
+ am: "Amharic",
110
+ ar: "Arabic",
111
+ hy: "Armenian",
112
+ az: "Azerbaijani",
113
+ eu: "Basque",
114
+ be: "Belarusian",
115
+ bn: "Bengali",
116
+ bs: "Bosnian",
117
+ bg: "Bulgarian",
118
+ ca: "Catalan",
119
+ ceb: "Cebuano",
120
+ ny: "Chichewa",
121
+ "zh-cn": "Chinese Simplified",
122
+ "zh-tw": "Chinese Traditional",
123
+ co: "Corsican",
124
+ hr: "Croatian",
125
+ cs: "Czech",
126
+ da: "Danish",
127
+ nl: "Dutch",
128
+ en: "English",
129
+ eo: "Esperanto",
130
+ et: "Estonian",
131
+ tl: "Filipino",
132
+ fi: "Finnish",
133
+ fr: "French",
134
+ fy: "Frisian",
135
+ gl: "Galician",
136
+ ka: "Georgian",
137
+ de: "German",
138
+ el: "Greek",
139
+ gu: "Gujarati",
140
+ ht: "Haitian Creole",
141
+ ha: "Hausa",
142
+ haw: "Hawaiian",
143
+ iw: "Hebrew",
144
+ hi: "Hindi",
145
+ hmn: "Hmong",
146
+ hu: "Hungarian",
147
+ is: "Icelandic",
148
+ ig: "Igbo",
149
+ id: "Indonesian",
150
+ ga: "Irish",
151
+ it: "Italian",
152
+ ja: "Japanese",
153
+ jw: "Javanese",
154
+ kn: "Kannada",
155
+ kk: "Kazakh",
156
+ km: "Khmer",
157
+ ko: "Korean",
158
+ ku: "Kurdish (Kurmanji)",
159
+ ky: "Kyrgyz",
160
+ lo: "Lao",
161
+ la: "Latin",
162
+ lv: "Latvian",
163
+ lt: "Lithuanian",
164
+ lb: "Luxembourgish",
165
+ mk: "Macedonian",
166
+ mg: "Malagasy",
167
+ ms: "Malay",
168
+ ml: "Malayalam",
169
+ mt: "Maltese",
170
+ mi: "Maori",
171
+ mr: "Marathi",
172
+ mn: "Mongolian",
173
+ my: "Myanmar (Burmese)",
174
+ ne: "Nepali",
175
+ no: "Norwegian",
176
+ ps: "Pashto",
177
+ fa: "Persian",
178
+ pl: "Polish",
179
+ pt: "Portuguese",
180
+ pa: "Punjabi",
181
+ ro: "Romanian",
182
+ ru: "Russian",
183
+ sm: "Samoan",
184
+ gd: "Scots Gaelic",
185
+ sr: "Serbian",
186
+ st: "Sesotho",
187
+ sn: "Shona",
188
+ sd: "Sindhi",
189
+ si: "Sinhala",
190
+ sk: "Slovak",
191
+ sl: "Slovenian",
192
+ so: "Somali",
193
+ es: "Spanish",
194
+ su: "Sundanese",
195
+ sw: "Swahili",
196
+ sv: "Swedish",
197
+ tg: "Tajik",
198
+ ta: "Tamil",
199
+ te: "Telugu",
200
+ th: "Thai",
201
+ tr: "Turkish",
202
+ uk: "Ukrainian",
203
+ ur: "Urdu",
204
+ uz: "Uzbek",
205
+ vi: "Vietnamese",
206
+ cy: "Welsh",
207
+ xh: "Xhosa",
208
+ yi: "Yiddish",
209
+ yo: "Yoruba",
210
+ zu: "Zulu",
211
+ };
212
+
213
+ module.exports = SUPPORTED_LANGUAGES;
214
+
215
+ },{}],4:[function(require,module,exports){
216
+ function oo(a) {
217
+ for (var b = [], c = 0, d = 0; d < a.length; d++) {
218
+ var e = a.charCodeAt(d);
219
+ 128 > e
220
+ ? (b[c++] = e)
221
+ : (2048 > e
222
+ ? (b[c++] = (e >> 6) | 192)
223
+ : (55296 == (e & 64512) &&
224
+ d + 1 < a.length &&
225
+ 56320 == (a.charCodeAt(d + 1) & 64512)
226
+ ? ((e = 65536 + ((e & 1023) << 10) + (a.charCodeAt(++d) & 1023)),
227
+ (b[c++] = (e >> 18) | 240),
228
+ (b[c++] = ((e >> 12) & 63) | 128))
229
+ : (b[c++] = (e >> 12) | 224),
230
+ (b[c++] = ((e >> 6) & 63) | 128)),
231
+ (b[c++] = (e & 63) | 128));
232
+ }
233
+ return b;
234
+ }
235
+ function jq(a, b) {
236
+ for (var c = 0; c < b.length - 2; c += 3) {
237
+ var d = b.charAt(c + 2);
238
+ d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);
239
+ d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
240
+ a = "+" == b.charAt(c) ? (a + d) & 4294967295 : a ^ d;
241
+ }
242
+ return a;
243
+ }
244
+ function generateFinalToken(sentenceToTranslate) {
245
+ var a = sentenceToTranslate.join("");
246
+ var b = ["471414", "523112976"],
247
+ c = Number(b[0]) || 0;
248
+ a = oo(a);
249
+ for (var d = c, e = 0; e < a.length; e++) (d += a[e]), (d = jq(d, "+-a^+6"));
250
+ d = jq(d, "+-3^+b+-f");
251
+ d ^= Number(b[1]) || 0;
252
+ 0 > d && (d = (d & 2147483647) + 2147483648);
253
+ b = d % 1e6;
254
+ return b.toString() + "." + (b ^ c);
255
+ }
256
+
257
+ module.exports = generateFinalToken;
258
+
259
+ },{}]},{},[2]);
node_modules/open-google-translator/example/client.ts ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const { supportedLanguages, TranslateLanguageData } = require("../");
2
+
3
+ console.log(Object.keys(supportedLanguages()).length);
4
+
5
+ TranslateLanguageData({
6
+ listOfWordsToTranslate: ["hello here i am", "HI hello"],
7
+ fromLanguage: "en",
8
+ toLanguage: "pa",
9
+ }).then((data) => {
10
+ console.log(data);
11
+ });
node_modules/open-google-translator/example/test_translator.html ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Google Translator Test</title>
8
+ </head>
9
+
10
+ <body>
11
+ <style>
12
+ .textAreas {
13
+ display: flex;
14
+ }
15
+
16
+ textarea {
17
+ padding: 10px;
18
+ margin-right: 10px;
19
+ }
20
+
21
+ .dropdown {
22
+ padding: 10px;
23
+ font-size: 16px;
24
+ border: 1px solid #ccc;
25
+ border-radius: 4px;
26
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
27
+ appearance: none;
28
+ /* Remove default arrow */
29
+ -moz-appearance: none;
30
+ /* Firefox */
31
+ -webkit-appearance: none;
32
+ }
33
+
34
+ .dropdown:focus {
35
+ border-color: #007bff;
36
+ outline: none;
37
+ box-shadow: 0 0 5px rgba(0, 123, 255, 0.5);
38
+ }
39
+
40
+ .dropdown option {
41
+ padding: 10px;
42
+ }
43
+ </style>
44
+ <h1 id="word">Google Translator Test</h1>
45
+ <script src="https://cdn.statically.io/gh/vidya-hub/open-google-translator/main/dist/bundle.js"></script>
46
+ <div class="dropdown-container">
47
+ <select id="languageDropdown" class="dropdown">
48
+ <option value="">-- Select Language --</option>
49
+ </select>
50
+ </div>
51
+
52
+ <br />
53
+ <br />
54
+ <div class="textAreas">
55
+ <textarea id="textToTranslate" placeholder="Enter text to translate" onchange="" cols="40" rows="5"></textarea>
56
+ <textarea id="textToDisplay" placeholder="Translated Text" onchange="" cols="40" rows="5"></textarea>
57
+ </div>
58
+ <script>
59
+ const languages = openGoogleTranslator.supportedLanguages();
60
+ var dropdown = document.getElementById("languageDropdown");
61
+ for (const code in languages) {
62
+ if (languages.hasOwnProperty(code)) {
63
+ var option = document.createElement("option");
64
+ option.value = code;
65
+ option.text = languages[code];
66
+ dropdown.appendChild(option);
67
+ }
68
+ }
69
+ async function testTranslation() {
70
+ var textToTranslate = document.getElementById("textToTranslate");
71
+ var textToDisplay = document.getElementById("textToDisplay");
72
+ var dropdown = document.getElementById("languageDropdown");
73
+
74
+ var selectedLanguageCode = dropdown.value;
75
+ var enteredText = textToTranslate.value;
76
+ var sentenceToTranslate = [enteredText];
77
+
78
+ var translatedData = await openGoogleTranslator.TranslateLanguageData({
79
+ fromLanguage: "en",
80
+ toLanguage:
81
+ selectedLanguageCode.length == 0 ? "en" : selectedLanguageCode,
82
+ listOfWordsToTranslate: sentenceToTranslate,
83
+ });
84
+ textToDisplay.value = translatedData[0]["translation"];
85
+ console.log(translatedData[0]["translation"]);
86
+ }
87
+ </script>
88
+ <br />
89
+ <br />
90
+ <button id="trnButton" style="
91
+ padding: 10px 20px;
92
+ font-size: 16px;
93
+ border-radius: 8px;
94
+ background-color: #3498db;
95
+ color: #fff;
96
+ border: none;
97
+ cursor: pointer;
98
+ " onclick="testTranslation()">
99
+ Translate
100
+ </button>
101
+ </body>
102
+
103
+ </html>
node_modules/open-google-translator/package.json ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "open-google-translator",
3
+ "version": "1.0.5",
4
+ "description": "A versatile and easy-to-use NPM package that leverages the power of the Google Translator API",
5
+ "main": "src/index.js",
6
+ "types": "types.d.ts",
7
+ "directories": {
8
+ "example": "example"
9
+ },
10
+ "scripts": {
11
+ "build": "browserify src/index.js -o dist/bundle.js"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/vidya-hub/open-google-translator.git"
16
+ },
17
+ "author": "",
18
+ "license": "ISC",
19
+ "bugs": {
20
+ "url": "https://github.com/vidya-hub/open-google-translator/issues"
21
+ },
22
+ "homepage": "https://github.com/vidya-hub/open-google-translator#readme",
23
+ "keywords": [
24
+ "translator",
25
+ "google-translator",
26
+ "free-google-translator",
27
+ "open-google-translator",
28
+ "translate"
29
+ ],
30
+ "devDependencies": {
31
+ "@types/node": "^20.14.11",
32
+ "ts-node": "^10.9.2",
33
+ "typescript": "^5.5.4"
34
+ }
35
+ }
node_modules/open-google-translator/readme.md ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # open-google-translator
2
+
3
+ ![npm version](https://img.shields.io/npm/v/open-google-translator.svg) ![license](https://img.shields.io/npm/l/open-google-translator.svg)
4
+
5
+ A versatile and easy-to-use NPM package that leverages the power of the Google Translator API. With support for 104 languages, this package can seamlessly translate text in both web and Node.js environments.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install open-google-translator
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ### Node.js
16
+
17
+ ```javascript
18
+ const translator = require("open-google-translator");
19
+
20
+ translator.supportedLanguages();
21
+
22
+ translator
23
+ .TranslateLanguageData({
24
+ listOfWordsToTranslate: ["hello here i am", "HI hello"],
25
+ fromLanguage: "en",
26
+ toLanguage: "hi",
27
+ })
28
+ .then((data) => {
29
+ console.log(data);
30
+ });
31
+ ```
32
+
33
+ - `translator.supportedLanguages();` this method will provide pair of language iso639-1 language codes with respective language original names
34
+
35
+ Example:
36
+
37
+ ```json
38
+ {
39
+ af: "Afrikaans",
40
+ sq: "Albanian",
41
+ am: "Amharic",
42
+ ar: "Arabic",
43
+ hy: "Armenian",
44
+ az: "Azerbaijani",
45
+ eu: "Basque",......
46
+ }
47
+ ```
48
+
49
+ ### Browser
50
+
51
+ 1. Include the script in your HTML file:
52
+
53
+ ```html
54
+ <script src="https://cdn.statically.io/gh/vidya-hub/open-google-translator/main/dist/bundle.js"></script>
55
+ ```
56
+
57
+ 2. Access the package methods using the `openGoogleTranslator` variable:
58
+
59
+ ```javascript
60
+ openGoogleTranslator
61
+ .TranslateLanguageData({
62
+ listOfWordsToTranslate: ["hello here i am", "HI hello"],
63
+ fromLanguage: "en",
64
+ toLanguage: "te",
65
+ })
66
+ .then((data) => {
67
+ console.log(data);
68
+ });
69
+ ```
70
+
71
+ ## Inputs
72
+
73
+ - `listOfWordsToTranslate`: An array of sentences to be translated.
74
+ - `fromLanguage`: The language code of the original text (e.g., "en" for English).
75
+ - `toLanguage`: The language code of the target translation (e.g., "hi" for HIndi).
76
+
77
+ ## Output
78
+
79
+ The output consists of an array of objects, each containing the original and translated sentences.
80
+
81
+ ```js
82
+ [
83
+ { original: "hello here i am", translation: "नमस्ते मैं यहाँ हूँ" },
84
+ { original: "HI hello", translation: "हाय हैलो" },
85
+ ];
86
+ ```
87
+
88
+ ## Features
89
+
90
+ - Supports translation for 104 languages.
91
+ - Works seamlessly in both Node.js and browser environments.
92
+ - Simple and intuitive API for easy integration.
93
+ - Fast and efficient unlimited translation using the free Google Translator API.
94
+
95
+ ## Contributing
96
+
97
+ If you find any issues or have suggestions for improvement, feel free to open an [issue](https://github.com/vidya-hub/open-google-translator/issues) or submit a [pull request](https://github.com/vidya-hub/open-google-translator/pulls).
98
+
99
+ ## License
100
+
101
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
102
+
103
+ ## Disclaimer 📝
104
+
105
+ Please be aware that this package is created exclusively for educational purposes. The token generation method employed in this package is based on the one utilized by https://translate.googleapis.com. It is important to note that for other types of usage (COMMERCIAL or PRODUCTION use), acquiring the official [Google Translator API](https://cloud.google.com/translate/) is recommended.
node_modules/open-google-translator/src/api/translate_api.js ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const generateFinalToken = require("../utils/token_gen");
2
+
3
+ function constructTranslationUrl({
4
+ translateFrom,
5
+ translateTo,
6
+ generatedToken,
7
+ }) {
8
+ const baseUrl = "https://translate.googleapis.com/translate_a/t";
9
+ const queryParams = new URLSearchParams({
10
+ client: "te",
11
+ v: "1.0",
12
+ sl: translateFrom,
13
+ tl: translateTo,
14
+ tk: generatedToken,
15
+ });
16
+
17
+ return `${baseUrl}?${queryParams.toString()}`;
18
+ }
19
+
20
+ function getHeaders() {
21
+ const headers = new Headers();
22
+ headers.append("accept", "*/*");
23
+ headers.append("Content-Type", "application/x-www-form-urlencoded");
24
+ return headers;
25
+ }
26
+
27
+ function getEncodedBody({ phrases }) {
28
+ const urlencodedBody = new URLSearchParams();
29
+ phrases.forEach((phrase) => urlencodedBody.append("q", phrase));
30
+ return urlencodedBody;
31
+ }
32
+ async function translateText({
33
+ listOfWordsToTranslate,
34
+ translateFrom = "en",
35
+ translateTo = "en",
36
+ }) {
37
+ var _result = listOfWordsToTranslate.map((originalPhrase, index) => ({
38
+ original: originalPhrase,
39
+ translation: originalPhrase,
40
+ }));
41
+ if (translateFrom === translateTo) {
42
+ return _result;
43
+ }
44
+ var generatedToken = generateFinalToken(listOfWordsToTranslate);
45
+
46
+ const url = constructTranslationUrl({
47
+ generatedToken: generatedToken,
48
+ translateFrom: translateFrom,
49
+ translateTo: translateTo,
50
+ });
51
+
52
+ const headers = getHeaders();
53
+ const urlencodedBody = getEncodedBody({
54
+ phrases: listOfWordsToTranslate,
55
+ });
56
+ // Create requestOptions
57
+ const requestOptions = {
58
+ method: "POST",
59
+ headers: headers,
60
+ body: urlencodedBody,
61
+ redirect: "follow",
62
+ };
63
+
64
+ try {
65
+ const response = await fetch(url, requestOptions);
66
+ var result = await response.json();
67
+ _result = listOfWordsToTranslate.map((originalPhrase, index) => ({
68
+ original: originalPhrase,
69
+ translation: result[index].length == 0 ? originalPhrase : result[index],
70
+ }));
71
+ } catch (error) {
72
+ console.error("Error:", error);
73
+ }
74
+ return _result;
75
+ }
76
+
77
+ module.exports = translateText;
node_modules/open-google-translator/src/index.js ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const translateText = require("./api/translate_api");
2
+ const SUPPORTED_LANGUAGES = require("./utils/languages");
3
+
4
+ async function TranslateLanguageData({
5
+ listOfWordsToTranslate,
6
+ fromLanguage,
7
+ toLanguage,
8
+ }) {
9
+ var translatedData = await translateText({
10
+ listOfWordsToTranslate: listOfWordsToTranslate,
11
+ translateFrom: fromLanguage,
12
+ translateTo: toLanguage,
13
+ });
14
+ return translatedData;
15
+ }
16
+ function supportedLanguages() {
17
+ return SUPPORTED_LANGUAGES;
18
+ }
19
+ if (typeof window !== "undefined") {
20
+ window.openGoogleTranslator = { TranslateLanguageData, supportedLanguages };
21
+ } else {
22
+ module.exports = { TranslateLanguageData, supportedLanguages };
23
+ }
node_modules/open-google-translator/src/utils/languages.js ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const SUPPORTED_LANGUAGES = {
2
+ af: "Afrikaans",
3
+ sq: "Albanian",
4
+ am: "Amharic",
5
+ ar: "Arabic",
6
+ hy: "Armenian",
7
+ az: "Azerbaijani",
8
+ eu: "Basque",
9
+ be: "Belarusian",
10
+ bn: "Bengali",
11
+ bs: "Bosnian",
12
+ bg: "Bulgarian",
13
+ ca: "Catalan",
14
+ ceb: "Cebuano",
15
+ ny: "Chichewa",
16
+ "zh-cn": "Chinese Simplified",
17
+ "zh-tw": "Chinese Traditional",
18
+ co: "Corsican",
19
+ hr: "Croatian",
20
+ cs: "Czech",
21
+ da: "Danish",
22
+ nl: "Dutch",
23
+ en: "English",
24
+ eo: "Esperanto",
25
+ et: "Estonian",
26
+ tl: "Filipino",
27
+ fi: "Finnish",
28
+ fr: "French",
29
+ fy: "Frisian",
30
+ gl: "Galician",
31
+ ka: "Georgian",
32
+ de: "German",
33
+ el: "Greek",
34
+ gu: "Gujarati",
35
+ ht: "Haitian Creole",
36
+ ha: "Hausa",
37
+ haw: "Hawaiian",
38
+ iw: "Hebrew",
39
+ hi: "Hindi",
40
+ hmn: "Hmong",
41
+ hu: "Hungarian",
42
+ is: "Icelandic",
43
+ ig: "Igbo",
44
+ id: "Indonesian",
45
+ ga: "Irish",
46
+ it: "Italian",
47
+ ja: "Japanese",
48
+ jw: "Javanese",
49
+ kn: "Kannada",
50
+ kk: "Kazakh",
51
+ km: "Khmer",
52
+ ko: "Korean",
53
+ ku: "Kurdish (Kurmanji)",
54
+ ky: "Kyrgyz",
55
+ lo: "Lao",
56
+ la: "Latin",
57
+ lv: "Latvian",
58
+ lt: "Lithuanian",
59
+ lb: "Luxembourgish",
60
+ mk: "Macedonian",
61
+ mg: "Malagasy",
62
+ ms: "Malay",
63
+ ml: "Malayalam",
64
+ mt: "Maltese",
65
+ mi: "Maori",
66
+ mr: "Marathi",
67
+ mn: "Mongolian",
68
+ my: "Myanmar (Burmese)",
69
+ ne: "Nepali",
70
+ no: "Norwegian",
71
+ ps: "Pashto",
72
+ fa: "Persian",
73
+ pl: "Polish",
74
+ pt: "Portuguese",
75
+ pa: "Punjabi",
76
+ ro: "Romanian",
77
+ ru: "Russian",
78
+ sm: "Samoan",
79
+ gd: "Scots Gaelic",
80
+ sr: "Serbian",
81
+ st: "Sesotho",
82
+ sn: "Shona",
83
+ sd: "Sindhi",
84
+ si: "Sinhala",
85
+ sk: "Slovak",
86
+ sl: "Slovenian",
87
+ so: "Somali",
88
+ es: "Spanish",
89
+ su: "Sundanese",
90
+ sw: "Swahili",
91
+ sv: "Swedish",
92
+ tg: "Tajik",
93
+ ta: "Tamil",
94
+ te: "Telugu",
95
+ th: "Thai",
96
+ tr: "Turkish",
97
+ uk: "Ukrainian",
98
+ ur: "Urdu",
99
+ uz: "Uzbek",
100
+ vi: "Vietnamese",
101
+ cy: "Welsh",
102
+ xh: "Xhosa",
103
+ yi: "Yiddish",
104
+ yo: "Yoruba",
105
+ zu: "Zulu",
106
+ };
107
+
108
+ module.exports = SUPPORTED_LANGUAGES;
node_modules/open-google-translator/src/utils/token_gen.js ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function oo(a) {
2
+ for (var b = [], c = 0, d = 0; d < a.length; d++) {
3
+ var e = a.charCodeAt(d);
4
+ 128 > e
5
+ ? (b[c++] = e)
6
+ : (2048 > e
7
+ ? (b[c++] = (e >> 6) | 192)
8
+ : (55296 == (e & 64512) &&
9
+ d + 1 < a.length &&
10
+ 56320 == (a.charCodeAt(d + 1) & 64512)
11
+ ? ((e = 65536 + ((e & 1023) << 10) + (a.charCodeAt(++d) & 1023)),
12
+ (b[c++] = (e >> 18) | 240),
13
+ (b[c++] = ((e >> 12) & 63) | 128))
14
+ : (b[c++] = (e >> 12) | 224),
15
+ (b[c++] = ((e >> 6) & 63) | 128)),
16
+ (b[c++] = (e & 63) | 128));
17
+ }
18
+ return b;
19
+ }
20
+ function jq(a, b) {
21
+ for (var c = 0; c < b.length - 2; c += 3) {
22
+ var d = b.charAt(c + 2);
23
+ d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);
24
+ d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
25
+ a = "+" == b.charAt(c) ? (a + d) & 4294967295 : a ^ d;
26
+ }
27
+ return a;
28
+ }
29
+ function generateFinalToken(sentenceToTranslate) {
30
+ var a = sentenceToTranslate.join("");
31
+ var b = ["471414", "523112976"],
32
+ c = Number(b[0]) || 0;
33
+ a = oo(a);
34
+ for (var d = c, e = 0; e < a.length; e++) (d += a[e]), (d = jq(d, "+-a^+6"));
35
+ d = jq(d, "+-3^+b+-f");
36
+ d ^= Number(b[1]) || 0;
37
+ 0 > d && (d = (d & 2147483647) + 2147483648);
38
+ b = d % 1e6;
39
+ return b.toString() + "." + (b ^ c);
40
+ }
41
+
42
+ module.exports = generateFinalToken;
node_modules/open-google-translator/types.d.ts ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @returns object of Language Code -> Language Name
3
+ * @example { "zh-cn": "Chinese Simplified", "zh-tw": "Chinese Traditional" }
4
+ */
5
+ export function supportedLanguages(): Record<LanguageCode, string>;
6
+
7
+ export function TranslateLanguageData(
8
+ options: TranslateOptions
9
+ ): Promise<TranslateResult[]>;
10
+
11
+ export type TranslateOptions = {
12
+ listOfWordsToTranslate: string[];
13
+ fromLanguage: LanguageCode;
14
+ toLanguage: LanguageCode;
15
+ };
16
+
17
+ export type TranslateResult = {
18
+ original: string;
19
+ translation: string;
20
+ };
21
+
22
+ export type LanguageCode =
23
+ | "af"
24
+ | "sq"
25
+ | "am"
26
+ | "ar"
27
+ | "hy"
28
+ | "az"
29
+ | "eu"
30
+ | "be"
31
+ | "bn"
32
+ | "bs"
33
+ | "bg"
34
+ | "ca"
35
+ | "ceb"
36
+ | "ny"
37
+ | "zh-cn"
38
+ | "zh-tw"
39
+ | "co"
40
+ | "hr"
41
+ | "cs"
42
+ | "da"
43
+ | "nl"
44
+ | "en"
45
+ | "eo"
46
+ | "et"
47
+ | "tl"
48
+ | "fi"
49
+ | "fr"
50
+ | "fy"
51
+ | "gl"
52
+ | "ka"
53
+ | "de"
54
+ | "el"
55
+ | "gu"
56
+ | "ht"
57
+ | "ha"
58
+ | "haw"
59
+ | "iw"
60
+ | "hi"
61
+ | "hmn"
62
+ | "hu"
63
+ | "is"
64
+ | "ig"
65
+ | "id"
66
+ | "ga"
67
+ | "it"
68
+ | "ja"
69
+ | "jw"
70
+ | "kn"
71
+ | "kk"
72
+ | "km"
73
+ | "ko"
74
+ | "ku"
75
+ | "ky"
76
+ | "lo"
77
+ | "la"
78
+ | "lv"
79
+ | "lt"
80
+ | "lb"
81
+ | "mk"
82
+ | "mg"
83
+ | "ms"
84
+ | "ml"
85
+ | "mt"
86
+ | "mi"
87
+ | "mr"
88
+ | "mn"
89
+ | "my"
90
+ | "ne"
91
+ | "no"
92
+ | "ps"
93
+ | "fa"
94
+ | "pl"
95
+ | "pt"
96
+ | "pa"
97
+ | "ro"
98
+ | "ru"
99
+ | "sm"
100
+ | "gd"
101
+ | "sr"
102
+ | "st"
103
+ | "sn"
104
+ | "sd"
105
+ | "si"
106
+ | "sk"
107
+ | "sl"
108
+ | "so"
109
+ | "es"
110
+ | "su"
111
+ | "sw"
112
+ | "sv"
113
+ | "tg"
114
+ | "ta"
115
+ | "te"
116
+ | "th"
117
+ | "tr"
118
+ | "uk"
119
+ | "ur"
120
+ | "uz"
121
+ | "vi"
122
+ | "cy"
123
+ | "xh"
124
+ | "yi"
125
+ | "yo"
126
+ | "zu";
package-lock.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "translators",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "translators",
9
+ "version": "1.0.0",
10
+ "license": "ISC",
11
+ "dependencies": {
12
+ "open-google-translator": "^1.0.5"
13
+ }
14
+ },
15
+ "node_modules/open-google-translator": {
16
+ "version": "1.0.5",
17
+ "resolved": "https://registry.npmjs.org/open-google-translator/-/open-google-translator-1.0.5.tgz",
18
+ "integrity": "sha512-4J1KBqxCXmIG5IyW2OwFMdR0dgya6ph0Cx7DpRaKytnq8Tsgw/lK1JdlhtpJjGccNmGvmU05pBMzdUHDAZgqbw=="
19
+ }
20
+ }
21
+ }
package.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "translators",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "fetch.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "keywords": [],
10
+ "author": "",
11
+ "license": "ISC",
12
+ "dependencies": {
13
+ "open-google-translator": "^1.0.5"
14
+ }
15
+ }