From 7eb81e2e2277340ad95f31f967a8b5beed650370 Mon Sep 17 00:00:00 2001 From: rajchales-monito Date: Thu, 30 Jul 2026 08:43:38 +0200 Subject: [PATCH] Use message translator for widget copy --- server.js | 40 ++++++++++------------------------------ 1 file changed, 10 insertions(+), 30 deletions(-) diff --git a/server.js b/server.js index 905d03b..caea42d 100644 --- a/server.js +++ b/server.js @@ -1191,32 +1191,17 @@ async function translateWidgetCopyOnce(sourceCopy, sourceLanguage, targetLanguag const settings = getTranslationSettings(); if (!settings.enabled || !settings.openaiApiKey || !targetLanguage || sourceLanguage === targetLanguage) return null; try { - const response = await fetch("https://api.openai.com/v1/responses", { - method: "POST", - headers: { - "Authorization": `Bearer ${settings.openaiApiKey}`, - "Content-Type": "application/json" - }, - body: JSON.stringify({ - model: settings.model, - input: [ - { - role: "system", - content: "Translate UI copy for a live chat widget. Return only compact JSON with the same keys. Preserve brand names and meaning. Keep labels short." - }, - { - role: "user", - content: JSON.stringify({ sourceLanguage, targetLanguage, copy: sourceCopy }) - } - ] - }) - }); - if (!response.ok) { - const openAiError = await openAiErrorFromResponse(response); - throw new Error(openAiError.message); + const translatedCopy = {}; + for (const field of WIDGET_COPY_FIELDS) { + const value = String(sourceCopy[field] || "").trim(); + if (!value) { + translatedCopy[field] = ""; + continue; + } + const result = await translateText(value, targetLanguage, settings.model, settings.openaiApiKey); + translatedCopy[field] = String(result.translatedText || value).trim(); } - const data = await response.json(); - const translated = normalizeWidgetCopyEntry(parseJsonBlock(outputTextFromResponse(data)), targetLanguage); + const translated = normalizeWidgetCopyEntry(translatedCopy, targetLanguage); if (widgetCopyLooksUntranslated(sourceCopy, translated)) return null; return translated; } catch (error) { @@ -1230,11 +1215,6 @@ function widgetCopyLooksUntranslated(sourceCopy, translatedCopy) { return importantFields.every((field) => String(sourceCopy[field] || "").trim() === String(translatedCopy[field] || "").trim()); } -function parseJsonBlock(value) { - const text = String(value || "").trim().replace(/^```(?:json)?/i, "").replace(/```$/, "").trim(); - return JSON.parse(text); -} - function syncLegacyWidgetCopy(settings) { for (const language of Object.keys(settings.widgetCopy || {})) { const copy = settings.widgetCopy[language];