diff --git a/frontend/.prettierignore b/frontend/.prettierignore index 852473db..4a03d881 100644 --- a/frontend/.prettierignore +++ b/frontend/.prettierignore @@ -17,6 +17,7 @@ bun.lockb /src/lib/generated/ /src/lib/paraglide/ /src/lib/paraglide_bak*/ +/src/paraglide/ # Test artifacts /test-results/ diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 53fd4114..72b07b37 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -423,5 +423,33 @@ "notification_empty_history_body": "Hier erscheinen Erwähnungen und Antworten auf deine Kommentare.", "notification_row_aria": "{actor} {type} auf \u201e{title}\u201c \u2014 {time} \u2014 {readState}", "notification_read_state_read": "gelesen", - "notification_read_state_unread": "ungelesen" + "notification_read_state_unread": "ungelesen", + "error_transcription_block_not_found": "Der Transkriptionsblock wurde nicht gefunden.", + "error_transcription_block_conflict": "Der Block wurde zwischenzeitlich von jemand anderem geändert. Bitte laden Sie die Seite neu.", + "doc_details_toggle": "Details", + "doc_details_section_details": "Details", + "doc_details_section_persons": "Personen", + "doc_details_section_tags": "Schlagwörter", + "doc_details_field_date": "Datum", + "doc_details_field_sender": "Absender", + "doc_details_field_receivers": "Empfänger", + "doc_details_field_status": "Status", + "doc_details_no_persons": "Keine Personen zugeordnet", + "doc_details_no_tags": "Keine Schlagwörter zugeordnet", + "doc_details_more_receivers": "+{count} weitere", + "transcription_mode_label": "Transkribieren", + "transcription_mode_stop": "Fertig", + "transcription_block_placeholder": "Text hier eingeben...", + "transcription_block_save_saving": "Speichere...", + "transcription_block_save_saved": "Gespeichert", + "transcription_block_save_error": "Nicht gespeichert", + "transcription_block_save_retry": "Erneut versuchen", + "transcription_block_comment_btn": "Kommentieren", + "transcription_block_quote_hint": "Text markieren für Zitat", + "transcription_block_delete_confirm": "Block und alle zugehörigen Kommentare wirklich löschen?", + "transcription_block_history_btn": "Verlauf", + "transcription_empty_cta": "Markiere einen Bereich auf dem Scan, um mit der Transkription zu beginnen", + "transcription_draw_tooltip": "Klicken und ziehen, um einen Textbereich zu markieren", + "transcription_quote_stale": "Zitat aus älterer Version", + "transcription_block_conflict": "Dieser Block wurde von jemand anderem geändert — bitte neu laden" } diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 3ad3cfdb..e9780c21 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -423,5 +423,33 @@ "notification_empty_history_body": "Mentions and replies to your comments will appear here.", "notification_row_aria": "{actor} {type} on \"{title}\" — {time} — {readState}", "notification_read_state_read": "read", - "notification_read_state_unread": "unread" + "notification_read_state_unread": "unread", + "error_transcription_block_not_found": "Transcription block not found.", + "error_transcription_block_conflict": "This block was modified by someone else. Please reload the page.", + "doc_details_toggle": "Details", + "doc_details_section_details": "Details", + "doc_details_section_persons": "Persons", + "doc_details_section_tags": "Tags", + "doc_details_field_date": "Date", + "doc_details_field_sender": "Sender", + "doc_details_field_receivers": "Receivers", + "doc_details_field_status": "Status", + "doc_details_no_persons": "No persons assigned", + "doc_details_no_tags": "No tags assigned", + "doc_details_more_receivers": "+{count} more", + "transcription_mode_label": "Transcribe", + "transcription_mode_stop": "Done", + "transcription_block_placeholder": "Type text here...", + "transcription_block_save_saving": "Saving...", + "transcription_block_save_saved": "Saved", + "transcription_block_save_error": "Not saved", + "transcription_block_save_retry": "Retry", + "transcription_block_comment_btn": "Comment", + "transcription_block_quote_hint": "Select text to quote", + "transcription_block_delete_confirm": "Really delete this block and all its comments?", + "transcription_block_history_btn": "History", + "transcription_empty_cta": "Mark a region on the scan to start transcribing", + "transcription_draw_tooltip": "Click and drag to mark a text region", + "transcription_quote_stale": "Quote from an older version", + "transcription_block_conflict": "This block was changed by someone else — please reload" } diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 8f8110c2..b199fb3e 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -423,5 +423,33 @@ "notification_empty_history_body": "Aquí aparecerán las menciones y respuestas a tus comentarios.", "notification_row_aria": "{actor} {type} en \"{title}\" — {time} — {readState}", "notification_read_state_read": "leído", - "notification_read_state_unread": "no leído" + "notification_read_state_unread": "no leído", + "error_transcription_block_not_found": "Bloque de transcripción no encontrado.", + "error_transcription_block_conflict": "Este bloque fue modificado por otra persona. Por favor, recargue la página.", + "doc_details_toggle": "Detalles", + "doc_details_section_details": "Detalles", + "doc_details_section_persons": "Personas", + "doc_details_section_tags": "Etiquetas", + "doc_details_field_date": "Fecha", + "doc_details_field_sender": "Remitente", + "doc_details_field_receivers": "Destinatarios", + "doc_details_field_status": "Estado", + "doc_details_no_persons": "No hay personas asignadas", + "doc_details_no_tags": "No hay etiquetas asignadas", + "doc_details_more_receivers": "+{count} más", + "transcription_mode_label": "Transcribir", + "transcription_mode_stop": "Listo", + "transcription_block_placeholder": "Escriba el texto aquí...", + "transcription_block_save_saving": "Guardando...", + "transcription_block_save_saved": "Guardado", + "transcription_block_save_error": "No guardado", + "transcription_block_save_retry": "Reintentar", + "transcription_block_comment_btn": "Comentar", + "transcription_block_quote_hint": "Seleccione texto para citar", + "transcription_block_delete_confirm": "¿Realmente eliminar este bloque y todos sus comentarios?", + "transcription_block_history_btn": "Historial", + "transcription_empty_cta": "Marque una región en el escaneo para comenzar a transcribir", + "transcription_draw_tooltip": "Haga clic y arrastre para marcar una región de texto", + "transcription_quote_stale": "Cita de una versión anterior", + "transcription_block_conflict": "Este bloque fue cambiado por otra persona — por favor recargue" } diff --git a/frontend/src/lib/errors.ts b/frontend/src/lib/errors.ts index d5964198..eaa402ed 100644 --- a/frontend/src/lib/errors.ts +++ b/frontend/src/lib/errors.ts @@ -18,6 +18,8 @@ export type ErrorCode = | 'INVALID_RESET_TOKEN' | 'ANNOTATION_NOT_FOUND' | 'ANNOTATION_OVERLAP' + | 'TRANSCRIPTION_BLOCK_NOT_FOUND' + | 'TRANSCRIPTION_BLOCK_CONFLICT' | 'COMMENT_NOT_FOUND' | 'UNAUTHORIZED' | 'FORBIDDEN' @@ -74,6 +76,10 @@ export function getErrorMessage(code: ErrorCode | string | undefined): string { return m.error_annotation_not_found(); case 'ANNOTATION_OVERLAP': return m.error_annotation_overlap(); + case 'TRANSCRIPTION_BLOCK_NOT_FOUND': + return m.error_transcription_block_not_found(); + case 'TRANSCRIPTION_BLOCK_CONFLICT': + return m.error_transcription_block_conflict(); case 'COMMENT_NOT_FOUND': return m.error_comment_not_found(); case 'UNAUTHORIZED':