Files
familienarchiv/frontend/src/lib/ocr/translateOcrProgress.ts
Marcel ddec64fc79 feat(ocr): extract translateOcrProgress with ANALYZING_PAGE and DONE:skipped support
Move translateOcrProgress from page.svelte to a testable module.
Return structured result with currentPage/totalPages/skippedPages
for the progress bar. Add ANALYZING_PAGE and DONE with skipped pages
parsing. Add i18n keys for de/en/es.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 10:09:29 +02:00

57 lines
1.4 KiB
TypeScript

import { m } from '$lib/paraglide/messages.js';
export interface OcrProgressResult {
message: string;
currentPage?: number;
totalPages?: number;
skippedPages?: number;
}
export function translateOcrProgress(code: string): OcrProgressResult {
if (!code) return { message: m.ocr_progress_heading() };
const parts = code.split(':');
const key = parts[0];
switch (key) {
case 'PREPARING':
return { message: m.ocr_status_preparing() };
case 'LOADING':
return { message: m.ocr_status_loading() };
case 'ANALYZING':
return { message: m.ocr_status_analyzing() };
case 'CREATING_BLOCKS':
return { message: m.ocr_status_creating_blocks({ count: parts[1] ?? '0' }) };
case 'DONE': {
const count = parts[1] ?? '0';
const skipped = parts[2] ? parseInt(parts[2], 10) : 0;
if (skipped > 0) {
return {
message: m.ocr_status_done_skipped({
count,
skipped: String(skipped)
}),
skippedPages: skipped
};
}
return { message: m.ocr_status_done_blocks({ count }) };
}
case 'ANALYZING_PAGE': {
const current = parseInt(parts[1] ?? '0', 10);
const total = parseInt(parts[2] ?? '0', 10);
return {
message: m.ocr_status_analyzing_page({
current: String(current),
total: String(total)
}),
currentPage: current,
totalPages: total
};
}
case 'ERROR':
return { message: m.ocr_status_error() };
default:
return { message: code };
}
}