Improved rus google translate

This commit is contained in:
Himickoff 2024-07-14 00:32:19 +07:00
parent 8e17117854
commit 898657dde4
1 changed files with 44 additions and 20 deletions

View File

@ -61,9 +61,16 @@ router.post('/libre', jsonParser, async (request, response) => {
} }
}); });
const iconv = require('iconv-lite');
const { generateRequestUrl, normaliseResponse } = require('google-translate-api-browser');
const bodyParser = require('body-parser');
router.post('/google', jsonParser, async (request, response) => { router.post('/google', jsonParser, async (request, response) => {
try { try {
const { generateRequestUrl, normaliseResponse } = require('google-translate-api-browser');
let text = request.body.text; let text = request.body.text;
const lang = request.body.lang; const lang = request.body.lang;
@ -71,43 +78,57 @@ router.post('/google', jsonParser, async (request, response) => {
return response.sendStatus(400); return response.sendStatus(400);
} }
console.log('Input text: ' + text); console.log('Input text:', text);
console.log('----------');
// Заменяем кавычки на специальные маркеры перед переводом // Заменяем кавычки и звездочки на специальные маркеры перед переводом с пробелами
const openQuote = '__OPEN_QUOTE__'; const openQuote = '__OPEN_QUOTE__ ';
const closeQuote = '__CLOSE_QUOTE__'; const closeQuote = ' __CLOSE_QUOTE__';
text = text.replace(/"/g, (match, offset) => { const openStar = '__OPEN_STAR__ ';
return offset % 2 === 0 ? openQuote : closeQuote; const closeStar = ' __CLOSE_STAR__';
});
// Заменяем звездочки на специальные маркеры // Очень редкий случай, вызванный правилами русской граматики
const openStar = '__OPEN_STAR__'; const very_rare_execption = '__OPEN_STAR__, ';
const closeStar = '__CLOSE_STAR__';
text = text.replace(/\*/g, (match, offset) => { // Используем счетчики для чередования между открывающими и закрывающими маркерами
return offset % 2 === 0 ? openStar : closeStar; let quoteCounter = 0;
}); let starCounter = 0;
text = text.replace(/"/g, () => (quoteCounter++ % 2 === 0 ? openQuote : closeQuote));
text = text.replace(/\*/g, () => (starCounter++ % 2 === 0 ? openStar : closeStar));
console.log('Pre-Input text:', text);
console.log('----------');
const url = generateRequestUrl(text, { to: lang }); const url = generateRequestUrl(text, { to: lang });
https.get(url, (resp) => { https.get(url, (resp) => {
let data = ''; let data = [];
resp.on('data', (chunk) => { resp.on('data', (chunk) => {
data += chunk; data.push(chunk);
}); });
resp.on('end', () => { resp.on('end', () => {
try { try {
const result = normaliseResponse(JSON.parse(data)); // Декодируем весь ответ после получения всех частей
console.log('Translated text: ' + result.text); const decodedData = iconv.decode(Buffer.concat(data), 'utf-8');
const result = normaliseResponse(JSON.parse(decodedData));
console.log('Pre-Translated text:', result.text);
console.log('----------');
// Восстанавливаем кавычки и звездочки после перевода // Восстанавливаем кавычки и звездочки после перевода
let fixedText = result.text let fixedText = result.text
.replace(new RegExp(openQuote, 'g'), '"') .replace(new RegExp(openQuote, 'g'), '"')
.replace(new RegExp(closeQuote, 'g'), '"') .replace(new RegExp(closeQuote, 'g'), '"')
.replace(new RegExp(openStar, 'g'), '*') .replace(new RegExp(openStar, 'g'), '*')
.replace(new RegExp(closeStar, 'g'), '*'); .replace(new RegExp(closeStar, 'g'), '*')
.replace(new RegExp(very_rare_execption, 'g'), '*');
console.log('Translated text:', fixedText);
response.setHeader('Content-Type', 'text/plain; charset=utf-8');
return response.send(fixedText); return response.send(fixedText);
} catch (error) { } catch (error) {
console.log('Translation error', error); console.log('Translation error', error);
@ -115,7 +136,7 @@ router.post('/google', jsonParser, async (request, response) => {
} }
}); });
}).on('error', (err) => { }).on('error', (err) => {
console.log('Translation error: ' + err.message); console.log('Translation error:', err.message);
return response.sendStatus(500); return response.sendStatus(500);
}); });
} catch (error) { } catch (error) {
@ -124,6 +145,9 @@ router.post('/google', jsonParser, async (request, response) => {
} }
}); });
router.post('/yandex', jsonParser, async (request, response) => { router.post('/yandex', jsonParser, async (request, response) => {
const chunks = request.body.chunks; const chunks = request.body.chunks;
const lang = request.body.lang; const lang = request.body.lang;