{
  "extensionName": {
    "message": "Pedantic Picture Packer"
  },
  "extensionDescription": {
    "message": "Compression d'images de pointe avec JPEGli, PNGquant et OxiPNG."
  },
  "options_general": {
    "message": "Général",
    "description": "options.html legend"
  },
  "sendMode_ask": {
    "message": "Rappeler les éléments non traités avant l'envoi",
    "description": "Radio label for sendMode=ask"
  },
  "sendMode_auto": {
    "message": "Exécuter toutes les actions sans confirmation avant l'envoi",
    "description": "Radio label for sendMode=auto"
  },
  "sendMode_manual": {
    "message": "Je gère tout manuellement via le bouton de la fenêtre de rédaction",
    "description": "Radio label for sendMode=manual"
  },
  "label_minFileSize": {
    "message": "Taille min. de fichier (Ko) :",
    "description": "options.html field label"
  },
  "label_minSavingsPercent": {
    "message": "Économie min. (%) :",
    "description": "options.html field label"
  },
  "label_replaceText": {
    "message": "Texte de remplacement pour les images de citation supprimées :",
    "description": "options.html field label"
  },
  "options_attachments": {
    "message": "Images en pièce jointe",
    "description": "options.html legend"
  },
  "options_inline": {
    "message": "Images intégrées",
    "description": "options.html legend"
  },
  "options_quotes": {
    "message": "Images dans les citations",
    "description": "options.html legend"
  },
  "label_compressionProfile": {
    "message": "Profil de compression :",
    "description": "options.html field label (appears 3x)"
  },
  "options_editProfile": {
    "message": "Modifier le profil de compression",
    "description": "options.html legend"
  },
  "btn_delete": {
    "message": "Supprimer",
    "description": "options.html button"
  },
  "label_preserveMeta": {
    "message": "Conserver les métadonnées (EXIF, ICC, XMP)",
    "description": "options.html checkbox"
  },
  "label_crossConvert": {
    "message": "Autoriser la conversion croisée (PNG ↔ JPG) si cela économise de l'espace",
    "description": "options.html checkbox"
  },
  "sublabel_antiAlias": {
    "message": "AntiAlias",
    "description": "options.html sub-label"
  },
  "label_antialiasing": {
    "message": "Antialiasing (facteur 1.0–2.0) :",
    "description": "options.html field label"
  },
  "label_scaleToDisplay": {
    "message": "Réduire les grandes images à la taille d'affichage (ne s'applique pas aux pièces jointes)",
    "description": "options.html checkbox"
  },
  "sublabel_resize": {
    "message": "Resize",
    "description": "options.html sub-label"
  },
  "label_resizeAlgorithm": {
    "message": "Algorithme de redimensionnement :",
    "description": "options.html field label"
  },
  "sublabel_jpegli": {
    "message": "JPEGli",
    "description": "options.html sub-label"
  },
  "label_jpegQuality": {
    "message": "Qualité JPEG :",
    "description": "options.html field label"
  },
  "label_chromaSubsampling": {
    "message": "Sous-échantillonnage chroma :",
    "description": "options.html field label"
  },
  "sublabel_pngquant": {
    "message": "PNGquant",
    "description": "options.html sub-label"
  },
  "label_maxColors": {
    "message": "Couleurs max. :",
    "description": "options.html field label"
  },
  "label_minQuality": {
    "message": "Qualité min. :",
    "description": "options.html field label"
  },
  "label_maxQuality": {
    "message": "Qualité max. :",
    "description": "options.html field label"
  },
  "label_dithering": {
    "message": "Tramage :",
    "description": "options.html field label"
  },
  "label_speed": {
    "message": "Vitesse (plus élevé = plus rapide) :",
    "description": "options.html field label"
  },
  "sublabel_oxipng": {
    "message": "OxiPNG",
    "description": "options.html sub-label"
  },
  "label_oxipngAlpha": {
    "message": "Optimisation alpha (visuellement sans perte)",
    "description": "options.html checkbox"
  },
  "label_optimizationLevel": {
    "message": "Niveau d'optimisation :",
    "description": "options.html field label"
  },
  "btn_saveAs": {
    "message": "Enregistrer sous :",
    "description": "options.html button"
  },
  "label_name": {
    "message": "Nom :",
    "description": "options.html span"
  },
  "placeholder_templateName": {
    "message": "Nom du profil",
    "description": "options.html input placeholder"
  },
  "btn_exportProfiles": {
    "message": "Exporter les profils",
    "description": "options.html button"
  },
  "btn_importProfiles": {
    "message": "Importer des profils",
    "description": "options.html button"
  },
  "options_exclusions": {
    "message": "Exclusions permanentes",
    "description": "options.html legend"
  },
  "label_excludedImages": {
    "message": "Images exclues :",
    "description": "options.html info text"
  },
  "btn_clearList": {
    "message": "Vider la liste",
    "description": "options.html button"
  },
  "text_saved": {
    "message": "Enregistré",
    "description": "options.html saved indicator"
  },
  "btn_resetToDefault": {
    "message": "Réinitialiser aux valeurs par défaut",
    "description": "options.html button"
  },
  "appName": {
    "message": "Pedantic Picture Packer",
    "description": "popup.html header"
  },
  "btn_settings": {
    "message": "Paramètres",
    "description": "popup.html settings link"
  },
  "popup_behavior": {
    "message": "Comportement",
    "description": "popup.html legend"
  },
  "popup_profiles": {
    "message": "Profils",
    "description": "popup.html legend"
  },
  "cat_attachment": {
    "message": "Pièce jointe",
    "description": "Category label: attachment"
  },
  "cat_inline": {
    "message": "Intégré",
    "description": "Category label: inline"
  },
  "cat_quote": {
    "message": "Citation",
    "description": "Category label: quote"
  },
  "popup_resample": {
    "message": "Resample",
    "description": "popup.html legend"
  },
  "text_noImagesFound": {
    "message": "Aucune image trouvée à compresser.",
    "description": "Empty state text"
  },
  "btn_applyAll": {
    "message": "Tout appliquer",
    "description": "popup.html button"
  },
  "text_processing": {
    "message": "Traitement en cours...",
    "description": "Loading overlay default text"
  },
  "confirmSend_title": {
    "message": "Compression d'images",
    "description": "confirmSend.html header"
  },
  "btn_cancel": {
    "message": "Annuler",
    "description": "confirmSend.html button"
  },
  "btn_send": {
    "message": "Envoyer",
    "description": "confirmSend.html button"
  },
  "btn_applyAllAndSend": {
    "message": "Tout appliquer et envoyer",
    "description": "confirmSend.html button"
  },
  "loading_imagesLoading": {
    "message": "Chargement des images...",
    "description": "Loading text in popup/confirmSend init"
  },
  "col_type": {
    "message": "Type",
    "description": "Param table header"
  },
  "col_size": {
    "message": "Taille",
    "description": "Param table header"
  },
  "col_resolution": {
    "message": "Résolution",
    "description": "Param table header"
  },
  "col_inlineResolution": {
    "message": "Résolution intégrée",
    "description": "Param table header"
  },
  "col_savings": {
    "message": "Économie",
    "description": "Param table header"
  },
  "summary_compressed": {
    "message": "compressé",
    "description": "Summary: N compressed"
  },
  "summary_removed": {
    "message": "supprimé",
    "description": "Summary: N removed"
  },
  "summary_excluded": {
    "message": "exclu",
    "description": "Summary: N excluded"
  },
  "summary_saved": {
    "message": "économisé",
    "description": "Summary: N bytes saved"
  },
  "summary_noChanges": {
    "message": "Aucun changement",
    "description": "Summary fallback"
  },
  "badge_incompressible": {
    "message": "incompressible",
    "description": "Badge for incompressible images"
  },
  "badge_excluded": {
    "message": "exclu",
    "description": "Badge for excluded images"
  },
  "state_removed": {
    "message": "Supprimé",
    "description": "After-row label for removed images"
  },
  "state_excluded": {
    "message": "Exclu",
    "description": "After-row label for excluded images"
  },
  "btn_removeExclusion": {
    "message": "Supprimer l'exclusion",
    "description": "Button to unexclude an image"
  },
  "btn_restore": {
    "message": "Restaurer",
    "description": "Button to restore an image"
  },
  "btn_undo": {
    "message": "Annuler",
    "description": "Button to undo compression"
  },
  "btn_apply": {
    "message": "Appliquer",
    "description": "Button to apply compression"
  },
  "btn_exclude": {
    "message": "Exclusion",
    "description": "Button to exclude an image"
  },
  "title_exclude": {
    "message": "Exclure définitivement cette image de la compression",
    "description": "Exclude button tooltip"
  },
  "title_download": {
    "message": "Télécharger l'image",
    "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": "Conserver les métadonnées (EXIF, ICC, XMP)",
    "description": "Keep-meta checkbox tooltip"
  },
  "card_shrinkToInline": {
    "message": "shrink to inline",
    "description": "Checkbox label on image card"
  },
  "title_shrinkToInline": {
    "message": "Réduire à la résolution intégrée (intégré/citation uniquement)",
    "description": "Shrink-to-inline checkbox tooltip"
  },
  "card_keepDimension": {
    "message": "keep dimension",
    "description": "Checkbox label on image card"
  },
  "title_keepDimension": {
    "message": "Conserver la taille d'affichage en 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": "Afficher l'exclusion ($1)",
    "description": "Button to show excluded images, $1=count",
    "placeholders": {
      "count": {
        "content": "$1"
      }
    }
  },
  "loading_showingExclusions": {
    "message": "Affichage des exclusions...",
    "description": "Loading text"
  },
  "progress_done": {
    "message": "Terminé",
    "description": "Progress complete text"
  },
  "loading_compressing": {
    "message": "Compression de $1...",
    "description": "Loading: image being compressed, $1=name",
    "placeholders": {
      "name": {
        "content": "$1"
      }
    }
  },
  "loading_restoring": {
    "message": "Restauration de $1...",
    "description": "Loading: image being restored, $1=name",
    "placeholders": {
      "name": {
        "content": "$1"
      }
    }
  },
  "alert_errorAt": {
    "message": "Erreur sur $1 : $2",
    "description": "Alert: error for image, $1=name $2=error",
    "placeholders": {
      "name": {
        "content": "$1"
      },
      "error": {
        "content": "$2"
      }
    }
  },
  "text_unknown": {
    "message": "Inconnu",
    "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": "Aucune fenêtre de rédaction ouverte.",
    "description": "popup.js error"
  },
  "loading_preparingSend": {
    "message": "Préparation de l'envoi...",
    "description": "confirmSend.js loading text"
  },
  "error_prefix": {
    "message": "Erreur : $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."
  }
}
