Revert Google Translate client library

This commit is contained in:
Cohee 2024-10-26 21:39:37 +03:00
parent da18b5e85d
commit d716bc0a07
3 changed files with 46 additions and 3 deletions

7
package-lock.json generated
View File

@ -24,6 +24,7 @@
"csrf-csrf": "^2.2.3",
"express": "^4.21.0",
"form-data": "^4.0.0",
"google-translate-api-browser": "^3.0.1",
"google-translate-api-x": "^10.7.1",
"helmet": "^7.1.0",
"html-entities": "^2.5.2",
@ -3693,6 +3694,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/google-translate-api-browser": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/google-translate-api-browser/-/google-translate-api-browser-3.0.1.tgz",
"integrity": "sha512-KTLodkyGBWMK9IW6QIeJ2zCuju4Z0CLpbkADKo+yLhbSTD4l+CXXpQ/xaynGVAzeBezzJG6qn8MLeqOq3SmW0A==",
"license": "MIT"
},
"node_modules/google-translate-api-x": {
"version": "10.7.1",
"resolved": "https://registry.npmjs.org/google-translate-api-x/-/google-translate-api-x-10.7.1.tgz",

View File

@ -14,6 +14,7 @@
"csrf-csrf": "^2.2.3",
"express": "^4.21.0",
"form-data": "^4.0.0",
"google-translate-api-browser": "^3.0.1",
"google-translate-api-x": "^10.7.1",
"helmet": "^7.1.0",
"html-entities": "^2.5.2",

View File

@ -1,9 +1,10 @@
import https from 'node:https';
import { createRequire } from 'node:module';
import fetch from 'node-fetch';
import express from 'express';
import bingTranslateApi from 'bing-translate-api';
import googleTranslateApi from 'google-translate-api-x';
import iconv from 'iconv-lite';
import { readSecret, SECRET_KEYS } from './secrets.js';
import { getConfigValue, uuidv4 } from '../util.js';
@ -14,6 +15,30 @@ const ONERING_URL_DEFAULT = 'http://127.0.0.1:4990/translate';
export const router = express.Router();
/**
* Get the Google Translate API client.
* @returns {import('google-translate-api-browser')} Google Translate API client
*/
function getGoogleTranslateClient() {
const require = createRequire(import.meta.url);
const googleTranslateApi = require('google-translate-api-browser');
return googleTranslateApi;
}
/**
* Tries to decode an ArrayBuffer to a string using iconv-lite for UTF-8.
* @param {ArrayBuffer} buffer ArrayBuffer
* @returns {string} Decoded string
*/
function decodeBuffer(buffer) {
try {
return iconv.decode(Buffer.from(buffer), 'utf-8');
} catch (error) {
console.log('Failed to decode buffer:', error);
return Buffer.from(buffer).toString('utf-8');
}
}
router.post('/libre', jsonParser, async (request, response) => {
const key = readSecret(request.user.directories, SECRET_KEYS.LIBRE);
const url = readSecret(request.user.directories, SECRET_KEYS.LIBRE_URL);
@ -81,8 +106,18 @@ router.post('/google', jsonParser, async (request, response) => {
console.log('Input text: ' + text);
const result = await googleTranslateApi(text, { to: lang, forceBatch: false });
const translatedText = Array.isArray(result) ? result.map(x => x.text).join('') : result.text;
const { generateRequestUrl, normaliseResponse } = getGoogleTranslateClient();
const requestUrl = generateRequestUrl(text, { to: lang });
const result = await fetch(requestUrl);
if (!result.ok) {
console.log('Google Translate error: ', result.statusText);
return response.sendStatus(500);
}
const buffer = await result.arrayBuffer();
const translateResponse = normaliseResponse(JSON.parse(decodeBuffer(buffer)));
const translatedText = translateResponse.text;
response.setHeader('Content-Type', 'text/plain; charset=utf-8');
console.log('Translated text: ' + translatedText);