diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 51b10005..3354ac57 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -330,6 +330,7 @@ "comment_time_days": "vor {count} Tag(en)", "comment_panel_title": "Kommentare", "comment_panel_close": "Schließen", + "comp_dismiss": "Schließen", "doc_panel_tab_metadata": "Metadaten", "doc_panel_tab_transcription": "Transkription", "doc_panel_tab_discussion": "Diskussion", @@ -541,6 +542,7 @@ "training_start_btn": "Training starten", "training_in_progress": "…", "training_success": "Training wurde gestartet und abgeschlossen.", + "training_start_failed": "Training konnte nicht gestartet werden. Bitte versuche es erneut.", "training_too_few_blocks": "Mindestens 5 geprüfte Blöcke erforderlich (aktuell: {available}).", "training_service_down": "OCR-Dienst ist nicht erreichbar.", "training_history_heading": "Verlauf", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index b6016949..4c338b66 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -330,6 +330,7 @@ "comment_time_days": "{count} day(s) ago", "comment_panel_title": "Comments", "comment_panel_close": "Close", + "comp_dismiss": "Dismiss", "doc_panel_tab_metadata": "Metadata", "doc_panel_tab_transcription": "Transcription", "doc_panel_tab_discussion": "Discussion", @@ -541,6 +542,7 @@ "training_start_btn": "Start training", "training_in_progress": "…", "training_success": "Training started and completed.", + "training_start_failed": "Failed to start training. Please try again.", "training_too_few_blocks": "At least 5 reviewed blocks required (currently: {available}).", "training_service_down": "OCR service is unavailable.", "training_history_heading": "History", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 19487b65..529a7f64 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -330,6 +330,7 @@ "comment_time_days": "hace {count} día(s)", "comment_panel_title": "Comentarios", "comment_panel_close": "Cerrar", + "comp_dismiss": "Cerrar", "doc_panel_tab_metadata": "Metadatos", "doc_panel_tab_transcription": "Transcripción", "doc_panel_tab_discussion": "Discusión", @@ -541,6 +542,7 @@ "training_start_btn": "Iniciar entrenamiento", "training_in_progress": "…", "training_success": "Entrenamiento iniciado y completado.", + "training_start_failed": "No se pudo iniciar el entrenamiento. Por favor, inténtalo de nuevo.", "training_too_few_blocks": "Se requieren al menos 5 bloques revisados (actualmente: {available}).", "training_service_down": "El servicio OCR no está disponible.", "training_history_heading": "Historial", diff --git a/frontend/src/lib/components/OcrTrainingCard.svelte b/frontend/src/lib/components/OcrTrainingCard.svelte index d6483f1e..eb48d3ec 100644 --- a/frontend/src/lib/components/OcrTrainingCard.svelte +++ b/frontend/src/lib/components/OcrTrainingCard.svelte @@ -21,6 +21,7 @@ let { trainingInfo }: Props = $props(); let training = $state(false); let successMessage = $state(null); +let errorMessage = $state(null); const available = $derived(trainingInfo?.availableBlocks ?? 0); const tooFewBlocks = $derived(available < 5); @@ -30,6 +31,7 @@ const disabled = $derived(training || tooFewBlocks || serviceDown); async function startTraining() { training = true; successMessage = null; + errorMessage = null; try { const res = await fetch('/api/ocr/train', { method: 'POST' }); if (res.ok) { @@ -37,7 +39,11 @@ async function startTraining() { setTimeout(() => { successMessage = null; }, 5000); + } else { + errorMessage = m.training_start_failed(); } + } catch { + errorMessage = m.training_start_failed(); } finally { training = false; } @@ -72,7 +78,19 @@ async function startTraining() { {/if} {#if successMessage} -

{successMessage}

+

+ {successMessage} + +

+ {/if} + + {#if errorMessage} +

{errorMessage}

{/if}