3b5ca04ebc
- Add LocaleProvider + useLocale() hook with AsyncStorage persistence to mobile i18n - Replace all hardcoded English strings in every screen with t() calls - Add missing profile.settings/language keys to all 5 translation files (en/de/es/fr/it) - Wrap app root in LocaleProvider; apply server preferred_language on login in AuthGuard - Tab labels and header titles now re-render on language switch - ProfileScreen: use useLocale() context, sync language to server via POST /api/i18n/language - Backend: add preferred_language field to GET /api/mobile/whoami response - Mobile API: add preferred_language to WhoAmIResponse type + setServerLanguage() method - Tests: add test_whoami_returns_preferred_language and test_whoami_no_profile_preferred_language_is_null - Docs: update MobileApp.md with language sync priority and whoami response format Language priority: server preference > AsyncStorage > device locale > English fallback Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
117 lines
4.9 KiB
JSON
117 lines
4.9 KiB
JSON
{
|
||
"common": {
|
||
"retry": "Erneut versuchen",
|
||
"cancel": "Abbrechen",
|
||
"back": "Zurück",
|
||
"error": "Fehler",
|
||
"loading": "Laden…",
|
||
"search": "Suchen",
|
||
"clear_search": "Suche löschen"
|
||
},
|
||
"welcome": {
|
||
"tagline": "Intelligente Dokumentenverarbeitung",
|
||
"description": "Dokumente einlesen, OCR durchführen, Metadaten mit KI extrahieren und Dateien in Ihren Cloud-Speicher leiten – alles in einer nahtlosen Pipeline.",
|
||
"get_started": "Loslegen",
|
||
"hint": "Verbinden Sie sich mit Ihrem selbst gehosteten oder Cloud-DocuElevate-Server.",
|
||
"feature_ocr_title": "OCR & Texterkennung",
|
||
"feature_ocr_desc": "Gescannte PDFs und Bilder automatisch in durchsuchbaren Text umwandeln.",
|
||
"feature_ai_title": "KI-Metadatenextraktion",
|
||
"feature_ai_desc": "KI klassifiziert Dokumente und extrahiert Schlüsselfelder wie Datum, Beträge und Betreff.",
|
||
"feature_cloud_title": "Multi-Cloud-Speicher",
|
||
"feature_cloud_desc": "Verarbeitete Dateien an Dropbox, Google Drive, OneDrive, S3, Nextcloud und mehr weiterleiten."
|
||
},
|
||
"login": {
|
||
"server_url": "Server-URL",
|
||
"server_url_placeholder": "https://ihr-docuelevate-server.com",
|
||
"sign_in_sso": "Mit SSO anmelden",
|
||
"scan_qr": "📱 QR-Code scannen zum Anmelden",
|
||
"hint": "Melden Sie sich per SSO an oder scannen Sie einen QR-Code aus der Web-App.",
|
||
"back": "← Zurück",
|
||
"or": "oder",
|
||
"server_url_required": "Server-URL erforderlich",
|
||
"server_url_required_msg": "Bitte geben Sie die URL Ihres DocuElevate-Servers ein.",
|
||
"invalid_url": "Ungültige URL",
|
||
"invalid_url_msg": "Die Server-URL muss mit http:// oder https:// beginnen",
|
||
"sign_in_failed": "Anmeldung fehlgeschlagen",
|
||
"qr_login_failed": "QR-Anmeldung fehlgeschlagen"
|
||
},
|
||
"upload": {
|
||
"camera": "Kamera",
|
||
"photos": "Fotos",
|
||
"files": "Dateien",
|
||
"camera_access_title": "Kamerazugriff erforderlich",
|
||
"camera_access_msg": "Bitte erlauben Sie den Kamerazugriff in den Einstellungen, um Dokumente aufzunehmen.",
|
||
"photo_access_title": "Fotobibliothek-Zugriff erforderlich",
|
||
"photo_access_msg": "Bitte erlauben Sie den Zugriff auf die Fotobibliothek in den Einstellungen.",
|
||
"file_picker_error": "Dateiauswahl-Fehler",
|
||
"file_picker_error_msg": "Dateiauswahl konnte nicht geöffnet werden",
|
||
"empty_title": "Tippen Sie auf Kamera, Fotos oder Dateien, um ein Dokument hochzuladen.",
|
||
"empty_hint": "Sie können auch Dateien aus anderen Apps direkt an DocuElevate senden.",
|
||
"sign_in_required": "Bitte melden Sie sich an, um Dokumente hochzuladen.",
|
||
"status_queued": "In der Warteschlange…",
|
||
"status_processing": "Wird verarbeitet…",
|
||
"status_completed": "Verarbeitet",
|
||
"status_failed": "Verarbeitung fehlgeschlagen",
|
||
"status_duplicate": "Duplikat – bereits verarbeitet",
|
||
"tap_retry": "Zum Wiederholen tippen",
|
||
"retry_title": "Upload wiederholen",
|
||
"retry_msg": "Möchten Sie den Upload von \"{filename}\" wiederholen?",
|
||
"capture_label": "Dokument mit Kamera aufnehmen",
|
||
"photo_label": "Foto aus der Bibliothek auswählen",
|
||
"file_label": "Datei vom Gerät auswählen"
|
||
},
|
||
"files": {
|
||
"title": "Meine Dokumente",
|
||
"search_placeholder": "Dokumente durchsuchen…",
|
||
"empty_title": "Noch keine Dokumente.",
|
||
"empty_hint": "Laden Sie ein Dokument über den Upload-Tab hoch.",
|
||
"search_empty": "Keine Dokumente gefunden.",
|
||
"search_empty_hint": "Versuchen Sie einen anderen Suchbegriff.",
|
||
"view_details": "Details für {filename} anzeigen"
|
||
},
|
||
"file_detail": {
|
||
"title": "Dateidetails",
|
||
"back": "Zurück zu Dateien",
|
||
"file_size": "Dateigröße",
|
||
"mime_type": "MIME-Typ",
|
||
"uploaded": "Hochgeladen",
|
||
"file_hash": "Datei-Hash",
|
||
"last_step": "Letzter Schritt",
|
||
"total_steps": "Gesamtschritte",
|
||
"processing_log": "Verarbeitungsprotokoll",
|
||
"no_logs": "Noch keine Verarbeitungsprotokolle.",
|
||
"file_not_found": "Datei nicht gefunden"
|
||
},
|
||
"profile": {
|
||
"title": "Profil",
|
||
"not_signed_in": "Nicht angemeldet",
|
||
"connection": "Verbindung",
|
||
"server": "Server",
|
||
"user_id": "Benutzer-ID",
|
||
"legal": "Rechtliches",
|
||
"privacy_policy": "Datenschutzrichtlinie",
|
||
"terms_of_service": "Nutzungsbedingungen",
|
||
"imprint": "Impressum",
|
||
"sign_out": "Abmelden",
|
||
"sign_out_title": "Abmelden",
|
||
"sign_out_msg": "Möchten Sie sich wirklich abmelden?",
|
||
"delete_account": "Konto löschen",
|
||
"delete_account_title": "Konto löschen",
|
||
"delete_account_msg": "Dadurch werden Ihr Konto und alle zugehörigen Daten dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.",
|
||
"could_not_open": "Konnte {page} nicht öffnen. Bitte versuchen Sie es erneut.",
|
||
"admin": "Admin",
|
||
"settings": "Einstellungen",
|
||
"language": "Sprache"
|
||
},
|
||
"legal": {
|
||
"privacy_policy": "Datenschutz",
|
||
"terms": "AGB",
|
||
"imprint": "Impressum"
|
||
},
|
||
"tabs": {
|
||
"upload": "Hochladen",
|
||
"files": "Dateien",
|
||
"profile": "Profil"
|
||
}
|
||
}
|