From 16de3b3a6ee17a248904b4d02062caeb96e797d6 Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Tue, 7 Apr 2026 08:35:04 +0200 Subject: [PATCH] feat: implement English to German translation for long descriptions --- src/components/EditPanel.tsx | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/components/EditPanel.tsx b/src/components/EditPanel.tsx index 27644c5..e71ea28 100644 --- a/src/components/EditPanel.tsx +++ b/src/components/EditPanel.tsx @@ -67,10 +67,22 @@ export function EditPanel({ row, rowIndex, onSave, onClose, onCaptureState }: Ed let prompt = ''; const baseContext = `Article Name: ${row[COLUMNS.ARTICLE_NAME]}\nArticle Details (EN): ${row[COLUMNS.DETAILS_EN] || 'N/A'}\nArticle Details (DE): ${row[COLUMNS.DETAILS_DE] || 'N/A'}`; - const systemPrompt = "You are a professional copywriter and expert translator for CRAZE GmbH, a German toy company. You excel at translating product descriptions from German to English, maintaining the commercial and professional tone while ensuring all technical toy details are accurate. Use clear, engaging language."; + const systemPrompt = "You are a professional copywriter and expert translator for CRAZE GmbH, a German toy company. You excel at translating product descriptions between German and English, maintaining the commercial and professional tone while ensuring all technical toy details are accurate. Use clear, engaging language."; if (field === 'longDe') { - prompt = `Based on the following product details, generate a long commercial description in German. It should be fluent, oriented towards B2B toy buyers, 3-5 paragraphs long. Include features, benefits, and material if available.\n\n${baseContext}`; + if (formData.longEn) { + prompt = `Translate the EVERYTHING below from English into professional German. + CRITICAL INSTRUCTIONS: + 1. Do NOT summarize. + 2. Maintain the EXACT same length and detailed information. + 3. Keep all technical specs intact. + 4. Translate every single paragraph into natural, commercial German for toy buyers. + + English Text to Translate: + ${formData.longEn}`; + } else { + prompt = `Based on the following product details, generate a long commercial description in German. It should be fluent, oriented towards B2B toy buyers, 3-5 paragraphs long. Include features, benefits, and material if available.\n\n${baseContext}`; + } } else if (field === 'longEn') { if (formData.longDe) { prompt = `Translate the EVERYTHING below from German into professional English. @@ -78,7 +90,7 @@ export function EditPanel({ row, rowIndex, onSave, onClose, onCaptureState }: Ed 1. Do NOT summarize. 2. Maintain the EXACT same length and detailed information. 3. Keep all technical specs intact. - 4. Translate every single paragraph. + 4. Translate every single paragraph into natural, commercial English for toy buyers. German Text to Translate: ${formData.longDe}`; @@ -86,7 +98,9 @@ export function EditPanel({ row, rowIndex, onSave, onClose, onCaptureState }: Ed prompt = `Based on the following product details, generate a long commercial description in English. It should be fluent, oriented towards B2B toy buyers, 3-5 paragraphs long.\n\n${baseContext}`; } } else if (field === 'shortDe') { - if (formData.longDe) { + if (formData.shortEn) { + prompt = `Translate exactly this short English product description into professional German for the toy market:\n\n${formData.shortEn}`; + } else if (formData.longDe) { prompt = `Create a short version (2-4 sentences max) of the following German product description:\n\n${formData.longDe}`; } else { prompt = `Based on the following product details, generate a short commercial description in German (2-4 sentences max).\n\n${baseContext}`; @@ -153,8 +167,9 @@ export function EditPanel({ row, rowIndex, onSave, onClose, onCaptureState }: Ed
- {((field === 'longEn' && formData.longDe) || - (field === 'shortDe' && formData.longDe) || + {((field === 'longDe' && formData.longEn) || + (field === 'longEn' && formData.longDe) || + (field === 'shortDe' && (formData.longDe || formData.shortEn)) || (field === 'shortEn' && (formData.shortDe || formData.longEn))) && (
@@ -167,7 +182,7 @@ export function EditPanel({ row, rowIndex, onSave, onClose, onCaptureState }: Ed className="flex items-center gap-1.5 text-xs font-medium bg-blue-600/20 text-blue-400 hover:bg-blue-600 hover:text-white px-2 py-1 rounded transition-colors disabled:opacity-50" > {loadingField === field ? : } - {((field === 'longEn' && formData.longDe) || (field === 'shortEn' && formData.shortDe)) ? 'Translate with Gemini' : 'Generate with Gemini'} + {((field === 'longDe' && formData.longEn) || (field === 'longEn' && formData.longDe) || (field === 'shortDe' && formData.shortEn) || (field === 'shortEn' && formData.shortDe)) ? 'Translate with Gemini' : 'Generate with Gemini'}