diff --git a/frontend/e2e/lang.spec.ts b/frontend/e2e/lang.spec.ts
index b7475e9a..b0efc845 100644
--- a/frontend/e2e/lang.spec.ts
+++ b/frontend/e2e/lang.spec.ts
@@ -58,3 +58,20 @@ test.describe('Language selector', () => {
await expect(deBtn).toHaveClass(/font-bold/);
});
});
+
+test.describe('Mobile nav — i18n', () => {
+ test('hamburger button aria-label translates to EN on narrow viewport', async ({ browser }) => {
+ const context = await browser.newContext({
+ viewport: { width: 375, height: 812 },
+ storageState: 'e2e/.auth/user.json'
+ });
+ const page = await context.newPage();
+ await page.goto('/');
+ await page.waitForSelector('[data-hydrated]');
+ await page.getByRole('banner').getByRole('button', { name: 'EN', exact: true }).click();
+
+ await expect(page.getByRole('button', { name: 'Open menu' })).toBeVisible();
+
+ await context.close();
+ });
+});
diff --git a/frontend/messages/de.json b/frontend/messages/de.json
index 72254cf3..dcd08246 100644
--- a/frontend/messages/de.json
+++ b/frontend/messages/de.json
@@ -28,6 +28,8 @@
"nav_conversations": "Briefwechsel",
"nav_admin": "Admin",
"nav_logout": "Abmelden",
+ "layout_menu_open": "Menü öffnen",
+ "layout_menu_close": "Menü schließen",
"theme_toggle_to_light": "Zu hellem Design wechseln",
"theme_toggle_to_dark": "Zu dunklem Design wechseln",
"btn_save": "Speichern",
@@ -394,6 +396,10 @@
"doc_panel_discussion_annotation_tab": "Annotation · Seite {page}",
"pdf_annotations_show": "Annotierungen anzeigen",
"pdf_annotations_hide": "Annotierungen verbergen",
+ "viewer_previous_page": "Zurück",
+ "viewer_next_page": "Weiter",
+ "viewer_zoom_out": "Verkleinern",
+ "viewer_zoom_in": "Vergrößern",
"upload_action": "Hochladen",
"upload_drop_hint": "Einzeln oder mehrere Dateien auf einmal hochladen",
"upload_accepted_types": "PDF, JPEG, PNG, TIFF",
@@ -655,6 +661,7 @@
"transcription_block_segmentation_only": "Nur Segmentierung",
"training_chip_kurrent": "Kurrent-Erkennung",
"training_chip_segmentation": "Segmentierung",
+ "transcribe_mark_for_training": "Für Training vormerken",
"training_col_type": "Typ",
"training_type_base": "Basis",
"training_type_personalized": "Personalisiert",
diff --git a/frontend/messages/en.json b/frontend/messages/en.json
index b8b6dd68..f915633e 100644
--- a/frontend/messages/en.json
+++ b/frontend/messages/en.json
@@ -28,6 +28,8 @@
"nav_conversations": "Letters",
"nav_admin": "Admin",
"nav_logout": "Sign out",
+ "layout_menu_open": "Open menu",
+ "layout_menu_close": "Close menu",
"theme_toggle_to_light": "Switch to light mode",
"theme_toggle_to_dark": "Switch to dark mode",
"btn_save": "Save",
@@ -394,6 +396,10 @@
"doc_panel_discussion_annotation_tab": "Annotation · Page {page}",
"pdf_annotations_show": "Show annotations",
"pdf_annotations_hide": "Hide annotations",
+ "viewer_previous_page": "Previous page",
+ "viewer_next_page": "Next page",
+ "viewer_zoom_out": "Zoom out",
+ "viewer_zoom_in": "Zoom in",
"upload_action": "Upload",
"upload_drop_hint": "Drop one or multiple files at once",
"upload_accepted_types": "PDF, JPEG, PNG, TIFF",
@@ -655,6 +661,7 @@
"transcription_block_segmentation_only": "Segmentation only",
"training_chip_kurrent": "Kurrent recognition",
"training_chip_segmentation": "Segmentation",
+ "transcribe_mark_for_training": "Mark for OCR training",
"training_col_type": "Type",
"training_type_base": "Base",
"training_type_personalized": "Personalized",
diff --git a/frontend/messages/es.json b/frontend/messages/es.json
index 0943943e..1f1dec02 100644
--- a/frontend/messages/es.json
+++ b/frontend/messages/es.json
@@ -28,6 +28,8 @@
"nav_conversations": "Cartas",
"nav_admin": "Admin",
"nav_logout": "Cerrar sesión",
+ "layout_menu_open": "Abrir menú",
+ "layout_menu_close": "Cerrar menú",
"theme_toggle_to_light": "Cambiar a modo claro",
"theme_toggle_to_dark": "Cambiar a modo oscuro",
"btn_save": "Guardar",
@@ -394,6 +396,10 @@
"doc_panel_discussion_annotation_tab": "Anotación · Página {page}",
"pdf_annotations_show": "Mostrar anotaciones",
"pdf_annotations_hide": "Ocultar anotaciones",
+ "viewer_previous_page": "Página anterior",
+ "viewer_next_page": "Página siguiente",
+ "viewer_zoom_out": "Reducir",
+ "viewer_zoom_in": "Ampliar",
"upload_action": "Subir",
"upload_drop_hint": "Uno o varios archivos a la vez",
"upload_accepted_types": "PDF, JPEG, PNG, TIFF",
@@ -655,6 +661,7 @@
"transcription_block_segmentation_only": "Solo segmentación",
"training_chip_kurrent": "Reconocimiento Kurrent",
"training_chip_segmentation": "Segmentación",
+ "transcribe_mark_for_training": "Marcar para entrenamiento de OCR",
"training_col_type": "Tipo",
"training_type_base": "Base",
"training_type_personalized": "Personalizado",
diff --git a/frontend/src/lib/document/transcription/TranscriptionEditView.svelte b/frontend/src/lib/document/transcription/TranscriptionEditView.svelte
index b9aecafe..9aeb473e 100644
--- a/frontend/src/lib/document/transcription/TranscriptionEditView.svelte
+++ b/frontend/src/lib/document/transcription/TranscriptionEditView.svelte
@@ -303,7 +303,9 @@ async function handleLabelToggle(label: string) {
{#if canWrite && hasBlocks}
-
Für Training vormerken
+
+ {m.transcribe_mark_for_training()}
+
{#each [{ label: 'KURRENT_RECOGNITION', display: m.training_chip_kurrent() }, { label: 'KURRENT_SEGMENTATION', display: m.training_chip_segmentation() }] as chip (chip.label)}