{
  "extensionName": {
    "message": "Pedantic Picture Packer"
  },
  "extensionDescription": {
    "message": "State of the art Bildkompression mit JPEGli, PNGquant und oxipng."
  },
  "options_general": {
    "message": "Allgemein",
    "description": "options.html legend"
  },
  "sendMode_ask": {
    "message": "Vor dem Senden an unerledigte Punkte erinnern",
    "description": "Radio label for sendMode=ask"
  },
  "sendMode_auto": {
    "message": "Alle Aktionen ohne Rückfrage vor dem Versand ausführen",
    "description": "Radio label for sendMode=auto"
  },
  "sendMode_manual": {
    "message": "Ich erledige alles manuell über den Button im Nachrichtenfenster",
    "description": "Radio label for sendMode=manual"
  },
  "label_minFileSize": {
    "message": "Min. Dateigröße (KB):",
    "description": "options.html field label"
  },
  "label_minSavingsPercent": {
    "message": "Min. Einsparung (%):",
    "description": "options.html field label"
  },
  "label_replaceText": {
    "message": "Ersatztext für entfernte Bilder in Zitaten:",
    "description": "options.html field label"
  },
  "options_attachments": {
    "message": "Bilder im Anhang",
    "description": "options.html legend"
  },
  "options_inline": {
    "message": "Inline-Bilder",
    "description": "options.html legend"
  },
  "options_quotes": {
    "message": "Bilder in Zitaten",
    "description": "options.html legend"
  },
  "label_compressionProfile": {
    "message": "Kompressionsprofil:",
    "description": "options.html field label (appears 3x)"
  },
  "options_editProfile": {
    "message": "Kompressionsprofil bearbeiten",
    "description": "options.html legend"
  },
  "btn_delete": {
    "message": "Löschen",
    "description": "options.html button"
  },
  "label_preserveMeta": {
    "message": "Meta-Daten behalten (EXIF, ICC, XMP)",
    "description": "options.html checkbox"
  },
  "label_crossConvert": {
    "message": "Cross-Konvertierung erlauben (PNG ↔ JPG), wenn es Speicher spart",
    "description": "options.html checkbox"
  },
  "sublabel_antiAlias": {
    "message": "AntiAlias",
    "description": "options.html sub-label"
  },
  "label_antialiasing": {
    "message": "Antialiasing (Faktor 1.0–2.0):",
    "description": "options.html field label"
  },
  "label_scaleToDisplay": {
    "message": "Große Bilder auf Anzeigegröße herunterskalieren (gilt nicht für Bilder im Anhang)",
    "description": "options.html checkbox"
  },
  "sublabel_resize": {
    "message": "Resize",
    "description": "options.html sub-label"
  },
  "label_resizeAlgorithm": {
    "message": "Resize-Algorithmus:",
    "description": "options.html field label"
  },
  "sublabel_jpegli": {
    "message": "JPEGli",
    "description": "options.html sub-label"
  },
  "label_jpegQuality": {
    "message": "JPEG-Qualität:",
    "description": "options.html field label"
  },
  "label_chromaSubsampling": {
    "message": "Chroma-Subsampling:",
    "description": "options.html field label"
  },
  "sublabel_pngquant": {
    "message": "PNGquant",
    "description": "options.html sub-label"
  },
  "label_maxColors": {
    "message": "Max. Farben:",
    "description": "options.html field label"
  },
  "label_minQuality": {
    "message": "Min. Qualität:",
    "description": "options.html field label"
  },
  "label_maxQuality": {
    "message": "Max. Qualität:",
    "description": "options.html field label"
  },
  "label_dithering": {
    "message": "Dithering:",
    "description": "options.html field label"
  },
  "label_speed": {
    "message": "Speed (höher = schneller):",
    "description": "options.html field label"
  },
  "sublabel_oxipng": {
    "message": "OxiPNG",
    "description": "options.html sub-label"
  },
  "label_oxipngAlpha": {
    "message": "Alpha-Optimierung (visuell verlustfrei)",
    "description": "options.html checkbox"
  },
  "label_optimizationLevel": {
    "message": "Optimierungs-Level:",
    "description": "options.html field label"
  },
  "btn_saveAs": {
    "message": "Speichern unter:",
    "description": "options.html button"
  },
  "label_name": {
    "message": "Name:",
    "description": "options.html span"
  },
  "placeholder_templateName": {
    "message": "Profilname",
    "description": "options.html input placeholder"
  },
  "btn_exportProfiles": {
    "message": "Profile exportieren",
    "description": "options.html button"
  },
  "btn_importProfiles": {
    "message": "Profile importieren",
    "description": "options.html button"
  },
  "options_exclusions": {
    "message": "Dauerhafte Ausnahmen",
    "description": "options.html legend"
  },
  "label_excludedImages": {
    "message": "Ausgeschlossene Bilder:",
    "description": "options.html info text"
  },
  "btn_clearList": {
    "message": "Liste leeren",
    "description": "options.html button"
  },
  "text_saved": {
    "message": "Gespeichert",
    "description": "options.html saved indicator"
  },
  "btn_resetToDefault": {
    "message": "Auf Standard zurücksetzen",
    "description": "options.html button"
  },
  "appName": {
    "message": "Pedantic Picture Packer",
    "description": "popup.html header"
  },
  "btn_settings": {
    "message": "Einstellungen",
    "description": "popup.html settings link"
  },
  "popup_behavior": {
    "message": "Verhalten",
    "description": "popup.html legend"
  },
  "popup_profiles": {
    "message": "Profile",
    "description": "popup.html legend"
  },
  "cat_attachment": {
    "message": "Anhang",
    "description": "Category label: attachment"
  },
  "cat_inline": {
    "message": "Inline",
    "description": "Category label: inline"
  },
  "cat_quote": {
    "message": "Zitat",
    "description": "Category label: quote"
  },
  "popup_resample": {
    "message": "Resample",
    "description": "popup.html legend"
  },
  "text_noImagesFound": {
    "message": "Keine Bilder zum Komprimieren gefunden.",
    "description": "Empty state text"
  },
  "btn_applyAll": {
    "message": "Alle anwenden",
    "description": "popup.html button"
  },
  "text_processing": {
    "message": "Wird verarbeitet...",
    "description": "Loading overlay default text"
  },
  "confirmSend_title": {
    "message": "Bilderkompression",
    "description": "confirmSend.html header"
  },
  "btn_cancel": {
    "message": "Abbrechen",
    "description": "confirmSend.html button"
  },
  "btn_send": {
    "message": "Senden",
    "description": "confirmSend.html button"
  },
  "btn_applyAllAndSend": {
    "message": "Alle anwenden und senden",
    "description": "confirmSend.html button"
  },
  "loading_imagesLoading": {
    "message": "Bilder werden geladen...",
    "description": "Loading text in popup/confirmSend init"
  },
  "col_type": {
    "message": "Typ",
    "description": "Param table header"
  },
  "col_size": {
    "message": "Größe",
    "description": "Param table header"
  },
  "col_resolution": {
    "message": "Auflösung",
    "description": "Param table header"
  },
  "col_inlineResolution": {
    "message": "Inline-Auflösung",
    "description": "Param table header"
  },
  "col_savings": {
    "message": "Ersparnis",
    "description": "Param table header"
  },
  "summary_compressed": {
    "message": "komprimiert",
    "description": "Summary: N compressed"
  },
  "summary_removed": {
    "message": "entfernt",
    "description": "Summary: N removed"
  },
  "summary_excluded": {
    "message": "ausgenommen",
    "description": "Summary: N excluded"
  },
  "summary_saved": {
    "message": "gespart",
    "description": "Summary: N bytes saved"
  },
  "summary_noChanges": {
    "message": "Keine Änderungen",
    "description": "Summary fallback"
  },
  "badge_incompressible": {
    "message": "inkompressibel",
    "description": "Badge for incompressible images"
  },
  "badge_excluded": {
    "message": "ausgenommen",
    "description": "Badge for excluded images"
  },
  "state_removed": {
    "message": "Entfernt",
    "description": "After-row label for removed images"
  },
  "state_excluded": {
    "message": "Ausgenommen",
    "description": "After-row label for excluded images"
  },
  "btn_removeExclusion": {
    "message": "Ausnahme entfernen",
    "description": "Button to unexclude an image"
  },
  "btn_restore": {
    "message": "Wiederherstellen",
    "description": "Button to restore an image"
  },
  "btn_undo": {
    "message": "Rückgängig",
    "description": "Button to undo compression"
  },
  "btn_apply": {
    "message": "Anwenden",
    "description": "Button to apply compression"
  },
  "btn_exclude": {
    "message": "Ausnahme",
    "description": "Button to exclude an image"
  },
  "title_exclude": {
    "message": "Dieses Bild dauerhaft von der Kompression ausnehmen",
    "description": "Exclude button tooltip"
  },
  "title_download": {
    "message": "Bild herunterladen",
    "description": "Download button tooltip"
  },
  "label_resize": {
    "message": "Resize",
    "description": "Card control label"
  },
  "label_profile": {
    "message": "Profil",
    "description": "Card control label"
  },
  "card_keepMeta": {
    "message": "Keep meta",
    "description": "Checkbox label on image card"
  },
  "title_keepMeta": {
    "message": "Metadaten behalten (EXIF, ICC, XMP)",
    "description": "Keep-meta checkbox tooltip"
  },
  "card_shrinkToInline": {
    "message": "shrink to inline",
    "description": "Checkbox label on image card"
  },
  "title_shrinkToInline": {
    "message": "Auf inline Auflösung herunterskalieren (nur Inline/Zitat)",
    "description": "Shrink-to-inline checkbox tooltip"
  },
  "card_keepDimension": {
    "message": "keep dimension",
    "description": "Checkbox label on image card"
  },
  "title_keepDimension": {
    "message": "Anzeigegröße im HTML beibehalten",
    "description": "Keep-dimension checkbox tooltip"
  },
  "card_forcePng": {
    "message": "Force PNG",
    "description": "Checkbox label on image card"
  },
  "title_forcePng": {
    "message": "Bild zwangsweise als PNG speichern (JPEG→PNG, PNG bleibt PNG, kein JPEG-Versuch, Ergebnis wird auch ohne Verkleinerung übernommen)",
    "description": "Force-PNG checkbox tooltip"
  },
  "label_antiAlias": {
    "message": "AntiAlias",
    "description": "Card resize label when in AntiAlias mode"
  },
  "btn_showExcluded": {
    "message": "Ausnahme einblenden ($1)",
    "description": "Button to show excluded images, $1=count",
    "placeholders": {
      "count": {
        "content": "$1"
      }
    }
  },
  "loading_showingExclusions": {
    "message": "Ausnahmen werden eingeblendet...",
    "description": "Loading text"
  },
  "progress_done": {
    "message": "Fertig",
    "description": "Progress complete text"
  },
  "loading_compressing": {
    "message": "$1 wird komprimiert...",
    "description": "Loading: image being compressed, $1=name",
    "placeholders": {
      "name": {
        "content": "$1"
      }
    }
  },
  "loading_restoring": {
    "message": "$1 wird wiederhergestellt...",
    "description": "Loading: image being restored, $1=name",
    "placeholders": {
      "name": {
        "content": "$1"
      }
    }
  },
  "alert_errorAt": {
    "message": "Fehler bei $1: $2",
    "description": "Alert: error for image, $1=name $2=error",
    "placeholders": {
      "name": {
        "content": "$1"
      },
      "error": {
        "content": "$2"
      }
    }
  },
  "text_unknown": {
    "message": "Unbekannt",
    "description": "Unknown error fallback"
  },
  "unit_bytes": {
    "message": "B",
    "description": "Byte unit suffix"
  },
  "unit_kilobytes": {
    "message": "KB",
    "description": "Kilobyte unit suffix"
  },
  "unit_megabytes": {
    "message": "MB",
    "description": "Megabyte unit suffix"
  },
  "error_noComposeWindow": {
    "message": "Kein Verfassen-Fenster offen.",
    "description": "popup.js error"
  },
  "loading_preparingSend": {
    "message": "Senden wird vorbereitet...",
    "description": "confirmSend.js loading text"
  },
  "error_prefix": {
    "message": "Fehler: $1",
    "description": "confirmSend.js error display, $1=message",
    "placeholders": {
      "message": {
        "content": "$1"
      }
    }
  },
  "alert_noProfilesToExport": {
    "message": "Keine eigenen Profile zum Exportieren vorhanden.",
    "description": "options.js alert"
  },
  "alert_invalidFileFormat": {
    "message": "Ungültiges Dateiformat. JSON mit Profil-Definitionen erwartet.",
    "description": "options.js alert"
  },
  "alert_noProfilesImported": {
    "message": "Keine Profile importiert. $1",
    "description": "options.js alert, $1=skipped info",
    "placeholders": {
      "skipped": {
        "content": "$1"
      }
    }
  },
  "alert_profilesImported": {
    "message": "$1 Profil(e) importiert",
    "description": "options.js alert, $1=count",
    "placeholders": {
      "count": {
        "content": "$1"
      }
    }
  },
  "text_overwritten": {
    "message": "überschrieben",
    "description": "options.js import result"
  },
  "text_skipped": {
    "message": "übersprungen",
    "description": "options.js import result"
  },
  "alert_importError": {
    "message": "Fehler beim Import: $1",
    "description": "options.js alert, $1=error message",
    "placeholders": {
      "error": {
        "content": "$1"
      }
    }
  },
  "alert_fileReadError": {
    "message": "Datei konnte nicht gelesen werden.",
    "description": "options.js alert"
  },
  "resize_auto": {
    "message": "Auto (PNG: Mitchell, JPG: Lanczos)",
    "description": "Resize algorithm label"
  },
  "resize_lanczos": {
    "message": "Lanczos (höchste Qualität, langsam)",
    "description": "Resize algorithm label"
  },
  "resize_mitchell": {
    "message": "Mitchell-Netravali (weich, detailerhaltend)",
    "description": "Resize algorithm label"
  },
  "resize_bicubic": {
    "message": "Bicubic (hohe Qualität, browser-nativ)",
    "description": "Resize algorithm label"
  },
  "resize_bilinear": {
    "message": "Bilinear (mittel, browser-nativ)",
    "description": "Resize algorithm label"
  },
  "resize_nearest": {
    "message": "Nearest-Neighbor (Pixel-Art, browser-nativ)",
    "description": "Resize algorithm label"
  },
  "error_imageNotFound": {
    "message": "Bild nicht gefunden",
    "description": "background.js error"
  },
  "error_fileNotAvailable": {
    "message": "Datei nicht verfügbar",
    "description": "background.js error"
  },
  "error_imageNotAccessible": {
    "message": "Bild nicht abrufbar",
    "description": "background.js error"
  },
  "error_composeScriptUnreachable": {
    "message": "Compose-Skript nicht erreichbar",
    "description": "background.js error"
  },
  "error_compressionFailedForcePng": {
    "message": "Kompression fehlgeschlagen (force png)",
    "description": "background.js error"
  },
  "error_noReduction": {
    "message": "Keine Verkleinerung",
    "description": "background.js error"
  },
  "default_replaceText": {
    "message": "Image removed",
    "description": "Default replacement text for removed images"
  },
  "profile_removeImage": {
    "message": "remove Image",
    "description": "Profile name: remove image (also used as identifier — needs special handling)"
  },
  "profile_doNothing": {
    "message": "do nothing",
    "description": "Profile name: do nothing (also used as identifier — needs special handling)"
  },
  "imgname_quote": {
    "message": "zitat-bild",
    "description": "Internal name for quote images"
  },
  "imgname_inline": {
    "message": "inline-bild",
    "description": "Internal name for inline images"
  },
  "error_notCompressible": {
    "message": "Nicht komprimierbar",
    "description": "composeScript.js error"
  },
  "error_noCachedResult": {
    "message": "Kein komprimiertes Ergebnis im Cache",
    "description": "composeScript.js error"
  },
  "error_noEncodingSuccess": {
    "message": "Keine Encodierung erfolgreich",
    "description": "worker.js error"
  },
  "error_wasmFetchFailed": {
    "message": "WASM fetch fehlgeschlagen: $1",
    "description": "worker.js error, $1=status+url",
    "placeholders": {
      "detail": {
        "content": "$1"
      }
    }
  },
  "error_cjpegliMallocFailed": {
    "message": "cjpegli: malloc fehlgeschlagen — Speicher voll?",
    "description": "worker.js error"
  },
  "error_cjpegliEncodeFailed": {
    "message": "cjpegli: encode fehlgeschlagen — $1",
    "description": "worker.js error, $1=detail",
    "placeholders": {
      "detail": {
        "content": "$1"
      }
    }
  },
  "error_cjpegliInvalidJpeg": {
    "message": "cjpegli: ungültiger JPEG-Header",
    "description": "worker.js error"
  },
  "error_libimagequantNoResult": {
    "message": "libimagequant: kein PNG-Ergebnis: $1",
    "description": "worker.js error, $1=keys",
    "placeholders": {
      "keys": {
        "content": "$1"
      }
    }
  },
  "error_workerError": {
    "message": "Worker-Fehler: $1",
    "description": "background.js worker error wrapper, $1=message",
    "placeholders": {
      "message": {
        "content": "$1"
      }
    }
  },
  "label_precalc": {
    "message": "Pre-Compute aktivieren",
    "description": "Bilder werden bereits beim Einfügen in die E-Mail im Hintergrund komprimiert und zwischengespeichert. Anwenden und Senden werden dadurch quasi sofort fertig, kosten aber CPU, auch wenn das Bild am Ende nicht verwendet wird."
  },
  "label_workerPoolSize": {
    "message": "Parallele WASM-Instanzen:",
    "description": "Anzahl paralleler Worker (jeder mit eigenem Satz WASM-Module: jpegli, libimagequant, oxipng). 1 = minimaler Arbeitsspeicher, mehr = schneller bei mehreren Bildern."
  }
}
