Replace Google Translate library (#4884)

10a2f0f7406035ca064eecc2e85f52a707ae770b

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
3 files changed, +5 -49Showing whitespace changes
package-lock.json+0 -7
@@ -59,7 +59,6 @@
5959 "express": "^4.21.0",
6060 "form-data": "^4.0.4",
6161 "fuse.js": "^7.1.0",
62- "google-translate-api-browser": "^3.0.1",
6362 "google-translate-api-x": "^10.7.2",
6463 "handlebars": "^4.7.8",
6564 "helmet": "^8.1.0",
@@ -5390,12 +5389,6 @@
53905389 "url": "https://github.com/sponsors/sindresorhus"
53915390 }
53925391 },
5393- "node_modules/google-translate-api-browser": {
5394- "version": "3.0.1",
5395- "resolved": "https://registry.npmjs.org/google-translate-api-browser/-/google-translate-api-browser-3.0.1.tgz",
5396- "integrity": "sha512-KTLodkyGBWMK9IW6QIeJ2zCuju4Z0CLpbkADKo+yLhbSTD4l+CXXpQ/xaynGVAzeBezzJG6qn8MLeqOq3SmW0A==",
5397- "license": "MIT"
5398- },
53995392 "node_modules/google-translate-api-x": {
54005393 "version": "10.7.2",
54015394 "resolved": "https://registry.npmjs.org/google-translate-api-x/-/google-translate-api-x-10.7.2.tgz",
package.json+0 -1
@@ -49,7 +49,6 @@
4949 "express": "^4.21.0",
5050 "form-data": "^4.0.4",
5151 "fuse.js": "^7.1.0",
52- "google-translate-api-browser": "^3.0.1",
5352 "google-translate-api-x": "^10.7.2",
5453 "handlebars": "^4.7.8",
5554 "helmet": "^8.1.0",
src/endpoints/translate.js+5 -41
@@ -1,10 +1,8 @@
1-import { createRequire } from 'node:module';
2-
31import fetch from 'node-fetch';
42import express from 'express';
53import { translate as bingTranslate } from 'bing-translate-api';
6-import iconv from 'iconv-lite';
74import urlJoin from 'url-join';
5+import { Translator } from 'google-translate-api-x';
86
97import { readSecret, SECRET_KEYS } from './secrets.js';
108import { getConfigValue, uuidv4 } from '../util.js';
@@ -15,30 +13,6 @@ const LINGVA_DEFAULT = 'https://lingva.ml/api/v1';
1513
1614export const router = express.Router();
1715
18-/**
19- * Get the Google Translate API client.
20- * @returns {import('google-translate-api-browser')} Google Translate API client
21- */
22-function getGoogleTranslateClient() {
23- const require = createRequire(import.meta.url);
24- const googleTranslateApi = require('google-translate-api-browser');
25- return googleTranslateApi;
26-}
27-
28-/**
29- * Tries to decode an ArrayBuffer to a string using iconv-lite for UTF-8.
30- * @param {ArrayBuffer} buffer ArrayBuffer
31- * @returns {string} Decoded string
32- */
33-function decodeBuffer(buffer) {
34- try {
35- return iconv.decode(Buffer.from(buffer), 'utf-8');
36- } catch (error) {
37- console.error('Failed to decode buffer:', error);
38- return Buffer.from(buffer).toString('utf-8');
39- }
40-}
41-
4216router.post('/libre', async (request, response) => {
4317 try {
4418 const key = readSecret(request.user.directories, SECRET_KEYS.LIBRE);
@@ -101,8 +75,8 @@ router.post('/libre', async (request, response) => {
10175
10276router.post('/google', async (request, response) => {
10377 try {
10478 const text = String(request.body.text ?? '');
10579 const lang = String(request.body.lang ?? '');
10680
10781 if (!text || !lang) {
10882 return response.sendStatus(400);
@@ -110,18 +84,8 @@ router.post('/google', async (request, response) => {
11084
11185 console.debug('Input text: ' + text);
11286
11387 const {translator generateRequestUrl,= normaliseResponsenew }Translator({ =to: getGoogleTranslateClient(lang });
114- const requestUrl = generateRequestUrl(text, { to: lang });
88+ const translatedText = await translator.translate(text).then(result => result.text);
115- const result = await fetch(requestUrl);
116-
117- if (!result.ok) {
118- console.warn('Google Translate error: ', result.statusText);
119- return response.sendStatus(500);
120- }
121-
122- const buffer = await result.arrayBuffer();
123- const translateResponse = normaliseResponse(JSON.parse(decodeBuffer(buffer)));
124- const translatedText = translateResponse.text;
12589
12690 response.setHeader('Content-Type', 'text/plain; charset=utf-8');
12791 console.debug('Translated text: ' + translatedText);