{ "translation": { "app": { "name": "Kapteins Daagbok", "tagline": "Privates Yacht-Logbuch", "beta": "Beta", "beta_hint": "Beta-Version — Funktionen können sich noch ändern" }, "footer": { "kofi_label": "Ko-fi", "kofi_title": "Projekt, Weiterentwicklung und Betriebskosten auf Ko-fi unterstützen" }, "languages": { "de": "Deutsch", "en": "English", "da": "Dansk", "sv": "Svenska", "nb": "Norsk" }, "dialog": { "ok": "OK", "yes": "Ja", "no": "Nein" }, "errors": { "load_failed": "Daten konnten nicht geladen werden.", "save_failed": "Änderungen konnten nicht gespeichert werden.", "delete_failed": "Löschen fehlgeschlagen.", "export_failed": "Export fehlgeschlagen." }, "common": { "unsaved_changes_title": "Ungespeicherte Änderungen", "unsaved_changes_message": "Du hast ungespeicherte Änderungen. Möchtest du die Seite wirklich verlassen? Deine Änderungen gehen verloren.", "unsaved_changes_stay": "Bleiben", "unsaved_changes_save_leave": "Speichern & verlassen", "unsaved_changes_discard": "Verwerfen", "unsaved_changes_leave": "Verlassen" }, "nav": { "dashboard": "Dashboard", "vessel": "Schiffsdaten", "crew": "Crew", "deviation": "Ablenkungstabelle", "logs": "Logbucheinträge", "stats": "Statistik", "settings": "Einstellungen", "admin": "Admin" }, "auth": { "welcome": "Willkommen bei Kapteins Daagbok", "tagline": "Dein sicheres, E2E-verschlüsseltes maritimes Logbuch.", "register": "Mit Passkey registrieren", "login": "Mit Passkey anmelden", "login_as": "Anmelden als {{name}}", "quick_login": "Schnell-Login", "forget_account": "Account auf diesem Gerät vergessen", "not_user": "Nicht {{name}}?", "recovery_title": "Dein Wiederherstellungsschlüssel", "recovery_warning": "WICHTIG: Schreib diese 12 Wörter auf. Wenn du deinen Passkey und diese Wörter verlierst, können deine Daten nicht wiederhergestellt werden.", "confirm_recovery": "Ich habe die Wörter aufgeschrieben", "status_logged_in": "Angemeldet", "status_logged_out": "Abgemeldet", "copied": "Kopiert!", "copy_phrase": "Schlüssel kopieren", "enter_recovery": "Wiederherstellungsschlüssel eingeben", "recovery_fallback_warning": "Dein Passkey wurde erfolgreich authentifiziert, aber dein Gerät unterstützt keine hardwarebasierte Schlüsselableitung. Gib deinen 12-Wörter-Wiederherstellungsschlüssel ein, um dein Logbuch zu entschlüsseln.", "recovery_placeholder": "Gib deinen aus 12 Wörtern bestehenden Wiederherstellungsschlüssel getrennt durch Leerzeichen ein...", "back": "Zurück", "decrypting": "Entschlüsselung...", "decrypt_logbook": "Logbuch entschlüsseln", "error_incorrect_recovery": "Falscher Wiederherstellungsschlüssel. Entschlüsselung fehlgeschlagen.", "error_decryption_failed": "Entschlüsselung fehlgeschlagen. Bitte überprüfe deinen Wiederherstellungsschlüssel.", "or_register": "oder Registrieren", "explore_demo": "Demo ohne Account erkunden", "username_placeholder": "Benutzername / Skippername", "processing": "Verarbeitung...", "help": "Hilfe", "setup_pin_title": "Lokale PIN einrichten (Optional)", "setup_pin_warning": "Da dein Gerät keine direkte Passkey-Schlüsselableitung unterstützt, müsstest du andernfalls bei jedem Login auf diesem Gerät deinen 12-Wörter-Schlüssel eingeben. Richte eine lokale PIN ein, um das zu vermeiden.", "pin_placeholder": "Z.B. 123456", "pin_label": "Lokaler PIN-Code (4-8 Ziffern)", "save_pin": "PIN speichern & Fortfahren", "skip_pin": "Überspringen & recovery verwenden", "enter_pin_title": "Mit PIN entschlüsseln", "enter_pin_warning": "Gib deine lokale PIN ein, um den Entschlüsselungsschlüssel auf diesem Gerät freizuschalten.", "enter_pin_placeholder": "Gib deine PIN ein...", "decrypt_with_pin": "Entschlüsseln", "use_recovery_instead": "Stattdessen Wiederherstellungsschlüssel verwenden", "error_incorrect_pin": "Falsche PIN. Entschlüsselung fehlgeschlagen.", "error_invalid_host": "Passkeys funktionieren nicht über 127.0.0.1. Bitte die App über localhost öffnen.", "use_localhost_link": "Zu localhost wechseln", "error_passkey_cancelled": "Passkey-Anmeldung abgebrochen oder abgelaufen. Bitte erneut versuchen.", "error_invalid_rp_id": "Passkey-Domain passt nicht (RP ID). Lokal nur http://localhost:5173 mit RP_ID=localhost in .env verwenden.", "error_session_incomplete": "Anmeldung unvollständig. Bitte erneut mit Passkey anmelden.", "restore_checking": "Session wird geprüft…", "restore_title": "Session wiederherstellen", "restore_subtitle": "Deine Anmeldung ist noch aktiv. Entsperre dein Logbuch mit Passkey oder PIN.", "restore_unlocking": "Wird entsperrt…", "restore_with_passkey": "Mit Passkey entsperren ({{name}})", "restore_with_pin": "Mit PIN entsperren", "restore_pin_warning": "Gib deine lokale PIN ein, um dein Logbuch nach dem Neuladen zu entsperren.", "restore_other_account": "Anderer Account anmelden" }, "pwa": { "title": "App installieren", "generic_benefit": "Installiere Kapteins Daagbok auf deinem Gerät für schnelleren Zugriff, Offline-Nutzung und dauerhafte Datenspeicherung.", "ios_instructions": "Auf dem iPad/iPhone: Füge die App zum Home-Bildschirm hinzu, damit deine Logbuchdaten geschützt bleiben und die App wie eine native App startet.", "ios_step_share": "Teilen-Symbol in der Safari-Leiste antippen", "ios_step_add": "„Zum Home-Bildschirm“ wählen", "install_now": "Jetzt installieren", "installing": "Installation…", "later": "Später", "never": "Nicht mehr anzeigen", "platform_ios": "Installation über Safari", "platform_android": "Installation über den Browser", "platform_desktop": "Installation als Desktop-App", "settings_section": "App-Installation", "update_title": "Update verfügbar", "update_desc": "Eine neue Version von Kapteins Daagbok ist bereit. Bitte aktualisieren, um die neuesten Änderungen zu erhalten.", "update_now": "Jetzt aktualisieren", "update_reloading": "Wird geladen…", "storage_persist_hint": "Der Browser kann Offline-Daten löschen. Erlaube dauerhafte Speicherung, damit dein Logbuch geschützt bleibt (in den Browser-Einstellungen oder beim nächsten Hinweis)." }, "sync": { "status_synced": "Synchronisiert", "status_syncing": "Synchronisiere…", "status_offline": "Offline-Cache", "status_unsynced": "Unsynchronisierte Änderungen", "conflict_title": "Synchronisationskonflikt", "conflict_message": "{{count}} Änderung(en) konnten nicht synchronisiert werden (Eintrag {{id}}…). Bitte wähle, welche Version gelten soll.", "conflict_use_server": "Server-Version übernehmen", "conflict_keep_local": "Meine Version behalten" }, "vessel": { "title": "Schiffs-Stammdaten", "name": "Yachtname", "type": "Yachttyp", "type_unset": "— nicht angegeben —", "type_sailing": "Segelyacht", "type_motor": "Motoryacht", "length_m": "Länge (m)", "draft_m": "Tiefgang (m)", "air_draft_m": "Höhe (m)", "invalid_metric": "Ungültiger Zahlenwert — bitte Meter als Dezimalzahl eingeben (z. B. 12,5).", "port": "Heimathafen", "owner": "Eigner", "charter": "Charterfirma", "registration": "Kennzeichen/Zulassungsnummer", "callsign": "Funk-Rufzeichen", "atis": "ATIS-Nr", "mmsi": "MMSI-Nr", "save": "Schiffsdaten speichern", "saving": "Wird gespeichert...", "saved": "Schiffsdaten erfolgreich gespeichert!", "loading": "Schiffsdaten werden geladen...", "sails_list": "Besegelung (vorhandene Segel)", "sails_help": "Trag hier die Segel ein, die an deinem Schiff zur Verfügung stehen (z. B. Großsegel, Genua, Fock).", "add_sail": "Segel hinzufügen", "sail_name_placeholder": "z. B. Großsegel", "no_sails": "Keine Segel hinterlegt.", "photo_add": "Foto hinzufügen", "photo_change": "Foto ändern", "photo_delete": "Foto löschen", "tanks_section": "Tanks (Fassungsvermögen)", "tanks_help": "Optional in Liter — ermöglicht Slider im Journal bei bekannten Tankgrößen.", "freshwater_capacity_l": "Trinkwasser (Liter)", "fuel_capacity_l": "Treibstoff (Liter)", "greywater_capacity_l": "Grauwasser (Liter)", "invalid_tank_liters": "Ungültiger Zahlenwert — bitte Liter als Zahl eingeben (z. B. 200)." }, "logs": { "title": "Logbuch-Journal", "new_entry": "Neuer Reisetag", "travel_details": "Reisedetails", "add_event": "Neuen Logbucheintrag hinzufügen", "add_event_btn": "Ereignis hinzufügen", "edit_event": "Ereignis bearbeiten", "save_event_btn": "Änderung speichern", "cancel_event_edit": "Abbrechen", "delete_event": "Ereignis löschen", "sign_cleared_skipper_re_sign_title": "Skipper-Unterschrift entfernt", "sign_cleared_skipper_re_sign": "Das Ereignisprotokoll wurde geändert. Die Skipper-Unterschrift wurde entfernt. Bitte erneut freigeben.", "date": "Datum", "day_of_travel": "Reisetag", "travel_day_number": "Reisetag {{number}}", "departure": "Start-Hafen (Reise von)", "destination": "Ziel-Hafen (nach)", "route": "Reise von/nach", "tanks": "Tanks", "freshwater": "Frischwasser (Liter)", "fuel": "Treibstoff / Fuel (Liter)", "greywater": "Grauwasser (Liter)", "greywater_level": "Füllstand", "tank_slider_of_max": "{{current}} / {{max}} L", "tank_capacity_tooltip": "Wenn in den Schiffsdaten die Tank-Fassungsvermögen (Liter) hinterlegt sind, kannst du Füllstände hier per Slider eingeben.", "morning": "Stand morgens", "refilled": "Nachgefüllt", "evening": "Stand abends", "consumption": "Tagesverbrauch", "signatures": "Unterschriften / Freigabe", "sign_skipper": "Skipper-Unterschrift", "sign_crew": "Crew-Unterschrift", "sign_hint": "Mit Finger, Stift oder Maus unterschreiben", "sign_clear": "Löschen", "sign_export_image": "[Unterschrift]", "sign_with_passkey": "Mit Passkey freigeben", "sign_passkey_signing": "Passkey wird angefordert…", "sign_passkey_signed": "Freigegeben von {{username}}", "sign_passkey_export": "Passkey: {{username}} ({{date}})", "sign_attribution_export": "{{username}} ({{date}})", "sign_passkey_clear": "Passkey-Freigabe entfernen", "sign_mode_passkey": "Passkey", "sign_mode_classic": "Klassisch", "sign_passkey_failed": "Passkey-Freigabe fehlgeschlagen", "sign_passkey_cancelled": "Passkey-Freigabe abgebrochen", "sign_invalid": "Signatur ungültig — Inhalt wurde geändert", "sign_badge_skipper": "Skipper", "sign_badge_skipper_invalid": "Ungültig", "sign_badge_skipper_title_valid": "Skipper hat freigegeben", "sign_badge_skipper_title_invalid": "Skipper-Signatur ungültig — Inhalt wurde geändert", "sign_classic_or_passkey": "Optional: klassisch unterschreiben oder Passkey-Freigabe oben", "sign_crew_passkey_hint": "Crew-Mitglieder mit Schreibzugriff können per Passkey freigeben", "sign_offline_hint": "Passkey-Freigabe erfordert Internet — klassische Unterschrift offline möglich", "sign_lock_notice": "Nach der Unterschrift sind Änderungen am Logbucheintrag (außer Fotos) nicht möglich, ohne dass Skipper und Crew erneut unterschreiben müssen.", "sign_lock_active": "Dieser Eintrag ist unterschrieben. Änderungen am Logbuch (außer Fotos) entfernen Skipper- und Crew-Unterschrift automatisch.", "sign_lock_warning_title": "Unterschrift bestätigen", "sign_lock_warning": "Nach dem Unterschreiben sind Änderungen am Logbucheintrag (außer Fotos) nicht mehr möglich, ohne dass Skipper und Crew erneut unterschreiben müssen.\n\nMöchtest du fortfahren?", "sign_proceed": "Unterschreiben", "sign_cancel": "Abbrechen", "sign_cleared_re_sign_title": "Unterschriften entfernt", "sign_cleared_re_sign": "Der Logbucheintrag wurde geändert. Skipper- und Crew-Unterschrift wurden entfernt. Bitte erneut unterschreiben.", "no_entries": "Keine Logbucheinträge für diese Yacht gefunden. Erstelle deinen ersten Reisetag!", "back_to_list": "Zurück zur Journal-Liste", "save": "Logbuchseite speichern", "saving": "Wird gespeichert...", "saved": "Logbuchseite erfolgreich gespeichert!", "loading": "Journal wird geladen...", "view_mode_label": "Ansicht", "view_list": "Liste", "live_mode": "Live", "live_title": "Live-Journal", "live_loading": "Live-Journal wird geladen...", "live_retry": "Erneut versuchen", "live_load_error": "Live-Journal konnte nicht geladen werden.", "live_action_error": "Eintrag konnte nicht gespeichert werden.", "live_open_editor": "Vollständiger Editor", "live_actions_label": "Schnellaktionen", "live_stream_label": "Ereignisprotokoll", "live_stream_title": "Journal", "live_no_events": "Noch keine Einträge — tippe auf eine Aktion.", "live_motor_start": "Motor Start", "live_motor_stop": "Motor Stop", "live_cast_off": "Ablegen", "live_moor": "Anlegen", "live_sails_btn": "Segel", "live_sails_pick": "Segel auswählen", "live_sails_pick_hint": "Mehrere Segel antippen (erneut antippen zum Abwählen), dann Eintragen.", "live_sails_selected": "Auswahl: {{sails}}", "live_sails_confirm": "Eintragen", "live_sails_confirm_count": "Eintragen ({{count}})", "live_sails": "Segel: {{sails}}", "live_position": "Position", "live_position_coords": "Position {{lat}}, {{lng}}", "live_position_manual_hint": "GPS nicht verfügbar. Breiten- und Längengrad manuell eingeben oder erneut per GPS-Knopf versuchen.", "live_position_gps_loading": "GPS-Position wird ermittelt…", "live_position_invalid": "Bitte gültige Koordinaten eingeben (Breite −90…90, Länge −180…180).", "live_position_lat_placeholder": "Breite (Lat)", "live_position_lng_placeholder": "Länge (Lng)", "live_photo_btn": "Foto (Kamera)", "live_photo_capture_btn": "Aufnehmen", "live_photo_save_btn": "Speichern", "live_photo_retake_btn": "Neu aufnehmen", "live_photo_capture_failed": "Aufnahme fehlgeschlagen. Bitte erneut versuchen.", "live_photo_open_camera_btn": "Kamera öffnen", "live_photo_native_hint": "Foto mit der Gerätekamera aufnehmen und anschließend hier speichern.", "live_photo_camera_starting": "Kamera wird gestartet…", "live_photo_camera_denied": "Kamerazugriff verweigert oder nicht verfügbar.", "live_photo_camera_unavailable": "Kamera wird von diesem Browser nicht unterstützt.", "live_photo_no_camera": "Auf diesem Gerät ist keine Kamera verfügbar.", "live_photo_error": "Foto konnte nicht gespeichert werden.", "live_photo_entry": "Foto: {{caption}}", "live_photo_entry_plain": "Foto aufgenommen", "live_undo_photo_hint": "Foto gespeichert", "live_voice_btn": "Sprachnotiz", "live_voice_hint": "Kurze Sprachnotiz aufnehmen (max. 60 Sekunden).", "live_voice_record": "Aufnahme starten", "live_voice_stop": "Aufnahme beenden", "live_voice_recording": "Aufnahme {{time}}", "live_voice_save": "Speichern", "live_voice_saving": "Wird gespeichert…", "live_voice_retake": "Neu aufnehmen", "live_voice_mic_denied": "Mikrofonzugriff verweigert oder nicht verfügbar.", "live_voice_record_failed": "Aufnahme fehlgeschlagen. Bitte erneut versuchen.", "live_voice_unavailable": "Sprachnotiz nicht verfügbar", "live_voice_too_large": "Aufnahme ist zu groß. Bitte kürzer aufnehmen.", "live_voice_error": "Sprachnotiz konnte nicht gespeichert werden.", "live_voice_entry": "Sprachnotiz: {{caption}}", "live_voice_entry_plain": "Sprachnotiz", "live_voice_caption_label": "Beschriftung (optional)", "live_voice_caption_placeholder": "z. B. Funkverkehr mit Hafenmeister", "live_voice_transcribe_action": "Transkribieren", "live_voice_transcribing": "Transkribiere...", "live_voice_transcribe_failed": "Sprachmemo gespeichert, aber Transkription fehlgeschlagen.", "live_undo_voice_hint": "Sprachnotiz gespeichert", "live_comment_btn": "Kommentar", "live_comment_placeholder": "Freitext eingeben…", "live_comment_confirm": "Eintragen", "live_gps_error": "GPS-Position konnte nicht ermittelt werden.", "live_gps_start_hint": "Beginne deine Tagesreise immer mit einer Position.", "live_event_generic": "Ereignis", "live_weather_btn": "Wetter", "live_weather_owm_btn": "OpenWeatherMap Wetter abrufen", "live_weather_owm_loading": "Wetter wird geladen…", "live_weather_position_required": "Für Wetter von OpenWeatherMap zuerst eine Position eintragen (Schaltfläche „Position“). Die Position darf höchstens 6 Stunden alt sein.", "live_weather_position_stale": "Die letzte Position ist älter als 6 Stunden. Bitte erneut eine Position loggen, bevor du Wetter abrufst.", "live_wind_btn": "Wind", "live_temp_btn": "T °C", "live_pressure_btn": "Luftdruck", "live_precip_btn": "Niederschlag", "live_sea_state_btn": "Seegang", "live_visibility_btn": "Sichtweite", "live_course_btn": "Kurs", "live_fuel_btn": "+ Diesel", "live_water_btn": "+ Wasser", "live_wind_entry": "Wind {{value}}", "live_temp_entry": "Temperatur {{temp}} °C", "live_pressure_entry": "Luftdruck {{value}} hPa", "live_precip_entry": "Niederschlag {{value}}", "live_sea_state_entry": "Seegang {{value}}", "live_visibility_entry": "Sichtweite {{value}}", "live_course_entry": "Kurs {{course}}", "live_fuel_entry": "Diesel +{{liters}} L", "live_water_entry": "Wasser +{{liters}} L", "live_auto_position": "Auto-Position", "live_undo_hint": "Eintrag gespeichert", "live_undo_btn": "Rückgängig", "live_cancel": "Abbruch", "live_pressure_placeholder": "z. B. 1013", "live_temp_placeholder": "z. B. 18", "live_precip_placeholder": "z. B. leichter Regen", "live_sea_state_placeholder": "z. B. 3", "live_visibility_placeholder": "z. B. 10 km", "live_course_placeholder": "z. B. 245", "live_fuel_placeholder": "Nachgefüllte Liter", "live_water_placeholder": "Nachgefüllte Liter", "live_sog_btn": "SOG", "live_stw_btn": "STW", "live_sog_entry": "SOG {{speed}} kn", "live_stw_entry": "STW {{speed}} kn", "live_sog_placeholder": "z. B. 5,2", "live_stw_placeholder": "z. B. 4,8", "live_sog_hint": "Fahrt über Grund (kn) — GPS-Wert wird vorgefüllt, wenn verfügbar.", "delete_entry": "Tag löschen", "delete_confirm": "Bist du sicher, dass du diesen Reisetag unwiderruflich löschen möchtest?", "carry_over_tanks_title": "Daten vom Vortag übernehmen?", "carry_over_tanks_confirm": "Start-Hafen, Frischwasser-, Kraftstoff- und Grauwasser-Startstände vom letzten Reisetag übernehmen?\n\nStart-Hafen: {{departure}}\nFrischwasser: {{fw}} L\nKraftstoff: {{fuel}} L\nGrauwasser: {{greywater}} L", "carry_over_tanks_yes": "Übernehmen", "carry_over_tanks_no": "Mit 0 starten", "event_title": "Chronologisches Ereignisprotokoll", "event_creator": "Eingetragen von", "no_events": "Noch keine Ereignisse für diesen Reisetag eingetragen.", "event_time": "Uhrzeit", "event_mgk": "MgK Kurs", "event_rwk": "RwK Kurs", "event_course_section": "Kurs", "course_dial_hint": "Am Ring drehen oder Grad eingeben", "course_dial_step_label": "Schrittweite", "course_step_fine": "1°", "course_step_medium": "5°", "course_step_coarse": "10°", "course_tab_mgk": "MgK", "course_tab_rwk": "rwK", "course_invalid": "Ungültiger Kurs (0–360)", "course_placeholder_degrees": "z. B. 180", "course_placeholder_cardinal": "z. B. NW", "compass_n": "N", "compass_e": "O", "compass_s": "S", "compass_w": "W", "wind_mode_cardinal": "Kardinal", "wind_mode_degrees": "Als Grad", "event_wind_direction": "Wind-Richtung", "event_wind_strength": "Windstärke", "event_sea_state": "Seegang", "event_visibility": "Sichtweite", "event_visibility_placeholder": "z. B. 10 km", "weather_slider_unset": "—", "weather_slider_pressure": "{{value}} hPa", "weather_slider_sea_state": "Stufe {{value}}", "weather_slider_heel": "{{value}}°", "event_weather": "Wetter", "event_log": "Logge (sm)", "event_gps": "GPS-Position", "event_location": "Ort / Hafen", "event_location_placeholder": "z. B. Kiel", "event_remarks": "Bemerkungen / Vorkommnisse", "gps_btn": "GPS-Koordinaten abrufen", "gps_permission_denied": "Standortzugriff wurde verweigert. Bitte in den Browser- oder Geräteeinstellungen erlauben und erneut versuchen.", "gps_timeout": "GPS-Zeitüberschreitung. Bitte erneut versuchen – am besten im Freien mit gutem Empfang.", "gps_position_unavailable": "Kein GPS-Signal verfügbar. Bitte warten oder Koordinaten manuell eingeben.", "gps_unavailable": "GPS wird von diesem Browser oder Gerät nicht unterstützt.", "gps_failed": "GPS-Position konnte nicht ermittelt werden.", "gps_fallback_no_location": "GPS fehlgeschlagen. Bitte einen Ort unter „Ort / Hafen“, Start- oder Zielhafen eintragen, oder Koordinaten manuell eingeben.", "gps_fallback_success": "Koordinaten für „{{location}}“ über den Ortsnamen ermittelt (nicht per GPS).", "gps_fallback_failed": "GPS und Ortsnamen-Suche sind fehlgeschlagen. Bitte Koordinaten manuell eingeben.", "gps_quality_excellent": "Starker GPS-Empfang (±{{accuracy}} m)", "gps_quality_good": "Guter GPS-Empfang (±{{accuracy}} m)", "gps_quality_fair": "Mäßiger GPS-Empfang (±{{accuracy}} m) – für besseren Empfang ins Freie gehen.", "gps_quality_poor": "Schwacher GPS-Empfang (±{{accuracy}} m) – vermutlich wenig Satelliten. Im Freien erneut versuchen oder Position prüfen.", "gps_quality_unknown": "GPS-Position übernommen (Genauigkeit vom Gerät nicht gemeldet).", "gps_live_intro_title": "Standort für Live-Log", "gps_live_intro_body": "Für automatische Positions-Einträge und den GPS-Knopf braucht die App Zugriff auf deinen Standort.\n\nTippe auf „Standort erlauben“ – im nächsten Dialog die Freigabe bestätigen. Du kannst jederzeit manuell unter „Position“ eintragen.", "gps_live_intro_allow": "Standort erlauben", "gps_live_intro_later": "Später", "gps_enable_in_settings_hint": "Standortzugriff ist blockiert. In den Browser- oder Geräteeinstellungen (Website / App → Standort) kannst du die Freigabe nachträglich erlauben.", "weather_btn": "OpenWeatherMap Wetter abrufen", "weather_offline": "OpenWeatherMap erfordert eine Internetverbindung. Du bist derzeit offline.", "event_wind_pressure": "Luftdruck (hPa)", "event_heel": "Krängung (°)", "event_sails": "Segelführung / Motor", "motor_propulsion": "Maschinenfahrt", "sails_picker_show_more": "Alle Segel anzeigen", "sails_picker_show_less": "Weniger anzeigen", "motor_hours": "Maschinenstunden (gesamt)", "fuel_per_motor_hour": "Verbrauch pro Maschinenstunde", "event_distance": "Distanz (sm)", "export_csv": "CSV herunterladen", "share_csv": "CSV teilen", "export_pdf": "PDF herunterladen", "exporting_pdf": "PDF wird generiert...", "ai_summary_title": "KI-Zusammenfassung", "ai_summary_read_only": "Vom Skipper erstellt — nur lesbar für die Crew.", "ai_summary_empty": "Noch keine Zusammenfassung vorhanden.", "ai_summary_generate": "Zusammenfassung generieren", "ai_summary_regenerate": "Neu generieren", "ai_summary_generating": "Wird generiert…", "ai_summary_attempts_remaining": "Noch {{remaining}} von {{max}} Versuchen", "ai_summary_error": "KI-Zusammenfassung fehlgeschlagen. Bitte später erneut versuchen.", "ai_summary_error_no_key": "Kein OpenRouter API-Schlüssel auf dem Server konfiguriert.", "ai_summary_error_rate_limited": "Maximale Anzahl an Generierungen für diesen Reisetag erreicht.", "ai_summary_error_forbidden": "Nur der Skipper darf KI-Zusammenfassungen generieren.", "ai_summary_offline": "Die KI-Zusammenfassung erfordert eine Internetverbindung. Du bist derzeit offline.", "photos_title": "Foto-Anhänge (E2E-verschlüsselt)", "photo_caption_label": "Foto-Beschreibung / Label (Optional)", "photo_caption_placeholder": "z.B. Segel setzen nahe Hafeneinfahrt", "photo_btn": "Foto aufnehmen / Hochladen", "photo_camera_btn": "Foto aufnehmen", "photo_gallery_btn": "Aus Galerie wählen", "photo_processing": "Wird verarbeitet...", "no_photos": "Noch keine Fotos an diesen Reisetag angehängt.", "photo_delete_confirm": "Bist du sicher, dass du dieses Foto unwiderruflich löschen möchtest?", "confirm_yes": "Ja", "confirm_no": "Nein", "track_upload_title": "GPS-Track (Datei)", "track_upload_points": "Punkte", "gps_tracking_btn_gpx": "Track-Datei herunterladen", "gps_track_upload_help": "Zieh eine GPX-, KML- oder GeoJSON-Datei hierher oder klicke zum Auswählen", "gps_track_upload_btn": "GPS-Track hochladen", "gps_track_delete": "Track-Datei löschen", "gps_track_delete_confirm": "Bist du sicher, dass du diese Track-Datei dauerhaft löschen möchtest?", "track_distance": "GPS-Strecke (sm)", "track_speed_max": "Max. Geschwindigkeit (kn)", "track_speed_avg": "Ø Geschwindigkeit (kn)", "track_map_title": "GPS-Track auf OpenSeaMap", "track_map_start": "Start", "track_map_end": "Ziel", "track_map_speed_slow": "langsam", "track_map_speed_fast": "schnell", "nmea_import_title": "NMEA-Protokoll importieren", "nmea_import_intro": "Lade eine .nmea-Datei vom Bord-Logger. Die App schlägt Journal-Einträge vor — du entscheidest, was übernommen wird.", "nmea_import_btn": "NMEA importieren", "nmea_file_label": "NMEA-Datei", "nmea_stats": "{{lines}} Sätze erkannt · Typen: {{types}}", "nmea_warn_no_position": "Keine Positions-Sätze gefunden — Track und GPS-Felder können leer bleiben.", "nmea_warn_duplicate_file": "Diese NMEA-Datei wurde bereits importiert. Ein erneuter Import derselben Datei fügt doppelte Journal-Einträge hinzu.", "nmea_mode_label": "Journal-Einträge erzeugen", "nmea_mode_interval": "Nach Zeitintervall", "nmea_mode_change": "Bei signifikanter Änderung", "nmea_mode_both": "Beides (zusammenführen)", "nmea_interval_label": "Intervall (Minuten)", "nmea_import_track": "GPS-Track aus NMEA übernehmen", "nmea_preview": "Vorschau", "nmea_preview_hint": "{{count}} vorgeschlagene Journal-Einträge", "nmea_select_all": "Alle auswählen", "nmea_select_none": "Keine auswählen", "nmea_source_interval": "Intervall", "nmea_source_change": "Ereignis", "nmea_apply": "In Journal übernehmen", "nmea_back": "Zurück", "nmea_cancel": "Abbrechen", "nmea_archive_question": "Rohprotokoll lokal archivieren? (Nur auf diesem Gerät, nicht synchronisiert.)", "nmea_archive_keep": "Archivieren", "nmea_archive_discard": "Verwerfen", "nmea_archive_stored": "NMEA archiviert: {{name}}", "nmea_archive_delete_confirm": "Archiviertes NMEA-Protokoll von diesem Gerät löschen?", "nmea_error_no_samples": "Keine verwertbaren NMEA-Sätze in der Datei.", "nmea_error_parse": "NMEA-Datei konnte nicht gelesen werden.", "nmea_error_read": "Datei konnte nicht gelesen werden.", "nmea_error_no_file": "Bitte zuerst eine NMEA-Datei wählen.", "nmea_error_no_selection": "Bitte mindestens einen Journal-Eintrag auswählen.", "nmea_remark_interval": "NMEA Intervall", "nmea_remark_uncertain": "unsicher", "nmea_remark_depth": "Tiefe {{depth}} m", "nmea_change_course": "Kursänderung {{from}}° → {{to}}°", "nmea_change_wind": "Wind {{from}}° → {{to}}°", "nmea_change_wind_speed": "Wind {{from}} → {{to}} kn", "nmea_change_pressure": "Luftdruck {{from}} → {{to}} hPa", "nmea_change_depth": "Tiefe {{from}} → {{to}} m", "nmea_change_engine_start": "Motor an ({{rpm}} U/min)", "nmea_change_engine_stop": "Motor aus", "nmea_change_autopilot_on": "Autopilot ein", "nmea_change_autopilot_off": "Autopilot aus", "nmea_change_gps_lost": "GPS-Position verloren", "nmea_change_gps_regained": "GPS-Position wiederhergestellt", "nmea_change_water_temp": "Wassertemp. {{from}} → {{to}} °C", "nmea_change_departure": "Abfahrt / Fahrtbeginn", "nmea_change_anchor": "Ankern / Stop", "nmea_change_speed": "Geschw. {{from}} → {{to}} kn", "track_map_error": "Karte konnte nicht geladen werden.", "exporting": "Exportiere...", "share_unsupported": "Teilen wird auf diesem Gerät nicht unterstützt. Datei wurde stattdessen heruntergeladen.", "invite_crew": "Crew einladen", "invite_link_copied": "Einladungslink in die Zwischenablage kopiert!", "invite_link_desc": "Teile diesen Link mit Crewmitgliedern, um ihnen Schreibrechte für dieses Logbuch zu gewähren.", "collaborators_list": "Mitglieder / Crew", "revoke": "Entfernen", "revoke_confirm": "Bist du sicher, dass du diesem Crewmitglied den Zugriff entziehen möchtest?", "invite_role": "Rolle", "invite_expires": "Link ist 48 Stunden lang gültig" }, "dashboard": { "title": "Deine Logbücher", "subtitle": "Wähle ein Logbuch aus oder erstelle ein neues, um deine Reisen zu verwalten.", "create_btn": "Logbuch erstellen", "new_logbook_placeholder": "Name des Logbuchs oder der Yacht", "logout": "Abmelden", "logged_in_as": "Angemeldet als {{name}}", "delete_confirm": "Bist du sicher, dass du dieses Logbuch unwiderruflich löschen möchtest? Alle lokalen Daten und Server-Kopien werden vernichtet.\n\nTipp: Erstelle vorher unter Einstellungen → Backup & Wiederherstellung eine Sicherungskopie (.daagbok), falls du die Daten später behalten möchtest.", "no_logbooks": "Keine Logbücher gefunden. Erstelle dein erstes Logbuch, um zu beginnen!", "loading": "Logbücher werden geladen...", "status_synced": "Synchronisiert", "status_local": "Nur lokaler Cache", "delete_btn": "Logbuch löschen", "section_owned": "Meine Logbücher", "section_shared": "Geteilte Logbücher", "section_shared_hint": "Du wurdest als Crew-Mitglied eingeladen. Skipper-Profil und Einstellungen gehören dem Eigner.", "role_owner": "Eigenes Logbuch", "role_owner_hint": "Du bist Eigner und Skipper dieses Logbuchs", "role_crew": "Crew-Zugang", "role_crew_hint": "Eingeladenes Logbuch — du kannst als Crew mitarbeiten und signieren", "role_read": "Nur Lesen", "role_read_hint": "Geteiltes Logbuch — nur Ansicht, keine Bearbeitung", "open_profile": "Profil von {{name}} öffnen", "open_logbook": "Logbuch „{{title}}“ öffnen", "edit_title": "Logbuch umbenennen", "edit_placeholder": "Neuer Name des Logbuchs", "edit_success": "Logbuch erfolgreich umbenannt", "edit_btn": "Umbenennen", "filter_label": "Logbücher filtern", "filter_placeholder": "Name, Jahr, Datum, Crew oder Schiff …", "filter_clear": "Filter zurücksetzen", "filter_results": "{{count}} Treffer", "filter_no_results": "Keine Logbücher passen zu deiner Suche. Probiere einen anderen Namen oder ein anderes Jahr.", "sort_label": "Sortieren", "sort_by_label": "Sortieren nach", "sort_by_name": "Name", "sort_by_date": "Datum", "sort_dir_label": "Reihenfolge", "sort_asc": "Aufsteigend", "sort_desc": "Absteigend", "sort_name_asc": "Name A bis Z", "sort_name_desc": "Name Z bis A", "sort_date_asc": "Älteste zuerst", "sort_date_desc": "Neueste zuerst" }, "profile": { "title": "Benutzerprofil", "subtitle": "Konto, Passkeys und Statistiken für {{name}}", "back": "Zurück zum Dashboard", "loading": "Profil wird geladen…", "load_error": "Profil konnte nicht geladen werden.", "copy_failed": "Kopieren fehlgeschlagen.", "processing": "Wird verarbeitet…", "identity_title": "Konto-Identität", "username": "Benutzername", "user_id": "Benutzer-ID", "copy_user_id": "Benutzer-ID kopieren", "account_since": "Konto seit", "prf_status": "Passkey-Schlüsselableitung (PRF)", "prf_active": "Aktiv", "prf_inactive": "Nicht eingerichtet", "passkeys_title": "Passkeys", "passkeys_desc": "Registriere auf jedem Gerät einen eigenen Passkey. So kannst du dich auch nach einem Plattformwechsel anmelden.", "passkeys_empty": "Keine Passkeys gefunden.", "add_passkey_btn": "Neuen Passkey hinzufügen", "add_passkey_success": "Passkey erfolgreich hinzugefügt.", "add_passkey_failed": "Passkey konnte nicht hinzugefügt werden.", "remove_passkey_btn": "Passkey entfernen", "remove_passkey_last_title": "Letzter Passkey", "remove_passkey_last_desc": "Der einzige Passkey kann nicht entfernt werden, ohne den Zugang zu deinem Konto zu verlieren. Um das Konto vollständig zu löschen, nutze die Gefahrenzone am Ende dieser Seite.", "remove_passkey_failed": "Passkey konnte nicht entfernt werden.", "remove_passkey_confirm_title": "Passkey entfernen?", "remove_passkey_confirm_desc": "Dieses Gerät kann sich danach nicht mehr mit diesem Passkey anmelden.", "remove_passkey_confirm_yes": "Entfernen", "remove_passkey_confirm_no": "Abbrechen", "pin_title": "Lokaler PIN", "pin_status": "Status", "pin_active": "Aktiv auf diesem Gerät", "pin_inactive": "Nicht eingerichtet", "pin_confirm_label": "PIN bestätigen", "pin_confirm_placeholder": "PIN erneut eingeben", "pin_set_btn": "PIN einrichten", "pin_change_btn": "PIN ändern", "pin_remove_btn": "PIN entfernen", "pin_saved": "PIN gespeichert.", "pin_save_failed": "PIN konnte nicht gespeichert werden.", "pin_mismatch": "Die PIN-Eingaben stimmen nicht überein.", "pin_length_error": "Die PIN muss mindestens 4 Zeichen haben.", "pin_no_session": "Sitzung abgelaufen — bitte erneut anmelden.", "remove_pin_confirm_title": "PIN entfernen?", "remove_pin_confirm_desc": "Du musst dich auf diesem Gerät wieder mit Passkey oder Wiederherstellungsschlüssel anmelden.", "remove_pin_confirm_yes": "PIN entfernen", "remove_pin_confirm_no": "Abbrechen", "security_title": "Sicherheits-Checkliste", "security_desc": "Überblick über die wichtigsten Schutzmechanismen deines Kontos.", "security_passkeys_ok": "Mindestens ein Passkey registriert", "security_passkeys_missing": "Kein Passkey registriert", "security_prf_ok": "PRF-Schlüsselableitung aktiv", "security_prf_missing": "PRF nicht eingerichtet", "security_pin_ok": "Lokaler PIN auf diesem Gerät", "security_pin_missing": "Kein lokaler PIN", "security_recovery_ok": "Wiederherstellungsschlüssel eingerichtet", "security_recovery_hint": "Die 12 Wörter wurden bei der Registrierung angezeigt. Bewahre sie offline und getrennt vom Gerät auf. Du kannst unten einen neuen Schlüssel erstellen — der alte wird dann ungültig.", "recovery_rotate_btn": "Neuen Wiederherstellungsschlüssel erstellen", "recovery_rotate_confirm_title": "Neuen Wiederherstellungsschlüssel erstellen?", "recovery_rotate_confirm_desc": "Der bisherige 12-Wörter-Schlüssel wird sofort ungültig. Stelle sicher, dass du den neuen Schlüssel sicher aufbewahrst, bevor du fortfährst.", "recovery_rotate_confirm_yes": "Neuen Schlüssel erstellen", "recovery_rotate_confirm_no": "Abbrechen", "recovery_rotate_new_warning": "WICHTIG: Schreib diese 12 Wörter auf und bewahre sie offline auf. Der bisherige Wiederherstellungsschlüssel ist ab sofort ungültig.", "recovery_rotate_failed": "Wiederherstellungsschlüssel konnte nicht erstellt werden.", "recovery_rotate_no_session": "Verschlüsselungssitzung abgelaufen — bitte abmelden und erneut anmelden, dann erneut versuchen.", "device_title": "Dieses Gerät", "device_desc": "Lokaler Cache, Sync-Status und Schnell-Login auf diesem Browser.", "device_sync_pending": "{{count}} ausstehende Sync-Einträge", "device_sync_ok": "Alle lokalen Änderungen synchronisiert", "device_remembered": "Account für Schnell-Login auf diesem Gerät gespeichert", "device_not_remembered": "Account nicht in der Schnell-Login-Liste", "device_forget_btn": "Account auf diesem Gerät vergessen", "device_forget_confirm_title": "Schnell-Login entfernen?", "device_forget_confirm_desc": "Der Account verschwindet aus der Schnell-Login-Liste auf diesem Gerät. Deine Session und lokalen Logbücher bleiben erhalten.", "device_forget_confirm_yes": "Entfernen", "device_forget_confirm_no": "Abbrechen", "passkey_label": "Name für neuen Passkey (optional)", "passkey_label_placeholder": "z. B. MacBook, iPhone", "passkey_rename_btn": "Name speichern", "passkey_rename_success": "Passkey-Name gespeichert.", "passkey_rename_failed": "Passkey-Name konnte nicht gespeichert werden.", "passkey_unnamed": "Unbenannter Passkey", "stats_title": "Statistiken", "stats_subtitle": "Über alle deine Logbücher auf diesem Gerät", "stats_logbooks": "Logbücher", "stats_account_since": "Konto seit", "stats_shared_logbooks": "Geteilte Logbücher", "appearance_title": "App & Darstellung", "appearance_desc": "Design und Farbschema gelten für die gesamte App auf diesem Gerät.", "theme_label": "Design-Stil der App", "theme_auto": "Automatisch (OS-Erkennung)", "theme_ocean": "Ocean (Glassmorphismus)", "theme_material": "Material (Android)", "theme_cupertino": "Cupertino (iOS)", "color_scheme_label": "Hell- oder Dunkelmodus", "color_scheme_auto": "Automatisch (System)", "color_scheme_light": "Hell", "color_scheme_dark": "Dunkel", "integrations_title": "Integrationen", "owm_key": "OpenWeatherMap API-Schlüssel", "owm_help": "Optional: eigener OpenWeatherMap-API-Schlüssel. Ohne Eintrag wird der serverseitige Schlüssel aus der Betreiber-Konfiguration verwendet.", "ai_title": "KI-Funktionen & Datenschutz", "ai_desc": "Autorisiere die Nutzung von künstlicher Intelligenz (lokale/Cloud-Integrationen) für deine Logbücher.", "ai_help": "Die Aktivierung ermöglicht es, Reiseberichte automatisch zusammenzufassen und Sprachnotizen zu transkribieren. Zur Verarbeitung werden Sprachaufnahmen und Logbucheinträge verschlüsselt an OpenRouter übertragen. Die Daten werden dort nicht dauerhaft gespeichert.\n\nDa der Betrieb dieser Cloud-Ressourcen Kosten verursacht, freuen wir uns über eine freiwillige Unterstützung über den Ko-fi-Spenden-Link im Footer, um diese Funktionen dauerhaft für alle kostenlos anbieten zu können.", "ai_enable_label": "Transkribierung und Tageszusammenfassungen aktivieren", "ai_unauthorized_alert_title": "KI-Funktionen nicht autorisiert", "ai_unauthorized_alert_desc": "Um Sprachnotizen zu transkribieren oder Reiseberichte zusammenzufassen, musst du der Datenübermittlung an OpenRouter in deinem Benutzerprofil unter 'KI-Funktionen & Datenschutz' zustimmen.", "prefs_save": "Speichern", "prefs_saving": "Wird gespeichert…", "prefs_saved": "Gespeichert", "tour_title": "App-Tour", "tour_desc": "Lass dich erneut durch die wichtigsten Bereiche der App führen.", "tour_restart": "Tour erneut starten", "push_title": "Push-Benachrichtigungen", "push_desc": "Als Logbuch-Eigner wirst du benachrichtigt, wenn eingeladene Crewmitglieder Änderungen synchronisieren. Es werden keine Inhalte im Klartext übermittelt.", "push_enable": "Bei Crew-Änderungen benachrichtigen", "push_active": "Push-Benachrichtigungen sind auf diesem Gerät aktiv.", "push_unsupported": "Push-Benachrichtigungen werden in diesem Browser nicht unterstützt.", "push_denied_hint": "Benachrichtigungen sind blockiert. Erlaube sie in den Browser- oder Geräteeinstellungen.", "push_ios_install_hint": "Auf dem iPhone/iPad: App zum Home-Bildschirm hinzufügen (iOS 16.4+), um Push zu nutzen.", "push_error": "Push-Benachrichtigungen konnten nicht aktiviert werden.", "sections": { "account": "Konto & Einstellungen", "fleet": "Flotte & Crew", "security": "Sicherheit & Gerät", "stats": "Statistik", "danger": "Gefahrenzone" } }, "vessel_pool": { "title": "Schiffsflotte", "section_title": "Deine Schiffe", "subtitle": "Pflege hier alle Schiffe für deine Logbücher. Pro Logbuch wählst du das aktive Schiff aus dieser Liste.", "loading": "Schiffsflotte wird geladen…", "add_vessel": "Schiff hinzufügen", "edit_vessel": "Schiff bearbeiten", "no_vessels": "Noch keine Schiffe im Pool.", "delete_confirm": "Dieses Schiff wirklich aus der Flotte entfernen?", "max_vessels": "Maximale Anzahl von 20 Schiffen im Pool erreicht." }, "logbook_vessel": { "title": "Schiff für dieses Logbuch", "subtitle": "Wähle das Schiff für dieses Logbuch. Reisetage nutzen Segel- und Tankdaten des gewählten Schiffs.", "active_vessel": "Schiff für dieses Logbuch", "no_vessels_in_pool": "Kein Schiff in der Flotte – zuerst im Benutzerprofil anlegen.", "no_vessel": "Kein Schiff gewählt", "unnamed": "Unbenannt", "save": "Schiff speichern", "saved": "Schiff für das Logbuch gespeichert.", "selection_only_hint": "Du siehst das vom Eigner gewählte Schiff (geteiltes Logbuch).", "manage_in_profile": "Schiffe im Benutzerprofil verwalten" }, "person_pool": { "title": "Stammcrew & Skipper", "subtitle": "Lege hier deinen Personen-Pool an – Skipper und Crew für alle Logbücher. Aus diesem Pool wählst du pro Logbuch und Reisetag die aktive Crew.", "loading": "Personen-Pool wird geladen…", "skippers_section": "Stammskipper", "crew_section": "Stammcrew", "add_skipper": "Skipper hinzufügen", "add_crew": "Crew-Mitglied hinzufügen", "edit_skipper": "Skipper bearbeiten", "no_skippers": "Noch kein Skipper im Pool.", "no_crew": "Noch keine Crew-Mitglieder im Pool.", "delete_confirm": "Diese Person wirklich aus dem Pool entfernen?" }, "logbook_crew": { "title": "Crew für dieses Logbuch", "subtitle": "Wähle Skipper und Crew für dieses Logbuch. Neue Reisetage übernehmen diese Auswahl standardmäßig.", "loading": "Crew wird geladen…", "active_skipper": "Skipper für dieses Logbuch", "active_crew": "Crew für dieses Logbuch", "no_skippers_in_pool": "Kein Skipper im Pool – zuerst im Benutzerprofil anlegen.", "no_crew_in_pool": "Keine Crew im Pool – zuerst im Benutzerprofil anlegen.", "no_skipper": "Kein Skipper gewählt", "unnamed": "Unbenannt", "save": "Crew speichern", "saved": "Crew für das Logbuch gespeichert.", "selection_only_hint": "Du siehst die vom Eigner festgelegte Crew (geteiltes Logbuch)." }, "entry_crew": { "title": "Crew an diesem Reisetag", "subtitle": "Kann vom Logbuch-Standard abweichen. Folge-Reisetage übernehmen den Vortag.", "day_skipper": "Skipper an diesem Tag", "day_crew": "Crew an diesem Tag", "no_skipper": "Kein Skipper gewählt", "no_crew": "Keine Crew gewählt" }, "crew": { "title": "Skipper- & Crew-Profile", "skipper_section": "Skipper-Profil", "skipper_read_only_hint": "Das Skipper-Profil kann nur vom Logbuch-Eigner bearbeitet werden.", "crew_section": "Crew-Liste", "add_crew": "Crew-Mitglied hinzufügen", "edit_crew": "Crew-Mitglied bearbeiten", "no_crew": "Noch keine Crew-Mitglieder hinzugefügt.", "max_crew": "Maximale Anzahl von 12 Crew-Mitgliedern im Pool erreicht.", "name": "Name", "address": "Anschrift", "birthdate": "Geburtstag", "phone": "Telefonnummer", "nationality": "Nationalität", "passport": "Pass- / Ausweisnummer", "bloodtype": "Blutgruppe", "allergies": "Allergien", "diseases": "Vorerkrankungen / Krankheiten", "save": "Skipper-Daten speichern", "save_member": "Mitglied speichern", "saved": "Skipper-Profil erfolgreich gespeichert!", "loading": "Crew-Dateien werden geladen...", "delete_confirm": "Bist du sicher, dass du dieses Crew-Mitglied entfernen möchtest?" }, "deviation": { "title": "Ablenkungstabelle (Compass Deviation)", "subtitle": "Trag die Magnetkompass-Ablenkung (Abl.) für Kurse (MgK) von 000° bis 360° in 10°-Schritten ein.", "heading": "MgK", "deviation": "Ablenkung", "save": "Kalibrierungsgitter speichern", "saving": "Wird gespeichert...", "saved": "Kalibrierungsgitter erfolgreich gespeichert!", "loading": "Kalibrierungstabelle wird geladen..." }, "settings": { "title": "Logbuch-Einstellungen", "subtitle": "Teilen, Backup und Zusammenarbeit für dieses Logbuch.", "select_logbook_hint": "Wähle ein Logbuch aus, um dessen Einstellungen zu bearbeiten.", "no_key": "Kein OpenWeatherMap-API-Schlüssel verfügbar. Hinterlege einen eigenen Schlüssel im Benutzerprofil oder kontaktiere den Betreiber.", "weather_success": "Wetterdaten erfolgreich abgerufen!", "weather_error": "Wetterdatenabruf fehlgeschlagen. Überprüfe den API-Schlüssel und die Verbindung.", "weather_unauthorized": "Wetterdatenabruf fehlgeschlagen. Der API-Schlüssel ist ungültig oder nicht autorisiert.", "weather_not_found": "Wetterdatenabruf fehlgeschlagen. Der angegebene Ort oder die Koordinaten wurden nicht gefunden.", "weather_bad_request": "Wetterdatenabruf fehlgeschlagen. Es wurde kein Ort und keine GPS-Position angegeben.", "weather_date_mismatch": "Wetterdaten können nur für den heutigen Tag ({{today}}) abgerufen werden. Dieser Logbucheintrag ist auf den {{date}} datiert.", "gps_error": "Bitte gib einen Ort an oder ermittle die GPS-Koordinaten.", "share_title": "Logbuch teilen (Schreibgeschützt)", "share_desc": "Aktiviere diese Option, um einen öffentlichen, schreibgeschützten Link zu erstellen. Jeder mit dem Link kann deine Reisen, Yacht-Profile und Besatzung ansehen. Die Verschlüsselungsschlüssel werden niemals an den Server übertragen (sie bleiben im Hash-Teil der URL).", "share_privacy_warning": "Empfehlung: Teile diesen Link nur privat (z. B. per E-Mail oder Messenger), nicht in sozialen Medien.", "share_enable": "Öffentlichen Link aktivieren", "share_copied": "Link kopiert!", "share_copy_btn": "Link kopieren", "link_qr_hint": "QR-Code zum Scannen mit dem Smartphone", "link_qr_alt": "QR-Code für den Link", "danger_zone_title": "Gefahrenzone", "danger_zone_desc": "Durch das Löschen deines Kontos werden alle deine Passkeys, Logbücher, Schiffsdaten, Crew-Profile, Reiseeinträge und E2E-Schlüssel unwiderruflich gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", "delete_account_btn": "Konto unwiderruflich löschen", "delete_account_confirm_title": "Konto löschen?", "delete_account_confirm_desc": "Bist du absolut sicher, dass du dein Konto und alle zugehörigen Logbücher und E2E-verschlüsselten Daten unwiderruflich löschen möchtest?", "delete_account_confirm_yes": "Ja, Konto und alle Daten löschen", "delete_account_confirm_no": "Abbrechen", "delete_account_failed": "Konto konnte nicht gelöscht werden. Bitte versuche es erneut.", "delete_backup_hint": "Tipp: Erstelle vor dem Löschen Backups deiner Logbücher (.daagbok) in den Einstellungen jedes Logbuchs.", "deleting_account": "Konto wird gelöscht…", "invite_push_prompt_title": "Push-Benachrichtigungen aktivieren?", "invite_push_prompt_message": "Sobald eingeladene Crewmitglieder Änderungen synchronisieren, kannst du per Push informiert werden. Es werden keine Logbuch-Inhalte im Klartext gesendet.", "invite_push_prompt_ios_message": "Sobald Crewmitglieder Änderungen synchronisieren, kannst du per Push informiert werden. Auf dem iPhone/iPad: App zum Home-Bildschirm hinzufügen (iOS 16.4+), dann Push im Benutzerprofil aktivieren.", "invite_push_prompt_enable": "Jetzt aktivieren", "invite_push_prompt_later": "Später", "invite_push_prompt_success": "Push-Benachrichtigungen sind auf diesem Gerät aktiv.", "backup_title": "Backup & Wiederherstellung", "backup_desc": "Vollständiges verschlüsseltes Backup dieses Logbuchs (Einträge, Fotos, Sprachnotizen, GPS-Tracks, Crew, Schiff). Mit Backup-Passphrase geschützt — für Restore auf diesem oder einem neuen Account.", "backup_export_title": "Backup erstellen", "backup_export_desc": "Lädt alle lokalen Daten als komprimierte .daagbok-Datei herunter. Bewahre Datei und Passphrase getrennt und sicher auf.", "backup_restore_title": "Backup wiederherstellen", "backup_restore_desc": "Stellt ein Backup in deinem aktuellen Account wieder her — auch nach Registrierung eines neuen Accounts.", "backup_passphrase": "Backup-Passphrase", "backup_passphrase_placeholder": "Mindestens 8 Zeichen", "backup_passphrase_confirm": "Passphrase bestätigen", "backup_passphrase_short": "Die Backup-Passphrase muss mindestens 8 Zeichen lang sein.", "backup_passphrase_mismatch": "Passphrasen stimmen nicht überein.", "backup_wrong_passphrase": "Passphrase falsch oder Backup beschädigt.", "backup_export_btn": "Backup herunterladen", "backup_exporting": "Backup wird erstellt…", "backup_export_success": "Backup erstellt ({{count}} Reisetage).", "backup_file_label": "Backup-Datei (.daagbok)", "backup_export_progress": "Packe Dateien {{current}} / {{total}}…", "backup_invalid_archive": "Die Datei ist kein gültiges Backup-Archiv.", "backup_version_unsupported": "Altes Backup-Format (v1). Bitte ein aktuelles .daagbok-Backup verwenden.", "backup_import_size_confirm": "Dieses Backup ist etwa {{size}} groß. Wiederherstellung kann auf dem Gerät länger dauern und viel Speicher belegen. Fortfahren?", "backup_stat_voice": "{{count}} Sprachnotizen", "backup_stat_size": "Unkomprimiert ca. {{size}}", "backup_preview_btn": "Inhalt prüfen", "backup_previewing": "Prüfe…", "backup_restore_btn": "Wiederherstellen", "backup_restoring": "Wird wiederhergestellt…", "backup_restore_success": "Logbuch „{{title}}“ wurde wiederhergestellt.", "backup_restore_cancelled": "Wiederherstellung abgebrochen.", "backup_invalid_json": "Die Datei ist keine gültige JSON-Datei.", "backup_invalid_format": "Unbekanntes oder veraltetes Backup-Format.", "backup_not_owner": "Nur der Logbuch-Eigner kann Backups erstellen.", "backup_not_authenticated": "Bitte melde dich an, um ein Backup wiederherzustellen.", "backup_id_conflict": "Ein Logbuch mit dieser ID existiert bereits.", "backup_overwrite_confirm": "Das vorhandene Logbuch mit gleicher ID wird ersetzt. Fortfahren?", "backup_new_id_confirm": "Das Backup als neues Logbuch mit neuer ID importieren?", "backup_stat_entries": "{{count}} Reisetage", "backup_stat_photos": "{{count}} Fotos", "backup_stat_crew": "{{count}} Crew-Einträge", "backup_stat_tracks": "{{count}} GPS-Tracks", "backup_exported_at": "Exportiert: {{date}}" }, "disclaimer": { "title": "Wichtige Hinweise", "intro": "Bitte lies die folgenden Hinweise, bevor du Kapteins Daagbok nutzt.", "e2e_title": "Ende-zu-Ende-Verschlüsselung", "e2e_body": "Deine Logbuchdaten werden Ende-zu-Ende verschlüsselt. Nur du – bzw. Personen mit deinem Schlüssel – können die Inhalte lesen. Auf dem Server werden ausschließlich verschlüsselte Daten gespeichert.", "pwa_title": "Progressive Web App (PWA)", "pwa_body": "Kapteins Daagbok läuft als Progressive Web App in deinem Browser und kann auf deinem Gerät installiert werden – ähnlich wie eine native App, ohne App-Store.", "storage_title": "Lokale Speicherung & Synchronisation", "storage_body": "Deine Daten werden lokal auf deinem Gerät zwischengespeichert (IndexedDB). Bei aktiver Internetverbindung werden Änderungen mit dem Server synchronisiert. Ohne Verbindung kannst du weiterarbeiten; die Synchronisation erfolgt später.", "free_title": "Kostenlos & werbefrei", "free_body": "Kapteins Daagbok ist kostenlos und enthält keine Werbung.", "liability_title": "Haftungsausschluss", "liability_body": "Die Nutzung erfolgt auf eigene Verantwortung. Es wird keine Haftung für Schäden übernommen, die aus der Nutzung der App entstehen – einschließlich fehlerhafter oder unvollständiger Logbucheinträge, Datenverlust oder technischen Störungen.", "warranty_title": "Keine Gewährleistung", "warranty_body": "Es wird keine Gewährleistung für die Funktion, Richtigkeit oder Verfügbarkeit des Dienstes übernommen. Der Betrieb kann jederzeit unterbrochen, eingeschränkt oder eingestellt werden.", "copyright": "© 2026 KnorrLabs, Markus F.J. Busche", "accept": "Akzeptieren und fortfahren", "close": "Schließen", "button_title": "Hinweise & Haftungsausschluss" }, "feedback": { "button_title": "Feedback senden", "title": "Feedback", "intro": "Teile Fehler, Ideen oder allgemeines Feedback. Deine Nachricht wird über einen sicheren Benachrichtigungskanal an das Projektteam gesendet.", "category_label": "Kategorie", "category_general": "Allgemein", "category_bug": "Fehler melden", "category_feature": "Feature-Wunsch", "category_translation": "Übersetzungsfehler", "contact_label": "E-Mail (optional)", "contact_placeholder": "deine@email.beispiel", "message_label": "Nachricht", "message_placeholder": "Beschreib dein Feedback…", "send": "Senden", "sending": "Wird gesendet…", "cancel": "Abbrechen", "success": "Vielen Dank! Dein Feedback wurde gesendet.", "error_send": "Feedback konnte nicht gesendet werden. Bitte versuche es später erneut.", "error_invalid_email": "Bitte gib eine gültige E-Mail-Adresse ein.", "error_not_configured": "Feedback ist auf diesem Server nicht verfügbar.", "error_rate_limited": "Zu viele Feedback-Nachrichten in kurzer Zeit. Bitte warte einige Minuten.", "error_spam": "Diese Nachricht konnte nicht gesendet werden. Bitte formuliere sie anders." }, "demo": { "logbook_title": "Demo-Logbuch Ostsee", "badge": "Demo", "public_banner": "Schreibgeschützte Demo-Ansicht", "cta_register": "Account erstellen", "back_to_login": "Zur Anmeldung" }, "invitation": { "error_invalid_key": "Der Einladungslink ist kryptografisch ungültig (Schlüssel fehlerhaft).", "error_missing_key": "Der Einladungslink enthält keinen Entschlüsselungsschlüssel (#key=...). Bitte den vollständigen Link vom Eigner verwenden.", "error_expired": "Diese Einladung ist abgelaufen (48 Stunden gültig).", "error_invalid_token": "Einladungstoken ungültig.", "error_load_failed": "Einladungsdetails konnten nicht geladen werden.", "error_incomplete_session": "Sitzung unvollständig — bitte erneut anmelden (Benutzer-ID fehlt).", "error_accept_failed": "Beitritt fehlgeschlagen.", "error_login_failed": "Passkey-Anmeldung fehlgeschlagen.", "error_username_missing": "Benutzername konnte nicht ermittelt werden — bitte erneut anmelden.", "error_register_failed": "Registrierung fehlgeschlagen.", "loading_joining": "Beitritt...", "loading_checking": "Einladung wird geprüft...", "loading_unlocking": "Logbuch wird freigeschaltet und synchronisiert...", "loading_retrieving_key": "Lade Verschlüsselungsschlüssel...", "error_title": "Einladungsfehler", "back_to_start": "Zurück zum Start", "title": "Logbuch-Einladung", "invited_by": "Einladung von", "vessel_logbook": "Schiff / Logbuch", "signed_in_preparing": "Angemeldet als {{username}}. Beitritt wird vorbereitet...", "join_again": "Erneut beitreten", "login_or_register_hint": "Melde dich an oder registriere ein Konto, um dem Logbuch beizutreten.", "or_sign_up": "ODER NEU REGISTRIEREN", "register_crew_account": "Neues Crew-Konto erstellen", "username_label": "Benutzername", "create_passkey": "Passkey erstellen", "switch_language_en": "English", "switch_language_de": "Deutsch" }, "stats": { "title": "Statistik", "subtitle": "Strecken, Verbrauch und Antriebsart auf einen Blick", "scope_label": "Auswertungsbereich", "scope_logbook": "Dieses Logbuch", "scope_account": "Alle Logbücher", "loading": "Statistik wird berechnet…", "no_data": "Noch keine Reisetage vorhanden.", "total_distance": "Gesamtstrecke", "travel_days": "Reisetage", "sail_distance": "Unter Segel", "motor_distance": "Maschinenfahrt", "motor_hours_total": "Maschinenstunden gesamt", "daily_motor_hours": "Maschinenstunden pro Reisetag", "avg_motor_hours": "Ø Maschinenstunden pro Reisetag", "unknown_propulsion": "Unbekannt", "fuel_total": "Kraftstoff gesamt", "water_total": "Wasser gesamt", "daily_etmal": "Tages-Etmale", "daily_consumption": "Tagesverbrauch", "route_overview": "Route", "route_map_title": "Streckenübersicht", "propulsion_title": "Segel vs. Maschine", "propulsion_hint": "Die Aufteilung basiert auf den Logbuch-Events pro Reisetag, nicht auf GPS-Segmenten.", "avg_distance": "Ø pro Reisetag", "avg_fuel": "Ø Kraftstoff", "avg_water": "Ø Wasser", "fuel_per_nm": "Kraftstoff pro sm", "fuel_per_motor_hour": "Kraftstoff pro Maschinenstunde", "daily_fuel_per_motor_hour": "Kraftstoffverbrauch pro Maschinenstunde je Reisetag", "fuel_legend": "Kraftstoff", "water_legend": "Wasser", "unit_nm": "sm", "unit_h": "h", "unit_l": "L", "day_label": "Tag {{day}}", "account_logbooks": "Logbücher im Überblick", "col_logbook": "Logbuch", "event_series_title": "Ereignis-Verläufe", "event_series_hint": "Chronologische Werte aus dem Ereignisprotokoll.", "event_series_pressure": "Luftdruck", "event_series_wind": "Wind", "event_series_motor": "Motor", "event_series_empty": "Keine Einträge vorhanden." }, "tour": { "skip": "Tour überspringen", "back": "Zurück", "next": "Weiter", "finish": "Fertig", "progress": "Schritt {{current}} von {{total}}", "steps": { "welcome": { "title": "Willkommen an Bord!", "body": "Wir haben ein Demo-Logbuch mit drei Reisetagen in der Kieler Förde für dich angelegt. Die Beispieleinträge kannst du jederzeit löschen, wenn du mit dem eigenen Logbuch starten möchtest. Diese kurze Tour zeigt dir die wichtigsten Funktionen." }, "welcome_public": { "title": "Willkommen an Bord!", "body": "Erkunde unser Demo-Logbuch mit drei Reisetagen in der Kieler Förde – ganz ohne Account. Die Tour zeigt dir Logbucheinträge, die Schiff- und Crew-Auswahl für dieses Logbuch. Flotte und Stammcrew pflegst du später im Benutzerprofil." }, "nav_logs": { "title": "Logbucheinträge", "body": "Hier verwaltest du deine Reisetage – Abfahrt, Ziel, Wetter, Tankstände und GPS-Tracks." }, "entry_list": { "title": "Deine Reisetage", "body": "Jede Karte steht für einen Reisetag. Tippe auf einen Eintrag, um Details zu sehen oder zu bearbeiten." }, "entry_open": { "title": "Reisetag öffnen", "body": "So sieht ein ausgefüllter Logbucheintrag aus – mit Events, Tankständen und mehr." }, "entry_track": { "title": "GPS-Track", "body": "Lade GPX-Dateien hoch oder sieh bereits gespeicherte Routen auf der Karte – inklusive Distanz und Geschwindigkeit." }, "nav_vessel": { "title": "Schiff fürs Logbuch", "body": "Wähle aus deiner Schiffsflotte das Schiff für dieses Logbuch. Schiffe pflegst du im Benutzerprofil unter Flotte & Crew." }, "profile_vessel_pool": { "title": "Schiffsflotte", "body": "Im Benutzerprofil legst du alle deine Schiffe an – Charteryachten, eigenes Boot usw. Pro Logbuch wählst du dann das passende Schiff." }, "profile_crew_pool": { "title": "Stammcrew & Skipper", "body": "Im Benutzerprofil pflegst du deinen Personen-Pool – mehrere Skipper (z. B. Charter) und Crew-Mitglieder für alle Logbücher." }, "nav_logbook_crew": { "title": "Crew pro Logbuch", "body": "Wähle aus dem Pool, wer auf diesem Logbuch als Skipper und Crew gilt. Reisetage übernehmen diese Auswahl standardmäßig." }, "nav_stats": { "title": "Statistik-Dashboard", "body": "Hier siehst du Reisedistanzen, Verbrauch, Routenkarten und Antriebsanteile – automatisch aus deinen Logbucheinträgen berechnet." }, "nav_feedback": { "title": "Feedback senden", "body": "Über dieses Formular kannst du Fehler, Ideen oder allgemeines Feedback direkt an das Projektteam schicken – auch nach der Tour jederzeit über das Symbol oben rechts." }, "nav_profile": { "title": "Dein Benutzerprofil", "body": "Über den Skipper-Button oben erreichst du dein persönliches Profil – unabhängig vom aktuellen Logbuch." }, "profile_preferences": { "title": "Konto & Darstellung", "body": "Hier verwaltest du deine Konto-Identität, Theme und Hell/Dunkel-Modus. Die App-Tour kannst du jederzeit erneut starten. Passkeys und Sicherheitseinstellungen findest du weiter unten im Profil." }, "finish": { "title": "Alles klar!", "body": "Du landest gleich im Statistik-Dashboard. Die Tour kannst du jederzeit im Benutzerprofil erneut starten. Gute Fahrt!" } } }, "seo": { "title": "Kapteins Daagbok – Kostenloses digitales Yacht-Logbuch (werbefrei)", "description": "Kostenloses, werbefreies digitales Yacht-Logbuch mit End-to-End-Verschlüsselung und Passkey-Anmeldung. Reisetage, GPS-Tracks, Crew und Schiffsdaten sicher dokumentieren – auch offline als PWA.", "keywords": "Yacht-Logbuch, Schiffstagebuch, Bordlogbuch, Segeln, Passkey, E2E-Verschlüsselung, GPS-Track, maritimes Logbuch, kostenlos, werbefrei, gratis, ohne Werbung", "ogImageAlt": "Kapteins Daagbok Logo" } } }