From 4de24b8c9e4e703b4fd51965ccb9387e1e09fa59 Mon Sep 17 00:00:00 2001 From: SnapOtter Date: Mon, 22 Jun 2026 19:39:15 +0800 Subject: [PATCH] fix(i18n): translate German (de) UI strings (#308) Translate the ~950 previously-untranslated German UI strings (tool names, descriptions, settings labels, dialogs) that were still showing English, and restore the {size} placeholder dropped from settings.aiFeatures.diskUsage. Machine-translated and verified: full key parity with en.ts, all {placeholders} preserved, passes tsc and Biome. Native-speaker review welcome. --- packages/shared/src/i18n/de.ts | 2694 ++++++++++++++++---------------- 1 file changed, 1351 insertions(+), 1343 deletions(-) diff --git a/packages/shared/src/i18n/de.ts b/packages/shared/src/i18n/de.ts index 095dfa28..8df85a20 100644 --- a/packages/shared/src/i18n/de.ts +++ b/packages/shared/src/i18n/de.ts @@ -7,16 +7,16 @@ export const de: TranslationKeys = { download: "Herunterladen", cancel: "Abbrechen", save: "Speichern", - delete: "Loeschen", + delete: "Löschen", settings: "Einstellungen", search: "Werkzeuge suchen...", - dropFiles: "Dateien hierher ziehen oder auf die Schaltflaeche klicken", + dropFiles: "Dateien hierher ziehen oder auf die Schaltfläche klicken", loading: "Wird geladen...", - saving: "Saving...", + saving: "Wird gespeichert...", error: "Ein Fehler ist aufgetreten", - confirm: "Bestaetigen", - close: "Schliessen", - back: "Zurueck", + confirm: "Bestätigen", + close: "Schließen", + back: "Zurück", next: "Weiter", clear: "Leeren", copy: "Kopieren", @@ -36,50 +36,50 @@ export const de: TranslationKeys = { somethingWentWrong: "Etwas ist schiefgelaufen", unexpectedError: "Ein unerwarteter Fehler ist aufgetreten.", retry: "Erneut versuchen", - privacyPolicy: "Datenschutzerklaerung", - pageNotFound: "Page not found", - pageNotFoundDescription: "The page you are looking for does not exist or has been moved.", + privacyPolicy: "Datenschutzerklärung", + pageNotFound: "Seite nicht gefunden", + pageNotFoundDescription: "Die gesuchte Seite existiert nicht oder wurde verschoben.", }, categories: { essentials: "Grundlagen", adjustments: "Anpassungen", - enhance: "Enhance & AI", + enhance: "Verbessern & AI", watermark: "Wasserzeichen & Overlay", layout: "Layout & Komposition", utilities: "Hilfswerkzeuge", optimization: "Optimierung", format: "Format & Konvertierung", "video-edit": "Video", - "video-convert": "Convert", - "video-effects": "Effects & Compose", - "video-subtitles": "Subtitles", - "video-metadata": "Metadata", - "audio-edit": "Edit", - "audio-convert": "Convert", - "audio-effects": "Effects & Compose", - "audio-metadata": "Metadata", - "pdf-organize": "Organize", - "pdf-edit": "Edit & Annotate", - "pdf-security": "Security", - "pdf-optimize": "Optimize", - "doc-convert": "Convert", - data: "Files", - archives: "Archives", + "video-convert": "Konvertieren", + "video-effects": "Effekte & Zusammensetzen", + "video-subtitles": "Untertitel", + "video-metadata": "Metadaten", + "audio-edit": "Bearbeiten", + "audio-convert": "Konvertieren", + "audio-effects": "Effekte & Zusammensetzen", + "audio-metadata": "Metadaten", + "pdf-organize": "Organisieren", + "pdf-edit": "Bearbeiten & Annotieren", + "pdf-security": "Sicherheit", + "pdf-optimize": "Optimieren", + "doc-convert": "Konvertieren", + data: "Dateien", + archives: "Archive", }, modalities: { - image: "Image", + image: "Bild", video: "Video", audio: "Audio", - documentsAndFiles: "PDF & Files", + documentsAndFiles: "PDF & Dateien", }, tools: { resize: { - name: "Groesse aendern", - description: "Groesse nach Pixeln, Prozent oder Social-Media-Vorlagen aendern", + name: "Größe ändern", + description: "Größe nach Pixeln, Prozent oder Social-Media-Vorlagen ändern", }, crop: { name: "Zuschneiden", - description: "Freies Zuschneiden, Seitenverhaeltnis-Vorlagen, Formzuschnitt", + description: "Freies Zuschneiden, Seitenverhältnis-Vorlagen, Formzuschnitt", }, rotate: { name: "Drehen & Spiegeln", @@ -91,12 +91,12 @@ export const de: TranslationKeys = { }, compress: { name: "Komprimieren", - description: "Dateigroeße durch Qualitaet oder Zielgroesse reduzieren", + description: "Dateigröße durch Qualität oder Zielgröße reduzieren", }, "optimize-for-web": { - name: "Fuer Web optimieren", + name: "Für Web optimieren", description: - "Bilder fuer das Web optimieren mit Formatkonvertierung, Qualitaetssteuerung und Vorschau", + "Bilder für das Web optimieren mit Formatkonvertierung, Qualitätssteuerung und Vorschau", }, "strip-metadata": { name: "Metadaten entfernen", @@ -104,7 +104,7 @@ export const de: TranslationKeys = { }, "edit-metadata": { name: "Metadaten bearbeiten", - description: "EXIF, IPTC, XMP, GPS, Schluesselwoerter und Daten bearbeiten", + description: "EXIF, IPTC, XMP, GPS, Schlüsselwörter und Daten bearbeiten", }, "bulk-rename": { name: "Massenumbenennung", @@ -112,7 +112,7 @@ export const de: TranslationKeys = { }, "image-to-pdf": { name: "Bild zu PDF", - description: "Bilder zu einem PDF-Dokument zusammenfuegen", + description: "Bilder zu einem PDF-Dokument zusammenfügen", }, "pdf-to-image": { name: "PDF zu Bild", @@ -120,15 +120,15 @@ export const de: TranslationKeys = { }, favicon: { name: "Favicon-Generator", - description: "Alle Favicon- und App-Symbolgroessen generieren", + description: "Alle Favicon- und App-Symbolgrößen generieren", }, "adjust-colors": { name: "Farben anpassen", - description: "Helligkeit, Kontrast, Belichtung, Saettigung, Temperatur, Schaerfe und Effekte", + description: "Helligkeit, Kontrast, Belichtung, Sättigung, Temperatur, Schärfe und Effekte", }, sharpening: { - name: "Schaerfen", - description: "Adaptives, Unscharf-Maskieren- und Hochpass-Schaerfen mit Vorlagen", + name: "Schärfen", + description: "Adaptives, Unscharf-Maskieren- und Hochpass-Schärfen mit Vorlagen", }, "replace-color": { name: "Farbe ersetzen & invertieren", @@ -136,27 +136,27 @@ export const de: TranslationKeys = { }, "color-blindness": { name: "Farbenblindheit-Simulation", - description: "Simulieren Sie, wie Bilder bei verschiedenen Farbsehschwaechen erscheinen", + description: "Simulieren Sie, wie Bilder bei verschiedenen Farbsehschwächen erscheinen", }, "remove-background": { name: "Hintergrund entfernen", - description: "AI-gestuetzte Hintergrundentfernung", + description: "AI-gestützte Hintergrundentfernung", }, upscale: { name: "Bildskalierung", - description: "AI-Superaufloesung zur Bildverbesserung", + description: "AI-Superauflösung zur Bildverbesserung", }, "erase-object": { name: "Objektentferner", - description: "Unerwuenschte Objekte mit AI entfernen", + description: "Unerwünschte Objekte mit AI entfernen", }, ocr: { name: "OCR / Texterkennung", - description: "Text aus Bildern mit AI-gestuetzter Genauigkeit extrahieren", + description: "Text aus Bildern mit AI-gestützter Genauigkeit extrahieren", }, "ocr-pdf": { name: "PDF-OCR", - description: "Text aus PDF-Dokumenten mit KI-gestuetzter OCR extrahieren", + description: "Text aus PDF-Dokumenten mit KI-gestützter OCR extrahieren", }, "blur-faces": { name: "Gesichter / PII weichzeichnen", @@ -173,31 +173,31 @@ export const de: TranslationKeys = { "image-enhancement": { name: "Bildverbesserung", description: - "Ein-Klick-Verbesserung mit intelligenter Belichtungs-, Kontrast-, Farb- und Schaerfekorrektur", + "Ein-Klick-Verbesserung mit intelligenter Belichtungs-, Kontrast-, Farb- und Schärfekorrektur", }, "noise-removal": { name: "Rauschentfernung", - description: "AI-gestuetzte Rausch- und Koernungsentfernung", + description: "AI-gestützte Rausch- und Körnungsentfernung", }, "red-eye-removal": { name: "Rote-Augen-Korrektur", - description: "AI-gestuetzte Rote-Augen-Erkennung und -Korrektur fuer Blitzfotos", + description: "AI-gestützte Rote-Augen-Erkennung und -Korrektur für Blitzfotos", }, "restore-photo": { name: "Fotorestaurierung", - description: "Kratzer, Risse und Schaeden an alten Fotos mit AI reparieren", + description: "Kratzer, Risse und Schäden an alten Fotos mit AI reparieren", }, "content-aware-resize": { - name: "Inhaltsabhaengige Groessenaenderung", + name: "Inhaltsabhängige Größenänderung", description: "Bilder intelligent skalieren und wichtige Inhalte beibehalten", }, "ai-canvas-expand": { name: "AI-Leinwanderweiterung", - description: "Leinwand mit AI-gestuetzter Fuellung erweitern", + description: "Leinwand mit AI-gestützter Füllung erweitern", }, colorize: { name: "AI-Kolorierung", - description: "Schwarz-Weiss-Fotos mit AI-Deep-Learning-Modellen in Vollfarbe umwandeln", + description: "Schwarz-Weiß-Fotos mit AI-Deep-Learning-Modellen in Vollfarbe umwandeln", }, "passport-photo": { name: "Passfoto", @@ -206,7 +206,7 @@ export const de: TranslationKeys = { }, "transcribe-audio": { name: "Audio transkribieren", - description: "Sprache mit KI-gestuetzter Transkription in Text umwandeln", + description: "Sprache mit KI-gestützter Transkription in Text umwandeln", }, "auto-subtitles": { name: "Automatische Untertitel", @@ -218,7 +218,7 @@ export const de: TranslationKeys = { }, "background-replace": { name: "Hintergrund ersetzen", - description: "Bildhintergrund durch eine einfarbige Flaeche ersetzen", + description: "Bildhintergrund durch eine einfarbige Fläche ersetzen", }, "blur-background": { name: "Hintergrund unscharf", @@ -226,19 +226,19 @@ export const de: TranslationKeys = { }, "watermark-text": { name: "Text-Wasserzeichen", - description: "Text-Wasserzeichen hinzufuegen", + description: "Text-Wasserzeichen hinzufügen", }, "watermark-image": { name: "Bild-Wasserzeichen", - description: "Logo als Wasserzeichen ueberlagern", + description: "Logo als Wasserzeichen überlagern", }, "text-overlay": { - name: "Textueberlagerung", + name: "Textüberlagerung", description: "Formatierten Text auf Bilder legen", }, compose: { name: "Bildkomposition", - description: "Bilder mit Position und Deckkraft uebereinanderlegen", + description: "Bilder mit Position und Deckkraft übereinanderlegen", }, "meme-generator": { name: "Meme-Generator", @@ -266,8 +266,8 @@ export const de: TranslationKeys = { description: "QR-Codes mit individuellen Farben, Mustern und Logos erstellen", }, "html-to-image": { - name: "HTML to Image", - description: "Capture webpages as high-quality images", + name: "HTML zu Bild", + description: "Webseiten als hochwertige Bilder aufnehmen", }, "barcode-read": { name: "Barcode-Leser", @@ -275,61 +275,62 @@ export const de: TranslationKeys = { }, collage: { name: "Collage / Raster", - description: "Bilder in Rastercollages mit ueber 25 Vorlagen zusammenfuegen", + description: "Bilder in Rastercollages mit über 25 Vorlagen zusammenfügen", }, stitch: { - name: "Zusammenfuegen / Kombinieren", + name: "Zusammenfügen / Kombinieren", description: "Bilder nebeneinander, gestapelt oder im Raster verbinden", }, split: { name: "Bildaufteilung", - description: "Bilder in Rasterkacheln oder nach Pixelgroesse aufteilen mit Vorschau", + description: "Bilder in Rasterkacheln oder nach Pixelgröße aufteilen mit Vorschau", }, border: { name: "Rahmen & Rand", description: - "Raender, Abstande, abgerundete Ecken und Schatten mit Ein-Klick-Vorlagen hinzufuegen", + "Ränder, Abstände, abgerundete Ecken und Schatten mit Ein-Klick-Vorlagen hinzufügen", }, beautify: { - name: "Screenshot verschoenern", + name: "Screenshot verschönern", description: - "Verlaufshintergruende, Geraeterahmen, Schatten und Social-Media-Formate fuer Screenshots", + "Verlaufshintergründe, Geräterahmen, Schatten und Social-Media-Formate für Screenshots", }, "circle-crop": { - name: "Circle Crop", - description: "Crop image to a centered circle with transparent corners", + name: "Kreiszuschnitt", + description: "Bild auf einen zentrierten Kreis mit transparenten Ecken zuschneiden", }, duotone: { name: "Duotone", - description: "Apply a two-color duotone effect with custom shadow and highlight colors", + description: "Zweifarbigen Duotone-Effekt mit eigenen Schatten- und Lichtfarben anwenden", }, "image-pad": { - name: "Image Pad", - description: "Pad image to a target aspect ratio with a solid color background", + name: "Bild auffüllen", + description: "Bild auf ein Seitenverhältnis mit einfarbigem Hintergrund auffüllen", }, pixelate: { - name: "Pixelate", - description: "Apply a pixelation effect to the full image or a specific region", + name: "Verpixeln", + description: "Verpixelungseffekt auf das gesamte Bild oder einen bestimmten Bereich anwenden", }, vignette: { name: "Vignette", - description: "Add a vignette effect with adjustable strength and color", + description: "Vignetteneffekt mit einstellbarer Stärke und Farbe hinzufügen", }, "gif-webp": { - name: "GIF/WebP Converter", - description: "Convert animated GIF to WebP and vice versa, preserving all frames", + name: "GIF/WebP-Konverter", + description: + "Animiertes GIF in WebP und umgekehrt konvertieren, alle Einzelbilder bleiben erhalten", }, histogram: { - name: "Histogram", - description: "Generate an RGB histogram chart from an image", + name: "Histogramm", + description: "RGB-Histogramm aus einem Bild erstellen", }, "lqip-placeholder": { - name: "LQIP Placeholder", - description: "Generate a tiny low-quality image placeholder with base64 data URI", + name: "LQIP-Platzhalter", + description: "Kleinen Platzhalter in niedriger Qualität mit Base64-Data-URI erstellen", }, "sprite-sheet": { name: "Sprite Sheet", - description: "Combine multiple images into a single sprite sheet grid", + description: "Mehrere Bilder zu einem Sprite-Sheet-Raster zusammenfügen", }, "svg-to-raster": { name: "SVG zu Raster", @@ -343,7 +344,7 @@ export const de: TranslationKeys = { "gif-tools": { name: "GIF-Werkzeuge", description: - "Animierte GIFs skalieren, optimieren, Geschwindigkeit aendern, umkehren, Frames extrahieren und drehen", + "Animierte GIFs skalieren, optimieren, Geschwindigkeit ändern, umkehren, Frames extrahieren und drehen", }, "image-to-base64": { name: "Bild zu Base64", @@ -351,392 +352,394 @@ export const de: TranslationKeys = { "Bilder in Base64-Zeichenketten zum Einbetten in HTML, CSS und mehr konvertieren", }, "barcode-generate": { - name: "Barcode Generator", - description: "Generate barcodes in Code 128, EAN-13, UPC-A, Code 39, ITF-14, and Data Matrix", + name: "Barcode-Generator", + description: "Barcodes in Code 128, EAN-13, UPC-A, Code 39, ITF-14 und Data Matrix erstellen", }, "chart-maker": { - name: "Chart Maker", - description: "Create bar, line, or pie charts from CSV or JSON data", + name: "Diagramm-Ersteller", + description: "Balken-, Linien- oder Kreisdiagramme aus CSV- oder JSON-Daten erstellen", }, "convert-video": { - name: "Convert Video", - description: "Convert videos between MP4, MOV, and WebM", + name: "Video konvertieren", + description: "Videos zwischen MP4, MOV und WebM konvertieren", }, "compress-video": { - name: "Compress Video", - description: "Shrink video file size with quality control", + name: "Video komprimieren", + description: "Videodateigröße mit Qualitätskontrolle reduzieren", }, "trim-video": { - name: "Trim Video", - description: "Cut a clip out of a video", + name: "Video schneiden", + description: "Einen Ausschnitt aus einem Video schneiden", }, "mute-video": { - name: "Mute Video", - description: "Remove the audio track from a video", + name: "Video stummschalten", + description: "Audiospur aus einem Video entfernen", }, "video-to-gif": { - name: "Video to GIF", - description: "Turn a video clip into an animated GIF", + name: "Video zu GIF", + description: "Videoclip in ein animiertes GIF umwandeln", }, "resize-video": { - name: "Resize Video", - description: "Scale a video to a new resolution or preset size", + name: "Video skalieren", + description: "Video auf eine neue Auflösung oder voreingestellte Größe skalieren", }, "crop-video": { - name: "Crop Video", - description: "Crop a region out of a video", + name: "Video zuschneiden", + description: "Einen Bereich aus einem Video zuschneiden", }, "rotate-video": { - name: "Rotate Video", - description: "Rotate or flip a video", + name: "Video drehen", + description: "Video drehen oder spiegeln", }, "change-fps": { - name: "Change FPS", - description: "Change the frame rate of a video", + name: "FPS ändern", + description: "Bildrate eines Videos ändern", }, "video-color": { - name: "Video Color", - description: "Adjust brightness, contrast, saturation, and gamma", + name: "Videofarbe", + description: "Helligkeit, Kontrast, Sättigung und Gamma anpassen", }, "video-speed": { - name: "Video Speed", - description: "Speed up or slow down a video", + name: "Videogeschwindigkeit", + description: "Video beschleunigen oder verlangsamen", }, "reverse-video": { - name: "Reverse Video", - description: "Play a video clip backwards", + name: "Video rückwärts", + description: "Videoclip rückwärts abspielen", }, "video-loudnorm": { - name: "Normalize Audio", - description: "Normalize video audio volume to broadcast standard", + name: "Audio normalisieren", + description: "Audio-Lautstärke des Videos auf Sendestandard normalisieren", }, "aspect-pad": { - name: "Aspect Pad", - description: "Add solid-color bars to fit a target aspect ratio", + name: "Seitenverhältnis auffüllen", + description: "Einfarbige Balken für ein bestimmtes Seitenverhältnis hinzufügen", }, "blur-pad": { - name: "Blur Pad", - description: "Fill bars with a blurred copy of the video", + name: "Weichzeichner-Auffüllung", + description: "Balken mit einer unscharfen Kopie des Videos füllen", }, "watermark-video": { - name: "Watermark Video", - description: "Burn a text watermark onto video frames", + name: "Video-Wasserzeichen", + description: "Text-Wasserzeichen in Videobilder einbrennen", }, "stabilize-video": { - name: "Stabilize Video", - description: "Reduce camera shake with two-pass stabilization", + name: "Video stabilisieren", + description: "Kamerawackeln mit Zwei-Pass-Stabilisierung reduzieren", }, "gif-to-video": { - name: "GIF to Video", - description: "Convert an animated GIF into an MP4 or WebM video", + name: "GIF zu Video", + description: "Animiertes GIF in ein MP4- oder WebM-Video konvertieren", }, "video-to-webp": { - name: "Video to WebP", - description: "Convert a video clip into an animated WebP image", + name: "Video zu WebP", + description: "Videoclip in ein animiertes WebP-Bild konvertieren", }, "video-to-frames": { - name: "Video to Frames", - description: "Extract frames from a video as a ZIP of images", + name: "Video zu Einzelbildern", + description: "Einzelbilder aus einem Video als ZIP mit Bildern extrahieren", }, "merge-videos": { - name: "Merge Videos", - description: "Join multiple video clips into one file", + name: "Videos zusammenführen", + description: "Mehrere Videoclips zu einer Datei zusammenführen", }, "replace-audio": { - name: "Replace Audio", - description: "Swap the audio track of a video with another file", + name: "Audio ersetzen", + description: "Audiospur eines Videos durch eine andere Datei ersetzen", }, "burn-subtitles": { - name: "Burn Subtitles", - description: "Permanently render subtitles onto video frames", + name: "Untertitel einbrennen", + description: "Untertitel dauerhaft in Videobilder einbrennen", }, "embed-subtitles": { - name: "Embed Subtitles", - description: "Mux a subtitle track into the video container", + name: "Untertitel einbetten", + description: "Untertitelspur in den Videocontainer einbetten", }, "extract-subtitles": { - name: "Extract Subtitles", - description: "Pull the subtitle track out of a video as an SRT file", + name: "Untertitel extrahieren", + description: "Untertitelspur aus einem Video als SRT-Datei extrahieren", }, "images-to-video": { - name: "Images to Video", - description: "Turn a set of images into a slideshow video", + name: "Bilder zu Video", + description: "Bildersammlung in ein Diashow-Video umwandeln", }, "video-metadata": { - name: "Clean Video Metadata", - description: "Strip metadata from a video and report what was found", + name: "Video-Metadaten bereinigen", + description: "Metadaten aus einem Video entfernen und Ergebnis anzeigen", }, "convert-audio": { - name: "Convert Audio", - description: "Convert audio between MP3, WAV, OGG, and more", + name: "Audio konvertieren", + description: "Audio zwischen MP3, WAV, OGG und weiteren Formaten konvertieren", }, "trim-audio": { - name: "Trim Audio", - description: "Cut a section out of an audio file", + name: "Audio schneiden", + description: "Einen Abschnitt aus einer Audiodatei schneiden", }, "extract-audio": { - name: "Extract Audio", - description: "Pull the audio track out of a video", + name: "Audio extrahieren", + description: "Audiospur aus einem Video extrahieren", }, "volume-adjust": { - name: "Volume Adjust", - description: "Increase or decrease audio volume by a fixed gain", + name: "Lautstärke anpassen", + description: "Audio-Lautstärke um einen festen Wert erhöhen oder verringern", }, "normalize-audio": { - name: "Normalize Audio", - description: "Even out loudness to broadcast standard levels", + name: "Audio normalisieren", + description: "Lautstärke auf Sendestandard-Pegel angleichen", }, "fade-audio": { - name: "Fade Audio", - description: "Add fade-in and fade-out effects to audio", + name: "Audio ein-/ausblenden", + description: "Ein- und Ausblendeffekte zu Audio hinzufügen", }, "reverse-audio": { - name: "Reverse Audio", - description: "Play audio backwards", + name: "Audio rückwärts", + description: "Audio rückwärts abspielen", }, "audio-speed": { - name: "Audio Speed", - description: "Speed up or slow down audio playback", + name: "Audiogeschwindigkeit", + description: "Audiowiedergabe beschleunigen oder verlangsamen", }, "pitch-shift": { - name: "Pitch Shift", - description: "Raise or lower pitch by semitones without changing speed", + name: "Tonhöhe ändern", + description: "Tonhöhe um Halbtöne anheben oder absenken, ohne das Tempo zu ändern", }, "audio-channels": { - name: "Audio Channels", - description: "Convert between mono, stereo, or swap left and right channels", + name: "Audiokanäle", + description: "Zwischen Mono und Stereo konvertieren oder linken und rechten Kanal tauschen", }, "silence-removal": { - name: "Silence Removal", - description: "Strip silent sections from audio", + name: "Stille entfernen", + description: "Stille Abschnitte aus Audio entfernen", }, "noise-reduction": { - name: "Noise Reduction", - description: "Reduce background noise with FFT-based denoising", + name: "Rauschunterdrückung", + description: "Hintergrundgeräusche mit FFT-basierter Entrauschung reduzieren", }, "merge-audio": { - name: "Merge Audio", - description: "Combine multiple audio files into one", + name: "Audio zusammenführen", + description: "Mehrere Audiodateien zu einer zusammenführen", }, "split-audio": { - name: "Split Audio", - description: "Split audio by time, equal parts, or silence detection", + name: "Audio aufteilen", + description: "Audio nach Zeit, gleichen Teilen oder Stille-Erkennung aufteilen", }, "ringtone-maker": { - name: "Ringtone Maker", - description: "Create a ringtone clip from any audio file", + name: "Klingelton-Ersteller", + description: "Klingelton aus einer beliebigen Audiodatei erstellen", }, "waveform-image": { - name: "Waveform Image", - description: "Generate a waveform visualization as a PNG image", + name: "Wellenform-Bild", + description: "Wellenform-Visualisierung als PNG-Bild erstellen", }, "audio-metadata": { - name: "Audio Metadata", - description: "View, edit, or strip audio tags (ID3)", + name: "Audio-Metadaten", + description: "Audio-Tags (ID3) anzeigen, bearbeiten oder entfernen", }, "merge-pdf": { - name: "Merge PDFs", - description: "Combine multiple PDFs into one", + name: "PDFs zusammenführen", + description: "Mehrere PDFs zu einem zusammenführen", }, "split-pdf": { - name: "Split PDF", - description: "Extract pages or split into parts", + name: "PDF aufteilen", + description: "Seiten extrahieren oder in Teile aufteilen", }, "compress-pdf": { - name: "Compress PDF", - description: "Shrink PDF file size", + name: "PDF komprimieren", + description: "PDF-Dateigröße reduzieren", }, "rotate-pdf": { - name: "Rotate PDF", - description: "Rotate pages in a PDF", + name: "PDF drehen", + description: "Seiten in einem PDF drehen", }, "convert-document": { - name: "Convert Document", - description: "Convert between Word, OpenDocument, RTF, and plain text formats", + name: "Dokument konvertieren", + description: "Zwischen Word, OpenDocument, RTF und Nur-Text-Formaten konvertieren", }, "convert-presentation": { - name: "Convert Presentation", - description: "Convert between PowerPoint and OpenDocument presentation formats", + name: "Präsentation konvertieren", + description: "Zwischen PowerPoint- und OpenDocument-Präsentationsformaten konvertieren", }, "convert-spreadsheet": { - name: "Convert Spreadsheet", + name: "Tabelle konvertieren", description: - "Convert between Excel, OpenDocument, and CSV formats. Multi-sheet workbooks export the first sheet to CSV.", + "Zwischen Excel, OpenDocument und CSV konvertieren. Bei Arbeitsmappen mit mehreren Blättern wird das erste Blatt als CSV exportiert.", }, "excel-to-pdf": { - name: "Excel to PDF", - description: "Convert spreadsheets to PDF. Wide sheets may paginate across multiple pages.", + name: "Excel zu PDF", + description: + "Tabellen zu PDF konvertieren. Breite Blätter werden ggf. auf mehrere Seiten verteilt.", }, "word-to-pdf": { - name: "Word to PDF", - description: "Convert Word documents to PDF", + name: "Word zu PDF", + description: "Word-Dokumente zu PDF konvertieren", }, "extract-pages": { - name: "Extract Pages", - description: "Pull selected pages into a new PDF", + name: "Seiten extrahieren", + description: "Ausgewählte Seiten in ein neues PDF extrahieren", }, "remove-pages": { - name: "Remove Pages", - description: "Delete specific pages from a PDF", + name: "Seiten entfernen", + description: "Bestimmte Seiten aus einem PDF entfernen", }, "organize-pdf": { - name: "Organize PDF", - description: "Reorder pages with an explicit page order", + name: "PDF organisieren", + description: "Seiten mit festgelegter Reihenfolge neu ordnen", }, "protect-pdf": { - name: "Protect PDF", - description: "Add password protection (AES-256 encryption)", + name: "PDF schützen", + description: "Passwortschutz hinzufügen (AES-256-Verschlüsselung)", }, "unlock-pdf": { - name: "Unlock PDF", - description: "Remove password protection from a PDF", + name: "PDF entsperren", + description: "Passwortschutz von einem PDF entfernen", }, "repair-pdf": { - name: "Repair PDF", - description: "Attempt to repair a damaged or corrupted PDF", + name: "PDF reparieren", + description: "Beschädigtes oder fehlerhaftes PDF reparieren", }, "linearize-pdf": { - name: "Web-Optimize PDF", - description: "Linearize a PDF for fast web viewing", + name: "PDF für Web optimieren", + description: "PDF für schnelle Webanzeige linearisieren", }, "grayscale-pdf": { - name: "Grayscale PDF", - description: "Convert all colors to grayscale", + name: "PDF in Graustufen", + description: "Alle Farben in Graustufen konvertieren", }, "pdfa-convert": { - name: "PDF/A Convert", - description: "Convert to archival PDF/A-2", + name: "PDF/A-Konvertierung", + description: "In Archivformat PDF/A-2 konvertieren", }, "crop-pdf": { - name: "Crop PDF", - description: "Crop all pages with a uniform margin", + name: "PDF zuschneiden", + description: "Alle Seiten mit einheitlichem Rand zuschneiden", }, "nup-pdf": { name: "N-up PDF", - description: "Arrange multiple pages per sheet", + description: "Mehrere Seiten pro Blatt anordnen", }, "booklet-pdf": { - name: "Booklet PDF", - description: "Arrange pages for folding into a booklet", + name: "Broschüren-PDF", + description: "Seiten zum Falten als Broschüre anordnen", }, "watermark-pdf": { - name: "Watermark PDF", - description: "Add a text watermark to every page", + name: "PDF-Wasserzeichen", + description: "Text-Wasserzeichen auf jede Seite hinzufügen", }, "pdf-page-numbers": { - name: "PDF Page Numbers", - description: "Add page numbers to every page", + name: "PDF-Seitenzahlen", + description: "Seitenzahlen auf jede Seite hinzufügen", }, "flatten-pdf": { - name: "Flatten PDF", - description: "Bake forms and annotations into page content", + name: "PDF reduzieren", + description: "Formulare und Anmerkungen in den Seiteninhalt einbetten", }, "redact-pdf": { - name: "Redact PDF", - description: "Permanently remove text occurrences (verified true redaction)", + name: "PDF schwärzen", + description: "Textvorkommen dauerhaft entfernen (verifizierte Schwärzung)", }, "pdf-to-text": { - name: "PDF to Text", - description: "Extract plain text from a PDF", + name: "PDF zu Text", + description: "Nur-Text aus einem PDF extrahieren", }, "pdf-to-word": { - name: "PDF to Word", - description: "Best for text-based PDFs; scanned pages need OCR", + name: "PDF zu Word", + description: "Ideal für textbasierte PDFs; gescannte Seiten benötigen OCR", }, "pdf-metadata": { - name: "PDF Metadata", - description: "Read and write PDF document metadata", + name: "PDF-Metadaten", + description: "PDF-Dokumentmetadaten lesen und schreiben", }, "powerpoint-to-pdf": { - name: "PowerPoint to PDF", - description: "Convert presentations to PDF", + name: "PowerPoint zu PDF", + description: "Präsentationen zu PDF konvertieren", }, "html-to-pdf": { - name: "HTML to PDF", - description: "Convert an HTML file to PDF. Remote resources are disabled for privacy.", + name: "HTML zu PDF", + description: + "HTML-Datei zu PDF konvertieren. Externe Ressourcen sind aus Datenschutzgründen deaktiviert.", }, "markdown-to-docx": { - name: "Markdown to Word", - description: "Convert a Markdown file to a Word document (DOCX)", + name: "Markdown zu Word", + description: "Markdown-Datei in ein Word-Dokument (DOCX) konvertieren", }, "markdown-to-html": { - name: "Markdown to HTML", + name: "Markdown zu HTML", description: - "Convert a Markdown file to a standalone HTML page. Remote images in the source are left as-is in the output.", + "Markdown-Datei in eine eigenständige HTML-Seite konvertieren. Externe Bilder im Quelltext bleiben in der Ausgabe unverändert.", }, "markdown-to-pdf": { - name: "Markdown to PDF", + name: "Markdown zu PDF", description: - "Convert a Markdown file to a styled PDF. Remote resources are disabled for privacy.", + "Markdown-Datei in ein gestaltetes PDF konvertieren. Externe Ressourcen sind aus Datenschutzgründen deaktiviert.", }, "epub-convert": { - name: "Convert EPUB", + name: "EPUB konvertieren", description: - "Convert an EPUB to PDF, DOCX, HTML, or Markdown. Remote resources inside the book are not fetched.", + "EPUB in PDF, DOCX, HTML oder Markdown konvertieren. Externe Ressourcen im Buch werden nicht geladen.", }, "to-epub": { - name: "Convert to EPUB", - description: "Convert Word, Markdown, HTML, or plain text files to EPUB", + name: "Zu EPUB konvertieren", + description: "Word-, Markdown-, HTML- oder Nur-Text-Dateien zu EPUB konvertieren", }, "csv-excel": { - name: "CSV to Excel", - description: "Convert between CSV and Excel (XLSX), both directions", + name: "CSV zu Excel", + description: "Zwischen CSV und Excel (XLSX) konvertieren, in beide Richtungen", }, "csv-json": { - name: "CSV to JSON", - description: "Convert between CSV and JSON, both directions", + name: "CSV zu JSON", + description: "Zwischen CSV und JSON konvertieren, in beide Richtungen", }, "json-xml": { - name: "JSON to XML", - description: "Convert between JSON and XML, both directions", + name: "JSON zu XML", + description: "Zwischen JSON und XML konvertieren, in beide Richtungen", }, "split-csv": { - name: "Split CSV", - description: "Split a CSV into smaller files by row count", + name: "CSV aufteilen", + description: "CSV nach Zeilenanzahl in kleinere Dateien aufteilen", }, "merge-csvs": { - name: "Merge CSVs", - description: "Combine multiple CSV or TSV files with matching columns into one", + name: "CSVs zusammenführen", + description: "Mehrere CSV- oder TSV-Dateien mit übereinstimmenden Spalten zusammenführen", }, "yaml-json": { name: "YAML / JSON", - description: "Convert between YAML and JSON, both directions", + description: "Zwischen YAML und JSON konvertieren, in beide Richtungen", }, "xml-to-csv": { - name: "XML to CSV", - description: "Extract repeating elements from XML into a CSV table", + name: "XML zu CSV", + description: "Wiederkehrende Elemente aus XML in eine CSV-Tabelle extrahieren", }, "create-zip": { - name: "Create ZIP", - description: "Bundle multiple files into a single ZIP archive", + name: "ZIP erstellen", + description: "Mehrere Dateien in ein einzelnes ZIP-Archiv bündeln", }, "extract-zip": { - name: "Extract ZIP", + name: "ZIP entpacken", description: - "Safely extract files from a ZIP archive with bomb protection. Single-file archives return the file directly.", + "Dateien sicher aus einem ZIP-Archiv mit Bomben-Schutz entpacken. Archive mit einer einzelnen Datei geben die Datei direkt zurück.", }, pipeline: { name: "Pipeline-Builder", description: "Mehrere Werkzeuge zu einem Workflow verketten", }, - processing: { canceled: "Processing canceled" }, + processing: { canceled: "Verarbeitung abgebrochen" }, mediaPlayer: { - unsupported: "Your browser does not support this media format.", + unsupported: "Ihr Browser unterstützt dieses Medienformat nicht.", }, documentView: { - loadFailed: "Failed to load document.", - previousPage: "Previous page", - nextPage: "Next page", - inputNotPreviewable: "Preview not available for this file type", + loadFailed: "Dokument konnte nicht geladen werden.", + previousPage: "Vorherige Seite", + nextPage: "Nächste Seite", + inputNotPreviewable: "Vorschau für diesen Dateityp nicht verfügbar", }, }, toolSettings: { compress: { compressionMode: "Komprimierungsmodus", - targetSize: "Zielgroesse", - quality: "Qualitaet", + targetSize: "Zielgröße", + quality: "Qualität", smallestFile: "Kleinste Datei", - bestQuality: "Beste Qualitaet", + bestQuality: "Beste Qualität", submit: "Komprimieren", submitBatch: "Komprimieren ({count} Dateien)", progressLabel: "Wird komprimiert", @@ -745,32 +748,32 @@ export const de: TranslationKeys = { saved: "Gespart: {percent}%", }, resize: { - customSize: "Benutzerdefinierte Groesse", + customSize: "Benutzerdefinierte Größe", scale: "Skalierung", presets: "Vorlagen", - contentAware: "Inhaltsabhaengig", + contentAware: "Inhaltsabhängig", widthPx: "Breite (px)", - heightPx: "Hoehe (px)", + heightPx: "Höhe (px)", fitMode: "Anpassungsmodus", cropToFit: "Zuschneiden", fitInside: "Einpassen", stretch: "Strecken", - limitToOriginalSize: "Auf Originalgroesse begrenzen", + limitToOriginalSize: "Auf Originalgröße begrenzen", limitToOriginalSizeHint: - "Wenn Ihr Bild bereits kleiner als die Zielgroesse ist, bleibt es unveraendert statt hochskaliert zu werden", + "Wenn Ihr Bild bereits kleiner als die Zielgröße ist, bleibt es unverändert statt hochskaliert zu werden", scalePercent: "Skalierung (%)", resizeToSquare: "Quadratisch skalieren", - protectFaces: "Gesichter schuetzen", - smoothing: "Glaettung", + protectFaces: "Gesichter schützen", + smoothing: "Glättung", edgeSensitivity: "Kantenempfindlichkeit", - submit: "Groesse aendern", - submitBatch: "Groesse aendern ({count} Dateien)", - progressLabel: "Groesse wird geaendert", + submit: "Größe ändern", + submitBatch: "Größe ändern ({count} Dateien)", + progressLabel: "Größe wird geändert", }, crop: { - aspectRatio: "Seitenverhaeltnis", + aspectRatio: "Seitenverhältnis", custom: "Benutzerdefiniert", - positionAndSize: "Position & Groesse", + positionAndSize: "Position & Größe", ruleOfThirds: "Drittelregel", leftOffsetPx: "Linker Versatz (px)", topOffsetPx: "Oberer Versatz (px)", @@ -785,7 +788,7 @@ export const de: TranslationKeys = { flip: "Spiegeln", horizontal: "Horizontal", vertical: "Vertikal", - resetAllChanges: "Alle Aenderungen zuruecksetzen", + resetAllChanges: "Alle Änderungen zurücksetzen", submit: "Anwenden", submitBatch: "Anwenden ({count} Dateien)", progressLabel: "Wird angewendet", @@ -793,24 +796,24 @@ export const de: TranslationKeys = { convert: { targetFormat: "Zielformat", sourceFormat: "Quellformat", - quality: "Qualitaet", + quality: "Qualität", submit: "Konvertieren", submitBatch: "Konvertieren ({count} Dateien)", progressLabel: "Wird konvertiert", }, "optimize-for-web": { outputFormat: "Ausgabeformat", - quality: "Qualitaet", + quality: "Qualität", smallestFile: "Kleinste Datei", - bestQuality: "Beste Qualitaet", + bestQuality: "Beste Qualität", maxDimensions: "Maximale Abmessungen", maxWidth: "Maximale Breite", - maxHeight: "Maximale Hoehe", + maxHeight: "Maximale Höhe", stripMetadata: "Metadaten entfernen", - sizeComparison: "Groessenvergleich", + sizeComparison: "Größenvergleich", optimized: "Optimiert:", smaller: "{percent}% kleiner", - larger: "{percent}% groesser", + larger: "{percent}% größer", submit: "Verarbeiten & Herunterladen", submitBatch: "Verarbeiten & Herunterladen ({count} Dateien)", progressLabel: "Wird optimiert", @@ -820,14 +823,14 @@ export const de: TranslationKeys = { readingMetadata: "Metadaten werden gelesen...", noMetadataFound: "Keine Metadaten in diesem Bild gefunden.", removeAllMetadata: "Alle Metadaten entfernen", - selectSpecific: "Oder bestimmte Metadaten auswaehlen:", + selectSpecific: "Oder bestimmte Metadaten auswählen:", stripExif: "EXIF entfernen (Kamerainformationen, Datum, Belichtung)", stripGps: "GPS entfernen (Standortdaten)", stripIcc: "ICC entfernen (Farbprofil)", stripXmp: "XMP entfernen (erweiterte Metadaten)", locationFound: "Standort gefunden", locationWarning: - "Dieses Bild enthaelt Ihren genauen Standort. Erwagen Sie, GPS-Daten vor dem Teilen zu entfernen.", + "Dieses Bild enthält Ihren genauen Standort. Erwägen Sie, GPS-Daten vor dem Teilen zu entfernen.", metadataSections: "{count} Metadaten-Abschnitt gefunden", metadataSectionsPlural: "{count} Metadaten-Abschnitte gefunden", metadataRemoved: "Metadaten entfernt: {size} KB", @@ -839,7 +842,7 @@ export const de: TranslationKeys = { couldNotReadMetadata: "Metadaten konnten nicht gelesen werden. Felder starten leer.", basicInfo: "Grundinformationen", description: "Beschreibung", - artist: "Kuenstler", + artist: "Künstler", copyright: "Urheberrecht", software: "Software", iptc: "IPTC", @@ -851,34 +854,34 @@ export const de: TranslationKeys = { dateAndTime: "Datum & Uhrzeit", editDates: "Daten bearbeiten", shiftAllDates: "Alle Daten verschieben", - dateModified: "Aenderungsdatum", + dateModified: "Änderungsdatum", dateTaken: "Aufnahmedatum", shiftHint: - "Alle Datumsfelder um einen Versatz verschieben (nuetzlich fuer Zeitzonenkorrekturen)", + "Alle Datumsfelder um einen Versatz verschieben (nützlich für Zeitzonenkorrekturen)", direction: "Richtung", - forward: "+ Vorwaerts", - backward: "- Rueckwaerts", + forward: "+ Vorwärts", + backward: "- Rückwärts", hoursMinutes: "Stunden:Minuten", locationGps: "Standort (GPS)", locationDataFound: "Standortdaten gefunden", - noGpsData: "Keine GPS-Daten. Koordinaten unten hinzufuegen.", + noGpsData: "Keine GPS-Daten. Koordinaten unten hinzufügen.", latitude: "Breitengrad", - longitude: "Laengengrad", - altitudeMeters: "Hoehe (Meter)", + longitude: "Längengrad", + altitudeMeters: "Höhe (Meter)", removeAllGpsData: "Alle GPS-Daten entfernen", - keywords: "Schluesselwoerter", - addKeywordPlaceholder: "Schluesselwort eingeben und Enter druecken", - addToExisting: "Zu vorhandenen hinzufuegen", + keywords: "Schlüsselwörter", + addKeywordPlaceholder: "Schlüsselwort eingeben und Enter drücken", + addToExisting: "Zu vorhandenen hinzufügen", replaceAll: "Alle ersetzen", allMetadata: "Alle Metadaten", templates: "Vorlagen", templateNamePlaceholder: "Vorlagenname", uploadPrompt: "Laden Sie ein Bild hoch, um seine Metadaten zu bearbeiten.", - changes: "{count} Aenderungen:", - modified: "{count} geaendert", + changes: "{count} Änderungen:", + modified: "{count} geändert", removed: "{count} entfernt", - gpsCleared: "GPS geloescht", - gpsAdded: "GPS hinzugefuegt", + gpsCleared: "GPS gelöscht", + gpsAdded: "GPS hinzugefügt", datesShifted: "Daten verschoben", submit: "Metadaten anwenden", progressLabel: "Metadaten werden geschrieben", @@ -889,7 +892,7 @@ export const de: TranslationKeys = { startIndex: "Startindex", preview: "Vorschau", andMore: "... und {count} weitere", - renaming: "Umbenennung laeuft...", + renaming: "Umbenennung läuft...", submit: "{count} Dateien umbenennen", zipDownloaded: "ZIP erfolgreich heruntergeladen", }, @@ -898,20 +901,20 @@ export const de: TranslationKeys = { imageCountPlural: "{count} Bilder werden in {mode} konvertiert", singlePdfMode: "ein einzelnes PDF, ein Bild pro Seite", separatePdfMode: "separate PDFs, eines pro Bild", - combineAllImages: "Alle Bilder in ein PDF zusammenfuegen", - pageSize: "Seitengroesse", + combineAllImages: "Alle Bilder in ein PDF zusammenfügen", + pageSize: "Seitengröße", orientation: "Ausrichtung", portrait: "Hochformat", landscape: "Querformat", margin: "Rand", - targetSizeLabel: "Zieldateigroesse (optional)", + targetSizeLabel: "Zieldateigröße (optional)", targetSizePlaceholder: "z. B. 2", - targetSizeHint: "Leer lassen fuer maximale Qualitaet", + targetSizeHint: "Leer lassen für maximale Qualität", targetSizeMet: "Ziel erreicht", targetSizeNotMet: - "Ziel konnte nicht erreicht werden. Datei auf minimale Qualitaet komprimiert.", - targetSizeTooSmall: "Zielgroesse muss mindestens 50KB betragen", - jpegQualityLabel: "Verwendete JPEG-Qualitaet", + "Ziel konnte nicht erreicht werden. Datei auf minimale Qualität komprimiert.", + targetSizeTooSmall: "Zielgröße muss mindestens 50KB betragen", + jpegQualityLabel: "Verwendete JPEG-Qualität", noImage: "Kein Bild", submitCollate: "PDF erstellen ({count} Seiten)", submitSeparate: "{count} PDFs erstellen", @@ -922,17 +925,17 @@ export const de: TranslationKeys = { processingPages: "{count} Seiten werden verarbeitet...", }, "pdf-to-image": { - dropPdf: "PDF hierher ziehen oder zum Auswaehlen klicken", + dropPdf: "PDF hierher ziehen oder zum Auswählen klicken", readingPdf: "PDF wird gelesen...", pageCount: "{count} Seite", pageCountPlural: "{count} Seiten", outputFormat: "Ausgabeformat", - quality: "Qualitaet", - resolutionDpi: "Aufloesung (DPI)", + quality: "Qualität", + resolutionDpi: "Auflösung (DPI)", dpiScreen: "Bildschirm", dpiStandard: "Standard", dpiPrint: "Druck", - dpiHighQuality: "Hohe Qualitaet", + dpiHighQuality: "Hohe Qualität", colorMode: "Farbmodus", colorModeColor: "Farbe", colorModeGrayscale: "Graustufen", @@ -947,9 +950,9 @@ export const de: TranslationKeys = { }, favicon: { uploadHint: - "Laden Sie quadratische Bilder hoch (empfohlen 512x512 oder groesser), um alle Favicon- und App-Symbolgroessen zu generieren.", - multipleHint: "Jedes der {count} Bilder erhaelt einen eigenen Ordner im ZIP.", - generatedSizes: "Generierte Groessen (pro Bild)", + "Laden Sie quadratische Bilder hoch (empfohlen 512x512 oder größer), um alle Favicon- und App-Symbolgrößen zu generieren.", + multipleHint: "Jedes der {count} Bilder erhält einen eigenen Ordner im ZIP.", + generatedSizes: "Generierte Größen (pro Bild)", plusManifest: "+ manifest.json + HTML-Snippet", submit: "Favicons generieren ({count} Bild)", submitPlural: "Favicons generieren ({count} Bilder)", @@ -962,25 +965,25 @@ export const de: TranslationKeys = { contrast: "Kontrast", exposure: "Belichtung", color: "Farbe", - saturation: "Saettigung", + saturation: "Sättigung", temperature: "Temperatur", - temperatureHint: "kuehl / warm", - tint: "Tonung", - tintHint: "gruen / magenta", + temperatureHint: "kühl / warm", + tint: "Tönung", + tintHint: "grün / magenta", hue: "Farbton", detail: "Detail", - sharpness: "Schaerfe", + sharpness: "Schärfe", effects: "Effekte", none: "Keine", grayscale: "Graustufen", sepia: "Sepia", invert: "Invertieren", - colorChannels: "Farbkanaele", - channelModified: "geaendert", + colorChannels: "Farbkanäle", + channelModified: "geändert", red: "Rot", - green: "Gruen", + green: "Grün", blue: "Blau", - resetAll: "Alles zuruecksetzen", + resetAll: "Alles zurücksetzen", submit: "Anwenden", submitBatch: "Anwenden ({count} Dateien)", progressLabel: "Farben werden angepasst", @@ -992,8 +995,8 @@ export const de: TranslationKeys = { highPass: "Hochpass", presets: "Vorlagen", textureAmount: "Texturmenge", - amount: "Staerke", - strength: "Intensitaet", + amount: "Stärke", + strength: "Intensität", noiseReduction: "Rauschreduzierung", off: "Aus", lightDenoise: "Leicht", @@ -1001,22 +1004,22 @@ export const de: TranslationKeys = { strongDenoise: "Stark", advancedControls: "Erweiterte Steuerung", radius: "Radius", - flatProtection: "Flaechenschutz", + flatProtection: "Flächenschutz", detailThreshold: "Detailschwelle", haloLimitLight: "Halogrenze (Hell)", haloLimitDark: "Halogrenze (Dunkel)", threshold: "Schwellenwert", - kernelSize: "Kerngroesse", - submit: "Schaerfen", - submitBatch: "Schaerfen ({count} Dateien)", - progressLabel: "Wird geschaerft", + kernelSize: "Kerngröße", + submit: "Schärfen", + submitBatch: "Schärfen ({count} Dateien)", + progressLabel: "Wird geschärft", }, "replace-color": { sourceColor: "Quellfarbe (zu ersetzen)", targetColor: "Zielfarbe (Ersatz)", makeTransparent: "Stattdessen transparent machen", tolerance: "Toleranz", - exactMatch: "Exakte Uebereinstimmung", + exactMatch: "Exakte Übereinstimmung", wideRange: "Breiter Bereich", submit: "Farbe ersetzen", submitBatch: "Farbe ersetzen ({count} Dateien)", @@ -1024,7 +1027,7 @@ export const de: TranslationKeys = { }, "color-blindness": { simulationType: "Simulationstyp", - redGreen: "Rot-Gruen", + redGreen: "Rot-Grün", blueYellow: "Blau-Gelb", monochromatic: "Monochromatisch", submit: "Simulieren", @@ -1037,7 +1040,7 @@ export const de: TranslationKeys = { products: "Produkte", general: "Allgemein", passportIdPhoto: "Pass- / Ausweisfoto", - quality: "Qualitaet", + quality: "Qualität", fast: "Schnell", hd: "HD", max: "Max", @@ -1048,20 +1051,20 @@ export const de: TranslationKeys = { gradient: "Verlauf", image: "Bild", gradientDirection: "Richtung", - chooseBackgroundImage: "Hintergrundbild auswaehlen", + chooseBackgroundImage: "Hintergrundbild auswählen", effectsSection: "Effekte", effectsActive: "aktiv", blurBackground: "Hintergrund weichzeichnen", - intensity: "Intensitaet", - addShadow: "Schatten hinzufuegen", + intensity: "Intensität", + addShadow: "Schatten hinzufügen", opacity: "Deckkraft", - outputFormat: "Output Format", - edgeSmoothing: "Edge Smoothing", - edgeSmoothingOff: "Off", - edgeSmoothingLight: "Light", - edgeSmoothingMedium: "Medium", - edgeSmoothingStrong: "Strong", - colorDecontamination: "Color Decontamination", + outputFormat: "Ausgabeformat", + edgeSmoothing: "Kantenglättung", + edgeSmoothingOff: "Aus", + edgeSmoothingLight: "Leicht", + edgeSmoothingMedium: "Mittel", + edgeSmoothingStrong: "Stark", + colorDecontamination: "Farbbereinigung", rendering: "Wird gerendert...", submit: "Hintergrund entfernen", submitBatch: "Hintergrund entfernen ({count} Dateien)", @@ -1069,11 +1072,11 @@ export const de: TranslationKeys = { }, upscale: { scaleFactor: "Skalierungsfaktor", - quality: "Qualitaet", + quality: "Qualität", enhanceFaces: "Gesichter verbessern", noiseReduction: "Rauschreduzierung", noiseReductionHint: - "Glaettet Koernung und Rauschen. Hoehere Werte entfernen mehr Rauschen, koennen aber Details aufweichen.", + "Glättet Körnung und Rauschen. Höhere Werte entfernen mehr Rauschen, können aber Details aufweichen.", outputFormat: "Ausgabeformat", submit: "Hochskalieren {scale}x", submitBatch: "Hochskalieren {scale}x ({count} Dateien)", @@ -1081,24 +1084,24 @@ export const de: TranslationKeys = { progressLabelBatch: "{count} Bilder werden hochskaliert", }, "erase-object": { - brushSize: "Pinselgroesse", + brushSize: "Pinselgröße", fine: "Fein", wide: "Breit", - undo: "Rueckgaengig", + undo: "Rückgängig", clear: "Leeren", outputFormat: "Ausgabeformat", - quality: "Qualitaet", + quality: "Qualität", paintHint: - "Malen Sie ueber die Objekte, die Sie entfernen moechten. Strg+Z zum Rueckgaengigmachen.", + "Malen Sie über die Objekte, die Sie entfernen möchten. Strg+Z zum Rückgängigmachen.", submit: "Objekt entfernen", submitBatch: "Alle entfernen ({count})", progressLabel: "Objekt wird entfernt", }, ocr: { - quality: "Qualitaet", + quality: "Qualität", enhanceBeforeScanning: "Vor dem Scannen verbessern", enhanceHint: - "Entzerrt, verbessert Kontrast, entfernt Rauschen und skaliert das Bild automatisch vor dem Scannen fuer bessere Genauigkeit.", + "Entzerrt, verbessert Kontrast, entfernt Rauschen und skaliert das Bild automatisch vor dem Scannen für bessere Genauigkeit.", language: "Sprache", autoDetect: "Automatisch erkennen", extractedText: "Extrahierter Text", @@ -1109,11 +1112,11 @@ export const de: TranslationKeys = { progressLabel: "Text wird extrahiert", }, "ocr-pdf": { - quality: "Qualitaet", + quality: "Qualität", language: "Sprache", autoDetect: "Automatisch erkennen", pages: "Seiten", - pagesPlaceholder: "all, 1-3, 5", + pagesPlaceholder: "alle, 1-3, 5", pagesHint: "Seitennummern oder Bereiche eingeben (z.B. 1-3, 5, 8-10). Max. 50 Seiten.", submit: "Text extrahieren", submitBatch: "Text extrahieren ({count} Dateien)", @@ -1130,8 +1133,8 @@ export const de: TranslationKeys = { progressLabel: "Gesichter werden weichgezeichnet", }, "enhance-faces": { - quality: "Qualitaet", - enhancementStrength: "Verbesserungsstaerke", + quality: "Qualität", + enhancementStrength: "Verbesserungsstärke", onlyCenterFace: "Nur zentrales Gesicht", detectionSensitivity: "Erkennungsempfindlichkeit", submit: "Gesichter verbessern", @@ -1142,57 +1145,57 @@ export const de: TranslationKeys = { subjectFocus: "Motivfokus", faceFocus: "Gesichtsfokus", autoTrim: "Automatisch beschneiden", - customSize: "Benutzerdefinierte Groesse", + customSize: "Benutzerdefinierte Größe", socialPresets: "Social-Media-Vorlagen", detectionStrategy: "Erkennungsstrategie", detectionStrategyHint: - "Aufmerksamkeit findet den visuell auffaelligsten Bereich. Entropie findet den Bereich mit den meisten Details.", + "Aufmerksamkeit findet den visuell auffälligsten Bereich. Entropie findet den Bereich mit den meisten Details.", attention: "Aufmerksamkeit", entropy: "Entropie", padding: "Abstand", - paddingHint: "Zusaetzlicher Freiraum um den Fokusbereich", - outputQuality: "Ausgabequalitaet", - outputQualityHint: "Fuer JPEG- und WebP-Ausgaben. PNG ist immer verlustfrei.", + paddingHint: "Zusätzlicher Freiraum um den Fokusbereich", + outputQuality: "Ausgabequalität", + outputQualityHint: "Für JPEG- und WebP-Ausgaben. PNG ist immer verlustfrei.", subjectDescription: - "Erkennt den interessantesten Bereich per Salienzanalyse und schneidet auf die Zielgroesse zu.", + "Erkennt den interessantesten Bereich per Salienzanalyse und schneidet auf die Zielgröße zu.", framing: "Bildausschnitt", facePadding: "Gesichtsabstand", - facePaddingHint: "Zusaetzlicher Raum um erkannte Gesichter", + facePaddingHint: "Zusätzlicher Raum um erkannte Gesichter", fewerFalsePositives: "Weniger Fehlerkennungen", faceDescription: - "Verwendet AI-Gesichtserkennung, um Gesichter korrekt im Bild zu halten. Bei fehlender Erkennung wird auf Motivfokus zurueckgegriffen.", + "Verwendet AI-Gesichtserkennung, um Gesichter korrekt im Bild zu halten. Bei fehlender Erkennung wird auf Motivfokus zurückgegriffen.", trimTolerance: "Toleranz", trimDescription: - "Wie stark sich ein Randpixel von der Kantenfarbe unterscheiden darf und trotzdem beschnitten wird. Hoeher = aggressiver.", - padToSquare: "Auf Quadrat auffuellen", - targetSizePx: "Zielgroesse (px)", - padColor: "Auffuellfarbe", + "Wie stark sich ein Randpixel von der Kantenfarbe unterscheiden darf und trotzdem beschnitten wird. Höher = aggressiver.", + padToSquare: "Auf Quadrat auffüllen", + targetSizePx: "Zielgröße (px)", + padColor: "Auffüllfarbe", trimHint: - 'Entfernt einfarbige Raender um Ihr Motiv. Aktivieren Sie "Auf Quadrat auffuellen" fuer E-Commerce-Bilder.', + 'Entfernt einfarbige Ränder um Ihr Motiv. Aktivieren Sie "Auf Quadrat auffüllen" für E-Commerce-Bilder.', submitSubject: "Intelligenter Zuschnitt", submitFace: "Gesichtszuschnitt", - submitTrim: "Raender beschneiden", + submitTrim: "Ränder beschneiden", }, imageEnhancement: { enhancementMode: "Verbesserungsmodus", auto: "Automatisch", - portrait: "Portraet", + portrait: "Porträt", landscape: "Landschaft", lowLight: "Schwaches Licht", food: "Lebensmittel", document: "Dokument", - intensity: "Intensitaet", + intensity: "Intensität", deepEnhance: "Tiefenverbesserung (AI)", deepEnhanceDescription: "Entfernt Rauschen und Artefakte mit AI", deepEnhanceRequires: "Erfordert das Bundle Hochskalierung & Verbesserung", analyzingImage: "Bild wird analysiert...", detectedIssues: "Erkannte Probleme", - imageLooksGood: "Das Bild sieht gut aus. Feinabstimmung mit dem Intensitaetsregler.", + imageLooksGood: "Das Bild sieht gut aus. Feinabstimmung mit dem Intensitätsregler.", issueUnderexposed: "Unterbelichtet", - issueOverexposed: "Ueberbelichtet", + issueOverexposed: "Überbelichtet", issueLowContrast: "Flacher Kontrast", issueColorCast: "Farbstich", - issueDesaturated: "Entsaettigt", + issueDesaturated: "Entsättigt", issueSoftFocus: "Unscharfer Fokus", issueNoisy: "Verrauscht", submit: "Verbessern", @@ -1206,13 +1209,13 @@ export const de: TranslationKeys = { denoisingTier: "Entrauschungsstufe", quick: "Schnell", balanced: "Ausgewogen", - quality: "Qualitaet", + quality: "Qualität", maximum: "Maximum", quickDesc: "Schnell, ressourcenschonend", - balancedDesc: "Gute Qualitaet, moderate Geschwindigkeit", - qualityDesc: "AI-gestuetzt, langsam", + balancedDesc: "Gute Qualität, moderate Geschwindigkeit", + qualityDesc: "AI-gestützt, langsam", maximumDesc: "Bestes AI-Modell, am langsamsten", - strength: "Staerke", + strength: "Stärke", subtle: "Dezent", aggressive: "Aggressiv", detailPreservation: "Detailerhaltung", @@ -1222,7 +1225,7 @@ export const de: TranslationKeys = { heavy: "Stark", outputFormat: "Ausgabeformat", gifAiWarning: - "AI-Entrauschung bei GIF-Dateien verarbeitet nur das erste Bild. Fuer animierte GIFs verwenden Sie die Stufe Schnell oder Ausgewogen.", + "AI-Entrauschung bei GIF-Dateien verarbeitet nur das erste Bild. Für animierte GIFs verwenden Sie die Stufe Schnell oder Ausgewogen.", submit: "Rauschen entfernen", submitBatch: "Rauschen entfernen ({count} Dateien)", progressLabel: "Rauschen wird entfernt", @@ -1232,11 +1235,11 @@ export const de: TranslationKeys = { sensitivity: "Empfindlichkeit", strict: "Streng", aggressive: "Aggressiv", - correctionStrength: "Korrekturstaerke", + correctionStrength: "Korrekturstärke", subtle: "Dezent", dark: "Dunkel", outputFormat: "Ausgabeformat", - quality: "Qualitaet", + quality: "Qualität", submit: "Rote Augen korrigieren", submitBatch: "Rote Augen korrigieren ({count} Dateien)", progressLabel: "Rote Augen werden korrigiert", @@ -1246,16 +1249,16 @@ export const de: TranslationKeys = { scratchRemoval: "Kratzerentfernung", scratchRemovalDesc: "Kratzer, Risse und Flecken erkennen und reparieren", faceEnhancement: "Gesichtsverbesserung", - faceEnhancementDesc: "Beschaedigte Gesichter mit CodeFormer-AI wiederherstellen", + faceEnhancementDesc: "Beschädigte Gesichter mit CodeFormer-AI wiederherstellen", faceFidelity: "Gesichtstreue", enhanced: "Verbessert", faithful: "Originalgetreu", noiseReduction: "Rauschreduzierung", - noiseReductionDesc: "Koernung und Rauschen aus alten Fotos entfernen", - denoiseStrength: "Entrauschungsstaerke", + noiseReductionDesc: "Körnung und Rauschen aus alten Fotos entfernen", + denoiseStrength: "Entrauschungsstärke", autoColorize: "Automatisch kolorieren", - autoColorizeDesc: "Farbe zu S/W-Fotos mit DDColor-AI hinzufuegen", - colorizeStrength: "Kolorierungsstaerke", + autoColorizeDesc: "Farbe zu S/W-Fotos mit DDColor-AI hinzufügen", + colorizeStrength: "Kolorierungsstärke", vivid: "Lebhaft", submit: "Foto restaurieren", submitBatch: "Fotos restaurieren ({count})", @@ -1264,32 +1267,32 @@ export const de: TranslationKeys = { }, "content-aware-resize": { widthPx: "Breite (px)", - heightPx: "Hoehe (px)", + heightPx: "Höhe (px)", resizeToSquare: "Quadratisch skalieren", - protectFaces: "Gesichter schuetzen", + protectFaces: "Gesichter schützen", protectFacesHint: - "Gesichtsbereiche per Gesichtserkennung erkennen und vor Nahtentfernung schuetzen", - smoothing: "Glaettung", + "Gesichtsbereiche per Gesichtserkennung erkennen und vor Nahtentfernung schützen", + smoothing: "Glättung", edgeSensitivity: "Kantenempfindlichkeit", - submit: "Groesse aendern", - submitBatch: "Groesse aendern ({count} Dateien)", - progressLabel: "Inhaltsabhaengige Groessenaenderung", + submit: "Größe ändern", + submitBatch: "Größe ändern ({count} Dateien)", + progressLabel: "Inhaltsabhängige Größenänderung", }, "ai-canvas-expand": { - quality: "Qualitaet", + quality: "Qualität", fast: "Schnell", balanced: "Ausgewogen", - highQuality: "Hohe Qualitaet", - fastDesc: "Schnelle Vorschau, weniger AI-Durchlaeufe", - balancedDesc: "Gute Qualitaet, moderate Geschwindigkeit", + highQuality: "Hohe Qualität", + fastDesc: "Schnelle Vorschau, weniger AI-Durchläufe", + balancedDesc: "Gute Qualität, moderate Geschwindigkeit", highQualityDesc: "Beste Ergebnisse, langsamer", - extendToAspectRatio: "Auf Seitenverhaeltnis erweitern", + extendToAspectRatio: "Auf Seitenverhältnis erweitern", extendByPixels: "Erweitern um (Pixel)", top: "Oben", right: "Rechts", bottom: "Unten", left: "Links", - newSize: "Neue Groesse: {width} x {height}", + newSize: "Neue Größe: {width} x {height}", submit: "Leinwand erweitern", submitBatch: "Erweitern ({count} Dateien)", progressLabel: "Leinwand wird erweitert", @@ -1299,16 +1302,16 @@ export const de: TranslationKeys = { fast: "Schnell", fastDesc: "Schnelle Ergebnisse", balanced: "Ausgewogen", - balancedDesc: "Bestmoegliche Qualitaet", + balancedDesc: "Bestmögliche Qualität", best: "Beste", - bestDesc: "Hoechste Qualitaet", - colorIntensity: "Farbintensitaet", + bestDesc: "Höchste Qualität", + colorIntensity: "Farbintensität", grayscaleLabel: "Graustufen", subtleLabel: "Dezent", - naturalLabel: "Natuerlich", + naturalLabel: "Natürlich", vividLabel: "Lebhaft", - intensityHint: "Niedrigere Werte erzeugen gedaempftere Farben im Vintage-Stil.", - strength: "Kolorierungsstaerke", + intensityHint: "Niedrigere Werte erzeugen gedämpftere Farben im Vintage-Stil.", + strength: "Kolorierungsstärke", submit: "Kolorieren", submitBatch: "Kolorieren ({count} Dateien)", progressLabel: "Wird koloriert", @@ -1316,18 +1319,18 @@ export const de: TranslationKeys = { }, "passport-photo": { country: "Land", - searchCountries: "Laender suchen...", - noCountriesFound: "Keine Laender gefunden", - customDimensions: "Benutzerdefinierte Masse", + searchCountries: "Länder suchen...", + noCountriesFound: "Keine Länder gefunden", + customDimensions: "Benutzerdefinierte Maße", documentType: "Dokumenttyp", dimensionsMm: "Abmessungen (mm)", dpi: "DPI", pixelsPerInch: "Pixel pro Zoll", backgroundColor: "Hintergrundfarbe", - maxFileSize: "Maximale Dateigroesse", + maxFileSize: "Maximale Dateigröße", noLimit: "Kein Limit", customKb: "Benutzerdefiniert (KB)...", - uploadPortrait: "Portraetfoto hochladen", + uploadPortrait: "Porträtfoto hochladen", uploadHint: "Laden Sie ein Bild im linken Bereich hoch, um eine Vorschau Ihres Passfotos zu sehen", analyzingPhoto: "Foto wird analysiert", @@ -1338,7 +1341,7 @@ export const de: TranslationKeys = { faceCentered: "Gesicht zentriert", headLevel: "Kopf gerade", lookingStraight: "Blickrichtung frontal", - faceSize: "Gesichtsgroesse", + faceSize: "Gesichtsgröße", whatYouSee: "Was Sie sehen, wird heruntergeladen", dragToAdjust: "Ziehen zum Anpassen", scrollToZoom: "Scrollen zum Zoomen", @@ -1381,14 +1384,14 @@ export const de: TranslationKeys = { progressLabel: "Hintergrund wird ersetzt", }, "blur-background": { - intensity: "Unschaerfe-Intensitaet", + intensity: "Unschärfe-Intensität", submit: "Hintergrund unscharf stellen", submitBatch: "Hintergrund unscharf stellen ({count} Dateien)", progressLabel: "Hintergrund wird unscharf gestellt", }, "watermark-text": { watermarkText: "Wasserzeichen-Text", - fontSize: "Schriftgroesse", + fontSize: "Schriftgröße", color: "Farbe", opacity: "Deckkraft", position: "Position", @@ -1399,9 +1402,9 @@ export const de: TranslationKeys = { bottomLeft: "Unten links", bottomRight: "Unten rechts", tiled: "Gekachelt", - submit: "Wasserzeichen hinzufuegen", - submitBatch: "Wasserzeichen hinzufuegen ({count} Dateien)", - progressLabel: "Wasserzeichen wird hinzugefuegt", + submit: "Wasserzeichen hinzufügen", + submitBatch: "Wasserzeichen hinzufügen ({count} Dateien)", + progressLabel: "Wasserzeichen wird hinzugefügt", }, "watermark-image": { uploadWatermark: "Wasserzeichen-Bild hochladen", @@ -1413,7 +1416,7 @@ export const de: TranslationKeys = { }, "text-overlay": { text: "Text", - fontSize: "Schriftgroesse", + fontSize: "Schriftgröße", color: "Farbe", position: "Position", top: "Oben", @@ -1422,11 +1425,11 @@ export const de: TranslationKeys = { backgroundBox: "Hintergrundfeld", backgroundColor: "Hintergrundfarbe", shadow: "Schatten", - submit: "Text hinzufuegen", - submitBatch: "Text hinzufuegen ({count} Dateien)", - progressLabel: "Textueberlagerung wird hinzugefuegt", - download: "Download", - defaultText: "Your Text Here", + submit: "Text hinzufügen", + submitBatch: "Text hinzufügen ({count} Dateien)", + progressLabel: "Textüberlagerung wird hinzugefügt", + download: "Herunterladen", + defaultText: "Ihr Text hier", }, compose: { uploadOverlay: "Overlay-Bild hochladen", @@ -1434,31 +1437,31 @@ export const de: TranslationKeys = { yPosition: "Y-Position", opacity: "Deckkraft", blendMode: "Mischmodus", - submit: "Zusammenfuegen", + submit: "Zusammenfügen", }, "meme-generator": { selectTemplate: - "Waehlen Sie eine Vorlage aus der Galerie oder laden Sie Ihr eigenes Bild hoch.", - chooseLayout: "Waehlen Sie ein Textlayout fuer Ihr Bild.", + "Wählen Sie eine Vorlage aus der Galerie oder laden Sie Ihr eigenes Bild hoch.", + chooseLayout: "Wählen Sie ein Textlayout für Ihr Bild.", textContent: "Textinhalt", textStyle: "Textstil", font: "Schriftart", - fontSize: "Schriftgroesse", + fontSize: "Schriftgröße", textColor: "Textfarbe", strokeColor: "Konturfarbe", allCaps: "GROSSBUCHSTABEN", generate: "Meme erstellen", generating: "Wird erstellt...", downloadMeme: "Meme herunterladen", - backToGallery: "Zurueck zur Galerie", + backToGallery: "Zurück zur Galerie", }, info: { loadingInfo: "Informationen werden geladen...", filename: "Dateiname", - fileSize: "Dateigroesse", + fileSize: "Dateigröße", dimensions: "Abmessungen", format: "Format", - channels: "Kanaele", + channels: "Kanäle", colorSpace: "Farbraum", density: "Dichte", bitDepth: "Bittiefe", @@ -1469,24 +1472,24 @@ export const de: TranslationKeys = { hasExif: "Hat EXIF", hasIcc: "Hat ICC", hasXmp: "Hat XMP", - readInfo: "Read Info", - reading: "Reading...", - channelStats: "Channel Stats", - yes: "Yes", - no: "No", + readInfo: "Info lesen", + reading: "Wird gelesen...", + channelStats: "Kanalstatistiken", + yes: "Ja", + no: "Nein", na: "N/A", - failedToRead: "Failed to read info", + failedToRead: "Info konnte nicht gelesen werden", }, compare: { uploadSecondImage: "Zweites Bild hochladen", - similarity: "Aehnlichkeit: {percent}%", + similarity: "Ähnlichkeit: {percent}%", submit: "Vergleichen", downloadDiff: "Differenz herunterladen", }, "find-duplicates": { preset: "Vorlage", exact: "Exakt", - similar: "Aehnlich", + similar: "Ähnlich", loose: "Locker", exactDesc: "Pixelidentische Kopien, gleiches Bild in unterschiedlichen Formaten.", similarDesc: "Skalierte, neu komprimierte oder leicht bearbeitete Kopien.", @@ -1523,29 +1526,29 @@ export const de: TranslationKeys = { }, "html-to-image": { modeUrl: "URL", - modeHtml: "HTML File", - htmlFile: "HTML File", + modeHtml: "HTML-Datei", + htmlFile: "HTML-Datei", url: "URL", urlPlaceholder: "https://snapotter.com", - format: "Output Format", - quality: "Quality", - devicePreset: "Device", - viewportWidth: "Width", - viewportHeight: "Height", - fullPage: "Full Page", - submit: "Capture", - download: "Download Screenshot", - capturing: "Capturing webpage...", - errorTimeout: "Page took too long to load", - errorBlocked: "This URL cannot be captured", - errorUnavailable: "Screenshot service is not available", - errorFailed: "Failed to capture the page", - placeholder: "Enter a URL and click Capture", + format: "Ausgabeformat", + quality: "Qualität", + devicePreset: "Gerät", + viewportWidth: "Breite", + viewportHeight: "Höhe", + fullPage: "Ganze Seite", + submit: "Aufnehmen", + download: "Screenshot herunterladen", + capturing: "Webseite wird aufgenommen...", + errorTimeout: "Seite hat zu lange zum Laden gebraucht", + errorBlocked: "Diese URL kann nicht aufgenommen werden", + errorUnavailable: "Screenshot-Dienst ist nicht verfügbar", + errorFailed: "Seite konnte nicht aufgenommen werden", + placeholder: "URL eingeben und auf Aufnehmen klicken", presets: { desktop: "Desktop", tablet: "Tablet", mobile: "Mobile", - custom: "Custom", + custom: "Benutzerdefiniert", }, }, "barcode-read": { @@ -1558,12 +1561,12 @@ export const de: TranslationKeys = { }, collage: { template: "Vorlage", - aspectRatio: "Seitenverhaeltnis", + aspectRatio: "Seitenverhältnis", gap: "Abstand", cornerRadius: "Eckenradius", backgroundColor: "Hintergrundfarbe", outputFormat: "Ausgabeformat", - quality: "Qualitaet", + quality: "Qualität", submit: "Collage erstellen", downloadCollage: "Collage herunterladen", }, @@ -1587,19 +1590,19 @@ export const de: TranslationKeys = { cornerRadius: "Eckenradius", backgroundColor: "Hintergrundfarbe", outputFormat: "Ausgabeformat", - quality: "Qualitaet", - submit: "Bilder zusammenfuegen", + quality: "Qualität", + submit: "Bilder zusammenfügen", }, split: { modeGrid: "Raster", - modeTileSize: "Kachelgroesse", + modeTileSize: "Kachelgröße", presets: "Vorlagen", columns: "Spalten", rows: "Zeilen", tileWidth: "Kachelbreite", - tileHeight: "Kachelhoehe", + tileHeight: "Kachelhöhe", outputFormat: "Ausgabeformat", - quality: "Qualitaet", + quality: "Qualität", submit: "Bild aufteilen", downloadAll: "Alle herunterladen (ZIP)", }, @@ -1611,14 +1614,14 @@ export const de: TranslationKeys = { paddingColor: "Abstandsfarbe", cornerRadius: "Eckenradius", shadow: "Schatten", - shadowBlur: "Schattenunschaerfe", + shadowBlur: "Schattenunschärfe", shadowOffsetX: "Schattenversatz X", shadowOffsetY: "Schattenversatz Y", shadowColor: "Schattenfarbe", shadowOpacity: "Schattendeckkraft", - submit: "Rand hinzufuegen", - submitBatch: "Rand hinzufuegen ({count} Dateien)", - progressLabel: "Rand wird hinzugefuegt", + submit: "Rand hinzufügen", + submitBatch: "Rand hinzufügen ({count} Dateien)", + progressLabel: "Rand wird hinzugefügt", }, beautify: { preset: "Vorlage", @@ -1631,81 +1634,81 @@ export const de: TranslationKeys = { padding: "Abstand", borderRadius: "Randradius", shadowPreset: "Schattenvorlage", - deviceFrame: "Geraeterahmen", - submit: "Verschoenern", - submitBatch: "Verschoenern ({count} Dateien)", - progressLabel: "Screenshot wird verschoenert", + deviceFrame: "Geräterahmen", + submit: "Verschönern", + submitBatch: "Verschönern ({count} Dateien)", + progressLabel: "Screenshot wird verschönert", }, "circle-crop": { - submit: "Circle Crop", - submitBatch: "Circle Crop ({count} files)", - progressLabel: "Cropping to circle", + submit: "Kreiszuschnitt", + submitBatch: "Kreiszuschnitt ({count} Dateien)", + progressLabel: "Wird kreisförmig zugeschnitten", }, duotone: { - shadow: "Shadow Color", - highlight: "Highlight Color", - submit: "Apply Duotone", - submitBatch: "Apply Duotone ({count} files)", - progressLabel: "Applying duotone", + shadow: "Schattenfarbe", + highlight: "Lichtfarbe", + submit: "Duotone anwenden", + submitBatch: "Duotone anwenden ({count} Dateien)", + progressLabel: "Duotone wird angewendet", }, "image-pad": { - target: "Target Ratio", - color: "Background Color", - submit: "Pad Image", - submitBatch: "Pad Image ({count} files)", - progressLabel: "Padding image", + target: "Zielverhältnis", + color: "Hintergrundfarbe", + submit: "Bild auffüllen", + submitBatch: "Bild auffüllen ({count} Dateien)", + progressLabel: "Bild wird aufgefüllt", }, pixelate: { - blockSize: "Block Size", - submit: "Pixelate", - submitBatch: "Pixelate ({count} files)", - progressLabel: "Pixelating", + blockSize: "Blockgröße", + submit: "Verpixeln", + submitBatch: "Verpixeln ({count} Dateien)", + progressLabel: "Wird verpixelt", }, vignette: { - strength: "Strength", - color: "Vignette Color", - submit: "Apply Vignette", - submitBatch: "Apply Vignette ({count} files)", - progressLabel: "Applying vignette", + strength: "Stärke", + color: "Vignettenfarbe", + submit: "Vignette anwenden", + submitBatch: "Vignette anwenden ({count} Dateien)", + progressLabel: "Vignette wird angewendet", }, "gif-webp": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting animation", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Animation wird konvertiert", }, histogram: { - submit: "Generate Histogram", - submitBatch: "Generate Histogram ({count} files)", - progressLabel: "Generating histogram", + submit: "Histogramm erstellen", + submitBatch: "Histogramm erstellen ({count} Dateien)", + progressLabel: "Histogramm wird erstellt", }, "lqip-placeholder": { - width: "Width", - blur: "Blur", - submit: "Generate Placeholder", - submitBatch: "Generate Placeholder ({count} files)", - progressLabel: "Generating placeholder", + width: "Breite", + blur: "Unschärfe", + submit: "Platzhalter erstellen", + submitBatch: "Platzhalter erstellen ({count} Dateien)", + progressLabel: "Platzhalter wird erstellt", }, "sprite-sheet": { - columns: "Columns", - padding: "Padding", - background: "Background Color", - submit: "Create Sprite Sheet", - submitBatch: "Create Sprite Sheet", - progressLabel: "Creating sprite sheet", + columns: "Spalten", + padding: "Abstand", + background: "Hintergrundfarbe", + submit: "Sprite-Sheet erstellen", + submitBatch: "Sprite-Sheet erstellen", + progressLabel: "Sprite-Sheet wird erstellt", }, "svg-to-raster": { outputFormat: "Ausgabeformat", - sizing: "Groesse", + sizing: "Größe", scaleMode: "Skalierung", customMode: "Benutzerdefiniert", scalePresets: "Skalierungsvorlagen", dpiPresets: "DPI-Vorlagen", customWidth: "Breite (px)", - customHeight: "Hoehe (px)", + customHeight: "Höhe (px)", background: "Hintergrund", bgTransparent: "Transparent", bgColor: "Farbe", - quality: "Qualitaet", + quality: "Qualität", submit: "SVG konvertieren", submitBatch: "Konvertieren ({count} Dateien)", progressLabel: "SVG wird konvertiert", @@ -1721,7 +1724,7 @@ export const de: TranslationKeys = { bw: "S/W", colorModeColor: "Farbe", threshold: "Schwellenwert", - colorPrecision: "Farbpraezision", + colorPrecision: "Farbpräzision", layerDifference: "Ebenenunterschied", filterSpeckle: "Flecken filtern", pathMode: "Pfadmodus", @@ -1733,7 +1736,7 @@ export const de: TranslationKeys = { }, "gif-tools": { mode: "Modus", - resize: "Groesse aendern", + resize: "Größe ändern", optimize: "Optimieren", speed: "Geschwindigkeit", reverse: "Umkehren", @@ -1764,9 +1767,9 @@ export const de: TranslationKeys = { "image-to-base64": { outputFormat: "Ausgabeformat", keepOriginal: "Original beibehalten", - quality: "Qualitaet", + quality: "Qualität", maxWidth: "Maximale Breite", - maxHeight: "Maximale Hoehe", + maxHeight: "Maximale Höhe", submit: "In Base64 konvertieren", submitBatch: "Konvertieren ({count} Dateien)", copyBase64: "Base64 kopieren", @@ -1776,20 +1779,20 @@ export const de: TranslationKeys = { }, "barcode-generate": { text: "Text", - type: "Barcode Type", - scale: "Scale", - includeText: "Include Text", - submit: "Generate Barcode", - download: "Download Barcode", + type: "Barcode-Typ", + scale: "Skalierung", + includeText: "Text einblenden", + submit: "Barcode erstellen", + download: "Barcode herunterladen", }, "chart-maker": { - kind: "Chart Type", - title: "Title", - width: "Width", - height: "Height", - submit: "Create Chart", - submitBatch: "Create Chart ({count} files)", - progressLabel: "Creating chart", + kind: "Diagrammtyp", + title: "Titel", + width: "Breite", + height: "Höhe", + submit: "Diagramm erstellen", + submitBatch: "Diagramm erstellen ({count} Dateien)", + progressLabel: "Diagramm wird erstellt", }, "enhance-faces-standalone": { model: "Modell", @@ -1798,631 +1801,631 @@ export const de: TranslationKeys = { best: "Beste", }, "convert-video": { - format: "Output format", - quality: "Quality", - high: "High", - balanced: "Balanced", - small: "Smallest", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "Ausgabeformat", + quality: "Qualität", + high: "Hoch", + balanced: "Ausgewogen", + small: "Kleinste", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "compress-video": { - quality: "Compression", - light: "Light", - balanced: "Balanced", - strong: "Strong", - resolution: "Resolution", + quality: "Komprimierung", + light: "Leicht", + balanced: "Ausgewogen", + strong: "Stark", + resolution: "Auflösung", original: "Original", - submit: "Compress", - submitBatch: "Compress ({count} files)", - progressLabel: "Compressing", + submit: "Komprimieren", + submitBatch: "Komprimieren ({count} Dateien)", + progressLabel: "Wird komprimiert", }, "trim-video": { - start: "Start (seconds)", - end: "End (seconds)", - precise: "Frame-accurate (re-encodes)", - submit: "Trim", - submitBatch: "Trim ({count} files)", - progressLabel: "Trimming", + start: "Start (Sekunden)", + end: "Ende (Sekunden)", + precise: "Bildgenau (neu kodiert)", + submit: "Kürzen", + submitBatch: "Kürzen ({count} Dateien)", + progressLabel: "Wird gekürzt", }, "mute-video": { - submit: "Remove audio", - submitBatch: "Remove audio ({count} files)", - progressLabel: "Muting", + submit: "Audio entfernen", + submitBatch: "Audio entfernen ({count} Dateien)", + progressLabel: "Audio wird entfernt", }, "video-to-gif": { - fps: "Frames per second", - width: "Width (px)", - start: "Start (seconds)", - duration: "Duration (seconds)", - submit: "Create GIF", - submitBatch: "Create GIFs ({count} files)", - progressLabel: "Creating GIF", + fps: "Bilder pro Sekunde", + width: "Breite (px)", + start: "Start (Sekunden)", + duration: "Dauer (Sekunden)", + submit: "GIF erstellen", + submitBatch: "GIFs erstellen ({count} Dateien)", + progressLabel: "GIF wird erstellt", }, "resize-video": { preset: "Preset", - width: "Width (px)", - height: "Height (px)", - hint: "Leave one dimension empty to keep aspect ratio", - submit: "Resize", - submitBatch: "Resize ({count} files)", - progressLabel: "Resizing", + width: "Breite (px)", + height: "Höhe (px)", + hint: "Ein Feld leer lassen, um das Seitenverhältnis beizubehalten", + submit: "Skalieren", + submitBatch: "Skalieren ({count} Dateien)", + progressLabel: "Wird skaliert", }, "crop-video": { - width: "Width (px)", - height: "Height (px)", - x: "X offset", - y: "Y offset", - submit: "Crop", - submitBatch: "Crop ({count} files)", - progressLabel: "Cropping", + width: "Breite (px)", + height: "Höhe (px)", + x: "X-Versatz", + y: "Y-Versatz", + submit: "Zuschneiden", + submitBatch: "Zuschneiden ({count} Dateien)", + progressLabel: "Wird zugeschnitten", }, "rotate-video": { - transform: "Transform", - cw90: "Rotate 90 clockwise", - ccw90: "Rotate 90 counter-clockwise", - rotate180: "Rotate 180", - hflip: "Flip horizontal", - vflip: "Flip vertical", - submit: "Rotate", - submitBatch: "Rotate ({count} files)", - progressLabel: "Rotating", + transform: "Transformation", + cw90: "90° im Uhrzeigersinn drehen", + ccw90: "90° gegen den Uhrzeigersinn drehen", + rotate180: "180° drehen", + hflip: "Horizontal spiegeln", + vflip: "Vertikal spiegeln", + submit: "Drehen", + submitBatch: "Drehen ({count} Dateien)", + progressLabel: "Wird gedreht", }, "change-fps": { - fps: "Frames per second", - submit: "Change FPS", - submitBatch: "Change FPS ({count} files)", - progressLabel: "Changing FPS", + fps: "Bilder pro Sekunde", + submit: "FPS ändern", + submitBatch: "FPS ändern ({count} Dateien)", + progressLabel: "FPS wird geändert", }, "video-color": { - brightness: "Brightness", - contrast: "Contrast", - saturation: "Saturation", + brightness: "Helligkeit", + contrast: "Kontrast", + saturation: "Sättigung", gamma: "Gamma", - submit: "Apply", - submitBatch: "Apply ({count} files)", - progressLabel: "Adjusting color", + submit: "Anwenden", + submitBatch: "Anwenden ({count} Dateien)", + progressLabel: "Farbe wird angepasst", }, "video-speed": { - factor: "Speed factor", - keepPitch: "Keep original pitch", - submit: "Change speed", - submitBatch: "Change speed ({count} files)", - progressLabel: "Changing speed", + factor: "Geschwindigkeitsfaktor", + keepPitch: "Originaltonhöhe beibehalten", + submit: "Geschwindigkeit ändern", + submitBatch: "Geschwindigkeit ändern ({count} Dateien)", + progressLabel: "Geschwindigkeit wird geändert", }, "reverse-video": { - hint: "Limited to clips up to 5 minutes", - submit: "Reverse", - submitBatch: "Reverse ({count} files)", - progressLabel: "Reversing", + hint: "Begrenzt auf Clips bis zu 5 Minuten", + submit: "Umkehren", + submitBatch: "Umkehren ({count} Dateien)", + progressLabel: "Wird umgekehrt", }, "video-loudnorm": { - hint: "Normalizes audio to EBU R128 broadcast standard", - submit: "Normalize", - submitBatch: "Normalize ({count} files)", - progressLabel: "Normalizing", + hint: "Normalisiert Audio auf den EBU-R128-Sendestandard", + submit: "Normalisieren", + submitBatch: "Normalisieren ({count} Dateien)", + progressLabel: "Wird normalisiert", }, "aspect-pad": { - target: "Target ratio", - color: "Background color", - colorHint: "Hex color, e.g. #000000", - submit: "Pad", - submitBatch: "Pad ({count} files)", - progressLabel: "Padding", + target: "Zielverhältnis", + color: "Hintergrundfarbe", + colorHint: "HEX-Farbe, z. B. #000000", + submit: "Auffüllen", + submitBatch: "Auffüllen ({count} Dateien)", + progressLabel: "Wird aufgefüllt", }, "blur-pad": { - target: "Target ratio", - blur: "Blur strength", - submit: "Pad", - submitBatch: "Pad ({count} files)", - progressLabel: "Padding", + target: "Zielverhältnis", + blur: "Unschärfestärke", + submit: "Auffüllen", + submitBatch: "Auffüllen ({count} Dateien)", + progressLabel: "Wird aufgefüllt", }, "watermark-video": { - text: "Watermark text", + text: "Wasserzeichentext", position: "Position", - fontSize: "Font size", - opacity: "Opacity", - color: "Color", - colorHint: "Hex color, e.g. #ffffff", - submit: "Watermark", - submitBatch: "Watermark ({count} files)", - progressLabel: "Watermarking", + fontSize: "Schriftgröße", + opacity: "Deckkraft", + color: "Farbe", + colorHint: "HEX-Farbe, z. B. #ffffff", + submit: "Wasserzeichen", + submitBatch: "Wasserzeichen ({count} Dateien)", + progressLabel: "Wasserzeichen wird hinzugefügt", }, "stabilize-video": { - smoothing: "Smoothing", - hint: "Runs two passes and takes longer than most tools", - submit: "Stabilize", - submitBatch: "Stabilize ({count} files)", - progressLabel: "Stabilizing", + smoothing: "Glättung", + hint: "Benötigt zwei Durchläufe und dauert länger als die meisten Werkzeuge", + submit: "Stabilisieren", + submitBatch: "Stabilisieren ({count} Dateien)", + progressLabel: "Wird stabilisiert", }, "gif-to-video": { - format: "Output format", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "Ausgabeformat", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "video-to-webp": { - fps: "Frames per second", - width: "Width (px)", - quality: "Quality", - loop: "Loop animation", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + fps: "Bilder pro Sekunde", + width: "Breite (px)", + quality: "Qualität", + loop: "Animation wiederholen", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "video-to-frames": { - mode: "Extraction mode", - modeAll: "All frames", - modeNth: "Every Nth frame", - modeTimestamps: "Specific timestamps", - n: "Take every Nth frame", - timestamps: "Timestamps (seconds)", - timestampsHint: "Comma-separated, e.g. 0.5, 2, 4.5", - format: "Image format", - submit: "Extract Frames", - submitBatch: "Extract Frames ({count} files)", - progressLabel: "Extracting frames", + mode: "Extraktionsmodus", + modeAll: "Alle Einzelbilder", + modeNth: "Jedes N-te Einzelbild", + modeTimestamps: "Bestimmte Zeitstempel", + n: "Jedes N-te Einzelbild extrahieren", + timestamps: "Zeitstempel (Sekunden)", + timestampsHint: "Kommagetrennt, z. B. 0.5, 2, 4.5", + format: "Bildformat", + submit: "Einzelbilder extrahieren", + submitBatch: "Einzelbilder extrahieren ({count} Dateien)", + progressLabel: "Einzelbilder werden extrahiert", }, "merge-videos": { - hint: "Files are joined in upload order", - submit: "Merge", - submitBatch: "Merge ({count} files)", - progressLabel: "Merging", + hint: "Dateien werden in der Reihenfolge des Uploads zusammengefügt", + submit: "Zusammenfügen", + submitBatch: "Zusammenfügen ({count} Dateien)", + progressLabel: "Wird zusammengefügt", }, "replace-audio": { - hint: "Upload the video first, then the audio", - submit: "Replace Audio", - submitBatch: "Replace Audio ({count} files)", - progressLabel: "Replacing audio", + hint: "Zuerst das Video, dann die Audiodatei hochladen", + submit: "Audio ersetzen", + submitBatch: "Audio ersetzen ({count} Dateien)", + progressLabel: "Audio wird ersetzt", }, "burn-subtitles": { - fontSize: "Font size", - hint: "Upload a video and a subtitle file (.srt or .vtt)", - submit: "Burn Subtitles", - submitBatch: "Burn Subtitles ({count} files)", - progressLabel: "Burning subtitles", + fontSize: "Schriftgröße", + hint: "Ein Video und eine Untertiteldatei (.srt oder .vtt) hochladen", + submit: "Untertitel einbrennen", + submitBatch: "Untertitel einbrennen ({count} Dateien)", + progressLabel: "Untertitel werden eingebrannt", }, "embed-subtitles": { - language: "Language code", - languageHint: "Three-letter ISO 639-2 code, e.g. eng, spa, fra", - submit: "Embed Subtitles", - submitBatch: "Embed Subtitles ({count} files)", - progressLabel: "Embedding subtitles", + language: "Sprachcode", + languageHint: "Dreistelliger ISO-639-2-Code, z. B. eng, spa, fra", + submit: "Untertitel einbetten", + submitBatch: "Untertitel einbetten ({count} Dateien)", + progressLabel: "Untertitel werden eingebettet", }, "extract-subtitles": { - submit: "Extract Subtitles", - submitBatch: "Extract Subtitles ({count} files)", - progressLabel: "Extracting subtitles", + submit: "Untertitel extrahieren", + submitBatch: "Untertitel extrahieren ({count} Dateien)", + progressLabel: "Untertitel werden extrahiert", }, "images-to-video": { - secondsPerImage: "Seconds per image", - resolution: "Resolution", - fps: "Frames per second", - submit: "Create Video", - submitBatch: "Create Video ({count} files)", - progressLabel: "Creating slideshow", + secondsPerImage: "Sekunden pro Bild", + resolution: "Auflösung", + fps: "Bilder pro Sekunde", + submit: "Video erstellen", + submitBatch: "Video erstellen ({count} Dateien)", + progressLabel: "Diashow wird erstellt", }, "video-metadata": { - hint: "Metadata report appears in the result", - submit: "Strip Metadata", - submitBatch: "Strip Metadata ({count} files)", - progressLabel: "Stripping metadata", + hint: "Metadatenbericht erscheint im Ergebnis", + submit: "Metadaten entfernen", + submitBatch: "Metadaten entfernen ({count} Dateien)", + progressLabel: "Metadaten werden entfernt", }, "convert-audio": { - format: "Output format", + format: "Ausgabeformat", bitrate: "Bitrate (kbps)", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "trim-audio": { - start: "Start (seconds)", - end: "End (seconds)", - submit: "Trim", - submitBatch: "Trim ({count} files)", - progressLabel: "Trimming", + start: "Start (Sekunden)", + end: "Ende (Sekunden)", + submit: "Kürzen", + submitBatch: "Kürzen ({count} Dateien)", + progressLabel: "Wird gekürzt", }, "extract-audio": { - format: "Output format", - submit: "Extract", - submitBatch: "Extract ({count} files)", - progressLabel: "Extracting", + format: "Ausgabeformat", + submit: "Extrahieren", + submitBatch: "Extrahieren ({count} Dateien)", + progressLabel: "Wird extrahiert", }, "volume-adjust": { - "gain-db": "Gain (dB)", - submit: "Adjust Volume", - submitBatch: "Adjust Volume ({count} files)", - progressLabel: "Adjusting volume", + "gain-db": "Verstärkung (dB)", + submit: "Lautstärke anpassen", + submitBatch: "Lautstärke anpassen ({count} Dateien)", + progressLabel: "Lautstärke wird angepasst", }, "normalize-audio": { - hint: "EBU R128 loudness normalization", - submit: "Normalize", - submitBatch: "Normalize ({count} files)", - progressLabel: "Normalizing", + hint: "EBU R128 Lautheitsnormalisierung", + submit: "Normalisieren", + submitBatch: "Normalisieren ({count} Dateien)", + progressLabel: "Wird normalisiert", }, "fade-audio": { - "fade-in-s": "Fade in (seconds)", - "fade-out-s": "Fade out (seconds)", - submit: "Apply Fade", - submitBatch: "Apply Fade ({count} files)", - progressLabel: "Applying fade", + "fade-in-s": "Einblenden (Sekunden)", + "fade-out-s": "Ausblenden (Sekunden)", + submit: "Blende anwenden", + submitBatch: "Blende anwenden ({count} Dateien)", + progressLabel: "Blende wird angewendet", }, "reverse-audio": { - submit: "Reverse", - submitBatch: "Reverse ({count} files)", - progressLabel: "Reversing", + submit: "Umkehren", + submitBatch: "Umkehren ({count} Dateien)", + progressLabel: "Wird umgekehrt", }, "audio-speed": { - factor: "Speed factor", - submit: "Change Speed", - submitBatch: "Change Speed ({count} files)", - progressLabel: "Changing speed", + factor: "Geschwindigkeitsfaktor", + submit: "Geschwindigkeit ändern", + submitBatch: "Geschwindigkeit ändern ({count} Dateien)", + progressLabel: "Geschwindigkeit wird geändert", }, "pitch-shift": { - semitones: "Semitones", - hint: "0 semitones is not allowed", - submit: "Shift Pitch", - submitBatch: "Shift Pitch ({count} files)", - progressLabel: "Shifting pitch", + semitones: "Halbtöne", + hint: "0 Halbtöne ist nicht erlaubt", + submit: "Tonhöhe verschieben", + submitBatch: "Tonhöhe verschieben ({count} Dateien)", + progressLabel: "Tonhöhe wird verschoben", }, "audio-channels": { - mode: "Channel mode", - "stereo-to-mono": "Stereo to mono", - "mono-to-stereo": "Mono to stereo", - swap: "Swap left/right", - submit: "Convert Channels", - submitBatch: "Convert Channels ({count} files)", - progressLabel: "Converting channels", + mode: "Kanalmodus", + "stereo-to-mono": "Stereo zu Mono", + "mono-to-stereo": "Mono zu Stereo", + swap: "Links/Rechts tauschen", + submit: "Kanäle konvertieren", + submitBatch: "Kanäle konvertieren ({count} Dateien)", + progressLabel: "Kanäle werden konvertiert", }, "silence-removal": { - "threshold-db": "Silence threshold (dB)", - "min-silence-s": "Minimum silence duration (seconds)", - submit: "Remove Silence", - submitBatch: "Remove Silence ({count} files)", - progressLabel: "Removing silence", + "threshold-db": "Stilleschwelle (dB)", + "min-silence-s": "Minimale Stilledauer (Sekunden)", + submit: "Stille entfernen", + submitBatch: "Stille entfernen ({count} Dateien)", + progressLabel: "Stille wird entfernt", }, "noise-reduction": { - strength: "Strength", - light: "Light", - medium: "Medium", - strong: "Strong", - submit: "Reduce Noise", - submitBatch: "Reduce Noise ({count} files)", - progressLabel: "Reducing noise", + strength: "Stärke", + light: "Leicht", + medium: "Mittel", + strong: "Stark", + submit: "Rauschen reduzieren", + submitBatch: "Rauschen reduzieren ({count} Dateien)", + progressLabel: "Rauschen wird reduziert", }, "merge-audio": { - format: "Output format", + format: "Ausgabeformat", mp3: "MP3", wav: "WAV", flac: "FLAC", m4a: "M4A", - "order-hint": "Files will be joined in upload order", - submit: "Merge Audio", - submitBatch: "Merge Audio ({count} files)", - progressLabel: "Merging audio", + "order-hint": "Dateien werden in Upload-Reihenfolge verbunden", + submit: "Audio zusammenführen", + submitBatch: "Audio zusammenführen ({count} Dateien)", + progressLabel: "Audio wird zusammengeführt", }, "split-audio": { - mode: "Split mode", - time: "By time", - parts: "Equal parts", - silence: "By silence", - "segment-s": "Segment length (seconds)", - "num-parts": "Number of parts", - "threshold-db": "Silence threshold (dB)", - "min-silence-s": "Minimum silence duration (seconds)", - submit: "Split Audio", - submitBatch: "Split Audio ({count} files)", - progressLabel: "Splitting audio", + mode: "Teilungsmodus", + time: "Nach Zeit", + parts: "Gleiche Teile", + silence: "Nach Stille", + "segment-s": "Segmentlänge (Sekunden)", + "num-parts": "Anzahl der Teile", + "threshold-db": "Stilleschwelle (dB)", + "min-silence-s": "Minimale Stilledauer (Sekunden)", + submit: "Audio aufteilen", + submitBatch: "Audio aufteilen ({count} Dateien)", + progressLabel: "Audio wird aufgeteilt", }, "ringtone-maker": { - "start-s": "Start time (seconds)", - "duration-s": "Duration (seconds)", - "max-hint": "Maximum 30 seconds", - submit: "Create Ringtone", - submitBatch: "Create Ringtone ({count} files)", - progressLabel: "Creating ringtone", + "start-s": "Startzeit (Sekunden)", + "duration-s": "Dauer (Sekunden)", + "max-hint": "Maximal 30 Sekunden", + submit: "Klingelton erstellen", + submitBatch: "Klingelton erstellen ({count} Dateien)", + progressLabel: "Klingelton wird erstellt", }, "waveform-image": { - width: "Width (px)", - height: "Height (px)", - color: "Waveform color", - submit: "Generate Waveform", - submitBatch: "Generate Waveform ({count} files)", - progressLabel: "Generating waveform", + width: "Breite (px)", + height: "Höhe (px)", + color: "Wellenformfarbe", + submit: "Wellenform erzeugen", + submitBatch: "Wellenform erzeugen ({count} Dateien)", + progressLabel: "Wellenform wird erzeugt", }, "audio-metadata": { - strip: "Strip all metadata", - title: "Title", - artist: "Artist", + strip: "Alle Metadaten entfernen", + title: "Titel", + artist: "Künstler", album: "Album", - submit: "Apply Metadata", - submitBatch: "Apply Metadata ({count} files)", - progressLabel: "Applying metadata", + submit: "Metadaten anwenden", + submitBatch: "Metadaten anwenden ({count} Dateien)", + progressLabel: "Metadaten werden angewendet", }, "merge-pdf": { - addFiles: "Add PDFs to merge", - needTwo: "At least two PDFs are required", - orderHint: "{count} PDFs will merge in this order", - submit: "Merge", - submitBatch: "Merge ({count} files)", - progressLabel: "Merging", + addFiles: "PDFs zum Zusammenführen hinzufügen", + needTwo: "Mindestens zwei PDFs erforderlich", + orderHint: "{count} PDFs werden in dieser Reihenfolge zusammengeführt", + submit: "Zusammenführen", + submitBatch: "Zusammenführen ({count} Dateien)", + progressLabel: "Wird zusammengeführt", }, "split-pdf": { - mode: "Split mode", - range: "Page range", - rangeHint: "e.g. 1-3, 5, 7-z", - everyN: "Pages per part", - submit: "Split", - submitBatch: "Split ({count} files)", - progressLabel: "Splitting", + mode: "Teilungsmodus", + range: "Seitenbereich", + rangeHint: "z. B. 1-3, 5, 7-z", + everyN: "Seiten pro Teil", + submit: "Aufteilen", + submitBatch: "Aufteilen ({count} Dateien)", + progressLabel: "Wird aufgeteilt", }, "compress-pdf": { - preset: "Quality preset", - screen: "Screen (smallest)", - ebook: "Ebook (balanced)", - printer: "Printer (best quality)", - submit: "Compress", - submitBatch: "Compress ({count} files)", - progressLabel: "Compressing", + preset: "Qualitätsstufe", + screen: "Bildschirm (kleinste)", + ebook: "E-Book (ausgewogen)", + printer: "Drucker (beste Qualität)", + submit: "Komprimieren", + submitBatch: "Komprimieren ({count} Dateien)", + progressLabel: "Wird komprimiert", }, "rotate-pdf": { - angle: "Rotation angle", - range: "Page range", - rangeHint: "e.g. 1-3, 5, 1-z (all pages)", - submit: "Rotate", - submitBatch: "Rotate ({count} files)", - progressLabel: "Rotating", + angle: "Drehwinkel", + range: "Seitenbereich", + rangeHint: "z. B. 1-3, 5, 1-z (alle Seiten)", + submit: "Drehen", + submitBatch: "Drehen ({count} Dateien)", + progressLabel: "Wird gedreht", }, "convert-document": { - format: "Output format", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "Ausgabeformat", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "convert-presentation": { - format: "Output format", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "Ausgabeformat", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "convert-spreadsheet": { - format: "Output format", - hint: "Multi-sheet workbooks export the first sheet to CSV.", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "Ausgabeformat", + hint: "Arbeitsmappen mit mehreren Blättern exportieren nur das erste Blatt als CSV.", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "excel-to-pdf": { - submit: "Convert to PDF", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "In PDF konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "powerpoint-to-pdf": { - submit: "Convert to PDF", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "In PDF konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "word-to-pdf": { - submit: "Convert to PDF", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "In PDF konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "extract-pages": { - range: "Page range", - rangeHint: "e.g. 1-3, 5, 7-z", - submit: "Extract", - submitBatch: "Extract ({count} files)", - progressLabel: "Extracting", + range: "Seitenbereich", + rangeHint: "z. B. 1-3, 5, 7-z", + submit: "Extrahieren", + submitBatch: "Extrahieren ({count} Dateien)", + progressLabel: "Wird extrahiert", }, "remove-pages": { - pages: "Pages to remove", - pagesHint: "e.g. 2, 4-6, z (last page)", - submit: "Remove", - submitBatch: "Remove ({count} files)", - progressLabel: "Removing", + pages: "Zu entfernende Seiten", + pagesHint: "z. B. 2, 4-6, z (letzte Seite)", + submit: "Entfernen", + submitBatch: "Entfernen ({count} Dateien)", + progressLabel: "Wird entfernt", }, "organize-pdf": { - order: "Page order", - orderHint: "e.g. 3,1,2 or 1-z (identity)", - submit: "Reorder", - submitBatch: "Reorder ({count} files)", - progressLabel: "Reordering", + order: "Seitenreihenfolge", + orderHint: "z. B. 3,1,2 oder 1-z (unverändert)", + submit: "Neu anordnen", + submitBatch: "Neu anordnen ({count} Dateien)", + progressLabel: "Wird neu angeordnet", }, "protect-pdf": { - userPassword: "User password", - ownerPassword: "Owner password (optional)", - ownerPasswordHint: "Defaults to user password if empty", - submit: "Protect", - submitBatch: "Protect ({count} files)", - progressLabel: "Encrypting", + userPassword: "Benutzerkennwort", + ownerPassword: "Besitzerkennwort (optional)", + ownerPasswordHint: "Standardmäßig das Benutzerkennwort, wenn leer", + submit: "Schützen", + submitBatch: "Schützen ({count} Dateien)", + progressLabel: "Wird verschlüsselt", }, "unlock-pdf": { password: "Password", - submit: "Unlock", - submitBatch: "Unlock ({count} files)", - progressLabel: "Decrypting", + submit: "Entsperren", + submitBatch: "Entsperren ({count} Dateien)", + progressLabel: "Wird entschlüsselt", }, "repair-pdf": { - submit: "Repair", - submitBatch: "Repair ({count} files)", - progressLabel: "Repairing", + submit: "Reparieren", + submitBatch: "Reparieren ({count} Dateien)", + progressLabel: "Wird repariert", }, "linearize-pdf": { - submit: "Optimize", - submitBatch: "Optimize ({count} files)", - progressLabel: "Linearizing", + submit: "Optimieren", + submitBatch: "Optimieren ({count} Dateien)", + progressLabel: "Wird linearisiert", }, "grayscale-pdf": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "pdfa-convert": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "crop-pdf": { - margin: "Margin (points)", - submit: "Crop", - submitBatch: "Crop ({count} files)", - progressLabel: "Cropping", + margin: "Rand (Punkte)", + submit: "Zuschneiden", + submitBatch: "Zuschneiden ({count} Dateien)", + progressLabel: "Wird zugeschnitten", }, "nup-pdf": { - perSheet: "Pages per sheet", - submit: "Arrange", - submitBatch: "Arrange ({count} files)", - progressLabel: "Arranging", + perSheet: "Seiten pro Blatt", + submit: "Anordnen", + submitBatch: "Anordnen ({count} Dateien)", + progressLabel: "Wird angeordnet", }, "booklet-pdf": { - perSheet: "Pages per sheet", - submit: "Create Booklet", - submitBatch: "Create Booklet ({count} files)", - progressLabel: "Creating booklet", + perSheet: "Seiten pro Blatt", + submit: "Broschüre erstellen", + submitBatch: "Broschüre erstellen ({count} Dateien)", + progressLabel: "Broschüre wird erstellt", }, "watermark-pdf": { - text: "Watermark text", + text: "Wasserzeichentext", position: "Position", - fontSize: "Font size", - opacity: "Opacity", - rotation: "Rotation", - submit: "Watermark", - submitBatch: "Watermark ({count} files)", - progressLabel: "Watermarking", + fontSize: "Schriftgröße", + opacity: "Deckkraft", + rotation: "Drehung", + submit: "Wasserzeichen", + submitBatch: "Wasserzeichen ({count} Dateien)", + progressLabel: "Wasserzeichen wird hinzugefügt", }, "pdf-page-numbers": { position: "Position", - fontSize: "Font size", - submit: "Add Numbers", - submitBatch: "Add Numbers ({count} files)", - progressLabel: "Numbering", + fontSize: "Schriftgröße", + submit: "Nummerierung hinzufügen", + submitBatch: "Nummerierung hinzufügen ({count} Dateien)", + progressLabel: "Wird nummeriert", }, "flatten-pdf": { - submit: "Flatten", - submitBatch: "Flatten ({count} files)", - progressLabel: "Flattening", + submit: "Reduzieren", + submitBatch: "Reduzieren ({count} Dateien)", + progressLabel: "Wird reduziert", }, "redact-pdf": { - terms: "Terms to redact", - termsHint: "One term per line (max 50)", - caseSensitive: "Case sensitive", - submit: "Redact", - submitBatch: "Redact ({count} files)", - progressLabel: "Redacting", + terms: "Zu schwärzende Begriffe", + termsHint: "Ein Begriff pro Zeile (max. 50)", + caseSensitive: "Groß-/Kleinschreibung beachten", + submit: "Schwärzen", + submitBatch: "Schwärzen ({count} Dateien)", + progressLabel: "Wird geschwärzt", }, "pdf-to-text": { - submit: "Extract Text", - submitBatch: "Extract Text ({count} files)", - progressLabel: "Extracting", + submit: "Text extrahieren", + submitBatch: "Text extrahieren ({count} Dateien)", + progressLabel: "Wird extrahiert", }, "pdf-to-word": { - hint: "Best for text-based PDFs; scanned pages need OCR", - submit: "Convert to Word", - submitBatch: "Convert to Word ({count} files)", - progressLabel: "Converting", + hint: "Optimal für textbasierte PDFs; gescannte Seiten benötigen OCR", + submit: "In Word konvertieren", + submitBatch: "In Word konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "pdf-metadata": { - title: "Title", - author: "Author", - subject: "Subject", - keywords: "Keywords", - submit: "Set Metadata", - submitBatch: "Set Metadata ({count} files)", - progressLabel: "Setting metadata", + title: "Titel", + author: "Autor", + subject: "Betreff", + keywords: "Schlüsselwörter", + submit: "Metadaten setzen", + submitBatch: "Metadaten setzen ({count} Dateien)", + progressLabel: "Metadaten werden gesetzt", }, "html-to-pdf": { - hint: "Remote resources are disabled for privacy.", - submit: "Convert to PDF", - submitBatch: "Convert to PDF ({count} files)", - progressLabel: "Converting", + hint: "Externe Ressourcen sind aus Datenschutzgründen deaktiviert.", + submit: "In PDF konvertieren", + submitBatch: "In PDF konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "markdown-to-docx": { - submit: "Convert to DOCX", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "In DOCX konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "markdown-to-html": { - hint: "Remote images in the source are left as-is in the output.", - submit: "Convert to HTML", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + hint: "Externe Bilder in der Quelle bleiben in der Ausgabe unverändert.", + submit: "In HTML konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "markdown-to-pdf": { - hint: "Remote resources are disabled for privacy.", - submit: "Convert to PDF", - submitBatch: "Convert to PDF ({count} files)", - progressLabel: "Converting", + hint: "Externe Ressourcen sind aus Datenschutzgründen deaktiviert.", + submit: "In PDF konvertieren", + submitBatch: "In PDF konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "epub-convert": { - format: "Output format", - hint: "Remote resources inside the book are not fetched.", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "Ausgabeformat", + hint: "Externe Ressourcen im Buch werden nicht abgerufen.", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "to-epub": { - submit: "Convert to EPUB", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "In EPUB konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "csv-excel": { - sheet: "Worksheet number", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + sheet: "Arbeitsblattnummer", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "csv-json": { - pretty: "Pretty print", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + pretty: "Formatierte Ausgabe", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "json-xml": { - pretty: "Pretty print", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + pretty: "Formatierte Ausgabe", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "split-csv": { - rowsPerFile: "Rows per file", - keepHeader: "Keep header in each file", - submit: "Split", - submitBatch: "Split ({count} files)", - progressLabel: "Splitting", + rowsPerFile: "Zeilen pro Datei", + keepHeader: "Kopfzeile in jeder Datei beibehalten", + submit: "Aufteilen", + submitBatch: "Aufteilen ({count} Dateien)", + progressLabel: "Wird aufgeteilt", }, "merge-csvs": { - submit: "Merge", - submitBatch: "Merge ({count} files)", - progressLabel: "Merging", + submit: "Zusammenführen", + submitBatch: "Zusammenführen ({count} Dateien)", + progressLabel: "Wird zusammengeführt", }, "yaml-json": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "xml-to-csv": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "Konvertieren", + submitBatch: "Konvertieren ({count} Dateien)", + progressLabel: "Wird konvertiert", }, "create-zip": { - submit: "Create ZIP", - submitBatch: "Create ZIP ({count} files)", - progressLabel: "Zipping", + submit: "ZIP erstellen", + submitBatch: "ZIP erstellen ({count} Dateien)", + progressLabel: "Wird komprimiert", }, "extract-zip": { - submit: "Extract", - submitBatch: "Extract ({count} files)", - progressLabel: "Extracting", + submit: "Entpacken", + submitBatch: "Entpacken ({count} Dateien)", + progressLabel: "Wird entpackt", }, }, urlImport: { title: "Von URLs importieren", - placeholder: "Bild-URLs einfuegen, eine pro Zeile...", + placeholder: "Bild-URLs einfügen, eine pro Zeile...", importButton: "URLs importieren", - addButton: "{count} Dateien hinzufuegen", - adding: "Wird hinzugefuegt...", + addButton: "{count} Dateien hinzufügen", + adding: "Wird hinzugefügt...", retryButton: "Erneut versuchen", cancelButton: "Abbrechen", readyCount: "{count} bereit", @@ -2438,75 +2441,76 @@ export const de: TranslationKeys = { toolPage: { emptyPrompt: "Bild hierher ziehen oder hochladen", filesCount: "Dateien ({count})", - addMore: "+ Weitere hinzufuegen", + addMore: "+ Weitere hinzufügen", clearAll: "Alle entfernen", acceptDescription: "Nur {exts}-Dateien", notFound: "Werkzeug nicht gefunden", configureAndGenerate: "Einstellungen konfigurieren und generieren.", - processingFailed: "Verarbeitung fuer diese Datei fehlgeschlagen", + processingFailed: "Verarbeitung für diese Datei fehlgeschlagen", conversionComplete: "Konvertierung abgeschlossen", cannotPreviewDownload: - "{type}-Dateien koennen im Browser nicht angezeigt werden. Verwenden Sie die Download-Schaltflaeche, um Ihre Datei zu speichern.", + "{type}-Dateien können im Browser nicht angezeigt werden. Verwenden Sie die Download-Schaltfläche, um Ihre Datei zu speichern.", generatingPreview: "Vorschau wird generiert...", cannotPreviewWillProcess: - "{ext}-Dateien koennen im Browser nicht angezeigt werden. Das Werkzeug verarbeitet diese Datei trotzdem.", + "{ext}-Dateien können im Browser nicht angezeigt werden. Das Werkzeug verarbeitet diese Datei trotzdem.", previousImage: "Vorherige Datei", - nextImage: "Naechste Datei", + nextImage: "Nächste Datei", imageCounter: "{current} / {total}", settingsLabel: "Einstellungen", downloadAllZip: "Alle herunterladen (ZIP)", hideSettings: "Einstellungen ausblenden", imageArea: "Vorschaubereich", - disabledByAdmin: "This tool has been disabled by your administrator", - browseOtherTools: "Browse other tools", - privacyNote: "Files are processed on your server and never leave your network", + disabledByAdmin: "Dieses Werkzeug wurde von Ihrem Administrator deaktiviert", + browseOtherTools: "Andere Werkzeuge durchsuchen", + privacyNote: "Dateien werden auf Ihrem Server verarbeitet und verlassen nie Ihr Netzwerk", applyAndDownload: "Anwenden & Herunterladen", - andMore: "and {count} more", - importFromFiles: "Import from Files", - saveToFiles: "Save to Files", - savedToFiles: "Saved to Files", - adjustSettings: "Adjust settings", - startOver: "Start over with a new file", - newFile: "New file", - previewUnavailable: "Preview will be available after processing", - generatePreview: "Generate Preview", - previewFailed: "Preview generation failed", - backToTools: "Back to Tools", + andMore: "und {count} weitere", + importFromFiles: "Aus Dateien importieren", + saveToFiles: "In Dateien speichern", + savedToFiles: "In Dateien gespeichert", + adjustSettings: "Einstellungen anpassen", + startOver: "Mit einer neuen Datei neu beginnen", + newFile: "Neue Datei", + previewUnavailable: "Vorschau ist nach der Verarbeitung verfügbar", + generatePreview: "Vorschau erzeugen", + previewFailed: "Vorschauerzeugung fehlgeschlagen", + backToTools: "Zurück zu Werkzeugen", original: "Original", - processed: "Processed", - saved: "Saved", - noChange: "no change", - download: "Download", + processed: "Verarbeitet", + saved: "Gespeichert", + noChange: "keine Änderung", + download: "Herunterladen", settingsSaved: "Ihre Einstellungen wurden gespeichert.", tryAgain: "Erneut versuchen", tryDifferentFile: "Andere Datei versuchen", - batchPartialSuccess: "{success} of {total} processed. {failed} failed.", - dataResultsHint: "Results shown above. Use the copy button in the results panel.", - downloadAsFile: "Download as file", - downloadAll: "Download All", - downloadFiles: "Download {count} files", - audioDecodeUnsupported: "This audio format cannot be previewed in the browser", + batchPartialSuccess: "{success} von {total} verarbeitet. {failed} fehlgeschlagen.", + dataResultsHint: + "Ergebnisse oben angezeigt. Verwenden Sie die Kopierschaltfläche im Ergebnisbereich.", + downloadAsFile: "Als Datei herunterladen", + downloadAll: "Alle herunterladen", + downloadFiles: "{count} Dateien herunterladen", + audioDecodeUnsupported: "Dieses Audioformat kann im Browser nicht wiedergegeben werden", }, homePage: { generatingPreview: "Vorschau wird generiert...", loadingPreview: "Vorschau wird geladen...", - changeFile: "Datei aendern", + changeFile: "Datei ändern", quickActions: "Schnellaktionen", allTools: "Alle Werkzeuge", - searchPlaceholder: "Search {count} tools...", - recent: "Recent", - popular: "Popular", - browseByCategory: "Browse by Category", - gettingStarted: "Getting Started", - noToolsMatch: "No tools match '{query}'", - clearSearch: "Clear search", - all: "All", + searchPlaceholder: "{count} Werkzeuge durchsuchen...", + recent: "Zuletzt verwendet", + popular: "Beliebt", + browseByCategory: "Nach Kategorie durchsuchen", + gettingStarted: "Erste Schritte", + noToolsMatch: "Keine Werkzeuge für '{query}' gefunden", + clearSearch: "Suche zurücksetzen", + all: "Alle", documents: "PDF", - data: "Files", + data: "Dateien", pdf: "PDF", - files: "Files", - toolCount: "{count} tools", - heading: "SnapOtter Tools", + files: "Dateien", + toolCount: "{count} Werkzeuge", + heading: "SnapOtter Werkzeuge", }, fullscreenGrid: { searchPlaceholder: "Werkzeuge suchen...", @@ -2522,22 +2526,22 @@ export const de: TranslationKeys = { file: { label: "Datei", new: "Neu", - open: "Oeffnen", + open: "Öffnen", save: "Speichern", exportAs: "Exportieren als...", quickExportPng: "Schnellexport als PNG", - close: "Schliessen", + close: "Schließen", }, edit: { label: "Bearbeiten", - undo: "Rueckgaengig", + undo: "Rückgängig", redo: "Wiederholen", cut: "Ausschneiden", copy: "Kopieren", - copyMerged: "Zusammengefuegt kopieren", - paste: "Einfuegen", - pasteInPlace: "An gleicher Stelle einfuegen", - delete: "Loeschen", + copyMerged: "Zusammengefügt kopieren", + paste: "Einfügen", + pasteInPlace: "An gleicher Stelle einfügen", + delete: "Löschen", freeTransform: "Frei transformieren", transform: { label: "Transformieren", @@ -2550,8 +2554,8 @@ export const de: TranslationKeys = { }, image: { label: "Bild", - imageSize: "Bildgroesse...", - canvasSize: "Leinwandgroesse...", + imageSize: "Bildgröße...", + canvasSize: "Leinwandgröße...", rotation: { label: "Bilddrehung", cw90: "90° im Uhrzeigersinn", @@ -2564,7 +2568,7 @@ export const de: TranslationKeys = { adjustments: { label: "Anpassungen", brightnessContrast: "Helligkeit/Kontrast", - hueSaturation: "Farbton/Saettigung", + hueSaturation: "Farbton/Sättigung", colorBalance: "Farbbalance", levels: "Tonwerte", curves: "Gradationskurven", @@ -2574,7 +2578,7 @@ export const de: TranslationKeys = { label: "Ebene", newLayer: "Neue Ebene", duplicateLayer: "Ebene duplizieren", - deleteLayer: "Ebene loeschen", + deleteLayer: "Ebene löschen", arrange: { label: "Anordnen", bringToFront: "In den Vordergrund", @@ -2582,7 +2586,7 @@ export const de: TranslationKeys = { sendBackward: "Eine Ebene nach hinten", sendToBack: "In den Hintergrund", }, - mergeDown: "Nach unten zusammenfuegen", + mergeDown: "Nach unten zusammenfügen", flattenImage: "Bild reduzieren", }, select: { @@ -2597,18 +2601,18 @@ export const de: TranslationKeys = { blur: { label: "Weichzeichnen", gaussian: "Gauss'scher Weichzeichner", - motion: "Bewegungsunschaerfe", + motion: "Bewegungsunschärfe", radial: "Radialer Weichzeichner", - surface: "Oberflaechenweichzeichner", + surface: "Oberflächenweichzeichner", }, sharpen: { - label: "Schaerfen", - sharpen: "Schaerfen", + label: "Schärfen", + sharpen: "Schärfen", unsharpMask: "Unscharf maskieren", }, noise: { label: "Rauschen", - addNoise: "Rauschen hinzufuegen", + addNoise: "Rauschen hinzufügen", reduceNoise: "Rauschen reduzieren", }, pixelate: { @@ -2628,10 +2632,10 @@ export const de: TranslationKeys = { }, view: { label: "Ansicht", - zoomIn: "Vergroessern", + zoomIn: "Vergrößern", zoomOut: "Verkleinern", fitOnScreen: "An Bildschirm anpassen", - actualPixels: "Tatsaechliche Pixel", + actualPixels: "Tatsächliche Pixel", rulers: "Lineale", grid: "Raster", guides: "Hilfslinien", @@ -2640,44 +2644,44 @@ export const de: TranslationKeys = { }, }, menuBar: { - backTitle: "Zurueck zu SnapOtter", + backTitle: "Zurück zu SnapOtter", }, welcome: { ariaLabel: "Bild-Ablagezone", heading: "Bild-Editor", dropDescription: "Ziehen Sie ein Bild hierher, um zu beginnen", - openImageButton: "Bild oeffnen", + openImageButton: "Bild öffnen", newDocumentButton: "Neues Dokument", - pasteHint: "Oder aus der Zwischenablage einfuegen (Strg+V)", + pasteHint: "Oder aus der Zwischenablage einfügen (Strg+V)", }, mobile: { heading: "Desktop empfohlen", description: - "Der Bild-Editor funktioniert am besten auf Desktopbildschirmen. Bitte wechseln Sie fuer das volle Bearbeitungserlebnis zu einem Geraet mit groesserem Display.", + "Der Bild-Editor funktioniert am besten auf Desktopbildschirmen. Bitte wechseln Sie für das volle Bearbeitungserlebnis zu einem Gerät mit größerem Display.", }, errors: { serverDecodeFailed: "Server-Dekodierung fehlgeschlagen", }, shapes: { - shape: "Shape", - fill: "Fill", - stroke: "Stroke", - strokeWidth: "Width", + shape: "Form", + fill: "Füllung", + stroke: "Kontur", + strokeWidth: "Breite", cornerRadius: "Radius", - sides: "Sides", - points: "Points", - dashStyle: "Dash", - solid: "Solid", - dashed: "Dashed", - dotted: "Dotted", - none: "None", - opacity: "Opacity", - rectangle: "Rectangle", + sides: "Seiten", + points: "Punkte", + dashStyle: "Strichart", + solid: "Durchgezogen", + dashed: "Gestrichelt", + dotted: "Gepunktet", + none: "Keine", + opacity: "Deckkraft", + rectangle: "Rechteck", ellipse: "Ellipse", - line: "Line", - arrow: "Arrow", + line: "Linie", + arrow: "Pfeil", polygon: "Polygon", - star: "Star", + star: "Stern", }, }, settings: { @@ -2690,8 +2694,8 @@ export const de: TranslationKeys = { teams: "Teams", roles: "Rollen", auditLog: "Audit-Protokoll", - usage: "Usage", - apiKeys: "API-Schluessel", + usage: "Nutzung", + apiKeys: "API-Schlüssel", aiFeatures: "AI-Funktionen", tools: "Werkzeuge", productAnalytics: "Produktanalytik", @@ -2716,14 +2720,14 @@ export const de: TranslationKeys = { heading: "Systemeinstellungen", description: "Serverseitige Konfiguration und Limits.", fileUploadLimitLabel: "Dateiupload-Limit (MB)", - fileUploadLimitDescription: "Maximale Dateigroesse pro Upload", + fileUploadLimitDescription: "Maximale Dateigröße pro Upload", defaultThemeLabel: "Standard-Farbschema", - defaultThemeDescription: "Farbschema fuer neue Sitzungen", + defaultThemeDescription: "Farbschema für neue Sitzungen", lightOption: "Hell", darkOption: "Dunkel", systemOption: "System", languageLabel: "Sprache", - languageDescription: "Sprache der Benutzeroberflaeche", + languageDescription: "Sprache der Benutzeroberfläche", loginAttemptLimitLabel: "Anmeldeversuchslimit", loginAttemptLimitDescription: "Maximale fehlgeschlagene Anmeldeversuche pro Minute vor Sperrung", @@ -2732,14 +2736,14 @@ export const de: TranslationKeys = { maxFileAgeDescription: "Wie lange verarbeitete Dateien vor automatischer Bereinigung aufbewahrt werden", startupCleanupLabel: "Bereinigung beim Start", - startupCleanupDescription: "Alte temporaere Dateien beim Serverstart bereinigen", + startupCleanupDescription: "Alte temporäre Dateien beim Serverstart bereinigen", saveButton: "Einstellungen speichern", saveSuccess: "Einstellungen gespeichert.", saveFailed: "Einstellungen konnten nicht gespeichert werden.", limitsAndResources: "Limits & Ressourcen", - maxFileSize: "Maximale Dateigroesse", - maxBatchSize: "Maximale Stapelgroesse", - concurrentJobs: "Gleichzeitige Auftraege", + maxFileSize: "Maximale Dateigröße", + maxBatchSize: "Maximale Stapelgröße", + concurrentJobs: "Gleichzeitige Aufträge", workerThreads: "Arbeitsthreads", maxPipelineSteps: "Maximale Pipeline-Schritte", processingTimeout: "Verarbeitungs-Timeout", @@ -2748,57 +2752,57 @@ export const de: TranslationKeys = { auto: "Automatisch", envOverride: "Durch Umgebungsvariable gesetzt", maxCanvasPixels: "Maximale Leinwandpixel", - maxSvgSize: "Maximale SVG-Groesse", + maxSvgSize: "Maximale SVG-Größe", maxSplitGrid: "Maximales Aufteilungsraster", maxPdfPages: "Maximale PDF-Seiten", sessionDuration: "Sitzungsdauer", - supportBundleButton: "Download Support Bundle", + supportBundleButton: "Support-Paket herunterladen", supportBundleDescription: - "Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.", - supportBundleFailed: "Failed to download support bundle.", + "Diagnosearchiv mit bereinigter Konfiguration, Protokollen und Auftragsdaten zur Fehlerbehebung herunterladen.", + supportBundleFailed: "Support-Paket konnte nicht heruntergeladen werden.", }, security: { heading: "Sicherheit", description: "Passwort- und Authentifizierungseinstellungen.", - changePasswordHeading: "Passwort aendern", + changePasswordHeading: "Passwort ändern", currentPasswordPlaceholder: "Aktuelles Passwort", newPasswordPlaceholder: "Neues Passwort", - confirmPasswordPlaceholder: "Neues Passwort bestaetigen", - passwordsMismatch: "Passwoerter stimmen nicht ueberein", + confirmPasswordPlaceholder: "Neues Passwort bestätigen", + passwordsMismatch: "Passwörter stimmen nicht überein", passwordTooShort: "Passwort muss mindestens 4 Zeichen lang sein", - changeSuccess: "Passwort erfolgreich geaendert", - changeFailed: "Passwort konnte nicht geaendert werden", + changeSuccess: "Passwort erfolgreich geändert", + changeFailed: "Passwort konnte nicht geändert werden", currentPasswordIncorrect: "Aktuelles Passwort ist falsch", - changePasswordButton: "Passwort aendern", + changePasswordButton: "Passwort ändern", loginAttemptLimitNote: - "Anmeldeversuchslimits koennen in den Systemeinstellungen konfiguriert werden.", - adminHeading: "Admin Security Settings", - adminDescription: "Enterprise security policy settings. These apply to all users.", - sessionIdleTimeout: "Session Idle Timeout (minutes)", - sessionIdleTimeoutDesc: "Automatically log out idle sessions. 0 = disabled.", - maxSessionsPerUser: "Max Sessions Per User", - maxSessionsPerUserDesc: "Limit concurrent sessions per user. 0 = unlimited.", - mfaPolicy: "MFA Policy", - mfaPolicyDesc: "Require multi-factor authentication for users.", + "Anmeldeversuchslimits können in den Systemeinstellungen konfiguriert werden.", + adminHeading: "Admin-Sicherheitseinstellungen", + adminDescription: "Enterprise-Sicherheitsrichtlinien. Diese gelten für alle Benutzer.", + sessionIdleTimeout: "Sitzungszeitlimit bei Inaktivität (Minuten)", + sessionIdleTimeoutDesc: "Inaktive Sitzungen automatisch abmelden. 0 = deaktiviert.", + maxSessionsPerUser: "Max. Sitzungen pro Benutzer", + maxSessionsPerUserDesc: "Gleichzeitige Sitzungen pro Benutzer begrenzen. 0 = unbegrenzt.", + mfaPolicy: "MFA-Richtlinie", + mfaPolicyDesc: "Multi-Faktor-Authentifizierung für Benutzer vorschreiben.", mfaPolicyOptional: "Optional", - mfaPolicyAdminsOnly: "Required for admins", - mfaPolicyRequired: "Required for all users", - ssoEnforcement: "SSO Enforcement", - ssoEnforcementDesc: "Require SSO login for all non-break-glass users.", - ssoBreakGlassUsername: "Break Glass Admin Username", + mfaPolicyAdminsOnly: "Erforderlich für Admins", + mfaPolicyRequired: "Erforderlich für alle Benutzer", + ssoEnforcement: "SSO-Erzwingung", + ssoEnforcementDesc: "SSO-Anmeldung für alle Benutzer ohne Notfallzugang vorschreiben.", + ssoBreakGlassUsername: "Notfallzugang-Admin-Benutzername", ssoBreakGlassUsernameDesc: - "This admin can still log in with local credentials when SSO is enforced.", - passwordMinLength: "Minimum Password Length", - passwordMinLengthDesc: "Minimum number of characters required for passwords.", - passwordRequireUppercase: "Require Uppercase", - passwordRequireUppercaseDesc: "Require at least one uppercase letter.", - passwordRequireNumber: "Require Number", - passwordRequireNumberDesc: "Require at least one number.", - passwordRequireSpecial: "Require Special Character", - passwordRequireSpecialDesc: "Require at least one special character.", - passwordPolicyHeading: "Password Policy", - securitySettingsSaved: "Security settings saved", - securitySettingsFailed: "Failed to save security settings", + "Dieser Admin kann sich bei erzwungenem SSO weiterhin mit lokalen Zugangsdaten anmelden.", + passwordMinLength: "Mindestlänge Passwort", + passwordMinLengthDesc: "Mindestanzahl der Zeichen für Passwörter.", + passwordRequireUppercase: "Großbuchstabe erforderlich", + passwordRequireUppercaseDesc: "Mindestens ein Großbuchstabe erforderlich.", + passwordRequireNumber: "Zahl erforderlich", + passwordRequireNumberDesc: "Mindestens eine Zahl erforderlich.", + passwordRequireSpecial: "Sonderzeichen erforderlich", + passwordRequireSpecialDesc: "Mindestens ein Sonderzeichen erforderlich.", + passwordPolicyHeading: "Passwortrichtlinie", + securitySettingsSaved: "Sicherheitseinstellungen gespeichert", + securitySettingsFailed: "Sicherheitseinstellungen konnten nicht gespeichert werden", }, people: { heading: "Personen", @@ -2806,7 +2810,7 @@ export const de: TranslationKeys = { userCount: "{count} Benutzer", userCountPlural: "{count} Benutzer", searchPlaceholder: "Mitglieder suchen...", - addMembersButton: "Mitglieder hinzufuegen", + addMembersButton: "Mitglieder hinzufügen", newMemberHeading: "Neues Mitglied", usernamePlaceholder: "Benutzername", passwordPlaceholder: "Passwort", @@ -2823,20 +2827,20 @@ export const de: TranslationKeys = { createSuccess: "Benutzer erfolgreich erstellt", createFailed: "Benutzer konnte nicht erstellt werden", userLimitReached: "Benutzerlimit erreicht (maximal {max})", - deleteConfirm: 'Benutzer "{username}" loeschen? Dies kann nicht rueckgaengig gemacht werden.', - deleteSuccess: 'Benutzer "{username}" geloescht', - deleteFailed: "Benutzer konnte nicht geloescht werden", + deleteConfirm: 'Benutzer "{username}" löschen? Dies kann nicht rückgängig gemacht werden.', + deleteSuccess: 'Benutzer "{username}" gelöscht', + deleteFailed: "Benutzer konnte nicht gelöscht werden", editHeading: "{username} bearbeiten", updateSuccess: "Benutzer aktualisiert", updateFailed: "Benutzer konnte nicht aktualisiert werden", - cannotRemoveOwnAdmin: "Sie koennen Ihre eigene Administratorrolle nicht entfernen", - resetPasswordHeading: "Passwort zuruecksetzen fuer {username}", + cannotRemoveOwnAdmin: "Sie können Ihre eigene Administratorrolle nicht entfernen", + resetPasswordHeading: "Passwort zurücksetzen für {username}", newPasswordLabel: "Neues Passwort (mind. 8 Zeichen)", - resetPasswordButton: "Passwort zuruecksetzen", + resetPasswordButton: "Passwort zurücksetzen", resetPasswordWarning: - "Dadurch werden alle Sitzungen und API-Schluessel dieses Benutzers ungueltig.", - resetSuccess: "Passwort erfolgreich zurueckgesetzt", - resetFailed: "Passwort konnte nicht zurueckgesetzt werden", + "Dadurch werden alle Sitzungen und API-Schlüssel dieses Benutzers ungültig.", + resetSuccess: "Passwort erfolgreich zurückgesetzt", + resetFailed: "Passwort konnte nicht zurückgesetzt werden", tableHeaderUser: "Benutzer", tableHeaderRole: "Rolle", tableHeaderTeam: "Team", @@ -2845,8 +2849,8 @@ export const de: TranslationKeys = { authBadgeLocalOidc: "Lokal + OIDC", authBadgeOidc: "OIDC", editRoleTeamAction: "Rolle / Team bearbeiten", - resetPasswordAction: "Passwort zuruecksetzen", - deleteUserAction: "Benutzer loeschen", + resetPasswordAction: "Passwort zurücksetzen", + deleteUserAction: "Benutzer löschen", saveButton: "Speichern", copyPasswordButton: "Passwort kopieren", passwordCopied: "Kopiert!", @@ -2855,7 +2859,7 @@ export const de: TranslationKeys = { }, teams: { heading: "Teams", - description: "Mitglieder in Teams organisieren fuer bessere Verwaltung.", + description: "Mitglieder in Teams organisieren für bessere Verwaltung.", createButton: "Neues Team erstellen", newTeamHeading: "Neues Team", teamNamePlaceholder: "Teamname", @@ -2866,33 +2870,34 @@ export const de: TranslationKeys = { duplicateTeamError: "Ein Team mit diesem Namen existiert bereits", renameSuccess: "Team umbenannt", renameFailed: "Team konnte nicht umbenannt werden", - deleteConfirm: 'Team "{name}" loeschen? Mitglieder werden abgemeldet.', - deleteSuccess: 'Team "{name}" geloescht', - deleteFailed: "Team konnte nicht geloescht werden", + deleteConfirm: 'Team "{name}" löschen? Mitglieder werden abgemeldet.', + deleteSuccess: 'Team "{name}" gelöscht', + deleteFailed: "Team konnte nicht gelöscht werden", cannotDeleteDefault: - "Das Standardteam oder ein Team mit Mitgliedern kann nicht geloescht werden", + "Das Standardteam oder ein Team mit Mitgliedern kann nicht gelöscht werden", tableHeaderTeamName: "Teamname", tableHeaderMembers: "Mitglieder", emptyState: "Keine Teams gefunden.", renameSaveButton: "Speichern", renameCancelButton: "Abbrechen", renameAction: "Umbenennen", - deleteAction: "Loeschen", + deleteAction: "Löschen", totalMembers: "Mitglieder gesamt", nameRequired: "Teamname ist erforderlich", nameTooLong: "Teamname darf maximal 50 Zeichen lang sein", duplicateName: "Ein Team mit diesem Namen existiert bereits", - teamStorageQuota: "Storage Quota (MB)", - teamStorageQuotaDesc: "Maximum storage for this team in MB. Leave empty for no limit.", - teamRetentionHours: "Retention (hours)", + teamStorageQuota: "Speicherkontingent (MB)", + teamStorageQuotaDesc: + "Maximaler Speicherplatz für dieses Team in MB. Leer lassen für unbegrenzt.", + teamRetentionHours: "Aufbewahrung (Stunden)", teamRetentionHoursDesc: - "Processing file retention for this team. Leave empty to use global default.", - quotaSaved: "Team settings saved", + "Aufbewahrungsdauer für Verarbeitungsdateien dieses Teams. Leer lassen für globalen Standard.", + quotaSaved: "Team-Einstellungen gespeichert", }, roles: { heading: "Rollen", description: - "Rollen und deren Berechtigungen verwalten. Integrierte Rollen koennen nicht geaendert werden.", + "Rollen und deren Berechtigungen verwalten. Integrierte Rollen können nicht geändert werden.", createButton: "Benutzerdefinierte Rolle erstellen", newRoleHeading: "Neue Rolle", roleNamePlaceholder: "Rollenname", @@ -2908,19 +2913,19 @@ export const de: TranslationKeys = { editCancelButton: "Abbrechen", updateSuccess: "Rolle aktualisiert", updateFailed: "Rolle konnte nicht aktualisiert werden", - deleteConfirm: 'Rolle "{name}" loeschen? {count} Benutzer muessen neu zugewiesen werden.', - deleteConfirmSimple: 'Rolle "{name}" loeschen?', - deleteSuccess: 'Rolle "{name}" geloescht', - deleteFailed: "Rolle konnte nicht geloescht werden", + deleteConfirm: 'Rolle "{name}" löschen? {count} Benutzer müssen neu zugewiesen werden.', + deleteConfirmSimple: 'Rolle "{name}" löschen?', + deleteSuccess: 'Rolle "{name}" gelöscht', + deleteFailed: "Rolle konnte nicht gelöscht werden", emptyState: "Keine Rollen gefunden.", builtInBadge: "Integriert", userCountBadge: "{count} Benutzer", editRoleTitle: "Rolle bearbeiten", - deleteRoleTitle: "Rolle loeschen", + deleteRoleTitle: "Rolle löschen", permGroup: { tools: "Werkzeuge", files: "Dateien", - apiKeys: "API-Schluessel", + apiKeys: "API-Schlüssel", pipelines: "Pipelines", settings: "Einstellungen", users: "Benutzer", @@ -2931,13 +2936,13 @@ export const de: TranslationKeys = { auditLog: { heading: "Audit-Protokoll", allActionsFilter: "Alle Aktionen", - emptyState: "Keine Audit-Protokolleintraege.", + emptyState: "Keine Audit-Protokolleinträge.", tableHeaderTime: "Zeit", tableHeaderUser: "Benutzer", tableHeaderAction: "Aktion", tableHeaderTarget: "Ziel", - paginationInfo: "Seite {page} von {totalPages} ({total} Eintraege)", - previousButton: "Zurueck", + paginationInfo: "Seite {page} von {totalPages} ({total} Einträge)", + previousButton: "Zurück", nextButton: "Weiter", justNow: "Gerade eben", minutesAgo: "Vor {mins} Min.", @@ -2945,61 +2950,61 @@ export const de: TranslationKeys = { daysAgo: "Vor {days} Tagen", }, usage: { - heading: "Usage", - description: "Local usage statistics from jobs and file storage.", - periodLabel: "Period", - days7: "7 days", - days30: "30 days", - days90: "90 days", - jobsPerDayHeading: "Jobs per day", - topToolsHeading: "Top tools", - perUserHeading: "Per-user volume", - durationsHeading: "Duration percentiles", - noData: "No data for this period.", - dayColumn: "Day", - totalColumn: "Total", - completedColumn: "Completed", - failedColumn: "Failed", - toolColumn: "Tool", - runsColumn: "Runs", - userColumn: "User", - bytesInColumn: "Bytes in", + heading: "Nutzung", + description: "Lokale Nutzungsstatistiken zu Aufträgen und Dateispeicher.", + periodLabel: "Zeitraum", + days7: "7 Tage", + days30: "30 Tage", + days90: "90 Tage", + jobsPerDayHeading: "Aufträge pro Tag", + topToolsHeading: "Meistgenutzte Werkzeuge", + perUserHeading: "Volumen pro Benutzer", + durationsHeading: "Dauer-Perzentile", + noData: "Keine Daten für diesen Zeitraum.", + dayColumn: "Tag", + totalColumn: "Gesamt", + completedColumn: "Abgeschlossen", + failedColumn: "Fehlgeschlagen", + toolColumn: "Werkzeug", + runsColumn: "Ausführungen", + userColumn: "Benutzer", + bytesInColumn: "Bytes ein", poolColumn: "Pool", p50Column: "p50", p95Column: "p95", - storageHeading: "Library storage", - storageFiles: "{count} files", - unknownUser: "(unknown)", - storageByTeam: "Storage by Team", + storageHeading: "Bibliotheksspeicher", + storageFiles: "{count} Dateien", + unknownUser: "(unbekannt)", + storageByTeam: "Speicher nach Team", teamColumn: "Team", - storageColumn: "Storage", - usersColumn: "Users", + storageColumn: "Speicher", + usersColumn: "Benutzer", }, apiKeys: { - heading: "API-Schluessel", - description: "API-Schluessel fuer programmatischen Zugriff auf SnapOtter verwalten.", - keyNamePlaceholder: "Schluesselname (optional)", - generateButton: "API-Schluessel generieren", - removeScopingLabel: "Berechtigungsbeschraenkung entfernen", - restrictPermissionsLabel: "Berechtigungen einschraenken (optional)", - expiresLabel: "Laeuft ab:", + heading: "API-Schlüssel", + description: "API-Schlüssel für programmatischen Zugriff auf SnapOtter verwalten.", + keyNamePlaceholder: "Schlüsselname (optional)", + generateButton: "API-Schlüssel generieren", + removeScopingLabel: "Berechtigungsbeschränkung entfernen", + restrictPermissionsLabel: "Berechtigungen einschränken (optional)", + expiresLabel: "Läuft ab:", clearButton: "Leeren", copyTitle: "Kopieren", - keyWarning: "Bewahren Sie diesen Schluessel sicher auf. Er wird nicht erneut angezeigt.", - existingKeysHeading: "Vorhandene Schluessel", + keyWarning: "Bewahren Sie diesen Schlüssel sicher auf. Er wird nicht erneut angezeigt.", + existingKeysHeading: "Vorhandene Schlüssel", createdPrefix: "Erstellt {date}", - scopedPrefix: "Beschraenkt:", - expiresPrefix: "Laeuft ab {date}", - deleteKeyTitle: "Schluessel loeschen", + scopedPrefix: "Beschränkt:", + expiresPrefix: "Läuft ab {date}", + deleteKeyTitle: "Schlüssel löschen", deleteConfirm: - "Diesen API-Schluessel loeschen? Alle Integrationen, die ihn nutzen, werden nicht mehr funktionieren.", - emptyState: "Noch keine API-Schluessel. Generieren Sie einen, um zu beginnen.", + "Diesen API-Schlüssel löschen? Alle Integrationen, die ihn nutzen, werden nicht mehr funktionieren.", + emptyState: "Noch keine API-Schlüssel. Generieren Sie einen, um zu beginnen.", }, tools: { heading: "Werkzeuge", description: - "Einzelne Werkzeuge aktivieren oder deaktivieren. Deaktivierte Werkzeuge sind fuer alle Benutzer ausgeblendet.", - restartBanner: "Neustart erforderlich, damit Aenderungen wirksam werden.", + "Einzelne Werkzeuge aktivieren oder deaktivieren. Deaktivierte Werkzeuge sind für alle Benutzer ausgeblendet.", + restartBanner: "Neustart erforderlich, damit Änderungen wirksam werden.", searchPlaceholder: "Werkzeuge suchen...", noSearchResults: "Keine Werkzeuge entsprechen Ihrer Suche.", loadFailedError: @@ -3010,7 +3015,7 @@ export const de: TranslationKeys = { experimental: { label: "Experimentelle Werkzeuge aktivieren", description: - "Werkzeuge anzeigen, die sich noch in der Entwicklung befinden. Diese koennen instabil sein.", + "Werkzeuge anzeigen, die sich noch in der Entwicklung befinden. Diese können instabil sein.", }, fileManagement: { title: "Dateiverwaltung", @@ -3018,17 +3023,19 @@ export const de: TranslationKeys = { maxAgeDescription: "Wie lange verarbeitete Dateien vor automatischer Bereinigung aufbewahrt werden", startupCleanup: "Bereinigung beim Start", - startupCleanupDescription: "Alte temporaere Dateien beim Serverstart bereinigen", + startupCleanupDescription: "Alte temporäre Dateien beim Serverstart bereinigen", }, dataRetention: { - title: "Data Retention", - fileMaxAgeHours: "Processing file retention (hours)", - fileMaxAgeHoursDesc: "How long to keep uploaded and processed files. Default: 72 hours.", - jobsRetentionDays: "Job record retention (days)", - jobsRetentionDaysDesc: "How long to keep job metadata. 0 = keep forever. Default: 30 days.", - auditRetentionDays: "Audit log retention (days)", + title: "Datenaufbewahrung", + fileMaxAgeHours: "Aufbewahrung von Verarbeitungsdateien (Stunden)", + fileMaxAgeHoursDesc: + "Wie lange hochgeladene und verarbeitete Dateien aufbewahrt werden. Standard: 72 Stunden.", + jobsRetentionDays: "Aufbewahrung von Auftragsdaten (Tage)", + jobsRetentionDaysDesc: + "Wie lange Auftragsmetadaten aufbewahrt werden. 0 = unbegrenzt. Standard: 30 Tage.", + auditRetentionDays: "Aufbewahrung von Audit-Protokollen (Tage)", auditRetentionDaysDesc: - "How long to keep audit log entries. 0 = keep forever. Default: forever.", + "Wie lange Audit-Protokolleinträge aufbewahrt werden. 0 = unbegrenzt. Standard: unbegrenzt.", }, analytics: { heading: "Produktanalytik", @@ -3040,37 +3047,38 @@ export const de: TranslationKeys = { learnMore: "Mehr erfahren", }, aiFeatures: { - title: "AI Features", - description: "AI-Modellpakete fuer erweiterte Dateiverarbeitung verwalten.", - installAll: "Install All", - diskUsage: "Disk usage:", - installed: "Installed", - notInstalled: "Not installed", - queued: "Queued", - install: "Install", - repair: "Repair", - uninstall: "Uninstall", - installing: "Installing...", - importBundle: "Import Bundle", - importDescription: "Upload a .tar.gz bundle archive exported from another installation.", - importButton: "Import from file", - importing: "Importing...", - importSuccess: "Bundle imported successfully.", - importError: "Bundle import failed: {error}", + title: "AI-Funktionen", + description: "AI-Modellpakete für erweiterte Dateiverarbeitung verwalten.", + installAll: "Alle installieren", + diskUsage: "Speicherplatznutzung: {size}", + installed: "Installiert", + notInstalled: "Nicht installiert", + queued: "In Warteschlange", + install: "Installieren", + repair: "Reparieren", + uninstall: "Deinstallieren", + installing: "Wird installiert...", + importBundle: "Paket importieren", + importDescription: + "Laden Sie ein .tar.gz-Paketarchiv hoch, das aus einer anderen Installation exportiert wurde.", + importButton: "Aus Datei importieren", + importing: "Wird importiert...", + importSuccess: "Paket erfolgreich importiert.", + importError: "Paketimport fehlgeschlagen: {error}", }, about: { heading: "Info", appName: "SnapOtter", appDescription: - "Eine selbst gehostete, datenschutzorientierte Dateiverarbeitungssuite mit 157 Werkzeugen. Konvertieren, komprimieren, bearbeiten, transkribieren, OCR und Bild-, Video-, Audio-, Dokument- und Datenablaeufe automatisieren, ohne Daten in die Cloud zu senden.", + "Eine selbst gehostete, datenschutzorientierte Dateiverarbeitungssuite mit 157 Werkzeugen. Konvertieren, komprimieren, bearbeiten, transkribieren, OCR und Bild-, Video-, Audio-, Dokument- und Datenabläufe automatisieren, ohne Daten in die Cloud zu senden.", versionLabel: "Version:", linksHeading: "Links", githubLink: "GitHub-Repository", docsLink: "Dokumentation", apiRefLink: "API-Referenz (Swagger)", - licenseLabel: "License:", + licenseLabel: "Lizenz:", licenseDescription: - "SnapOtter is open-source software licensed under the GNU Affero General Public License v3 (AGPLv3).", + "SnapOtter ist Open-Source-Software, lizenziert unter der GNU Affero General Public License v3 (AGPLv3).", }, }, auth: { @@ -3079,8 +3087,8 @@ export const de: TranslationKeys = { username: "Benutzername", password: "Passwort", loginButton: "Anmelden", - loggingIn: "Anmeldung laeuft...", - invalidCredentials: "Ungueltiger Benutzername oder Passwort", + loggingIn: "Anmeldung läuft...", + invalidCredentials: "Ungültiger Benutzername oder Passwort", connectionError: "Verbindungsfehler", signInWith: "Anmelden mit {provider}", signInWithSso: "Anmelden mit SSO", @@ -3090,27 +3098,26 @@ export const de: TranslationKeys = { methodBoth: "Lokal + OIDC", oidcAuthFailed: "Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut.", oidcProviderUnreachable: - "Der Identitaetsanbieter ist nicht erreichbar. Bitte versuchen Sie es spaeter erneut.", + "Der Identitätsanbieter ist nicht erreichbar. Bitte versuchen Sie es später erneut.", oidcSessionExpired: "Anmeldesitzung abgelaufen. Bitte versuchen Sie es erneut.", oidcUserNotAuthorized: - "Ihr Konto ist nicht fuer den Zugriff auf diese Anwendung autorisiert. Kontaktieren Sie Ihren Administrator.", + "Ihr Konto ist nicht für den Zugriff auf diese Anwendung autorisiert. Kontaktieren Sie Ihren Administrator.", oidcUserLimitReached: "Benutzerlimit erreicht. Kontaktieren Sie Ihren Administrator.", oidcGenericError: "Authentifizierungsfehler. Bitte versuchen Sie es erneut.", - samlAuthFailed: "SAML authentication failed. Please try again.", + samlAuthFailed: "SAML-Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut.", samlUserNotAuthorized: - "Your account is not authorized to access this application. Contact your administrator.", - samlUserLimitReached: "User limit reached. Contact your administrator.", - ssoEnforcedLocalRestricted: "Local login is restricted to authorized administrators.", - mfaRequired: "Enter your authentication code", - mfaRecoveryHint: "You can also use a recovery code", - verify: "Verify", - verifying: "Verifying...", - mfaInvalidCode: "Invalid code. Please try again.", + "Ihr Konto ist nicht berechtigt, auf diese Anwendung zuzugreifen. Kontaktieren Sie Ihren Administrator.", + samlUserLimitReached: "Benutzerlimit erreicht. Kontaktieren Sie Ihren Administrator.", + ssoEnforcedLocalRestricted: "Lokale Anmeldung ist auf autorisierte Administratoren beschränkt.", + mfaRequired: "Geben Sie Ihren Authentifizierungscode ein", + mfaRecoveryHint: "Sie können auch einen Wiederherstellungscode verwenden", + verify: "Bestätigen", + verifying: "Wird überprüft...", + mfaInvalidCode: "Ungültiger Code. Bitte versuchen Sie es erneut.", mfaEnrollmentRequired: - "Your organization requires multi-factor authentication. Please set up MFA in your account settings.", + "Ihre Organisation erfordert Multi-Faktor-Authentifizierung. Bitte richten Sie MFA in Ihren Kontoeinstellungen ein.", methodSaml: "SAML", - passwordManagedByProvider: - "Passwortaenderungen werden von Ihrem Identitaetsanbieter verwaltet.", + passwordManagedByProvider: "Passwortänderungen werden von Ihrem Identitätsanbieter verwaltet.", enterUsername: "Benutzernamen eingeben", enterPassword: "Passwort eingeben", heroTitle: "Ihre Dateien. Bleiben Ihre.", @@ -3119,14 +3126,14 @@ export const de: TranslationKeys = { "Keine Registrierung. Keine Konten.", "Kein Upload in die Cloud. Niemals.", "100% lokale Verarbeitung.", - "Kostenlos. Fuer immer.", + "Kostenlos. Für immer.", "Keine Limits. Keine versteckten Grenzen.", "Funktioniert komplett offline.", "Unbegrenzte Stapelverarbeitung.", "157 Werkzeuge.", "16 AI-Modelle. Ihre Hardware.", "Blitzschnell. Basiert auf Sharp.", - "Geeignet fuer abgeschottete Netzwerke.", + "Geeignet für abgeschottete Netzwerke.", "Ein einziger Docker-Container.", "Open Source. Immer.", "Jedes Pixel bleibt auf Ihrer Hardware.", @@ -3138,35 +3145,35 @@ export const de: TranslationKeys = { "Massendateiverarbeitung. Unbegrenzt.", "Hintergrund offline entfernen.", "Die selbst gehostete Canva-Alternative.", - "Keine API-Schluessel noetig.", + "Keine API-Schlüssel nötig.", "DSGVO-konform von Grund auf.", "Funktioniert ohne Internet.", ], }, changePassword: { - title: "Passwort aendern", + title: "Passwort ändern", description: - "Sie muessen ein neues Passwort festlegen, bevor Sie fortfahren koennen. Ihr Passwort muss mindestens 8 Zeichen mit Gross- und Kleinbuchstaben sowie einer Zahl enthalten.", + "Sie müssen ein neues Passwort festlegen, bevor Sie fortfahren können. Ihr Passwort muss mindestens 8 Zeichen mit Groß- und Kleinbuchstaben sowie einer Zahl enthalten.", usernameLabel: "Benutzername", currentPasswordLabel: "Aktuelles Passwort", currentPasswordPlaceholder: "Aktuelles Passwort eingeben", newPasswordLabel: "Neues Passwort", generateButton: "Sicheres Passwort generieren", newPasswordPlaceholder: "Mindestens 8 Zeichen", - confirmPasswordLabel: "Neues Passwort bestaetigen", + confirmPasswordLabel: "Neues Passwort bestätigen", confirmPasswordPlaceholder: "Neues Passwort wiederholen", - passwordsMismatch: "Passwoerter stimmen nicht ueberein", - failedError: "Passwort konnte nicht geaendert werden", + passwordsMismatch: "Passwörter stimmen nicht überein", + failedError: "Passwort konnte nicht geändert werden", connectionError: "Verbindungsfehler", - changingButton: "Wird geaendert...", - changeButton: "Passwort aendern", + changingButton: "Wird geändert...", + changeButton: "Passwort ändern", sidebarTitle: "Fast geschafft", sidebarDescription: - "Legen Sie ein sicheres Passwort fest, um Ihr Konto zu schuetzen. Dann kann es losgehen.", + "Legen Sie ein sicheres Passwort fest, um Ihr Konto zu schützen. Dann kann es losgehen.", }, automate: { title: "Automatisieren", - invalidPipelineFile: "Keine gueltige SnapOtter-Pipeline-Datei", + invalidPipelineFile: "Keine gültige SnapOtter-Pipeline-Datei", newerVersion: "Diese Pipeline wurde mit einer neueren Version von SnapOtter erstellt", missingName: "Pipeline-Datei hat keinen Namen", noSteps: "Pipeline-Datei hat keine Schritte", @@ -3175,28 +3182,28 @@ export const de: TranslationKeys = { fileCount: "{count} Datei", fileCountPlural: "{count} Dateien", importFromLibrary: "Aus Bibliothek importieren", - addButton: "+ Hinzufuegen", + addButton: "+ Hinzufügen", libraryButton: "Bibliothek", clearButton: "Leeren", - processingFailed: "Verarbeitung fuer diese Datei fehlgeschlagen", + processingFailed: "Verarbeitung für diese Datei fehlgeschlagen", processingMultiple: "{count} Dateien werden verarbeitet...", processingPipeline: "Pipeline wird verarbeitet...", processButton: "Verarbeiten", processButtonMultiple: "Verarbeiten ({count})", processAllButton: "Alle verarbeiten ({count})", - addTool: "Werkzeug hinzufuegen", + addTool: "Werkzeug hinzufügen", toolPalette: "Werkzeugpalette", - clickToAdd: "Zum Hinzufuegen zur Pipeline klicken", + clickToAdd: "Zum Hinzufügen zur Pipeline klicken", savedLabel: "Gespeichert", importButton: "Importieren", noSavedPipelines: "Keine gespeicherten Pipelines", stepCount: "({count} Schritt)", stepCountPlural: "({count} Schritte)", exportPipeline: "Pipeline exportieren", - deletePipeline: "Pipeline loeschen", + deletePipeline: "Pipeline löschen", moreCount: "+{count} weitere", pipelineBuilder: "Pipeline-Builder", - addToolsPrompt: "Fuegen Sie Werkzeuge aus der Palette hinzu, um zu beginnen", + addToolsPrompt: "Fügen Sie Werkzeuge aus der Palette hinzu, um zu beginnen", stepsConfigured: "{count} Schritt konfiguriert", stepsConfiguredPlural: "{count} Schritte konfiguriert", noFilesLoaded: "Keine Dateien geladen", @@ -3208,7 +3215,7 @@ export const de: TranslationKeys = { cancelButton: "Abbrechen", preview: "Vorschau", previousImage: "Vorherige Datei", - nextImage: "Naechste Datei", + nextImage: "Nächste Datei", imageCounter: "{current} / {total}", imageArea: "Vorschaubereich", templateSocialMedia: "Social Media fertig", @@ -3219,7 +3226,7 @@ export const de: TranslationKeys = { createNew: "Neue Automatisierung erstellen", savedAutomations: "Gespeicherte Automatisierungen", templates: "Vorlagen", - addStep: "Schritt hinzufuegen", + addStep: "Schritt hinzufügen", removeStep: "Entfernen", moveUp: "Nach oben", moveDown: "Nach unten", @@ -3227,9 +3234,9 @@ export const de: TranslationKeys = { runPipeline: "Verarbeiten", pipelineName: "Pipeline-Name", pipelineDescription: "Beschreibung (optional)", - noStepsPrompt: "Fuegen Sie Schritte hinzu, um Ihre Automatisierung zu erstellen", - noStepsHeading: "No steps yet", - searchToolsPlaceholder: "Search tools...", + noStepsPrompt: "Fügen Sie Schritte hinzu, um Ihre Automatisierung zu erstellen", + noStepsHeading: "Noch keine Schritte", + searchToolsPlaceholder: "Werkzeuge suchen...", step: "Schritt", }, nav: { @@ -3243,72 +3250,73 @@ export const de: TranslationKeys = { grid: "Raster", }, files: { - myFiles: "My Files", - recentTab: "Recent", - uploadTab: "Upload Files", - fileDetailsAriaLabel: "File Details", - fileDetailsHeading: "File Details", - searchPlaceholder: "Search files...", - selectedCount: "{count} selected", - fileCount: "{count} files", - fileCountSingular: "{count} file", - noFilesFound: "No files found", - selectFilePrompt: "Select a file to view details", - openFile: "Open File", - selectFile: "Select File", - openInPipeline: "Open in Pipeline", - dropFilesHere: "Drop files here", - orClickToSelect: "or click to select files", + myFiles: "Meine Dateien", + recentTab: "Zuletzt", + uploadTab: "Dateien hochladen", + fileDetailsAriaLabel: "Dateidetails", + fileDetailsHeading: "Dateidetails", + searchPlaceholder: "Dateien suchen...", + selectedCount: "{count} ausgewählt", + fileCount: "{count} Dateien", + fileCountSingular: "{count} Datei", + noFilesFound: "Keine Dateien gefunden", + selectFilePrompt: "Datei auswählen, um Details anzuzeigen", + openFile: "Datei öffnen", + selectFile: "Datei auswählen", + openInPipeline: "In Pipeline öffnen", + dropFilesHere: "Dateien hier ablegen", + orClickToSelect: "oder klicken, um Dateien auszuwählen", name: "Name", format: "Format", - size: "Size", - dimensions: "Dimensions", + size: "Größe", + dimensions: "Abmessungen", version: "Version", - toolsUsed: "Tools Used", - none: "None", - delete: "Delete", + toolsUsed: "Verwendete Werkzeuge", + none: "Keine", + delete: "Löschen", pipeline: "Pipeline", - download: "Download", + download: "Herunterladen", }, dropzone: { - unsupportedFileType: "Dieser Dateityp wird von diesem Werkzeug nicht unterstuetzt", + unsupportedFileType: "Dieser Dateityp wird von diesem Werkzeug nicht unterstützt", urlFetchFailed: "Bild konnte nicht von URL abgerufen werden", ariaLabel: "Datei-Ablagezone", dropPrompt: "Bilder hierher ziehen", - browseOrPaste: "Klicken Sie zum Durchsuchen oder fuegen Sie aus der Zwischenablage ein", + browseOrPaste: "Klicken Sie zum Durchsuchen oder fügen Sie aus der Zwischenablage ein", uploadButton: "Hochladen", defaultFormats: "PNG, JPG, WebP, HEIC, RAW, PSD und 65+ Formate", orSeparator: "oder", - urlPlaceholder: "Bild-URL einfuegen...", + urlPlaceholder: "Bild-URL einfügen...", urlLoadingIndicator: "...", - addUrlButton: "Hinzufuegen", + addUrlButton: "Hinzufügen", importMultipleUrls: "Mehrere URLs importieren...", - filesSelected: "{count} Dateien ausgewaehlt", - dropToAdd: "Ablegen, um Dateien hinzuzufuegen", + filesSelected: "{count} Dateien ausgewählt", + dropToAdd: "Ablegen, um Dateien hinzuzufügen", dropToReplace: "Ablegen, um Datei zu ersetzen", }, reviewPanel: { processedResultAlt: "Verarbeitetes Ergebnis", - sizeLabel: "Groesse: {size}", + sizeLabel: "Größe: {size}", typeLabel: "Typ: {type}", processedLabel: "Verarbeitet: {time}", - undoButton: "Rueckgaengig", + undoButton: "Rückgängig", downloadButton: "Herunterladen", - openInEditor: "Im Editor oeffnen", - reviewHeading: "Ueberpruefen", + openInEditor: "Im Editor öffnen", + reviewHeading: "Überprüfen", continueEditing: "Weiter bearbeiten", }, features: { notEnabledTitle: "Funktion nicht aktiviert", notEnabledDescription: "Diese Funktion ist nicht aktiviert. Bitten Sie Ihren Administrator, sie in den Einstellungen zu aktivieren.", - requiresDownload: "Diese Funktion erfordert einen zusaetzlichen Download (~{size})", + requiresDownload: "Diese Funktion erfordert einen zusätzlichen Download (~{size})", retryButton: "Erneut versuchen", queued: "Zur Installation vorgemerkt...", enableButton: "{name} aktivieren", - repairRequired: "Repair Required", - repairDescription: "Some model files are missing or corrupted. Repair will re-download them.", - repairButton: "Repair {name}", + repairRequired: "Reparatur erforderlich", + repairDescription: + "Einige Modelldateien fehlen oder sind beschädigt. Die Reparatur lädt sie erneut herunter.", + repairButton: "{name} reparieren", lessThanMinute: "Weniger als eine Minute verbleibend", oneMinuteLeft: "~1 Minute verbleibend", minutesLeft: "~{mins} Minuten verbleibend", @@ -3317,30 +3325,30 @@ export const de: TranslationKeys = { "Gute Dinge brauchen ihre Zeit...", "Immer noch schneller als Farbe beim Trocknen zuzusehen...", "Ihre Geduld ist wirklich bewundernswert...", - "Arbeitet haerter als es aussieht...", + "Arbeitet härter als es aussieht...", "Jetzt kommt der spannende Teil, versprochen...", "Wichtige Dinge passieren im Hintergrund...", "Wenn Sie das hier lesen, funktioniert es...", - "Etwas Grossartiges wird vorbereitet...", + "Etwas Großartiges wird vorbereitet...", "Jede Sekunde wert, kleiner Finger drauf...", - "Die Spannung gehoert zum Erlebnis...", + "Die Spannung gehört zum Erlebnis...", "Ihrem Computer werden neue Tricks beigebracht...", - "Ihre Superkraefte werden eingerichtet...", - "Ihre Dateien werden es Ihnen spaeter danken...", + "Ihre Superkräfte werden eingerichtet...", + "Ihre Dateien werden es Ihnen später danken...", "Laden... aber mit Stil...", - "Perfekter Moment fuer einen Kaffee...", + "Perfekter Moment für einen Kaffee...", "Rom wurde auch nicht an einem Tag erbaut...", "Psst... hier arbeitet ein Genie...", "Ihre Projekte werden neidisch auf das, was kommt...", "Das Dreamteam wird zusammengestellt...", - "Grossartiges wird ausgepackt...", - "Fast fertig mit dem Nachdenken ueber den Anfang... kleiner Scherz...", - "Plottwist: Hier passiert tatsaechlich etwas...", + "Großartiges wird ausgepackt...", + "Fast fertig mit dem Nachdenken über den Anfang... kleiner Scherz...", + "Plottwist: Hier passiert tatsächlich etwas...", "Die kreativen Motoren werden warmgelaufen...", "Fantasie wird geladen...", "Kein Bildschirmschoner, versprochen...", - "Grosse Kunst braucht Zeit zum Installieren...", - "Ihr zukuenftiges Ich wird es Ihnen danken...", + "Große Kunst braucht Zeit zum Installieren...", + "Ihr zukünftiges Ich wird es Ihnen danken...", "Ziemlich schlaue Dateien werden geholt...", "Durchhalten, das Beste kommt noch...", ], @@ -3350,14 +3358,14 @@ export const de: TranslationKeys = { gettingStarted: { heading: "Erste Schritte", description: - "Waehlen Sie ein Werkzeug aus der Seitenleiste oder suchen Sie nach einem. Laden Sie eine Datei hoch, indem Sie sie auf die Seite ziehen oder den Upload-Bereich anklicken. Passen Sie die Einstellungen an und laden Sie Ihr Ergebnis herunter.", + "Wählen Sie ein Werkzeug aus der Seitenleiste oder suchen Sie nach einem. Laden Sie eine Datei hoch, indem Sie sie auf die Seite ziehen oder den Upload-Bereich anklicken. Passen Sie die Einstellungen an und laden Sie Ihr Ergebnis herunter.", }, keyboardShortcuts: { heading: "Tastenkombinationen", focusSearchBar: "Suchleiste fokussieren", goToTools: "Zu Werkzeugen", toggleTheme: "Farbschema wechseln", - goToResize: "Zu Groesse aendern", + goToResize: "Zu Größe ändern", goToCrop: "Zu Zuschneiden", goToCompress: "Zu Komprimieren", goToConvert: "Zu Konvertieren", @@ -3382,18 +3390,18 @@ export const de: TranslationKeys = { offline: "Sie sind offline", reconnecting: "Verbindung zum Server wird wiederhergestellt...", connected: "Verbunden", - processingFailed: "Verarbeitung fuer diese Datei fehlgeschlagen", + processingFailed: "Verarbeitung für diese Datei fehlgeschlagen", timeout: - "Zeitlimit ueberschritten. Der Server ist moeglicherweise ueberlastet. Versuchen Sie es erneut.", - networkError: "Netzwerkfehler. Ueberpruefen Sie Ihre Verbindung.", - invalidCredentials: "Ungueltiger Benutzername oder Passwort", + "Zeitlimit überschritten. Der Server ist möglicherweise überlastet. Versuchen Sie es erneut.", + networkError: "Netzwerkfehler. Überprüfen Sie Ihre Verbindung.", + invalidCredentials: "Ungültiger Benutzername oder Passwort", connectionError: "Verbindungsfehler", }, analytics: { consentTitle: "Helfen Sie, SnapOtter zu verbessern", consentDescription: "Anonyme Nutzungsstatistiken helfen uns, Fehler zu beheben und die Werkzeuge zu entwickeln, die Sie wirklich brauchen. Ihre Dateien bleiben auf Ihrem Netzwerk.", - consentChangeable: "Sie koennen dies jederzeit in den Einstellungen deaktivieren.", + consentChangeable: "Sie können dies jederzeit in den Einstellungen deaktivieren.", acceptButton: "Klar, einverstanden", declineButton: "Jetzt nicht", settingsTitle: "Produktanalytik", @@ -3412,7 +3420,7 @@ export const de: TranslationKeys = { settings: "Einstellungen", }, toolCard: { - addToFavourites: "Zu Favoriten hinzufuegen", + addToFavourites: "Zu Favoriten hinzufügen", }, appLayout: { mobileNavTools: "Werkzeuge", @@ -3422,65 +3430,65 @@ export const de: TranslationKeys = { mobileNavSettings: "Einstellungen", }, a11y: { - skipToContent: "Skip to main content", - openSidebar: "Open sidebar", - closeSidebar: "Close sidebar", - closeSettings: "Close settings", - closeHelp: "Close help", - closeDialog: "Close dialog", - zoomIn: "Zoom in", - zoomOut: "Zoom out", - fitToView: "Fit to view", - actualSize: "Actual size", + skipToContent: "Zum Hauptinhalt springen", + openSidebar: "Seitenleiste öffnen", + closeSidebar: "Seitenleiste schließen", + closeSettings: "Einstellungen schließen", + closeHelp: "Hilfe schließen", + closeDialog: "Dialog schließen", + zoomIn: "Vergrößern", + zoomOut: "Verkleinern", + fitToView: "Einpassen", + actualSize: "Originalgröße", previousImage: "Vorherige Datei", - nextImage: "Naechste Datei", + nextImage: "Nächste Datei", imageArea: "Vorschaubereich", imageViewer: "Dateibetrachter", - fileDropZone: "File drop zone", + fileDropZone: "Datei-Ablagezone", imageDropZone: "Datei-Ablagezone", - beforeAfterSlider: "Before/after comparison slider", + beforeAfterSlider: "Vorher/Nachher-Vergleichsregler", imageControls: "Vorschausteuerung", - zoomControls: "Zoom controls", - dragToReorder: "Drag to reorder", - whiteBackground: "White background", - blackBackground: "Black background", - expandPanel: "Expand panel", - collapsePanel: "Collapse panel", - swapDimensions: "Swap dimensions", - applyCrop: "Apply crop", - cancelCrop: "Cancel crop", - fontFamily: "Font family", - textColor: "Text color", - flipHorizontal: "Flip horizontal", - flipVertical: "Flip vertical", - hexColorValue: "Hex color value", - backgroundColor: "Background color", - foregroundColor: "Foreground color", - swapColors: "Swap foreground and background colors", - resetColors: "Reset to default black and white", - foregroundHex: "Foreground color hex value", - undo: "Undo", - redo: "Redo", - layers: "Layers", - addLayer: "Add layer", - deleteLayer: "Delete layer", - cancelOperation: "Cancel operation", - fill: "Fill", - fileDetails: "File details", - language: "Language", - selected: "Selected", - deleteKey: "Delete key", - editRole: "Edit role", - deleteRole: "Delete role", - notInstalled: "Not installed", - queued: "Queued for install", - installing: "Installing", - imageNOfTotal: "Image {n} of {total}", - processingComplete: "Image processed successfully", - processingFailed: "Processing failed", - settingsDialog: "Settings", - helpDialog: "Help", + zoomControls: "Zoom-Steuerung", + dragToReorder: "Ziehen zum Neuordnen", + whiteBackground: "Weißer Hintergrund", + blackBackground: "Schwarzer Hintergrund", + expandPanel: "Bereich erweitern", + collapsePanel: "Bereich einklappen", + swapDimensions: "Abmessungen tauschen", + applyCrop: "Zuschnitt anwenden", + cancelCrop: "Zuschnitt abbrechen", + fontFamily: "Schriftart", + textColor: "Textfarbe", + flipHorizontal: "Horizontal spiegeln", + flipVertical: "Vertikal spiegeln", + hexColorValue: "HEX-Farbwert", + backgroundColor: "Hintergrundfarbe", + foregroundColor: "Vordergrundfarbe", + swapColors: "Vorder- und Hintergrundfarbe tauschen", + resetColors: "Auf Standard Schwarz und Weiß zurücksetzen", + foregroundHex: "HEX-Wert der Vordergrundfarbe", + undo: "Rückgängig", + redo: "Wiederherstellen", + layers: "Ebenen", + addLayer: "Ebene hinzufügen", + deleteLayer: "Ebene löschen", + cancelOperation: "Vorgang abbrechen", + fill: "Füllen", + fileDetails: "Dateidetails", + language: "Sprache", + selected: "Ausgewählt", + deleteKey: "Schlüssel löschen", + editRole: "Rolle bearbeiten", + deleteRole: "Rolle löschen", + notInstalled: "Nicht installiert", + queued: "In Warteschlange zur Installation", + installing: "Wird installiert", + imageNOfTotal: "Bild {n} von {total}", + processingComplete: "Bild erfolgreich verarbeitet", + processingFailed: "Verarbeitung fehlgeschlagen", + settingsDialog: "Einstellungen", + helpDialog: "Hilfe", navigationMenu: "Navigation", - homeLink: "SnapOtter home", + homeLink: "SnapOtter Startseite", }, } as const;