{
  "extensionName": {
    "message": "Pedantic Picture Packer"
  },
  "extensionDescription": {
    "message": "State-of-the-art image compression with JPEGli, PNGquant, and OxiPNG."
  },
  "options_general": {
    "message": "General",
    "description": "options.html legend"
  },
  "sendMode_ask": {
    "message": "Remind about unprocessed items before sending",
    "description": "Radio label for sendMode=ask"
  },
  "sendMode_auto": {
    "message": "Execute all actions without confirmation before sending",
    "description": "Radio label for sendMode=auto"
  },
  "sendMode_manual": {
    "message": "I handle everything manually via the button in the compose window",
    "description": "Radio label for sendMode=manual"
  },
  "label_minFileSize": {
    "message": "Min. file size (KB):",
    "description": "options.html field label"
  },
  "label_minSavingsPercent": {
    "message": "Min. savings (%):",
    "description": "options.html field label"
  },
  "label_replaceText": {
    "message": "Replacement text for removed quote images:",
    "description": "options.html field label"
  },
  "options_attachments": {
    "message": "Attachment images",
    "description": "options.html legend"
  },
  "options_inline": {
    "message": "Inline images",
    "description": "options.html legend"
  },
  "options_quotes": {
    "message": "Quote images",
    "description": "options.html legend"
  },
  "label_compressionProfile": {
    "message": "Compression profile:",
    "description": "options.html field label (appears 3x)"
  },
  "options_editProfile": {
    "message": "Edit compression profile",
    "description": "options.html legend"
  },
  "btn_delete": {
    "message": "Delete",
    "description": "options.html button"
  },
  "label_preserveMeta": {
    "message": "Preserve metadata (EXIF, ICC, XMP)",
    "description": "options.html checkbox"
  },
  "label_crossConvert": {
    "message": "Allow cross-conversion (PNG ↔ JPG) if it saves space",
    "description": "options.html checkbox"
  },
  "sublabel_antiAlias": {
    "message": "AntiAlias",
    "description": "options.html sub-label"
  },
  "label_antialiasing": {
    "message": "Antialiasing (factor 1.0–2.0):",
    "description": "options.html field label"
  },
  "label_scaleToDisplay": {
    "message": "Downscale large images to display size (does not apply to attachments)",
    "description": "options.html checkbox"
  },
  "sublabel_resize": {
    "message": "Resize",
    "description": "options.html sub-label"
  },
  "label_resizeAlgorithm": {
    "message": "Resize algorithm:",
    "description": "options.html field label"
  },
  "sublabel_jpegli": {
    "message": "JPEGli",
    "description": "options.html sub-label"
  },
  "label_jpegQuality": {
    "message": "JPEG quality:",
    "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. colors:",
    "description": "options.html field label"
  },
  "label_minQuality": {
    "message": "Min. quality:",
    "description": "options.html field label"
  },
  "label_maxQuality": {
    "message": "Max. quality:",
    "description": "options.html field label"
  },
  "label_dithering": {
    "message": "Dithering:",
    "description": "options.html field label"
  },
  "label_speed": {
    "message": "Speed (higher = faster):",
    "description": "options.html field label"
  },
  "sublabel_oxipng": {
    "message": "OxiPNG",
    "description": "options.html sub-label"
  },
  "label_oxipngAlpha": {
    "message": "Alpha optimization (visually lossless)",
    "description": "options.html checkbox"
  },
  "label_optimizationLevel": {
    "message": "Optimization level:",
    "description": "options.html field label"
  },
  "btn_saveAs": {
    "message": "Save as:",
    "description": "options.html button"
  },
  "label_name": {
    "message": "Name:",
    "description": "options.html span"
  },
  "placeholder_templateName": {
    "message": "Profile name",
    "description": "options.html input placeholder"
  },
  "btn_exportProfiles": {
    "message": "Export profiles",
    "description": "options.html button"
  },
  "btn_importProfiles": {
    "message": "Import profiles",
    "description": "options.html button"
  },
  "options_exclusions": {
    "message": "Permanent exclusions",
    "description": "options.html legend"
  },
  "label_excludedImages": {
    "message": "Excluded images:",
    "description": "options.html info text"
  },
  "btn_clearList": {
    "message": "Clear list",
    "description": "options.html button"
  },
  "text_saved": {
    "message": "Saved",
    "description": "options.html saved indicator"
  },
  "btn_resetToDefault": {
    "message": "Reset to default",
    "description": "options.html button"
  },
  "appName": {
    "message": "Pedantic Picture Packer",
    "description": "popup.html header"
  },
  "btn_settings": {
    "message": "Settings",
    "description": "popup.html settings link"
  },
  "popup_behavior": {
    "message": "Behavior",
    "description": "popup.html legend"
  },
  "popup_profiles": {
    "message": "Profiles",
    "description": "popup.html legend"
  },
  "cat_attachment": {
    "message": "Attachment",
    "description": "Category label: attachment"
  },
  "cat_inline": {
    "message": "Inline",
    "description": "Category label: inline"
  },
  "cat_quote": {
    "message": "Quote",
    "description": "Category label: quote"
  },
  "popup_resample": {
    "message": "Resample",
    "description": "popup.html legend"
  },
  "text_noImagesFound": {
    "message": "No images found to compress.",
    "description": "Empty state text"
  },
  "btn_applyAll": {
    "message": "Apply all",
    "description": "popup.html button"
  },
  "text_processing": {
    "message": "Processing...",
    "description": "Loading overlay default text"
  },
  "confirmSend_title": {
    "message": "Image compression",
    "description": "confirmSend.html header"
  },
  "btn_cancel": {
    "message": "Cancel",
    "description": "confirmSend.html button"
  },
  "btn_send": {
    "message": "Send",
    "description": "confirmSend.html button"
  },
  "btn_applyAllAndSend": {
    "message": "Apply all and send",
    "description": "confirmSend.html button"
  },
  "loading_imagesLoading": {
    "message": "Loading images...",
    "description": "Loading text in popup/confirmSend init"
  },
  "col_type": {
    "message": "Type",
    "description": "Param table header"
  },
  "col_size": {
    "message": "Size",
    "description": "Param table header"
  },
  "col_resolution": {
    "message": "Resolution",
    "description": "Param table header"
  },
  "col_inlineResolution": {
    "message": "Inline resolution",
    "description": "Param table header"
  },
  "col_savings": {
    "message": "Savings",
    "description": "Param table header"
  },
  "summary_compressed": {
    "message": "compressed",
    "description": "Summary: N compressed"
  },
  "summary_removed": {
    "message": "removed",
    "description": "Summary: N removed"
  },
  "summary_excluded": {
    "message": "excluded",
    "description": "Summary: N excluded"
  },
  "summary_saved": {
    "message": "saved",
    "description": "Summary: N bytes saved"
  },
  "summary_noChanges": {
    "message": "No changes",
    "description": "Summary fallback"
  },
  "badge_incompressible": {
    "message": "incompressible",
    "description": "Badge for incompressible images"
  },
  "badge_excluded": {
    "message": "excluded",
    "description": "Badge for excluded images"
  },
  "state_removed": {
    "message": "Removed",
    "description": "After-row label for removed images"
  },
  "state_excluded": {
    "message": "Excluded",
    "description": "After-row label for excluded images"
  },
  "btn_removeExclusion": {
    "message": "Remove exclusion",
    "description": "Button to unexclude an image"
  },
  "btn_restore": {
    "message": "Restore",
    "description": "Button to restore an image"
  },
  "btn_undo": {
    "message": "Undo",
    "description": "Button to undo compression"
  },
  "btn_apply": {
    "message": "Apply",
    "description": "Button to apply compression"
  },
  "btn_exclude": {
    "message": "Exclude",
    "description": "Button to exclude an image"
  },
  "title_exclude": {
    "message": "Permanently exclude this image from compression",
    "description": "Exclude button tooltip"
  },
  "title_download": {
    "message": "Download image",
    "description": "Download button tooltip"
  },
  "label_resize": {
    "message": "Resize",
    "description": "Card control label"
  },
  "label_profile": {
    "message": "Profile",
    "description": "Card control label"
  },
  "card_keepMeta": {
    "message": "Keep meta",
    "description": "Checkbox label on image card"
  },
  "title_keepMeta": {
    "message": "Keep metadata (EXIF, ICC, XMP)",
    "description": "Keep-meta checkbox tooltip"
  },
  "card_shrinkToInline": {
    "message": "shrink to inline",
    "description": "Checkbox label on image card"
  },
  "title_shrinkToInline": {
    "message": "Downscale to inline resolution (inline/quote only)",
    "description": "Shrink-to-inline checkbox tooltip"
  },
  "card_keepDimension": {
    "message": "keep dimension",
    "description": "Checkbox label on image card"
  },
  "title_keepDimension": {
    "message": "Keep display size in HTML",
    "description": "Keep-dimension checkbox tooltip"
  },
  "card_forcePng": {
    "message": "Force PNG",
    "description": "Checkbox label on image card"
  },
  "title_forcePng": {
    "message": "Force image to save as PNG (JPEG→PNG, PNG stays PNG, no JPEG attempt, result applied even without size reduction)",
    "description": "Force-PNG checkbox tooltip"
  },
  "label_antiAlias": {
    "message": "AntiAlias",
    "description": "Card resize label when in AntiAlias mode"
  },
  "btn_showExcluded": {
    "message": "Show exclusion ($1)",
    "description": "Button to show excluded images, $1=count",
    "placeholders": {
      "count": {
        "content": "$1"
      }
    }
  },
  "loading_showingExclusions": {
    "message": "Showing exclusions...",
    "description": "Loading text"
  },
  "progress_done": {
    "message": "Done",
    "description": "Progress complete text"
  },
  "loading_compressing": {
    "message": "Compressing $1...",
    "description": "Loading: image being compressed, $1=name",
    "placeholders": {
      "name": {
        "content": "$1"
      }
    }
  },
  "loading_restoring": {
    "message": "Restoring $1...",
    "description": "Loading: image being restored, $1=name",
    "placeholders": {
      "name": {
        "content": "$1"
      }
    }
  },
  "alert_errorAt": {
    "message": "Error on $1: $2",
    "description": "Alert: error for image, $1=name $2=error",
    "placeholders": {
      "name": {
        "content": "$1"
      },
      "error": {
        "content": "$2"
      }
    }
  },
  "text_unknown": {
    "message": "Unknown",
    "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": "No compose window open.",
    "description": "popup.js error"
  },
  "loading_preparingSend": {
    "message": "Preparing send...",
    "description": "confirmSend.js loading text"
  },
  "error_prefix": {
    "message": "Error: $1",
    "description": "confirmSend.js error display, $1=message",
    "placeholders": {
      "message": {
        "content": "$1"
      }
    }
  },
  "alert_noProfilesToExport": {
    "message": "No custom profiles available to export.",
    "description": "options.js alert"
  },
  "alert_invalidFileFormat": {
    "message": "Invalid file format. Expected JSON with profile definitions.",
    "description": "options.js alert"
  },
  "alert_noProfilesImported": {
    "message": "No profiles imported. $1",
    "description": "options.js alert, $1=skipped info",
    "placeholders": {
      "skipped": {
        "content": "$1"
      }
    }
  },
  "alert_profilesImported": {
    "message": "Imported $1 profile(s)",
    "description": "options.js alert, $1=count",
    "placeholders": {
      "count": {
        "content": "$1"
      }
    }
  },
  "text_overwritten": {
    "message": "overwritten",
    "description": "options.js import result"
  },
  "text_skipped": {
    "message": "skipped",
    "description": "options.js import result"
  },
  "alert_importError": {
    "message": "Import error: $1",
    "description": "options.js alert, $1=error message",
    "placeholders": {
      "error": {
        "content": "$1"
      }
    }
  },
  "alert_fileReadError": {
    "message": "Could not read file.",
    "description": "options.js alert"
  },
  "resize_auto": {
    "message": "Auto (PNG: Mitchell, JPG: Lanczos)",
    "description": "Resize algorithm label"
  },
  "resize_lanczos": {
    "message": "Lanczos (highest quality, slow)",
    "description": "Resize algorithm label"
  },
  "resize_mitchell": {
    "message": "Mitchell-Netravali (soft, detail-preserving)",
    "description": "Resize algorithm label"
  },
  "resize_bicubic": {
    "message": "Bicubic (high quality, browser-native)",
    "description": "Resize algorithm label"
  },
  "resize_bilinear": {
    "message": "Bilinear (medium, browser-native)",
    "description": "Resize algorithm label"
  },
  "resize_nearest": {
    "message": "Nearest-Neighbor (pixel art, browser-native)",
    "description": "Resize algorithm label"
  },
  "error_imageNotFound": {
    "message": "Image not found",
    "description": "background.js error"
  },
  "error_fileNotAvailable": {
    "message": "File not available",
    "description": "background.js error"
  },
  "error_imageNotAccessible": {
    "message": "Image not accessible",
    "description": "background.js error"
  },
  "error_composeScriptUnreachable": {
    "message": "Compose script unreachable",
    "description": "background.js error"
  },
  "error_compressionFailedForcePng": {
    "message": "Compression failed (force png)",
    "description": "background.js error"
  },
  "error_noReduction": {
    "message": "No size reduction",
    "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": "quote-image",
    "description": "Internal name for quote images"
  },
  "imgname_inline": {
    "message": "inline-image",
    "description": "Internal name for inline images"
  },
  "error_notCompressible": {
    "message": "Not compressible",
    "description": "composeScript.js error"
  },
  "error_noCachedResult": {
    "message": "No compressed result in cache",
    "description": "composeScript.js error"
  },
  "error_noEncodingSuccess": {
    "message": "No encoding successful",
    "description": "worker.js error"
  },
  "error_wasmFetchFailed": {
    "message": "WASM fetch failed: $1",
    "description": "worker.js error, $1=status+url",
    "placeholders": {
      "detail": {
        "content": "$1"
      }
    }
  },
  "error_cjpegliMallocFailed": {
    "message": "cjpegli: malloc failed — out of memory?",
    "description": "worker.js error"
  },
  "error_cjpegliEncodeFailed": {
    "message": "cjpegli: encode failed — $1",
    "description": "worker.js error, $1=detail",
    "placeholders": {
      "detail": {
        "content": "$1"
      }
    }
  },
  "error_cjpegliInvalidJpeg": {
    "message": "cjpegli: invalid JPEG header",
    "description": "worker.js error"
  },
  "error_libimagequantNoResult": {
    "message": "libimagequant: no PNG result: $1",
    "description": "worker.js error, $1=keys",
    "placeholders": {
      "keys": {
        "content": "$1"
      }
    }
  },
  "error_workerError": {
    "message": "Worker error: $1",
    "description": "background.js worker error wrapper, $1=message",
    "placeholders": {
      "message": {
        "content": "$1"
      }
    }
  },
  "label_precalc": {
    "message": "Enable pre-compute",
    "description": "Images are compressed and cached in the background as soon as they are inserted into the email. Applying and sending become nearly instant, at the cost of CPU work even if the image is never used."
  },
  "label_workerPoolSize": {
    "message": "Parallel WASM instances:",
    "description": "Number of parallel workers (each with its own set of WASM modules: jpegli, libimagequant, oxipng). 1 = minimal memory usage, more = faster with multiple images."
  }
}
