Skip to content

Commit

Permalink
Revert Google Translate client library
Browse files Browse the repository at this point in the history
  • Loading branch information
Cohee1207 committed Oct 26, 2024
1 parent da18b5e commit d716bc0
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 3 deletions.
7 changes: 7 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
41 changes: 38 additions & 3 deletions src/endpoints/translate.js
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit d716bc0

Please sign in to comment.