From eaefd4091e42bb71bc7738b96fb07777b31182c7 Mon Sep 17 00:00:00 2001 From: Marcel Date: Fri, 17 Apr 2026 14:27:42 +0200 Subject: [PATCH] feat(ocr): add PREPROCESSING_PAGE progress translation and i18n strings Co-Authored-By: Claude Sonnet 4.6 --- frontend/messages/de.json | 1 + frontend/messages/en.json | 1 + frontend/messages/es.json | 1 + frontend/src/lib/ocr/translateOcrProgress.spec.ts | 9 +++++++++ frontend/src/lib/ocr/translateOcrProgress.ts | 12 ++++++++++++ 5 files changed, 24 insertions(+) diff --git a/frontend/messages/de.json b/frontend/messages/de.json index d043357a..72ae0b6b 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -526,6 +526,7 @@ "ocr_status_creating_blocks": "{count} Textblöcke erkannt — erstelle Transkription…", "ocr_status_done_blocks": "{count} Blöcke erstellt", "ocr_status_analyzing_page": "Seite {current} von {total} wird analysiert…", + "ocr_status_preprocessing_page": "Seite {current} von {total} wird aufbereitet…", "ocr_status_done_skipped": "{count} Blöcke erstellt, {skipped} Seite(n) übersprungen", "ocr_status_error": "OCR fehlgeschlagen", "ocr_trigger_no_annotations": "Zeichnen Sie zuerst Bereiche auf dem Dokument ein.", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 5e79d77a..c3711b3f 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -526,6 +526,7 @@ "ocr_status_creating_blocks": "{count} text blocks detected — creating transcription…", "ocr_status_done_blocks": "{count} blocks created", "ocr_status_analyzing_page": "Analyzing page {current} of {total}…", + "ocr_status_preprocessing_page": "Preparing page {current} of {total}…", "ocr_status_done_skipped": "{count} blocks created, {skipped} page(s) skipped", "ocr_status_error": "OCR failed", "ocr_trigger_no_annotations": "Draw regions on the document first.", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 0b3e078b..c87a2d25 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -526,6 +526,7 @@ "ocr_status_creating_blocks": "{count} bloques de texto detectados — creando transcripción…", "ocr_status_done_blocks": "{count} bloques creados", "ocr_status_analyzing_page": "Analizando página {current} de {total}…", + "ocr_status_preprocessing_page": "Preparando página {current} de {total}…", "ocr_status_done_skipped": "{count} bloques creados, {skipped} página(s) omitida(s)", "ocr_status_error": "OCR fallido", "ocr_trigger_no_annotations": "Dibuje regiones en el documento primero.", diff --git a/frontend/src/lib/ocr/translateOcrProgress.spec.ts b/frontend/src/lib/ocr/translateOcrProgress.spec.ts index 62df0dd6..e0114aaf 100644 --- a/frontend/src/lib/ocr/translateOcrProgress.spec.ts +++ b/frontend/src/lib/ocr/translateOcrProgress.spec.ts @@ -12,6 +12,8 @@ vi.mock('$lib/paraglide/messages.js', () => ({ `${count} Blöcke erstellt, ${skipped} Seite(n) übersprungen`, ocr_status_analyzing_page: ({ current, total }: { current: string; total: string }) => `Seite ${current} von ${total} wird analysiert…`, + ocr_status_preprocessing_page: ({ current, total }: { current: string; total: string }) => + `Seite ${current} von ${total} wird aufbereitet…`, ocr_status_error: () => 'OCR fehlgeschlagen' } })); @@ -68,6 +70,13 @@ describe('translateOcrProgress', () => { expect(result.totalPages).toBe(5); }); + it('translates PREPROCESSING_PAGE with current and total', () => { + const result = translateOcrProgress('PREPROCESSING_PAGE:3:10'); + expect(result.message).toBe('Seite 3 von 10 wird aufbereitet…'); + expect(result.currentPage).toBe(3); + expect(result.totalPages).toBe(10); + }); + it('translates ERROR', () => { expect(translateOcrProgress('ERROR').message).toBe('OCR fehlgeschlagen'); }); diff --git a/frontend/src/lib/ocr/translateOcrProgress.ts b/frontend/src/lib/ocr/translateOcrProgress.ts index 370bb9c8..2dcbd93c 100644 --- a/frontend/src/lib/ocr/translateOcrProgress.ts +++ b/frontend/src/lib/ocr/translateOcrProgress.ts @@ -48,6 +48,18 @@ export function translateOcrProgress(code: string): OcrProgressResult { totalPages: total }; } + case 'PREPROCESSING_PAGE': { + const current = parseInt(parts[1] ?? '0', 10); + const total = parseInt(parts[2] ?? '0', 10); + return { + message: m.ocr_status_preprocessing_page({ + current: String(current), + total: String(total) + }), + currentPage: current, + totalPages: total + }; + } case 'ERROR': return { message: m.ocr_status_error() }; default: