{
  "_meta": {
    "locale": "de",
    "name": "Deutsch",
    "version": "v0.35.5",
    "authors": [
      "Jarvis Team"
    ]
  },
  "error": {
    "model_not_installed": "Das benötigte Sprachmodell ist nicht installiert. Ausführen: ollama pull {model}",
    "ollama_unreachable": "Das Sprachmodell (Ollama) ist nicht erreichbar. Stelle sicher, dass Ollama läuft: ollama serve",
    "timeout": "Die Verarbeitung hat das Zeitlimit überschritten. Das kann bei komplexen Aufgaben oder langsamen Verbindungen passieren. Versuche es erneut oder vereinfache die Anfrage.",
    "connection_failed": "Es gab ein Verbindungsproblem. Bitte prüfe deine Netzwerkverbindung und versuche es erneut.",
    "permission_denied": "Mir fehlt die Berechtigung für diese Aktion. Der Gatekeeper hat den Zugriff aus Sicherheitsgründen blockiert.",
    "not_found": "Die angeforderte Datei oder Ressource wurde nicht gefunden.",
    "rate_limited": "Der Dienst ist gerade überlastet (Rate-Limit erreicht). Bitte warte einen Moment und versuche es erneut.",
    "cloud_rate_limited": "Die Cloud-API hat ihr Rate-Limit erreicht (429). Bitte warte einen Moment oder prüfe dein API-Kontingent und deine Abrechnung.",
    "cloud_auth_failed": "Die Authentifizierung mit der Cloud-API ist fehlgeschlagen. Bitte prüfe deinen API-Schlüssel in der Konfiguration.",
    "cloud_quota_exceeded": "Dein Cloud-API-Kontingent ist aufgebraucht. Bitte prüfe deine Abrechnung und Nutzungslimits.",
    "cloud_model_not_found": "Das angeforderte Modell ist auf dieser Cloud-API nicht verfügbar. Bitte prüfe den Modellnamen in deiner Konfiguration.",
    "cloud_unreachable": "Die Cloud-API ist nicht erreichbar. Bitte prüfe deine Internetverbindung und den API-Endpunkt.",
    "cloud_generic": "Cloud-API-Fehler: {detail}",
    "memory_error": "Es ist ein Speicherproblem aufgetreten. Die Aufgabe ist möglicherweise zu gross.",
    "generic": "Ein Fehler ist aufgetreten ({exc_type}). Ich versuche einen alternativen Ansatz.",
    "gatekeeper_blocked": "Ich wollte \"{friendly}\" ausführen, aber das wurde aus Sicherheitsgründen blockiert. Grund: {reason}",
    "retry_timeout": "Der Dienst hat nicht rechtzeitig geantwortet.",
    "retry_connection": "Die Verbindung konnte nicht hergestellt werden.",
    "retry_overloaded": "Der Dienst ist gerade überlastet.",
    "retry_technical": "Technischer Fehler: {detail}",
    "retry_exhausted": "Ich habe \"{friendly}\" {attempts}-mal versucht, aber es ist jedes Mal fehlgeschlagen. {detail}",
    "no_details": "Keine Details verfügbar.",
    "all_actions_blocked": "Ich konnte keinen meiner geplanten Schritte ausführen. Der Gatekeeper hat alle Aktionen blockiert. Das kann bei sensiblen Operationen passieren, die eine Genehmigung erfordern.",
    "context_window_exceeded": "Der Kontext ist zu groß für {model} ({estimated} von {limit} Tokens). Bitte starte eine neue Session oder wechsle zu einem Modell mit größerem Context-Window.",
    "processing_error": "Verarbeitungsfehler aufgetreten.",
    "invalid_json": "Ungültiges JSON",
    "invalid_token": "Ungültiger Token",
    "python_version": "Cognithor benötigt Python >= 3.12",
    "audio_transcription": "Fehler bei der Audio-Transkription.",
    "tts_error": "TTS-Fehler aufgetreten",
    "piper_failed": "Piper fehlgeschlagen: {detail}",
    "fastapi_required": "FastAPI ist für den API-Channel erforderlich: pip install fastapi uvicorn",
    "whisper_unavailable": "faster-whisper nicht installiert. Voice-Transkription nicht verfügbar.",
    "whisper_required": "faster-whisper ist für STT erforderlich: pip install faster-whisper",
    "ffmpeg_required": "ffmpeg nicht installiert. Für Voice-Streaming: apt install ffmpeg",
    "config_load_failed": "Konfigurationsübersicht konnte nicht geladen werden.",
    "workflow_unavailable": "Workflow-Engine nicht verfügbar",
    "model_unavailable": "Modell '{name}' ({role}) ist nicht verfügbar. Installieren: ollama pull {name}",
    "exporter_unavailable": "Exporter nicht verfügbar",
    "security_pipeline_unavailable": "Security-Pipeline nicht verfügbar",
    "ecosystem_unavailable": "Ecosystem-Policy nicht verfügbar",
    "gate_unavailable": "Gate nicht verfügbar",
    "reputation_unavailable": "Reputation-Engine nicht verfügbar",
    "ollama_check": "Bitte prüfen:\n• Läuft Ollama? → ollama serve\n• Ist das Modell installiert? → ollama pull {model}",
    "model_causes": "Mögliche Ursachen:\n• Nicht genug VRAM/RAM für das Modell\n• Modell beschädigt → ollama pull {model}",
    "check_ollama": "Prüfe, ob Ollama läuft und genug Ressourcen hat.",
    "invalid_time_format": "Ungültiges Zeitformat: '{s}' (erwartet HH:MM oder HH:MM:SS)",
    "cryptography_required": "cryptography-Paket erforderlich für Credential-Verschlüsselung. pip install cryptography",
    "dag_unavailable": "DAG WorkflowEngine ist nicht verfügbar",
    "recursion_limit": "Sub-Agent Rekursion abgebrochen: Tiefe {depth} überschreitet Maximum",
    "task_incomplete": "ohne die Aufgabe vollständig abzuschliessen",
    "delegation_failed": "Agent-Router nicht verfügbar. Delegation an {to_agent} fehlgeschlagen.",
    "planner_not_init": "Planner nicht initialisiert -- Delegation nicht möglich",
    "gatekeeper_not_init": "Gatekeeper nicht initialisiert -- Delegation nicht möglich"
  },
  "tool": {
    "exec_command": "Shell-Befehl",
    "write_file": "Datei schreiben",
    "read_file": "Datei lesen",
    "edit_file": "Datei bearbeiten",
    "list_directory": "Verzeichnis auflisten",
    "run_python": "Python-Code",
    "web_search": "Web-Suche",
    "web_news_search": "Nachrichten-Suche",
    "web_fetch": "Webseite abrufen",
    "search_and_read": "Web-Recherche",
    "search_memory": "Wissens-Suche",
    "save_to_memory": "Wissen speichern",
    "document_export": "Dokument erstellen",
    "analyze_image": "Bildanalyse",
    "transcribe_audio": "Audio-Transkription",
    "extract_text": "Text-Extraktion",
    "text_to_speech": "Sprachausgabe",
    "vault_search": "Vault-Suche",
    "vault_entry": "Vault-Eintrag",
    "analyze_code": "Code-Analyse",
    "browser_navigate": "Browser-Navigation",
    "browser_screenshot": "Browser-Screenshot",
    "git_status": "Git-Status",
    "git_diff": "Git-Diff",
    "git_log": "Git-Log",
    "git_commit": "Git-Commit",
    "git_branch": "Git-Branch",
    "search_files": "Datei-Suche",
    "find_in_files": "Inhalts-Suche",
    "find_and_replace": "Suchen und Ersetzen",
    "db_query": "Datenbank-Abfrage",
    "db_schema": "Datenbank-Schema",
    "db_execute": "Datenbank-Schreibzugriff",
    "db_connect": "Datenbankverbindung",
    "create_chart": "Diagramm erstellen",
    "create_table_image": "Tabellen-Bild erstellen",
    "chart_from_csv": "Diagramm aus CSV",
    "docker_ps": "Docker-Container",
    "docker_logs": "Docker-Logs",
    "docker_inspect": "Docker-Inspektion",
    "docker_run": "Docker starten",
    "docker_stop": "Docker stoppen",
    "api_list": "API-Integrationen",
    "api_connect": "API verbinden",
    "api_call": "API-Aufruf",
    "api_disconnect": "API trennen"
  },
  "tool_desc": {
    "web_search": "Websuche durchführen mit DuckDuckGo und Multi-Backend-Fallback (SearXNG, Brave, Google CSE).",
    "web_fetch": "Webseite abrufen und sauberen Text mit trafilatura extrahieren.",
    "search_and_read": "Im Web suchen und die Top-Ergebnisse abrufen. Ideal für tiefere Recherche.",
    "web_news_search": "Nachrichtensuche durchführen.",
    "http_request": "HTTP-Request ausführen (GET, POST, PUT, DELETE, PATCH).",
    "read_file": "Liest eine Datei. Pfad wird gegen Sandbox-Policy geprüft.",
    "write_file": "Erstellt oder überschreibt eine Datei (atomar).",
    "exec_command": "Führt einen Shell-Befehl in einer Sandbox aus.",
    "run_python": "Führt Python-Code in einer Sandbox mit Ressourcen-Limits aus.",
    "analyze_code": "Kombiniert AST-basierte Qualitätsanalyse mit Security-Pattern-Scanning.",
    "analyze_image": "Analysiert ein Bild mit Vision-Modell. Standard-Modell: schnell und gut.",
    "browser_navigate": "Navigiert zu einer URL und extrahiert Seiteninhalt. Nützlich für Recherche, Preisvergleiche, Nachrichtenlesen.",
    "browser_fill": "Füllt ein Formularfeld auf der aktuellen Seite aus.",
    "browser_js": "Führt JavaScript auf der aktuellen Seite aus.",
    "browser_info": "Gibt eine Übersicht der aktuellen Seite zurück.",
    "browser_screenshot": "Gibt eine textuelle Beschreibung des Screenshots zurück.",
    "search_memory": "Durchsucht das Jarvis-Gedächtnis über alle Ebenen (Core, Semantisch, Episodisch, Prozedural).",
    "save_to_memory": "Speichert neue Information ins Jarvis-Gedächtnis.",
    "get_entity": "Lädt eine Entität aus dem Wissens-Graphen.",
    "add_entity": "Erstellt eine neue Entität im Wissens-Graphen.",
    "add_relation": "Erstellt eine Beziehung zwischen zwei Entitäten im Wissens-Graphen.",
    "get_core_memory": "Gibt die CORE.md zurück (Identität, Regeln, Präferenzen).",
    "get_episodes": "Lädt die Tageslog-Einträge der letzten N Tage.",
    "search_procedures": "Durchsucht Prozeduren (bewährte Abläufe für wiederkehrende Aufgaben).",
    "update_procedure": "Meldet Erfolg/Misserfolg einer Prozedur für Lern-Tracking.",
    "memory_stats": "Zeigt Statistiken des Memory-Systems.",
    "git_status": "Zeigt den Git Working-Tree-Status: staged, unstaged und untracked Dateien.",
    "git_diff": "Zeigt Git-Diffs. Optionen: unstaged (Standard), staged (--cached), oder Vergleich mit einem Commit.",
    "git_log": "Zeigt die Git-Commit-History mit optionalem Autor-Filter und kompaktem Format.",
    "git_commit": "Staged bestimmte Dateien und erstellt einen Git-Commit. Kein 'git add .' erlaubt.",
    "git_branch": "Git-Branch-Operationen: list, create, switch, delete (nur sicheres Loeschen).",
    "search_files": "Findet Dateien nach Name oder Glob-Pattern. Rekursive Suche ohne .git, node_modules, etc.",
    "find_in_files": "Durchsucht Dateiinhalte nach Text oder Regex. Zeigt Treffer mit Kontextzeilen.",
    "find_and_replace": "Sucht und ersetzt in Dateien. Standard: dry_run (nur Vorschau). Erstellt .bak-Backups.",
    "db_query": "Fuehrt eine Read-Only SQL-Abfrage auf einer Datenbank aus. Unterstuetzt SQLite (Dateipfad) und PostgreSQL (Connection-String). Gibt formatierte Tabelle zurueck.",
    "db_schema": "Zeigt das Datenbank-Schema. Ohne table-Parameter: Liste aller Tabellen. Mit table: Detaillierte Spalteninfo (Name, Typ, Nullable, PK, Default).",
    "db_execute": "Fuehrt eine schreibende SQL-Anweisung aus (INSERT/UPDATE/DELETE/CREATE). Erfordert Gatekeeper-Genehmigung. DROP-Anweisungen blockiert.",
    "db_connect": "Testet eine Datenbankverbindung und zeigt Infos (Typ, Version, Groesse, Anzahl Tabellen).",
    "create_chart": "Erstellt ein Diagramm (bar, line, pie, scatter, hbar) aus Daten. Speichert als PNG im Dark-Theme.",
    "create_table_image": "Rendert Daten als formatierte Tabelle als Bild (PNG). Optionales Maximalwert-Highlighting. Dark-Theme.",
    "chart_from_csv": "Erstellt ein Diagramm direkt aus einer CSV-Datei. Erkennt Spalten automatisch.",
    "docker_ps": "Docker-Container auflisten mit Status, Ports und Image-Info.",
    "docker_logs": "Logs eines Docker-Containers abrufen mit Tail- und Zeitfilter.",
    "docker_inspect": "Docker-Container oder Image inspizieren fuer detaillierte Konfiguration.",
    "docker_run": "Docker-Container von einem Image starten mit Port-Mapping und Umgebungsvariablen.",
    "docker_stop": "Einen laufenden Docker-Container ordnungsgemaess stoppen.",
    "api_list": "Alle konfigurierten API-Integrationen und verfuegbare Templates auflisten.",
    "api_connect": "Neue API-Integration mit Authentifizierung einrichten.",
    "api_call": "Authentifizierten API-Aufruf an eine konfigurierte Integration senden.",
    "api_disconnect": "API-Integrations-Konfiguration entfernen."
  },
  "channel": {
    "approval_required": "Bestätigung erforderlich",
    "approval_rationale": "Begründung: {rationale}",
    "help_title": "Verfügbare Befehle:",
    "unknown_command": "Unbekannter Befehl: {command}. Tippe /help für Hilfe.",
    "stt_unavailable": "Spracherkennung nicht verfügbar. Installiere faster-whisper: pip install faster-whisper",
    "error_fallback": "Ein Fehler ist bei der Verarbeitung aufgetreten."
  },
  "status": {
    "exec_command": "Führe Befehl aus...",
    "run_python": "Führe Python-Code aus...",
    "tool_running": "Führe {tool} aus..."
  },
  "voice": {
    "approval_prompt": "Darf ich {tool} ausführen? Grund: {reason}. Sage Ja oder Nein."
  },
  "gatekeeper": {
    "invalid_path": "Ungültiger Pfad: {path}",
    "path_outside_allowed": "Pfad ausserhalb erlaubter Verzeichnisse: {path}",
    "dangerous_code": "Gefährlicher Python-Code erkannt: {description}",
    "offline_network_blocked": "Tool '{tool}' benoetigt Netzwerk, aber System ist im OFFLINE-Modus",
    "credential_masked": "Credential in Parametern erkannt -- maskiert",
    "capability_violation": "Capability-Verletzung: {violations}",
    "risk_ceiling_exceeded": "Aktion ueberschreitet Risk-Ceiling ({ceiling}): {risk}",
    "default_classification": "Default-Klassifizierung: {risk}",
    "destructive_command": "Destruktiver Shell-Befehl erkannt: Pattern '{pattern}'"
  },
  "executor": {
    "action_skipped": "Aktion übersprungen: {status} -- {reason}",
    "deadlock": "Aktion übersprungen: Abhängigkeiten nicht erfüllt (Deadlock)",
    "deps_not_met": "Aktion übersprungen: Abhängigkeiten nicht erfüllt",
    "no_mcp_client": "Kein MCP-Client verfügbar",
    "tool_error": "Fehler: {error}",
    "retry_exhausted_fallback": "Fehler nach {attempts} Versuchen: {error}"
  },
  "planner": {
    "no_tools": "Keine Tools verfügbar.",
    "output_truncated": "[... Output gekürzt]",
    "llm_error": "Ich konnte deine Anfrage nicht verarbeiten — das Sprachmodell hat einen Fehler gemeldet (HTTP {status_code}).\n\nMögliche Ursachen:\n- Ollama ist nicht gestartet → `ollama serve`\n- Das Modell '{model}' ist nicht installiert → `ollama pull {model}`\n- Nicht genug VRAM/RAM für das Modell\n\nFehlerdetails: {detail}",
    "replan_exhausted": "Ich konnte den Plan nicht fortsetzen — das Sprachmodell meldet Fehler nach {attempts} Versuchen.\n\nFehler: {error}",
    "circuit_breaker_open": "Das Sprachmodell ist wiederholt nicht erreichbar. Automatischer Retry in {seconds}s.\n\nPruefe bitte:\n- Laeuft Ollama? -> `ollama serve`\n- Hat das System genug RAM/VRAM?",
    "model_not_installed": "Das Sprachmodell '{model}' ist nicht installiert. Bitte lade es herunter:\n\n  ollama pull {model}\n\nDanach starte mich neu oder versuch es einfach erneut.",
    "escalation_fallback": "Ich habe mehrfach versucht, '{tool}' auszufuehren, aber es wurde blockiert: {reason}. Bitte hilf mir, das anders zu loesen.",
    "results_summary_failed": "Hier sind die Ergebnisse (Zusammenfassung fehlgeschlagen):\n\n{results}",
    "summarize_failed": "Ich konnte die Ergebnisse leider nicht zusammenfassen -- das Sprachmodell antwortet fehlerhaft. Pruefe, ob Ollama laeuft und genug Ressourcen hat."
  },
  "prompt": {
    "respond_default": "Antworte prägnant und informativ.",
    "respond_german": "Antworte auf Deutsch, prägnant und informativ.",
    "natural_speech": "Antworte in natürlicher, gesprochener Sprache, die für Sprachausgabe geeignet ist.",
    "jarvis_identity": "Du bist Cognithor. Erkläre höflich auf Deutsch."
  },
  "personality": {
    "greeting_night": "Hallo Nachtschwärmer! ",
    "greeting_morning": "Guten Morgen! ",
    "greeting_afternoon": "Guten Tag! ",
    "greeting_evening": "Guten Abend! ",
    "empathy_directive": "Zeige Empathie und Verständnis für die Situation des Users.",
    "appreciation_directive": "Formuliere Antworten wertschätzend und konstruktiv.",
    "humor_directive": "Ein gelegentlicher lockerer Kommentar ist erlaubt, aber bleibe immer professionell.",
    "success_directive": "Wenn eine Aufgabe erfolgreich abgeschlossen wurde, bestätige das positiv.",
    "proactive_directive": "ob der User noch etwas braucht oder ob dir weitere Details helfen würden."
  },
  "sentiment": {
    "response_frustrated": "Sei besonders geduldig, verständnisvoll und hilfsbereit.",
    "response_urgent": "Antworte prägnant und direkt. Komm sofort zum Punkt. Überspringe Höflichkeitsfloskeln.",
    "response_confused": "Erkläre besonders klar und schrittweise. Verwende einfache Sprache."
  },
  "text": {
    "truncated": "[... gekürzt]",
    "output_truncated": "[... gekürzt: {current}/{total} Zeichen, Quelle: {url}]"
  },
  "web": {
    "invalid_url": "Ungültige URL: {url}",
    "invalid_domain": "Keine gültige Domain: {url}",
    "dns_blocked": "DNS für {hostname} zeigt auf blockierte Adresse: {ip}",
    "search_failed": "Websuche für '{query}' fehlgeschlagen: {error}",
    "no_results": "Keine Ergebnisse für: {query}",
    "fetch_failed": "Fetch fehlgeschlagen für {url}: {error}",
    "invalid_method": "Ungültige HTTP-Methode: {method}. Erlaubt: GET, POST, PUT, DELETE, PATCH, HEAD",
    "body_too_large": "Request-Body zu gross: {size} Bytes (max: {max_size})",
    "timeout": "Timeout nach {seconds}s für {url}",
    "request_failed": "Request fehlgeschlagen für {url}: {error}",
    "search_results_for": "Suchergebnisse für: {query}",
    "source_comparison_note": "Übereinstimmungen und Widersprüche zwischen Quellen sollten beachtet werden",
    "error_query_required": "Fehler: 'query' ist erforderlich fuer search_and_read."
  },
  "verified_lookup": {
    "no_webtools": "Fehler: WebTools nicht verfuegbar.",
    "search_failed": "Suche fehlgeschlagen: {error}",
    "no_results": "Keine Suchergebnisse fuer: {query}",
    "no_content": "Konnte keine Inhalte von den gefundenen Seiten extrahieren fuer: {query}",
    "no_facts": "Keine verifizierbaren Fakten gefunden.",
    "no_answer": "Keine Antwort.",
    "consensus_failed": "Konsens konnte nicht ermittelt werden.",
    "header": "## Verifizierte Antwort (Konfidenz: {confidence}%)\n",
    "sources_header": "\n### Quellen ({count} geprueft)",
    "agreement_header": "\n### Quellenabgleich: {agreement}% Uebereinstimmung",
    "agreement_high": "Hohe Uebereinstimmung: Mehrere Quellen bestaetigen die Fakten.",
    "agreement_medium": "Mittlere Uebereinstimmung: Teilweise Bestaetigung.",
    "agreement_low": "Geringe Uebereinstimmung: Quellen widersprechen sich.",
    "discrepancies_header": "\n### Diskrepanzen",
    "discrepancy_item": "Abweichung: '{value_a}' ({count_a} Quelle(n)) vs. '{value_b}' ({count_b} Quelle(n))",
    "duration": "\n*Gesamtzeit: {ms}ms*"
  },
  "gateway": {
    "parse_failed": "Ich konnte die Antwort des Sprachmodells nicht verarbeiten. Bitte versuch es nochmal oder formuliere deine Anfrage anders.",
    "consent_granted": "Datenschutz-Einwilligung erteilt. Ich bin jetzt bereit!",
    "processing_cancelled": "Verarbeitung abgebrochen. Was kann ich stattdessen fuer dich tun?",
    "budget_limit_reached": "Budget-Limit erreicht: {warning}",
    "sub_agent_timeout": "Sub-Agent Timeout nach {seconds}s",
    "sub_agent_recursion": "Sub-Agent Rekursion abgebrochen: Tiefe {depth} ueberschreitet Maximum {max_depth}.",
    "status_thinking": "Denke nach...",
    "status_planning": "Plane Schritte...",
    "status_analyzing": "Analysiere Aufgabe...",
    "status_creating_plan": "Erstelle Plan...",
    "status_working": "Arbeite daran...",
    "channel_compact": "Halte Antworten kurz und kompakt.",
    "channel_max_length": "Max {max} Zeichen.",
    "channel_no_markdown": "Kein Markdown verwenden.",
    "channel_no_code_blocks": "Keine Code-Bloecke.",
    "correction_hint": "[KORREKTUR] Der User hat korrigiert: \"{text}\". Passe deinen Plan an. Fuehre NICHT die vorherige Aktion erneut aus.",
    "startup_description": "Jarvis gestartet (LLM={llm_ok}, Tools={tool_count})",
    "shutdown_description": "Jarvis heruntergefahren",
    "status_web_search": "Durchsuche das Web...",
    "status_web_news_search": "Suche Nachrichten...",
    "status_search_and_read": "Recherchiere online...",
    "status_web_fetch": "Rufe Webseite ab...",
    "status_read_file": "Lese Datei...",
    "status_write_file": "Schreibe Datei...",
    "status_edit_file": "Bearbeite Datei...",
    "status_exec_command": "Fuehre Befehl aus...",
    "status_run_python": "Fuehre Python-Code aus...",
    "status_search_memory": "Durchsuche Wissen...",
    "status_save_to_memory": "Speichere Wissen...",
    "status_document_export": "Erstelle Dokument...",
    "status_media_analyze_image": "Analysiere Bild...",
    "status_media_transcribe_audio": "Transkribiere Audio...",
    "status_media_extract_text": "Extrahiere Text...",
    "status_media_tts": "Generiere Sprache...",
    "status_vault_search": "Durchsuche Vault...",
    "status_vault_write": "Schreibe in Vault...",
    "status_analyze_code": "Analysiere Code...",
    "status_list_directory": "Liste Verzeichnis auf...",
    "status_browser_navigate": "Navigiere Browser...",
    "status_browser_screenshot": "Erstelle Screenshot..."
  },
  "media": {
    "unsupported_image": "Nicht unterstütztes Bildformat: {suffix}",
    "unsupported_format": "Nicht unterstütztes Format: {suffix}. Unterstützt: PDF, DOCX, TXT, MD, HTML, CSV",
    "text_truncated": "[... gekürzt, {length} Zeichen gesamt]",
    "pdf_reader_required": "Kein PDF-Reader verfügbar. Installiere: pip install pymupdf oder pip install pdfplumber",
    "analysis_unavailable": "Fehler: Dokument-Analyse nicht verfügbar.",
    "no_text_in_document": "Fehler: Kein Text im Dokument gefunden. Möglicherweise ein gescanntes PDF -- versuche OCR.",
    "export_unsupported_format": "Nicht unterstütztes Format: {fmt}. Erlaubt: pdf, docx, xlsx, pptx",
    "tts_unavailable": "Kein TTS-Backend verfügbar. Installiere piper oder espeak-ng.",
    "file_not_found": "Datei nicht gefunden oder ungültig: {path}",
    "audio_too_large": "Audiodatei zu groß ({size_mb} MB, max {max_mb} MB)",
    "no_speech_detected": "[Keine Sprache erkannt]",
    "whisper_not_installed": "faster-whisper nicht installiert. pip install faster-whisper",
    "transcription_failed": "Transkription fehlgeschlagen: {error}",
    "image_not_found": "Bild nicht gefunden oder ungültig: {path}",
    "image_too_large": "Bild zu groß ({size_mb} MB, max {max_mb} MB)",
    "httpx_not_installed": "httpx nicht installiert",
    "image_analysis_failed": "Bildanalyse fehlgeschlagen: {error}",
    "file_too_large_mb": "Datei zu groß ({size_mb} MB, max {max_mb} MB)",
    "unsupported_format_extended": "Nicht unterstütztes Format: {suffix}. Unterstützt: PDF, DOCX, PPTX, TXT, MD, HTML, CSV, JSON, XML",
    "text_extraction_failed": "Text-Extraktion fehlgeschlagen: {error}",
    "pdf_read_failed": "PDF-Lesen fehlgeschlagen: {error}",
    "ppt_read_failed": "PPT-Lesen fehlgeschlagen: {error}",
    "docx_read_failed": "DOCX-Lesen fehlgeschlagen: {error}",
    "invalid_sample_rate": "Ungültige Samplerate: {rate}. Erlaubt: {allowed}",
    "ffmpeg_error": "ffmpeg Fehler: {error}",
    "audio_converted": "Konvertiert: {path}",
    "ffmpeg_not_installed": "ffmpeg nicht installiert. apt install ffmpeg",
    "pillow_not_installed": "Pillow nicht installiert. pip install Pillow",
    "image_resized": "Bild skaliert auf {width}x{height}: {path}",
    "image_resize_failed": "Bildskalierung fehlgeschlagen: {error}",
    "empty_content": "Leerer Inhalt",
    "document_created": "Dokument erstellt: {path}",
    "document_export_failed": "Dokument-Export fehlgeschlagen: {error}",
    "document_create_failed": "Dokument-Erstellung fehlgeschlagen: {error}",
    "empty_tts_text": "Leerer Text",
    "invalid_voice": "Ungültiger Voice-Name: {error}",
    "output_outside_workspace": "Ausgabepfad außerhalb des Workspace: {path}",
    "tts_audio_created": "Audio erzeugt: {path}",
    "tts_audio_created_espeak": "Audio erzeugt (eSpeak): {path}",
    "analysis_extraction_failed": "Fehler bei Text-Extraktion: {error}",
    "analysis_llm_failed": "Fehler bei LLM-Analyse: {error}",
    "vault_saved": "\u2713 Analyse im Vault gespeichert als '{title}'.",
    "vault_save_failed": "\u26a0 Vault-Speicherung fehlgeschlagen: {error}",
    "ocr_warning": "\n\n\u26a0 **Hinweis**: Sehr wenig Text extrahiert. Falls es sich um ein gescanntes PDF handelt, wird OCR-Software benötigt.",
    "empty_typst_source": "Leerer Typst-Quellcode",
    "typst_created": "Typst-PDF erstellt: {path}",
    "typst_failed": "Typst-Kompilierung fehlgeschlagen: {error}",
    "no_templates": "Keine Dokumentvorlagen gefunden in ~/.jarvis/templates/documents/",
    "invalid_json_variables": "Fehler: Ungültige JSON-Variablen: {error}",
    "template_render_error": "Fehler: {error}",
    "error_detail": "Fehler: {error}"
  },
  "fs": {
    "invalid_path": "Ungültiger Pfad: {path}",
    "access_denied": "Zugriff verweigert: {path} liegt ausserhalb erlaubter Verzeichnisse",
    "not_regular_file": "Kein reguläres File: {path}",
    "file_too_large": "Datei zu gross ({size} Bytes). Maximum: 1 MB.",
    "edit_ambiguous": "Verwende einen längeren Ausschnitt als old_text.",
    "file_written": "Datei geschrieben: {path} ({size} Bytes)",
    "file_edited": "Datei bearbeitet: {path}\nErsetzt: {old_len} \u2192 {new_len} Zeichen\nZeilen: {diff}",
    "tree_truncated": "... ({count} weitere Eintraege)",
    "access_denied_tree": "[Zugriff verweigert]",
    "file_not_found": "Datei nicht gefunden: {path}",
    "dir_not_found": "Verzeichnis nicht gefunden: {path}",
    "text_not_found": "Text nicht gefunden in {path}. Gesucht: '{text}...'"
  },
  "shell": {
    "path_blocked": "Befehl blockiert: Pfad '{path}' liegt ausserhalb des Workspace.",
    "no_command": "Kein Befehl angegeben."
  },
  "memory": {
    "invalid_tier": "Fehler: Unbekannter Tier '{tier}'. Gültig: {valid}",
    "no_results": "Keine Ergebnisse für: '{query}'",
    "access_denied": "Zugriff verweigert: Pfad '{path}' liegt ausserhalb des Workspace",
    "entity_not_found_generic": "Entität nicht gefunden",
    "entity_not_found": "Keine Entität gefunden für: '{name}'",
    "invalid_json": "Fehler: Ungültiges JSON in attributes: {attributes}",
    "entity_created": "Entität erstellt: {name} (Typ: {entity_type}, ID: {id})",
    "source_entity_not_found": "Fehler: Quell-Entität '{name}' nicht gefunden.",
    "target_entity_not_found": "Fehler: Ziel-Entität '{name}' nicht gefunden.",
    "no_episodes": "Keine Episodic-Einträge der letzten {days} Tage.",
    "no_procedures": "Keine Prozeduren gefunden für: '{query}'",
    "empty_graph": "# Wissens-Graph\n\nKeine Entitäten vorhanden.\n",
    "compaction_status": "Compaction nötig: JA/Nein",
    "error_empty_query": "Fehler: Leere Suchanfrage.",
    "error_empty_content": "Fehler: Leerer Inhalt.",
    "error_empty_name": "Fehler: Leerer Name.",
    "error_empty_procedure_name": "Fehler: Leerer Prozedurname.",
    "core_readonly": "Fehler: Core Memory ist nicht direkt beschreibbar. Nutze die CORE.md manuell.",
    "core_empty": "(Core Memory ist leer. Erstelle CORE.md in ~/.jarvis/memory/)",
    "episodic_saved": "Episodic Memory gespeichert: [{date}] {topic}",
    "semantic_saved": "Semantic Memory indexiert: {count} Chunk(s) unter '{source_path}'",
    "procedural_saved": "Procedural Memory gespeichert: '{source_path}' ({count} Chunk(s))",
    "relation_created": "Relation erstellt: {source} --[{relation}]→ {target}",
    "entity_deleted": "GDPR-Löschung: {count} Entität(en) '{name}' mit allen Relationen gelöscht.",
    "delete_failed": "Löschung fehlgeschlagen: {error}",
    "relation_not_found": "Keine Relation '{relation}' zwischen '{source}' und '{target}' gefunden.",
    "relation_deleted": "GDPR-Löschung: Relation '{source}' --[{relation}]→ '{target}' gelöscht.",
    "search_results_header": "### {count} Ergebnis(se)\n",
    "procedures_header": "### {count} Prozedur(en)\n",
    "procedure_not_found": "Fehler: Prozedur '{name}' nicht gefunden.",
    "procedure_usage_recorded": "Prozedur '{name}': {status} erfasst. Gesamt: {total}x, Erfolgsrate: {rate}",
    "procedure_status_success": "Erfolg",
    "procedure_status_failure": "Fehlschlag",
    "stats_header": "### Memory-System Status\n",
    "stats_chunks": "- **Chunks:** {value}",
    "stats_embeddings": "- **Embeddings:** {value}",
    "stats_entities": "- **Entitäten:** {value}",
    "stats_relations": "- **Relationen:** {value}",
    "stats_procedures": "- **Prozeduren:** {value} ({reliable} zuverlässig)",
    "stats_episode_dates": "- **Episode-Tage:** {value}",
    "stats_core_loaded": "- **Core Memory geladen:** {value}",
    "stats_embedding_cache": "- **Embedding-Cache:** {hits} Hits / {calls} API-Calls",
    "stats_initialized": "- **Initialisiert:** {value}",
    "stats_yes": "Ja",
    "stats_no": "Nein",
    "procedure_item": "**{name}** · Erfolgsrate: {rate} · Nutzungen: {uses} · Relevanz: {score}",
    "entity_type_label": "- **Typ:** {value}",
    "entity_relations_label": "\n**Relationen:**"
  },
  "ingest": {
    "unsupported_format": "Nicht unterstütztes Format: {suffix}",
    "no_extractor": "Kein Extraktor für {suffix}",
    "pymupdf_required": "PDF-Extraktion benötigt PyMuPDF: pip install pymupdf",
    "docx_required": "DOCX-Extraktion benötigt python-docx: pip install python-docx",
    "file_too_large": "Datei zu gross: {size} MB"
  },
  "code": {
    "access_denied": "Zugriff verweigert: '{path}' liegt ausserhalb des Workspace",
    "only_python": "Fehler: Nur Python-Dateien (.py) werden unterstützt."
  },
  "browser": {
    "text_truncated": "[... gekürzt, {length} Zeichen gesamt]",
    "field_filled": "Feld '{selector}' ausgefüllt",
    "vision_unavailable": "(Vision nicht verfügbar)"
  },
  "security": {
    "token_store_insecure": "Token-Store nutzt Base64-Fallback (NICHT verschlüsselt!). pip install cryptography",
    "not_encrypted_warning": "NICHT verschlüsselt. pip install cryptography",
    "param_length_rule": "Überlange Parameter blockieren (Injection-Schutz)",
    "rate_limit_exceeded": "Rate-Limit '{name}' überschritten: {detail}",
    "forbidden_value": "enthält verbotenen Wert '{value}'"
  },
  "privacy": {
    "consent_prompt": "Datenschutzhinweis: Ich speichere Nachrichten, Erinnerungen und Verarbeitungsprotokolle. Details: cognithor.dev/privacy\n\nAntworte mit 'akzeptieren' oder 'ablehnen'.",
    "consent_declined": "Ich kann deine Nachrichten ohne Datenschutz-Einwilligung nicht verarbeiten. Sende 'akzeptieren' wenn du es dir anders ueberlegst.",
    "send_text_first": "Bitte sende zuerst eine Textnachricht und akzeptiere den Datenschutzhinweis."
  },
  "vault": {
    "invalid_token_format": "Ungültiges Token-Format (Base64-Fehler): {error}",
    "token_too_short": "Token zu kurz für Legacy-Entschlüsselung",
    "not_found": "Notiz nicht gefunden: {identifier}",
    "link_notes_not_found": "Eine oder beide Notizen nicht gefunden",
    "saved": "Notiz gespeichert: {title}",
    "error_no_title": "Fehler: Kein Titel angegeben.",
    "error_no_content": "Fehler: Kein Inhalt angegeben.",
    "error_no_query": "Fehler: Kein Suchbegriff angegeben.",
    "error_no_identifier": "Fehler: Kein Identifier angegeben.",
    "error_no_update_data": "Fehler: Weder Inhalt noch Tags zum Aktualisieren angegeben.",
    "error_no_path": "Fehler: Kein Pfad angegeben.",
    "error_invalid_path": "Ungültiger Pfad (Path-Traversal blockiert): {path}",
    "error_source_not_found": "Quell-Notiz nicht gefunden: {identifier}",
    "error_target_not_found": "Ziel-Notiz nicht gefunden: {identifier}",
    "no_results": "Keine Notizen gefunden für: {query}",
    "search_header": "Vault-Suche: {query} ({count} Treffer)\n",
    "list_empty": "Keine Notizen im Vault gefunden.",
    "list_header": "Vault-Inhalt ({count} Notizen):\n",
    "list_path": "    Pfad: {path}",
    "list_tags": "    Tags: {tags}",
    "list_updated": "    Aktualisiert: {updated_at}",
    "read_display": "# {title}\n\nPfad: {path}\nTags: {tags}\n\n{content}"
  },
  "skill": {
    "invalid_package_name": "Ungültiger Paketname '{name}'",
    "invalid_version": "Ungültige Version '{version}': SemVer erwartet",
    "tool_unavailable": "Tool '{tool}' nicht verfügbar",
    "no_skill_for": "Kein Skill für: {query}",
    "syntax_check_passed": "Syntax-Check bestanden (keine Sandbox verfügbar)",
    "no_manifest": "Paket enthält kein manifest.json",
    "no_skill_py": "Paket enthält kein skill.py",
    "invalid_manifest": "Manifest ungültig: {detail}",
    "code_analysis_dangerous": "Code-Analyse: GEFÄHRLICH -- {detail}",
    "publisher_untrusted": "Herausgeber '{signer}' nicht vertrauenswürdig",
    "hash_mismatch": "Content-Hash stimmt nicht überein (Manipulation?)",
    "auto_created": "Dieser Skill wurde automatisch erstellt. Er muss manuell mit Inhalt befüllt werden.",
    "err_name_empty": "Fehler: name darf nicht leer sein.",
    "err_description_empty": "Fehler: description darf nicht leer sein.",
    "err_trigger_keywords_empty": "Fehler: trigger_keywords darf nicht leer sein.",
    "err_body_empty": "Fehler: body darf nicht leer sein.",
    "err_file_exists": "Fehler: Skill-Datei existiert bereits: {path}\nVerwende einen anderen Namen oder lösche die bestehende Datei.",
    "err_write_failed": "Fehler beim Schreiben der Skill-Datei: {exc}",
    "warn_hot_load_failed": "Skill-Datei geschrieben: {path}\nWARNUNG: Hot-Loading fehlgeschlagen: {exc}\nDer Skill wird beim nächsten Neustart verfügbar sein.",
    "created": "Skill erfolgreich erstellt.\n  Name: {name}\n  Slug: {slug}\n  Datei: {path}\n  Keywords: {keywords}\n  Kategorie: {category}\n  Registrierte Skills gesamt: {total}\nDer Skill ist sofort verfügbar.",
    "no_skills_found": "Keine Skills gefunden{filter_info}.",
    "filter_category": " (Kategorie: {category})",
    "filter_active_only": " (nur aktive)",
    "list_header": "Registrierte Skills ({count}):",
    "status_active": "aktiv",
    "status_inactive": "inaktiv",
    "not_yet_tested": "noch nicht getestet",
    "success_rate": "Erfolg: {rate} ({total}x genutzt)",
    "install_failed": "Installation fehlgeschlagen:\n{errors}",
    "install_success": "Community-Skill '{name}' erfolgreich installiert.\n  Version: {version}\n  Pfad: {path}\n  Benötigte Tools: {tools}{warnings}",
    "install_error": "Fehler bei Installation: {exc}",
    "no_community_skills": "Keine Community-Skills gefunden.",
    "community_list_header": "Community-Skills ({count}):",
    "search_error": "Fehler bei Suche: {exc}",
    "report_recorded": "Abuse-Report für Skill '{name}' erfasst.\n  Kategorie: {category}\n  Beschreibung: {description}\nDer Report wird bei der nächsten Registry-Sync übermittelt.",
    "no_tools": "keine",
    "install_warnings_prefix": "\nWarnungen:"
  },
  "config": {
    "preset_office_name": "Büro-Assistent",
    "preset_office_desc": "Tägliche Briefings, E-Mail-Übersicht, Kalender-Check"
  },
  "wizard": {
    "invalid_selection": "Ungültige Auswahl für '{title}'",
    "confirmation": "Bestätigung",
    "confirm_settings": "Prüfe die Einstellungen und bestätige."
  },
  "cli": {
    "help_log_level": "Log-Level überschreiben",
    "help_no_cli": "CLI-Channel nicht starten (Headless-Betrieb für Control Center)",
    "help_api_port": "Port für die Control Center API",
    "help_api_host": "Host für die Control Center API"
  },
  "cron": {
    "default_weather": "Wetter für Nürnberg",
    "default_weekly": "Wochenrückblick:\n"
  },
  "collaboration": {
    "researcher": "Recherchiere gründlich. Liefere Fakten, Quellen und Kontext.",
    "analyst": "Analysiere die Daten. Identifiziere Muster, Trends und Zusammenhänge.",
    "critic": "Prüfe kritisch. Finde Fehler, Lücken und Schwächen im Argument.",
    "validator": "Validiere die Ergebnisse gegen die Anforderungen. Prüfe Korrektheit.",
    "executor": "Führe die Aufgabe aus. Produziere konkreten Output.",
    "synthesizer": "Fasse alle Perspektiven zusammen. Erstelle eine kohärente Synthese.",
    "mediator": "Vermittle zwischen Positionen. Finde Konsens und löse Konflikte.",
    "previous_contributions": "Vorherige Beiträge:\n"
  },
  "webchat": {
    "attach_file": "Datei anhängen",
    "approval_required": "Bestätigung erforderlich",
    "mic_access_denied": "Mikrofon-Zugriff nicht möglich. Bitte erlaube den Zugriff."
  },
  "audit": {
    "eval_dangerous": "eval() erlaubt beliebige Code-Ausführung",
    "exec_dangerous": "exec() erlaubt beliebige Code-Ausführung",
    "shell_injection": "Shell-Injection möglich bei shell=True",
    "direct_shell": "Direkte Shell-Ausführung",
    "external_http": "Skill macht HTTP-Requests nach aussen",
    "dns_exfiltration": "DNS-Anfragen können zur Datenexfiltration genutzt werden",
    "file_access_sandbox": "Dateizugriff auf Sandbox beschränken",
    "temp_secrets": "Credentials in temporäre Dateien geschrieben",
    "base64_obfuscation": "Base64-Kodierung kann bösartigen Code verstecken",
    "user_approved": "User-Bestätigung für: {reason}",
    "user_rejected": "User-Ablehnung für: {reason}"
  },
  "log": {
    "approval_timeout": "Approval-Timeout für %s",
    "cron_loaded": "Geladene Cron-Jobs: %d",
    "cron_triggered": "Cron-Job ausgelöst: '%s'",
    "heartbeat_executed": "Heartbeat ausgeführt"
  },
  "integrity": {
    "negation_contradiction": "Negations-Widerspruch (Überlappung: {count} Wörter)",
    "content_too_long": "Inhalt ungewöhnlich lang"
  },
  "hygiene": {
    "contradictory_values": "Widersprüchliche Werte für '{key}': {values}",
    "hash_mismatch": "Hash-Mismatch für Eintrag '{entry_id}'"
  },
  "tools": {
    "tool_not_found": "Tool '{name}' nicht gefunden",
    "resource_not_found": "Resource '{uri}' nicht gefunden",
    "prompt_not_found": "Prompt '{name}' nicht gefunden",
    "tool_not_found_available": "Tool '{name}' nicht gefunden. Verfügbar: {available}",
    "server_not_connected": "MCP-Server '{server}' nicht verbunden",
    "git_not_installed": "git ist nicht installiert oder nicht im PATH.",
    "git_timeout": "Git-Befehl Timeout nach {timeout}s.",
    "git_output_truncated": "\n\n[... Output gekuerzt]",
    "git_not_a_repo": "'{cwd}' ist kein Git-Repository. Initialisiere mit 'git init' oder navigiere in ein bestehendes Repository.",
    "git_status_error": "Fehler bei git status: {stderr}",
    "git_status_staged_header": "Staged ({count}):",
    "git_status_unstaged_header": "\nUnstaged ({count}):",
    "git_status_untracked_header": "\nUntracked ({count}):",
    "git_status_clean": "Working tree clean \u2014 nichts zu committen.",
    "git_status_detail_header": "\n--- Detailansicht ---",
    "git_diff_invalid_commit": "Ungueltiger Commit-Bezeichner: '{commit}'",
    "git_diff_error": "Fehler bei git diff: {stderr}",
    "git_diff_no_staged": "Keine staged Aenderungen.",
    "git_diff_no_commit_diff": "Keine Unterschiede zu Commit '{commit}'.",
    "git_diff_no_unstaged": "Keine unstaged Aenderungen.",
    "git_log_invalid_author": "Ungueltiger Author-Filter: '{author}'",
    "git_log_error": "Fehler bei git log: {stderr}",
    "git_log_no_commits": "Keine Commits gefunden.",
    "git_commit_message_required": "Fehler: Commit-Nachricht ist erforderlich.",
    "git_commit_files_required": "Fehler: Mindestens eine Datei muss angegeben werden (kein 'git add .' erlaubt).",
    "git_commit_file_outside_workspace": "Fehler: Datei '{file_path}' liegt ausserhalb des Workspace ({workspace_root})",
    "git_commit_stage_error": "Fehler beim Stagen: {stderr}",
    "git_commit_error": "Fehler beim Commit: {stderr}",
    "git_commit_success": "Commit erfolgreich erstellt.",
    "git_branch_list_error": "Fehler bei git branch: {stderr}",
    "git_branch_no_branches": "Keine Branches vorhanden (leeres Repository?).",
    "git_branch_name_required": "Fehler: Branch-Name ist erforderlich fuer Aktion '{action}'.",
    "git_branch_invalid_name": "Ungueltiger Branch-Name: '{name}'",
    "git_branch_create_error": "Fehler beim Erstellen von Branch '{name}': {stderr}",
    "git_branch_created": "Branch '{name}' erstellt und ausgecheckt.",
    "git_branch_switch_error": "Fehler beim Wechseln zu Branch '{name}': {stderr}",
    "git_branch_switched": "Zu Branch '{name}' gewechselt.",
    "git_branch_delete_error": "Fehler beim Loeschen von Branch '{name}': {stderr}",
    "git_branch_deleted": "Branch '{name}' geloescht.",
    "git_branch_unknown_action": "Unbekannte Aktion: '{action}'. Erlaubt: list, create, switch, delete.",
    "set_reminder": "Erinnerung setzen",
    "set_reminder_desc": "Eine Erinnerung fuer die Zukunft setzen. Text und entweder eine Verzoegerung in Minuten oder einen absoluten Zeitpunkt angeben.",
    "list_reminders": "Erinnerungen auflisten",
    "list_reminders_desc": "Aktive/ausstehende Erinnerungen auflisten. Optional vergangene (ausgeloeste/abgebrochene) Erinnerungen einbeziehen.",
    "send_notification": "Benachrichtigung senden",
    "send_notification_desc": "Eine sofortige Desktop-Benachrichtigung mit Titel und Nachricht senden.",
    "get_clipboard": "Zwischenablage lesen",
    "get_clipboard_desc": "Inhalt der Zwischenablage lesen (Text oder Bild). Hinweis: Die Zwischenablage kann sensible Informationen enthalten.",
    "set_clipboard": "Zwischenablage setzen",
    "set_clipboard_desc": "Text in die System-Zwischenablage kopieren.",
    "screenshot_desktop": "Desktop-Screenshot",
    "screenshot_desktop_desc": "Einen vollstaendigen Desktop-Screenshot aufnehmen. Hinweis: Screenshots koennen sensible Informationen enthalten.",
    "screenshot_region": "Bereich-Screenshot",
    "screenshot_region_desc": "Einen Screenshot eines bestimmten Bildschirmbereichs aufnehmen. Hinweis: Screenshots koennen sensible Informationen enthalten.",
    "reminder_fired": "Erinnerung #{id}: {text}",
    "reminder_set": "Erinnerung #{id} gesetzt: \"{text}\" faellig um {due_at} (Wiederholung: {repeat})",
    "no_reminders": "Keine Erinnerungen gefunden.",
    "clipboard_text": "Zwischenablage-Text ({length} Zeichen)",
    "clipboard_image": "Zwischenablage enthaelt ein Bild, gespeichert unter: {path}",
    "clipboard_empty": "Zwischenablage ist leer oder nicht lesbar.",
    "screenshot_saved": "Screenshot gespeichert: {path} ({width}x{height})",
    "copied_to_clipboard": "{chars} Zeichen in die Zwischenablage kopiert.",
    "max_reminders_reached": "Maximale Anzahl aktiver Erinnerungen erreicht ({max}). Bitte einige Erinnerungen abbrechen.",
    "notification_sent": "Benachrichtigung gesendet.",
    "notification_fallback": "Benachrichtigung protokolliert (kein Desktop-Backend verfuegbar).",
    "synthesis_no_llm": "Wissenssynthese nicht verfügbar: Kein LLM konfiguriert.",
    "synthesis_no_memory": "Wissenssynthese nicht verfügbar: Memory-System nicht verbunden.",
    "synthesis_error_no_topic": "Fehler: Kein Thema angegeben.",
    "synthesis_no_info": "Keine Informationen zu '{topic}' gefunden — weder in Memory, Vault noch im Web.",
    "synthesis_llm_error": "Fehler bei der Wissenssynthese: {exc}",
    "synthesis_vault_saved": "\n\n*Im Vault gespeichert als '{vault_title}'.*",
    "synthesis_no_stored_info": "Keine gespeicherten Informationen zu '{topic}' gefunden. Widerspruchsanalyse nicht möglich.",
    "synthesis_no_web_info": "Keine aktuellen Web-Informationen zu '{topic}' gefunden. Widerspruchsanalyse nicht möglich.",
    "synthesis_contradiction_error": "Fehler bei der Widerspruchsanalyse: {exc}",
    "synthesis_no_timeline_info": "Keine Informationen zu '{topic}' für eine Zeitlinie gefunden.",
    "synthesis_timeline_error": "Fehler beim Zeitlinien-Aufbau: {exc}",
    "synthesis_gaps_error": "Fehler bei der Lückenanalyse: {exc}",
    "synthesis_footer": "\n\n---\n*Synthese erstellt: {now}*\n*Quellen: {sources}*\n*Tiefe: {depth}*",
    "canvas_no_html": "Kein HTML-Inhalt angegeben",
    "canvas_no_js": "Kein JavaScript-Code angegeben"
  },
  "email": {
    "read_inbox": "Posteingang lesen",
    "search": "E-Mails durchsuchen",
    "send": "E-Mail senden",
    "summarize": "Posteingang zusammenfassen",
    "no_emails": "Keine E-Mails in {folder}.",
    "no_results": "Keine E-Mails gefunden fuer: {criteria}",
    "sent_success": "E-Mail erfolgreich gesendet an: {to}",
    "rate_limited": "Rate-Limit erreicht: maximal {max} E-Mails pro Stunde.",
    "invalid_address": "Ungueltige E-Mail-Adresse: {address}",
    "missing_password": "E-Mail-Passwort nicht gefunden. Umgebungsvariable '{env_var}' ist nicht gesetzt.",
    "attachment_not_found": "Anhang nicht gefunden: {path}",
    "attachment_outside_workspace": "Anhang-Pfad nicht erlaubt: {path}",
    "missing_recipient": "Kein Empfaenger angegeben.",
    "missing_subject": "Kein Betreff angegeben.",
    "missing_body": "Kein Nachrichtentext angegeben.",
    "invalid_date": "Ungueltiges Datum: {date} (erwartet: JJJJ-MM-TT)",
    "no_emails_unread": "Keine E-Mails in {folder} (ungelesen).",
    "send_success_full": "E-Mail erfolgreich gesendet an: {to}\nBetreff: {subject}\nAnhaenge: {count}"
  },
  "email_desc": {
    "email_read_inbox": "E-Mails aus dem Posteingang lesen. Gibt Absender, Betreff, Datum und Vorschau zurueck.",
    "email_search": "E-Mails durchsuchen nach Absender, Betreff, Inhalt oder Datum.",
    "email_send": "E-Mail senden ueber SMTP. Unterstuetzt Text und HTML, CC/BCC und Datei-Anhaenge aus dem Workspace.",
    "email_summarize": "Posteingang zusammenfassen: Gruppierung nach Absender und Thread, Statistiken und Top-Absender."
  },
  "calendar": {
    "today": "Heutige Termine",
    "upcoming": "Kommende Termine",
    "create_event": "Termin erstellen",
    "check_availability": "Verfuegbarkeit pruefen",
    "no_events_today": "Keine Termine am {date}.",
    "no_upcoming": "Keine Termine in den naechsten {days} Tagen.",
    "event_created": "Termin erstellt: {title}",
    "no_free_slots": "Keine freien Zeitfenster gefunden.",
    "invalid_date": "Ungueltiges Datum: {date} (erwartet: JJJJ-MM-TT)",
    "invalid_time": "Ungueltige Uhrzeit: {time} (erwartet: HH:MM)",
    "missing_title": "Kein Titel angegeben.",
    "missing_start": "Keine Startzeit angegeben.",
    "no_title": "Kein Titel angegeben.",
    "no_start_time": "Keine Startzeit angegeben.",
    "all_day": "ganztaegig"
  },
  "calendar_desc": {
    "calendar_today": "Zeigt die heutigen Kalender-Termine an. Optional ein anderes Datum angeben.",
    "calendar_upcoming": "Zeigt kommende Kalender-Termine an, sortiert nach Startzeit.",
    "calendar_create_event": "Neuen Kalender-Termin erstellen. Schreibt in die lokale ICS-Datei.",
    "calendar_check_availability": "Freie Zeitfenster innerhalb der Arbeitszeit finden. Beruecksichtigt bestehende Termine."
  },
  "docker": {
    "not_available": "Docker-CLI nicht gefunden. Ist Docker installiert?",
    "timeout": "Docker-Befehl nach {seconds}s abgelaufen",
    "container_not_found": "Container nicht gefunden. Pruefe den Namen oder die ID mit docker_ps.",
    "image_not_found": "Docker-Image nicht gefunden. Pruefe den Image-Namen.",
    "name_in_use": "Ein Container mit diesem Namen existiert bereits.",
    "permission_denied": "Docker-Zugriff verweigert. Laeuft der Docker-Daemon?",
    "port_allocated": "Der angegebene Port ist bereits belegt.",
    "privileged_blocked": "Privilegierter Modus ist aus Sicherheitsgruenden blockiert.",
    "invalid_container_name": "Ungueltiger Container-Name. Verwende alphanumerische Zeichen, Bindestriche, Unterstriche und Punkte.",
    "invalid_port": "Ungueltiges Port-Mapping. Erwartetes Format: HOST_PORT:CONTAINER_PORT (1-65535)."
  },
  "api_hub": {
    "no_integrations": "Noch keine Integrationen konfiguriert.",
    "integration_configured": "Integration erfolgreich konfiguriert.",
    "integration_removed": "Integration erfolgreich entfernt.",
    "integration_not_found": "Integration nicht gefunden.",
    "credential_not_set": "Umgebungsvariable nicht gesetzt. Setze sie vor API-Aufrufen.",
    "rate_limit_exceeded": "Rate-Limit ueberschritten. Warte vor dem naechsten Versuch.",
    "invalid_method": "Ungueltige HTTP-Methode.",
    "plaintext_warning": "Konfiguration als Klartext gespeichert. Installiere cryptography fuer Verschluesselung.",
    "health_ok": "Health-Check bestanden.",
    "health_failed": "Health-Check fehlgeschlagen."
  },
  "browser": {
    "not_initialized": "Browser nicht initialisiert",
    "invalid_url": "Ungueltige URL: {url}",
    "scheme_not_allowed": "Nur HTTP/HTTPS erlaubt, nicht '{scheme}'",
    "no_valid_domain": "Keine gueltige Domain: {url}",
    "host_blocked": "Zugriff auf {hostname} blockiert (Sicherheit)",
    "private_address_blocked": "Zugriff auf private Adresse blockiert: {hostname}",
    "text_truncated": "\n\n[... gekürzt, {total} Zeichen gesamt]",
    "result_truncated": " [gekürzt]",
    "navigate_failed": "Navigation fehlgeschlagen: {exc_type}",
    "screenshot_saved": "Screenshot gespeichert: {path}",
    "screenshot_failed": "Screenshot fehlgeschlagen: {exc_type}",
    "click_success": "Klick auf '{selector}' erfolgreich",
    "click_failed": "Klick fehlgeschlagen: {exc_type}",
    "fill_success": "Feld '{selector}' ausgefüllt",
    "fill_failed": "Ausfuellen fehlgeschlagen: {exc_type}",
    "script_too_long": "Script zu lang ({count} Zeichen, max {max})",
    "js_failed": "JS-Fehler: {exc_type}",
    "page_title": "Titel: {title}",
    "page_url": "URL: {url}",
    "links_header": "Links:",
    "form_elements_header": "\nFormular-Elemente:",
    "page_info_failed": "Seiteninfo fehlgeschlagen: {exc_type}",
    "init_failed_playwright": "Fehler: Browser konnte nicht initialisiert werden (Playwright installiert?)",
    "error_prefix": "Fehler: {error}"
  },
  "tools": {
    "db_invalid_path": "Ungueltiger Pfad: {path}",
    "db_access_denied": "Zugriff verweigert: {path} liegt ausserhalb erlaubter Verzeichnisse ({roots})",
    "db_not_found": "Datenbank nicht gefunden: {path}",
    "db_query_timeout": "Query-Timeout nach {seconds}s",
    "db_sql_error": "SQL-Fehler: {exc}",
    "db_invalid_table": "Ungueltiger Tabellenname: {table}",
    "db_table_not_found": "Tabelle nicht gefunden: {table}",
    "db_no_tables": "Keine Tabellen oder Views gefunden.",
    "db_drop_blocked": "DROP-Anweisungen sind blockiert. Bitte manuell ausfuehren.",
    "db_rows_affected": "Erfolgreich. {count} Zeile(n) betroffen.",
    "db_conn_success": "Datenbankverbindung erfolgreich.",
    "db_conn_timeout": "Verbindungs-Timeout nach {seconds}s",
    "db_conn_error": "Verbindungsfehler: {exc}",
    "db_pg_unavailable": "PostgreSQL nicht verfuegbar. Installiere: pip install asyncpg oder pip install psycopg2-binary",
    "db_execute_success": "Erfolgreich. {result}",
    "db_no_sql": "Fehler: Kein SQL angegeben.",
    "db_schema_header": "Datenbank-Schema:",
    "db_schema_table_header": "Schema fuer Tabelle: {table}",
    "search_invalid_path": "Ungueltiger Pfad: {path}",
    "search_access_denied": "Zugriff verweigert: '{path}' liegt ausserhalb des Workspace ({root})",
    "search_pattern_required": "Fehler: Such-Pattern ist erforderlich.",
    "search_dir_not_found": "Verzeichnis nicht gefunden: {root}",
    "search_not_a_dir": "Kein Verzeichnis: {root}",
    "search_error": "Fehler bei der Suche: {exc}",
    "search_no_files": "Keine Dateien gefunden fuer Pattern: '{pattern}'",
    "search_result_limited": "\n\n(Ergebnis auf {count} begrenzt -- es gibt moeglicherweise weitere Treffer)",
    "search_found_files": "Gefunden: {count} Datei(en) fuer '{pattern}'",
    "search_query_required": "Fehler: Suchbegriff ist erforderlich.",
    "search_invalid_regex": "Ungueltiges Regex-Pattern: {exc}",
    "search_no_matches": "Keine Treffer fuer: '{query}'",
    "search_matches_limited": "\n\n(Ergebnis auf {count} Treffer begrenzt)",
    "search_matches_header": "Suche nach '{query}' -- {count} Datei(en) mit Treffern",
    "search_dry_run_header": "[DRY RUN] Vorschau -- '{query}' -> '{replacement}'\nBetroffene Dateien: {count}\nSetze dry_run=false um die Aenderungen durchzufuehren.\n",
    "search_replace_done_header": "Ersetzung abgeschlossen: '{query}' -> '{replacement}'\nDateien geaendert: {files}\nGesamte Ersetzungen: {total}\nBackups erstellt (.bak)\n",
    "atl_no_goals": "Keine aktiven Ziele.",
    "atl_title_required": "Fehler: 'title' ist erforderlich.",
    "atl_goal_created": "Ziel erstellt: {id} -- {title}",
    "atl_goal_not_found": "Fehler: Ziel '{id}' nicht gefunden.",
    "atl_goal_paused": "Ziel {id} pausiert.",
    "atl_goal_resumed": "Ziel {id} fortgesetzt.",
    "atl_goal_completed": "Ziel {id} abgeschlossen.",
    "atl_unknown_action": "Unbekannte Aktion: {action}",
    "atl_no_journal_today": "Kein Journal-Eintrag fuer heute.",
    "atl_no_journal_days": "Keine Journal-Eintraege der letzten {days} Tage.",
    "chart_created": "Diagramm erstellt: {path}\nTyp: {chart_type}, Datenpunkte: {count}, Abmessungen: {width}x{height}px",
    "table_created": "Tabellen-Bild erstellt: {path}\nZeilen: {rows}, Spalten: {cols}"
  },
  "code": {
    "no_code": "Kein Code angegeben.",
    "too_large": "Code zu gross ({size} MB, max {max} MB)",
    "working_dir_denied": "Zugriff verweigert: Arbeitsverzeichnis '{cwd}' liegt ausserhalb des Workspace ({root})",
    "headless_ok": "[Headless-Test OK] GUI-App startet fehlerfrei im Dummy-Modus. Der User kann sie mit Grafik starten.",
    "headless_error": "[Headless-Test FEHLER] Exit-Code: {exit_code}. Die GUI-App crashed beim Start. AKTION ERFORDERLICH: Analysiere den Fehler oben, korrigiere den Code mit write_file und teste erneut mit run_python. Wiederhole bis der Test OK ist.",
    "no_input": "Fehler: Entweder 'code' oder 'file_path' muss angegeben werden.",
    "file_access_denied": "Zugriff verweigert: '{file_path}' liegt ausserhalb des Workspace ({root})",
    "file_not_found": "Fehler: Datei '{file_path}' nicht gefunden.",
    "only_python": "Fehler: Nur Python-Dateien (.py) werden unterstuetzt.",
    "file_read_error": "Fehler beim Lesen der Datei: {exc}"
  }
}
