import { Request, Response, NextFunction } from 'express'; import { translationService } from '../services/translationService'; interface TranslatedRequest extends Request { originalText?: string; translatedText?: string; detectedLanguage?: string; targetLanguage?: string; } export const translateIncomingText = async ( req: TranslatedRequest, res: Response, next: NextFunction ) => { try { // Skip translation if no text in body if (!req.body.text) { return next(); } // Store original text req.originalText = req.body.text; // Detect language if not specified if (!req.body.language) { const detection = await translationService.detectLanguage(req.body.text); req.detectedLanguage = detection.language; } // Translate to English if not already in English const sourceLanguage = req.body.language || req.detectedLanguage; if (sourceLanguage && sourceLanguage !== 'en') { const translation = await translationService.translateToEnglish(req.body.text); req.translatedText = translation.translatedText; // Replace the text in the request with translated version req.body.text = translation.translatedText; } next(); } catch (error) { console.error('Translation middleware error:', error); next(error); } }; export const translateOutgoingResponse = async ( req: TranslatedRequest, res: Response, next: NextFunction ) => { try { // Store the original json method const originalJson = res.json; // Override the json method res.json = function(body: any) { const translatedBody = Promise.resolve().then(async () => { try { // If there's a response text and original request wasn't in English if (body.text && req.detectedLanguage && req.detectedLanguage !== 'en') { const translation = await translationService.translateFromEnglish( body.text, req.detectedLanguage ); body.originalText = body.text; body.text = translation.translatedText; body.language = req.detectedLanguage; } return body; } catch (error) { console.error('Response translation error:', error); return body; } }); return originalJson.call(res, body); }; next(); } catch (error) { console.error('Translation middleware error:', error); next(error); } };