{
  "app": {
    "title": "Tools",
    "footer": "© 2026 Tools. Alle Rechte vorbehalten. Version 0.0.2",
    "darkMode": "Dunkler Modus"
  },
  "nav": {
    "numberConversion": "Zahlenumrechnung",
    "mediaTools": "Medienwerkzeuge",
    "p2pCommunication": "P2P-Tools"
  },
  "common": {
    "bits": "Bits",
    "bytes": "Bytes",
    "si": "SI",
    "binary": "Binär",
    "online": "Online",
    "offline": "Offline",
    "yes": "Ja",
    "no": "Nein",
    "unknown": "Unbekannt",
    "none": "Keiner",
    "dark": "Dunkel",
    "light": "Hell"
  },
  "button": {
    "open": "Öffnen",
    "convert": "Konvertieren",
    "copy": "Kopieren",
    "download": "Herunterladen",
    "convertAndDownload": "Konvertieren & Herunterladen",
    "calculate": "Berechnen",
    "resetArtisticSettings": "Zurücksetzen"
  },
  "numberBaseConverter": {
    "title": "Zahlensystem Konverter",
    "description": "Konvertiert eine Zahl von einem Basis-System in ein anderes.",
    "hint": "Geben Sie eine Zahl, die Basis der Zahl und die Zielbasis ein.",
    "invalidNumber": "Ungültige Zahl für die gewählte Basis.",
    "label": {
      "number": "Zahl",
      "base": "Basis",
      "targetBase": "Zielbasis",
      "includeFormatting": "Formatierung einschließen?"
    },
    "resultTitle": "Ergebnis"
  },
  "bitsAndBytes": {
    "title": "Bits und Bytes",
    "description": "Konvertiert zwischen Bits und Bytes.",
    "hint": "Geben Sie eine Zahl ein, wählen Sie die Größenordnung, Bits oder Bytes und die Zielgrößenordnung. Erfahren Sie mehr über den Unterschied zwischen SI und Binär auf",
    "label": {
      "number": "Zahl",
      "type": "Typ",
      "siBinary": "SI/Binär",
      "magnitude": "Größenordnung",
      "resultShouldBe": "Das Ergebnis sollte sein:"
    },
    "resultTitle": "Ergebnis",
    "includeUnit": "Einheit einschließen?"
  },
  "browserLocale": {
    "title": "Browser Informationen",
    "description": "Zeigt die Browsersprache, Zeitzone und weitere Informationen an.",
    "fields": {
      "currentTime": "Aktuelle Zeit",
      "timeZone": "Zeitzone",
      "language": "Sprache",
      "preferredLanguages": "Bevorzugte Sprachen",
      "userAgent": "User Agent",
      "platform": "Plattform",
      "cookiesEnabled": "Cookies aktiviert",
      "onlineStatus": "Online-Status",
      "screenResolution": "Bildschirmauflösung",
      "viewportSize": "Ansichtsgröße",
      "pixelRatio": "Geräte-Pixel-Verhältnis",
      "colorScheme": "Bevorzugtes Farbschema",
      "reducedMotion": "Reduzierte Bewegung bevorzugt",
      "touchSupport": "Touch-Unterstützung",
      "hardwareConcurrency": "CPU-Kerne",
      "deviceMemory": "Gerätespeicher",
      "connectionType": "Verbindungstyp",
      "doNotTrack": "Do Not Track",
      "storageEnabled": "Lokaler Speicher aktiviert",
      "referrer": "Referrer",
      "jsEnabled": "JavaScript aktiviert"
    }
  },
  "imageMagick": {
    "title": "ImageMagick Konverter",
    "description": "Bilder mit ImageMagick konvertieren.",
    "privacyNote": "Die Bilder werden zum Konvertieren überhaupt nicht hochgeladen. Die gesamte Konvertierung erfolgt auf deinem eigenen Computer und wird ihn niemals verlassen.",
    "formatsHint": "Dies ist eine Liste der Formate, die von ImageMagick gelesen und geschrieben werden können. Ich habe nicht alle möglichen Kombinationen getestet - es können hier und da Fehler auftreten.",
    "selectImage": "Bild auswählen",
    "searchFormat": "Format suchen",
    "outputFormat": "Ausgabeformat",
    "supportedFormats": "Unterstützte Formate",
    "reading": "Lesen",
    "writing": "Schreiben",
    "jpegPreview": "JPEG Vorschau",
    "waiting": "Warten auf ein Bild...",
    "loading": "ImageMagick wird geladen...",
    "failedToLoad": "ImageMagick konnte nicht geladen werden.",
    "readingPreview": "Lese Bild für Vorschau...",
    "creatingJpegPreview": "Erstelle JPEG Vorschau...",
    "jpegPreviewCreated": "JPEG Vorschau erstellt",
    "readingImage": "Lese Bild...",
    "convertingImage": "Konvertiere Bild...",
    "createdDownload": "Download erstellt..."
  },
  "qrCode": {
    "title": "QR-Code Generator",
    "description": "Erstellt QR-Codes für URLs, Text oder andere Daten.",
    "label": {
      "text": "Text",
      "resolution": "Auflösung",
      "margin": "Rand",
      "style": "Stil",
      "dotRadius": "Punktradius",
      "blur": "Weichzeichnung",
      "softness": "Kantenglättung",
      "borderWidth": "Randdicke",
      "buildingHeight": "Gebäudehöhe",
      "cameraAngle": "Kamerawinkel",
      "cameraRotation": "Kameradrehung",
      "zoom": "Zoom"
    },
    "style":{
      "standard": "Standard",
      "artistic": "Künstlerisch",
      "buildings3d": "3D-Gebäude"
    },
    "errors":{
      "resolution":"Auflösung muss zwischen 128 und 4096 liegen.",
      "margin":"Rand muss zwischen 0 und 99 liegen."
    },
    "downloadButton": "QR-Code herunterladen",
    "copyButton": "In Zwischenablage kopieren",
    "shuffleButton": "Farben mischen"
  },
  "loanCalculator": {
    "title": "Kreditrechner",
    "description": "Berechnet die monatliche Rate, Zinsen und Tilgung für ein oder mehrere parallele Annuitätendarlehen.",
    "descriptionLong": "Die eingegebenen Werte werden nicht gespeichert und die Berechnung erfolgt auf dem Endgerät. Sollten die Daten gespeichert werden müssen, kann schlicht die URL kopiert bzw. in den Bookmarks gespeichert werden.",
    "name": "Name",
    "currency": "€",
    "label": {
      "totalLoan": "Gesamtdarlehen (€)",
      "startDate": "Startdatum",
      "interestRate": "Effektiver Jahreszins (%)",
      "repaymentRate": "Anfängliche Tilgung (%)",
      "repaymentMode": "Tilgung angeben als",
      "repaymentAmount": "Anfängliche Tilgung (€/Monat)",
      "specialRepaymentRate": "Sondertilgung (%)",
      "specialRepaymentAmount": "Sondertilgung (€)",
      "specialRepaymentFrequency": "Sondertilgung Häufigkeit",
      "monthly": "Monatl.",
      "yearly": "Jährl.",
      "gracePeriodYears": "Tilgungsfreie Jahre",
      "duration": "Laufzeit (Jahre)",
      "detailedView": "Detailansicht",
      "savingsInterestRate": "Zinsen Sparphase (% p.a.)",
      "savingsRate": "Sparrate (€/Monat)",
      "allocationPercent": "Zuteilung (%)",
      "repaymentInterestRate": "Zinsen Tilgungsphase (% p.a.)",
      "bausparRepaymentAmount": "Tilgungsrate (€/Monat)",
      "linkedLoan": "Verknüpfter Kredit",
      "linkedLoanNone": "Keiner"
    },
    "error": {
      "specialRepaymentExceedsLimit": "Der eingegebene Wert überschreitet die maximal erlaubte Sondertilgung."
    },
    "button": {
      "addLoan": "Kredit",
      "removeLoan": "Entf.",
      "addBausparLoan": "Bausparvertrag",
      "copyUrl": "Link kopieren",
      "copyQrCode": "QR-Code kopieren"
    },
    "result": {
      "monthlyPayment": "Monatliche Rate",
      "totalInterest": "Gezahlte Zinsen",
      "payoffTime": "Zinsbindungsdauer",
      "notFullyRepaid": "Restschuld nach Zinsbindung",
      "years": "J",
      "months": "M",
      "savingsRate": "Sparrate",
      "allocationAfter": "Zuteilung nach",
      "allocationWarning": "Achtung: Bausparvertrag ist bei Kreditende noch nicht zuteilungsfähig",
      "chartTitle": "Restschuldverlauf",
      "todayLabel": "Heute",
      "tableTitle": "Tilgungsplan",
      "totalLabel": "Gesamt",
      "totalMonthlyPayment": "Monatliche Gesamtrate",
      "totalRemainingBalance": "Gesamt-Restschuld",
      "statusTodayLabel": "Status heute",
      "paidSoFar": "Bisher gezahlt",
      "interestPaidSoFar": "Bisher gezahlte Zinsen",
      "monthsElapsed": "Vergangene Monate",
      "shareLabel": "Teilen",
      "shareUrlLabel": "Freigabelink",
      "copied": "Kopiert!",
      "columns": {
        "month": "Monat/Jahr",
        "payment": "Rate",
        "interest": "Zinsen",
        "repayment": "Tilgung",
        "specialRepayment": "Sondertilgung",
        "remainingBalance": "Restschuld",
        "savingsBalance": "Angespartes Guthaben"
      }
    }
  },
  "m3u8Downloader": {
    "title": "HLS-Stream-Downloader",
    "description": "Lädt einen HLS-Videostream (m3u8) herunter und speichert ihn als MP4-Datei.",
    "privacyNote": "Alles läuft in deinem Browser - der Stream wird auf deinem eigenen Computer heruntergeladen und neu verpackt und niemals hochgeladen. Die URL wird nur lokal verwendet.",
    "browserLimitationsNote": "Hinweis: Browser blockieren Cross-Origin-Anfragen ohne passende CORS-Header und blockieren reine HTTP-Anfragen von dieser HTTPS-Seite aus (Mixed Content).",
    "inputMode": "Eingabemodus",
    "inputModeUrl": "URL",
    "inputModeCurl": "cURL-Befehl",
    "curlCommand": "cURL-Befehl",
    "curlCommandHint": "Füge einen curl-Befehl ein, z. B. über „Als cURL kopieren“ aus dem Netzwerk-Tab der Chrome-Entwicklertools. URL und Header werden automatisch extrahiert.",
    "playlistUrl": "M3U8-Playlist-URL",
    "mixedContentWarning": "Diese Seite wird über HTTPS ausgeliefert, die URL verwendet aber HTTP - dein Browser wird diese Anfrage wahrscheinlich blockieren (Mixed Content).",
    "fileName": "Name der Ausgabedatei",
    "concurrency": "Parallele Segment-Downloads",
    "concurrencyHint": "Wie viele Videosegmente gleichzeitig heruntergeladen werden (1-32). Höhere Werte sind schneller, belasten die Kamera/den Server aber stärker.",
    "headers": "Benutzerdefinierte Header (optional)",
    "headersHint": "Ein 'Header-Name: Wert'-Paar pro Zeile, z. B. für ein Auth-Token. Manche Header (Cookie, Host, User-Agent, Origin, Referer, Priority, Sec-*) können Browser aus Sicherheitsgründen nicht setzen und werden automatisch entfernt.",
    "droppedHeadersWarning": "Entfernte Header, die Browser Skripten nicht erlauben zu setzen",
    "downloadButton": "Herunterladen",
    "cancelButton": "Abbrechen",
    "segments": "Segmente",
    "remuxing": "Remuxen zu MP4",
    "status": {
      "idle": "",
      "playlist": "Playlist wird geladen...",
      "segments": "Segmente werden heruntergeladen...",
      "remux": "Wird zu MP4 remuxt...",
      "done": "Fertig - Download gestartet.",
      "cancelled": "Abgebrochen.",
      "error": "Etwas ist schiefgelaufen."
    }
  },
  "p2pChat": {
    "title": "P2P-Gruppenchat",
    "description": "Ein serverloser Peer-to-Peer-Gruppenchat, der Browser direkt über WebRTC verbindet - ein Host, beliebig viele Gäste.",
    "privacyNote": "Nachrichten werden direkt zwischen den Browsern gesendet - nichts wird von einem Backend gespeichert oder weitergeleitet.",
    "limitationsNote": "Hinweis: Der Verbindungsaufbau erfordert weiterhin einen einmaligen manuellen Austausch eines kurzen Verbindungscodes pro Teilnehmer (es gibt keinen Signalisierungsserver), und manche restriktiven Netzwerke können die direkte Verbindung komplett blockieren, da kein TURN-Relay verwendet wird. Für einen 1:1-Anruf mit Audio/Video nutze stattdessen das Werkzeug P2P-Videoanruf.",
    "yourName": "Dein Name",
    "createRoomButton": "Raum erstellen",
    "joinButton": "Beitreten",
    "inviteLinkLabel": "Einladungslink",
    "inviteLinkHint": "Sende diesen Link an die Person, die du einladen möchtest. Sobald sie ihn öffnet und dir ihren Verbindungscode zurücksendet, füge ihn unten ein, um die Verbindung herzustellen.",
    "pasteAnswerLabel": "Verbindungscode der anderen Person einfügen",
    "connectButton": "Verbinden",
    "cancelInviteButton": "Abbrechen",
    "inviteAnotherButton": "Weitere Person einladen",
    "generatingInviteCode": "Einladungscode wird erstellt...",
    "defaultGuestLabel": "Gast {{number}}",
    "hostLabelHint": "Deine eigene private Bezeichnung für diesen Teilnehmer - nur für dich sichtbar, wird nie versendet.",
    "answerCodeLabel": "Dein Verbindungscode",
    "answerCodeHint": "Sende diesen Code an den Host zurück (über einen beliebigen bereits vorhandenen Chat/E-Mail), damit er die Verbindung abschließen kann.",
    "participants": "Teilnehmer",
    "removeButton": "Entfernen",
    "guestRemoved": "Du hast {{name}} aus dem Chat entfernt",
    "removedByHost": "Der Host hat dich aus dem Chat entfernt. Du benötigst einen neuen Einladungslink, um wieder beizutreten.",
    "messagePlaceholder": "Nachricht eingeben...",
    "sendButton": "Senden",
    "autoScroll": "Automatisch scrollen",
    "notificationLevel": {
      "label": "Benachrichtigungen",
      "off": "Aus",
      "anonymous": "Anonym",
      "full": "Vollständig"
    },
    "newMessageNotification": "Neue Nachricht",
    "copied": "Kopiert!",
    "guestPending": "(verbindet...)",
    "guestJoined": "{{name}} ist dem Chat beigetreten",
    "guestLeft": "{{name}} hat den Chat verlassen",
    "disconnectedFromHost": "Verbindung zum Host getrennt.",
    "status": {
      "connecting": "Verbindet...",
      "connected": "Verbunden",
      "disconnected": "Getrennt"
    }
  },
  "p2pCall": {
    "title": "P2P-Videoanruf",
    "description": "Ein serverloser 1:1 Peer-to-Peer-Anruf mit Audio, Video und Textchat, der zwei Browser direkt über WebRTC verbindet.",
    "privacyNote": "Audio, Video und Nachrichten werden direkt zwischen den Browsern gesendet - nichts wird von einem Backend gespeichert oder weitergeleitet.",
    "limitationsNote": "Hinweis: Der Verbindungsaufbau erfordert weiterhin einen einmaligen manuellen Austausch eines kurzen Verbindungscodes (es gibt keinen Signalisierungsserver), und manche restriktiven Netzwerke können die direkte Verbindung komplett blockieren, da kein TURN-Relay verwendet wird. Kamera/Mikrofon können nur aktiviert werden, wenn sie vor Beginn des Anrufs eingeschaltet waren - ein späteres Aktivieren erfordert einen neuen Anruf.",
    "yourName": "Dein Name",
    "cameraLabel": "Kamera aktivieren",
    "microphoneLabel": "Mikrofon aktivieren",
    "mediaUnsupported": "Dieser Browser unterstützt keinen Kamera-/Mikrofonzugriff.",
    "startCallButton": "Anruf starten",
    "joinCallButton": "Anruf beitreten",
    "inviteLinkHint": "Sende diesen Link an die Person, die du anrufen möchtest. Sobald sie ihn öffnet und dir ihren Verbindungscode zurücksendet, füge ihn unten ein, um die Verbindung herzustellen.",
    "pasteAnswerLabel": "Verbindungscode der anderen Person einfügen",
    "connectButton": "Verbinden",
    "cancelButton": "Abbrechen",
    "answerCodeLabel": "Dein Verbindungscode",
    "answerCodeHint": "Sende diesen Code an die anrufende Person zurück (über einen beliebigen bereits vorhandenen Chat/E-Mail), damit sie die Verbindung abschließen kann.",
    "muteButton": "Stummschalten",
    "unmuteButton": "Stummschaltung aufheben",
    "cameraOffButton": "Kamera ausschalten",
    "cameraOnButton": "Kamera einschalten",
    "hangUpButton": "Auflegen",
    "noMediaHint": "Keine Kamera/Mikrofon",
    "peerJoined": "{{name}} ist dem Anruf beigetreten",
    "peerLeft": "{{name}} hat den Anruf verlassen",
    "disconnectedFromPeer": "Verbindung zur anderen Person getrennt.",
    "callEnded": "Anruf beendet.",
    "copied": "Kopiert!",
    "waitingForPeer": "Warte auf die andere Person...",
    "toggleChatButton": "Chat ein-/ausblenden",
    "startNewCallButton": "Neuen Anruf starten"
  },
  "toolCard": {
    "open": "Öffnen"
  }
}
