{
  "extensionName": {
    "message": "Pedantic Picture Packer"
  },
  "extensionDescription": {
    "message": "Современное сжатие изображений с помощью JPEGli, PNGquant и OxiPNG."
  },
  "options_general": {
    "message": "Общие",
    "description": "options.html legend"
  },
  "sendMode_ask": {
    "message": "Напоминать о невыполненных пунктах перед отправкой",
    "description": "Radio label for sendMode=ask"
  },
  "sendMode_auto": {
    "message": "Выполнять все действия без подтверждения перед отправкой",
    "description": "Radio label for sendMode=auto"
  },
  "sendMode_manual": {
    "message": "Я всё делаю вручную через кнопку в окне составления",
    "description": "Radio label for sendMode=manual"
  },
  "label_minFileSize": {
    "message": "Мин. размер файла (КБ):",
    "description": "options.html field label"
  },
  "label_minSavingsPercent": {
    "message": "Мин. экономия (%):",
    "description": "options.html field label"
  },
  "label_replaceText": {
    "message": "Текст замены для удалённых изображений цитат:",
    "description": "options.html field label"
  },
  "options_attachments": {
    "message": "Изображения во вложениях",
    "description": "options.html legend"
  },
  "options_inline": {
    "message": "Встроенные изображения",
    "description": "options.html legend"
  },
  "options_quotes": {
    "message": "Изображения в цитатах",
    "description": "options.html legend"
  },
  "label_compressionProfile": {
    "message": "Профиль сжатия:",
    "description": "options.html field label (appears 3x)"
  },
  "options_editProfile": {
    "message": "Редактировать профиль сжатия",
    "description": "options.html legend"
  },
  "btn_delete": {
    "message": "Удалить",
    "description": "options.html button"
  },
  "label_preserveMeta": {
    "message": "Сохранять метаданные (EXIF, ICC, XMP)",
    "description": "options.html checkbox"
  },
  "label_crossConvert": {
    "message": "Разрешить перекрёстную конвертацию (PNG ↔ JPG), если это экономит место",
    "description": "options.html checkbox"
  },
  "sublabel_antiAlias": {
    "message": "AntiAlias",
    "description": "options.html sub-label"
  },
  "label_antialiasing": {
    "message": "Сглаживание (коэффициент 1.0–2.0):",
    "description": "options.html field label"
  },
  "label_scaleToDisplay": {
    "message": "Уменьшать крупные изображения до размера отображения (не применяется к вложениям)",
    "description": "options.html checkbox"
  },
  "sublabel_resize": {
    "message": "Resize",
    "description": "options.html sub-label"
  },
  "label_resizeAlgorithm": {
    "message": "Алгоритм изменения размера:",
    "description": "options.html field label"
  },
  "sublabel_jpegli": {
    "message": "JPEGli",
    "description": "options.html sub-label"
  },
  "label_jpegQuality": {
    "message": "Качество JPEG:",
    "description": "options.html field label"
  },
  "label_chromaSubsampling": {
    "message": "Субдискретизация цветности:",
    "description": "options.html field label"
  },
  "sublabel_pngquant": {
    "message": "PNGquant",
    "description": "options.html sub-label"
  },
  "label_maxColors": {
    "message": "Макс. цветов:",
    "description": "options.html field label"
  },
  "label_minQuality": {
    "message": "Мин. качество:",
    "description": "options.html field label"
  },
  "label_maxQuality": {
    "message": "Макс. качество:",
    "description": "options.html field label"
  },
  "label_dithering": {
    "message": "Дизеринг:",
    "description": "options.html field label"
  },
  "label_speed": {
    "message": "Скорость (выше = быстрее):",
    "description": "options.html field label"
  },
  "sublabel_oxipng": {
    "message": "OxiPNG",
    "description": "options.html sub-label"
  },
  "label_oxipngAlpha": {
    "message": "Оптимизация альфа-канала (визуально без потерь)",
    "description": "options.html checkbox"
  },
  "label_optimizationLevel": {
    "message": "Уровень оптимизации:",
    "description": "options.html field label"
  },
  "btn_saveAs": {
    "message": "Сохранить как:",
    "description": "options.html button"
  },
  "label_name": {
    "message": "Имя:",
    "description": "options.html span"
  },
  "placeholder_templateName": {
    "message": "Название профиля",
    "description": "options.html input placeholder"
  },
  "btn_exportProfiles": {
    "message": "Экспорт профилей",
    "description": "options.html button"
  },
  "btn_importProfiles": {
    "message": "Импорт профилей",
    "description": "options.html button"
  },
  "options_exclusions": {
    "message": "Постоянные исключения",
    "description": "options.html legend"
  },
  "label_excludedImages": {
    "message": "Исключённые изображения:",
    "description": "options.html info text"
  },
  "btn_clearList": {
    "message": "Очистить список",
    "description": "options.html button"
  },
  "text_saved": {
    "message": "Сохранено",
    "description": "options.html saved indicator"
  },
  "btn_resetToDefault": {
    "message": "Сбросить настройки",
    "description": "options.html button"
  },
  "appName": {
    "message": "Pedantic Picture Packer",
    "description": "popup.html header"
  },
  "btn_settings": {
    "message": "Настройки",
    "description": "popup.html settings link"
  },
  "popup_behavior": {
    "message": "Поведение",
    "description": "popup.html legend"
  },
  "popup_profiles": {
    "message": "Профили",
    "description": "popup.html legend"
  },
  "cat_attachment": {
    "message": "Вложение",
    "description": "Category label: attachment"
  },
  "cat_inline": {
    "message": "Встроенный",
    "description": "Category label: inline"
  },
  "cat_quote": {
    "message": "Цитата",
    "description": "Category label: quote"
  },
  "popup_resample": {
    "message": "Resample",
    "description": "popup.html legend"
  },
  "text_noImagesFound": {
    "message": "Изображения для сжатия не найдены.",
    "description": "Empty state text"
  },
  "btn_applyAll": {
    "message": "Применить ко всем",
    "description": "popup.html button"
  },
  "text_processing": {
    "message": "Обработка...",
    "description": "Loading overlay default text"
  },
  "confirmSend_title": {
    "message": "Сжатие изображений",
    "description": "confirmSend.html header"
  },
  "btn_cancel": {
    "message": "Отмена",
    "description": "confirmSend.html button"
  },
  "btn_send": {
    "message": "Отправить",
    "description": "confirmSend.html button"
  },
  "btn_applyAllAndSend": {
    "message": "Применить ко всем и отправить",
    "description": "confirmSend.html button"
  },
  "loading_imagesLoading": {
    "message": "Загрузка изображений...",
    "description": "Loading text in popup/confirmSend init"
  },
  "col_type": {
    "message": "Тип",
    "description": "Param table header"
  },
  "col_size": {
    "message": "Размер",
    "description": "Param table header"
  },
  "col_resolution": {
    "message": "Разрешение",
    "description": "Param table header"
  },
  "col_inlineResolution": {
    "message": "Встроенное разрешение",
    "description": "Param table header"
  },
  "col_savings": {
    "message": "Экономия",
    "description": "Param table header"
  },
  "summary_compressed": {
    "message": "сжато",
    "description": "Summary: N compressed"
  },
  "summary_removed": {
    "message": "удалено",
    "description": "Summary: N removed"
  },
  "summary_excluded": {
    "message": "исключено",
    "description": "Summary: N excluded"
  },
  "summary_saved": {
    "message": "сэкономлено",
    "description": "Summary: N bytes saved"
  },
  "summary_noChanges": {
    "message": "Без изменений",
    "description": "Summary fallback"
  },
  "badge_incompressible": {
    "message": "несжимаемо",
    "description": "Badge for incompressible images"
  },
  "badge_excluded": {
    "message": "исключено",
    "description": "Badge for excluded images"
  },
  "state_removed": {
    "message": "Удалено",
    "description": "After-row label for removed images"
  },
  "state_excluded": {
    "message": "Исключено",
    "description": "After-row label for excluded images"
  },
  "btn_removeExclusion": {
    "message": "Удалить из исключений",
    "description": "Button to unexclude an image"
  },
  "btn_restore": {
    "message": "Восстановить",
    "description": "Button to restore an image"
  },
  "btn_undo": {
    "message": "Отменить",
    "description": "Button to undo compression"
  },
  "btn_apply": {
    "message": "Применить",
    "description": "Button to apply compression"
  },
  "btn_exclude": {
    "message": "Исключение",
    "description": "Button to exclude an image"
  },
  "title_exclude": {
    "message": "Постоянно исключить это изображение из сжатия",
    "description": "Exclude button tooltip"
  },
  "title_download": {
    "message": "Скачать изображение",
    "description": "Download button tooltip"
  },
  "label_resize": {
    "message": "Resize",
    "description": "Card control label"
  },
  "label_profile": {
    "message": "Профиль",
    "description": "Card control label"
  },
  "card_keepMeta": {
    "message": "Keep meta",
    "description": "Checkbox label on image card"
  },
  "title_keepMeta": {
    "message": "Сохранять метаданные (EXIF, ICC, XMP)",
    "description": "Keep-meta checkbox tooltip"
  },
  "card_shrinkToInline": {
    "message": "shrink to inline",
    "description": "Checkbox label on image card"
  },
  "title_shrinkToInline": {
    "message": "Уменьшить до встроенного разрешения (только встроенные/цитаты)",
    "description": "Shrink-to-inline checkbox tooltip"
  },
  "card_keepDimension": {
    "message": "keep dimension",
    "description": "Checkbox label on image card"
  },
  "title_keepDimension": {
    "message": "Сохранять размер отображения в 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": "Показать исключение ($1)",
    "description": "Button to show excluded images, $1=count",
    "placeholders": {
      "count": {
        "content": "$1"
      }
    }
  },
  "loading_showingExclusions": {
    "message": "Отображение исключений...",
    "description": "Loading text"
  },
  "progress_done": {
    "message": "Готово",
    "description": "Progress complete text"
  },
  "loading_compressing": {
    "message": "Сжатие $1...",
    "description": "Loading: image being compressed, $1=name",
    "placeholders": {
      "name": {
        "content": "$1"
      }
    }
  },
  "loading_restoring": {
    "message": "Восстановление $1...",
    "description": "Loading: image being restored, $1=name",
    "placeholders": {
      "name": {
        "content": "$1"
      }
    }
  },
  "alert_errorAt": {
    "message": "Ошибка в $1: $2",
    "description": "Alert: error for image, $1=name $2=error",
    "placeholders": {
      "name": {
        "content": "$1"
      },
      "error": {
        "content": "$2"
      }
    }
  },
  "text_unknown": {
    "message": "Неизвестно",
    "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": "Окно составления не открыто.",
    "description": "popup.js error"
  },
  "loading_preparingSend": {
    "message": "Подготовка к отправке...",
    "description": "confirmSend.js loading text"
  },
  "error_prefix": {
    "message": "Ошибка: $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."
  }
}
