feat(i18n): add translation keys for metadata drawer and transcription

Keys for #175: doc_details_toggle, section headings, field labels, empty states
Keys for #176: transcription mode, block editing, save states, comments, drawing hints
Error codes: TRANSCRIPTION_BLOCK_NOT_FOUND, TRANSCRIPTION_BLOCK_CONFLICT
All three languages: de, en, es

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-05 11:16:22 +02:00
parent a46b1a2e84
commit 234f83c40b
5 changed files with 94 additions and 3 deletions

View File

@@ -17,6 +17,7 @@ bun.lockb
/src/lib/generated/
/src/lib/paraglide/
/src/lib/paraglide_bak*/
/src/paraglide/
# Test artifacts
/test-results/

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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':