mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-01-22 07:26:23 +01:00
Replace Google Translate API package
This commit is contained in:
parent
ffa8716d07
commit
89c0b0e1cd
19
package-lock.json
generated
19
package-lock.json
generated
@ -24,7 +24,7 @@
|
|||||||
"csrf-csrf": "^2.2.3",
|
"csrf-csrf": "^2.2.3",
|
||||||
"express": "^4.21.0",
|
"express": "^4.21.0",
|
||||||
"form-data": "^4.0.0",
|
"form-data": "^4.0.0",
|
||||||
"google-translate-api-browser": "^3.0.1",
|
"google-translate-api-x": "^10.7.1",
|
||||||
"helmet": "^7.1.0",
|
"helmet": "^7.1.0",
|
||||||
"html-entities": "^2.5.2",
|
"html-entities": "^2.5.2",
|
||||||
"iconv-lite": "^0.6.3",
|
"iconv-lite": "^0.6.3",
|
||||||
@ -3689,11 +3689,18 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/google-translate-api-browser": {
|
"node_modules/google-translate-api-x": {
|
||||||
"version": "3.0.1",
|
"version": "10.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/google-translate-api-browser/-/google-translate-api-browser-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/google-translate-api-x/-/google-translate-api-x-10.7.1.tgz",
|
||||||
"integrity": "sha512-KTLodkyGBWMK9IW6QIeJ2zCuju4Z0CLpbkADKo+yLhbSTD4l+CXXpQ/xaynGVAzeBezzJG6qn8MLeqOq3SmW0A==",
|
"integrity": "sha512-OdZDS6jRWzn1woOk62aOKQ5OyVaJSA+eyc6CktOWxo36IWfstOjwG/dkvnGl3Z2Sbpmk1A+jc2WwrBiRjqaY2A==",
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/AidanWelch"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/gopd": {
|
"node_modules/gopd": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
"csrf-csrf": "^2.2.3",
|
"csrf-csrf": "^2.2.3",
|
||||||
"express": "^4.21.0",
|
"express": "^4.21.0",
|
||||||
"form-data": "^4.0.0",
|
"form-data": "^4.0.0",
|
||||||
"google-translate-api-browser": "^3.0.1",
|
"google-translate-api-x": "^10.7.1",
|
||||||
"helmet": "^7.1.0",
|
"helmet": "^7.1.0",
|
||||||
"html-entities": "^2.5.2",
|
"html-entities": "^2.5.2",
|
||||||
"iconv-lite": "^0.6.3",
|
"iconv-lite": "^0.6.3",
|
||||||
|
@ -1,14 +1,9 @@
|
|||||||
import https from 'node:https';
|
import https from 'node:https';
|
||||||
import { createRequire } from 'node:module';
|
|
||||||
import { Buffer } from 'node:buffer';
|
|
||||||
|
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
import iconv from 'iconv-lite';
|
|
||||||
import bingTranslateApi from 'bing-translate-api';
|
import bingTranslateApi from 'bing-translate-api';
|
||||||
|
import googleTranslateApi from 'google-translate-api-x';
|
||||||
const require = createRequire(import.meta.url);
|
|
||||||
const { generateRequestUrl, normaliseResponse } = require('google-translate-api-browser');
|
|
||||||
|
|
||||||
import { readSecret, SECRET_KEYS } from './secrets.js';
|
import { readSecret, SECRET_KEYS } from './secrets.js';
|
||||||
import { getConfigValue, uuidv4 } from '../util.js';
|
import { getConfigValue, uuidv4 } from '../util.js';
|
||||||
@ -17,20 +12,6 @@ import { jsonParser } from '../express-common.js';
|
|||||||
const DEEPLX_URL_DEFAULT = 'http://127.0.0.1:1188/translate';
|
const DEEPLX_URL_DEFAULT = 'http://127.0.0.1:1188/translate';
|
||||||
const ONERING_URL_DEFAULT = 'http://127.0.0.1:4990/translate';
|
const ONERING_URL_DEFAULT = 'http://127.0.0.1:4990/translate';
|
||||||
|
|
||||||
/**
|
|
||||||
* Tries to decode a Node.js Buffer to a string using iconv-lite for UTF-8.
|
|
||||||
* @param {Buffer} buffer Node.js Buffer
|
|
||||||
* @returns {string} Decoded string
|
|
||||||
*/
|
|
||||||
function decodeBuffer(buffer) {
|
|
||||||
try {
|
|
||||||
return iconv.decode(buffer, 'utf-8');
|
|
||||||
} catch (error) {
|
|
||||||
console.log('Failed to decode buffer:', error);
|
|
||||||
return buffer.toString('utf-8');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const router = express.Router();
|
export const router = express.Router();
|
||||||
|
|
||||||
router.post('/libre', jsonParser, async (request, response) => {
|
router.post('/libre', jsonParser, async (request, response) => {
|
||||||
@ -100,31 +81,12 @@ router.post('/google', jsonParser, async (request, response) => {
|
|||||||
|
|
||||||
console.log('Input text: ' + text);
|
console.log('Input text: ' + text);
|
||||||
|
|
||||||
const url = generateRequestUrl(text, { to: lang });
|
const result = await googleTranslateApi(text, { to: lang, forceBatch: false });
|
||||||
|
const translatedText = Array.isArray(result) ? result.map(x => x.text).join('') : result.text;
|
||||||
|
|
||||||
https.get(url, (resp) => {
|
response.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
||||||
const data = [];
|
console.log('Translated text: ' + translatedText);
|
||||||
|
return response.send(translatedText);
|
||||||
resp.on('data', (chunk) => {
|
|
||||||
data.push(chunk);
|
|
||||||
});
|
|
||||||
|
|
||||||
resp.on('end', () => {
|
|
||||||
try {
|
|
||||||
const decodedData = decodeBuffer(Buffer.concat(data));
|
|
||||||
const result = normaliseResponse(JSON.parse(decodedData));
|
|
||||||
console.log('Translated text: ' + result.text);
|
|
||||||
response.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
|
||||||
return response.send(result.text);
|
|
||||||
} catch (error) {
|
|
||||||
console.log('Translation error', error);
|
|
||||||
return response.sendStatus(500);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}).on('error', (err) => {
|
|
||||||
console.log('Translation error: ' + err.message);
|
|
||||||
return response.sendStatus(500);
|
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('Translation error', error);
|
console.log('Translation error', error);
|
||||||
return response.sendStatus(500);
|
return response.sendStatus(500);
|
||||||
|
Loading…
Reference in New Issue
Block a user