diff --git a/changedetectionio/blueprint/add_watch_ui/__init__.py b/changedetectionio/blueprint/add_watch_ui/__init__.py
index b06d64bb..aa7c3973 100644
--- a/changedetectionio/blueprint/add_watch_ui/__init__.py
+++ b/changedetectionio/blueprint/add_watch_ui/__init__.py
@@ -142,10 +142,23 @@ def construct_blueprint(datastore: ChangeDetectionStore):
logger.error(f"Add-watch snapshot: could not park temporary data for {url}: {e}")
temp_uuid = None
+ # Optional per-processor previews of what each would read off this page (e.g. restock shows
+ # the detected price/stock). Computed once here from the fetched HTML for every processor
+ # offered on the page; the client shows the one for the selected processor and swaps on
+ # change. Only processors that implement the hook and return something are included.
+ previews = {}
+ if html:
+ from changedetectionio import processors
+ for pname, _ in processors.available_processors(processor_filter={'supports_visual_selector': True}):
+ preview = processors.get_processor_preview(datastore, pname, html, url=url)
+ if preview:
+ previews[pname] = preview
+
return jsonify({
"temporary_uuid": temp_uuid,
"screenshot": f"data:image/jpeg;base64,{base64.b64encode(screenshot).decode('ascii')}",
"xpath_data": xpath_data,
+ "processor_previews": previews,
})
return add_watch_ui_blueprint
diff --git a/changedetectionio/blueprint/add_watch_ui/static/add-watch.js b/changedetectionio/blueprint/add_watch_ui/static/add-watch.js
index 7a34ded0..c6ca2169 100644
--- a/changedetectionio/blueprint/add_watch_ui/static/add-watch.js
+++ b/changedetectionio/blueprint/add_watch_ui/static/add-watch.js
@@ -13,6 +13,16 @@ $(document).ready(() => {
const $clear = $('#clear-selector');
const $includeFilters = $('#include_filters');
const $temporaryUuid = $('#temporary_uuid');
+ const $processorPreview = $('#processor-add-watch-ui-preview-text');
+
+ // Per-processor previews from the last snapshot ({processor_name: "line to show"}).
+ let processorPreviews = {};
+
+ function renderProcessorPreview() {
+ const selected = $('input[name="processor"]:checked').val();
+ const text = selected ? processorPreviews[selected] : null;
+ $processorPreview.text(text || '').toggle(!!text);
+ }
const vs = window.initVisualSelector({
$canvas: $('#selector-canvas'),
@@ -50,6 +60,8 @@ $(document).ready(() => {
showState('loading');
// A previous parked snapshot is now stale; drop it until this fetch succeeds.
$temporaryUuid.val('');
+ processorPreviews = {};
+ renderProcessorPreview();
// Preview with whichever interactive browser the user picked (defaults to the checked one).
const browser = $('input[name="fetch_backend"]:checked').val() || '';
@@ -61,6 +73,8 @@ $(document).ready(() => {
}).done((data) => {
showState('ready');
$temporaryUuid.val(data.temporary_uuid || '');
+ processorPreviews = data.processor_previews || {};
+ renderProcessorPreview();
vs.load({screenshotSrc: data.screenshot, xpathData: data.xpath_data});
}).fail((xhr) => {
const msg = (xhr && xhr.responseText) ? xhr.responseText : 'Could not fetch a preview for that URL.';
@@ -69,6 +83,9 @@ $(document).ready(() => {
});
}
+ // Swap the preview line when the processor selection changes (no re-fetch needed).
+ $(document).on('change', 'input[name="processor"]', renderProcessorPreview);
+
$go.on('click', fetchSnapshot);
// Enter in the URL box should fetch a preview, not submit the whole form
diff --git a/changedetectionio/blueprint/add_watch_ui/templates/add-watch-ui.html b/changedetectionio/blueprint/add_watch_ui/templates/add-watch-ui.html
index d5fbca46..b42007bb 100644
--- a/changedetectionio/blueprint/add_watch_ui/templates/add-watch-ui.html
+++ b/changedetectionio/blueprint/add_watch_ui/templates/add-watch-ui.html
@@ -69,6 +69,10 @@
{{ render_simple_field(form.processor) }}
+
+
diff --git a/changedetectionio/processors/__init__.py b/changedetectionio/processors/__init__.py
index c9f5e7a9..394a6781 100644
--- a/changedetectionio/processors/__init__.py
+++ b/changedetectionio/processors/__init__.py
@@ -276,6 +276,27 @@ def _processor_capability(name, capability, default=False):
return default
+def get_processor_preview(datastore, name, html_content, url=None):
+ """Run a processor's OPTIONAL Add-Watch-UI preview and return a short human string (or None).
+
+ A processor opts in by overriding `add_watch_ui_processor_preview(self, html_content, url=None)`
+ on its `perform_site_check` class (default on the base ABC returns None). We instantiate it with
+ no watch (watch_uuid=None is tolerated) since the preview runs against the raw fetched HTML, not
+ a saved watch. Best-effort UI sugar: a missing override, an error, or a None/empty return all
+ yield None so the caller shows nothing for that processor. Never raises.
+ """
+ module = get_processor_module(name)
+ if not module or not hasattr(module, 'perform_site_check'):
+ return None
+ try:
+ handler = module.perform_site_check(datastore=datastore, watch_uuid=None)
+ preview = handler.add_watch_ui_processor_preview(html_content=html_content, url=url)
+ return preview or None
+ except Exception as e:
+ logger.debug(f"Processor '{name}' add-watch-ui preview failed: {e}")
+ return None
+
+
def available_processors(processor_filter=None):
"""
Get a list of processors by name and description for the UI elements.
diff --git a/changedetectionio/processors/base.py b/changedetectionio/processors/base.py
index 94798cc2..de5b5a1c 100644
--- a/changedetectionio/processors/base.py
+++ b/changedetectionio/processors/base.py
@@ -97,6 +97,17 @@ class difference_detection_processor():
logger.warning(f"Failed to read checksum file for {self.watch_uuid}: {e}")
self.last_raw_content_checksum = None
+ def add_watch_ui_processor_preview(self, html_content, url=None):
+ """Optional Add-Watch-UI preview hook.
+
+ Return a short human string describing what THIS processor would read off the just-fetched
+ page (shown under the processor picker on /add-watch-ui, so the user can see the processor
+ "works" before saving), or None for no preview. Best-effort UI sugar - the caller swallows
+ exceptions and treats None/empty as "show nothing". Override in a processor to opt in; the
+ default is no preview. Runs against the raw fetched HTML, so it does not need a saved watch.
+ """
+ return None
+
async def validate_iana_url(self):
"""Pre-flight SSRF check — runs DNS lookup in executor to avoid blocking the event loop.
Covers all fetchers (requests, playwright, puppeteer, plugins) since every fetch goes
diff --git a/changedetectionio/processors/restock_diff/processor.py b/changedetectionio/processors/restock_diff/processor.py
index d09022bd..169c682d 100644
--- a/changedetectionio/processors/restock_diff/processor.py
+++ b/changedetectionio/processors/restock_diff/processor.py
@@ -404,6 +404,32 @@ class perform_site_check(difference_detection_processor):
screenshot = None
xpath_data = None
+ def add_watch_ui_processor_preview(self, html_content, url=None):
+ """Add-Watch-UI preview: reuse the exact price/availability extraction the real check uses,
+ so the line shown under the processor picker matches what a saved watch would detect."""
+ from flask_babel import gettext
+ try:
+ r = extract_itemprop_availability_safe(html_content)
+ except MoreThanOnePriceFound:
+ return gettext("More than one price detected on this page - restock/price detection needs a single-product page.")
+ except Exception:
+ return None
+
+ price = r.get('price')
+ availability = r.get('availability')
+ if price is None and not availability:
+ return gettext("No price or stock information was detected on this page.")
+
+ parts = []
+ if price is not None:
+ currency = r.get('currency') or ''
+ parts.append(gettext("price: %(price)s", price=f"{currency}{price}".strip()))
+ if availability:
+ # availability is often a schema.org URL (e.g. https://schema.org/InStock) - show the tail.
+ parts.append(gettext("availability: %(availability)s",
+ availability=str(availability).rstrip('/').split('/')[-1]))
+ return gettext("Detected — %(details)s", details=", ".join(parts))
+
def run_changedetection(self, watch, force_reprocess=False):
import hashlib
diff --git a/changedetectionio/translations/cs/LC_MESSAGES/messages.po b/changedetectionio/translations/cs/LC_MESSAGES/messages.po
index bc54a08f..27f73e10 100644
--- a/changedetectionio/translations/cs/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/cs/LC_MESSAGES/messages.po
@@ -4147,6 +4147,29 @@ msgstr "Doplnění zásob a zjištění ceny pro stránky s JEDINÝM produktem"
msgid "Detects if the product goes back to in-stock"
msgstr "Zjistí, zda se produkt vrátí na sklad"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/de/LC_MESSAGES/messages.po b/changedetectionio/translations/de/LC_MESSAGES/messages.po
index eb0cbc99..ba94008c 100644
--- a/changedetectionio/translations/de/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/de/LC_MESSAGES/messages.po
@@ -4199,6 +4199,29 @@ msgstr "Wiederauffüllung und Preiserkennung für Seiten mit einem EINZELNEN Pro
msgid "Detects if the product goes back to in-stock"
msgstr "Erkennt, ob das Produkt wieder auf Lager ist"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po b/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po
index d801d87c..a39b3c85 100644
--- a/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po
@@ -4139,6 +4139,29 @@ msgstr ""
msgid "Detects if the product goes back to in-stock"
msgstr ""
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/en_US/LC_MESSAGES/messages.po b/changedetectionio/translations/en_US/LC_MESSAGES/messages.po
index 2fdc63ac..7316d573 100644
--- a/changedetectionio/translations/en_US/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/en_US/LC_MESSAGES/messages.po
@@ -4139,6 +4139,29 @@ msgstr ""
msgid "Detects if the product goes back to in-stock"
msgstr ""
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/es/LC_MESSAGES/messages.po b/changedetectionio/translations/es/LC_MESSAGES/messages.po
index 474410d8..1d149523 100644
--- a/changedetectionio/translations/es/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/es/LC_MESSAGES/messages.po
@@ -4212,6 +4212,29 @@ msgstr "Reabastecimiento y detección de precios para páginas con un ÚNICO pro
msgid "Detects if the product goes back to in-stock"
msgstr "Detecta si el producto vuelve a estar en stock"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/fr/LC_MESSAGES/messages.po b/changedetectionio/translations/fr/LC_MESSAGES/messages.po
index 657e7200..3ae3bc4e 100644
--- a/changedetectionio/translations/fr/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/fr/LC_MESSAGES/messages.po
@@ -4152,6 +4152,29 @@ msgstr "Détection de réapprovisionnement et de prix pour les pages avec un SEU
msgid "Detects if the product goes back to in-stock"
msgstr "Détecte si le produit revient en stock"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/it/LC_MESSAGES/messages.po b/changedetectionio/translations/it/LC_MESSAGES/messages.po
index 1616ad74..c8994ac2 100644
--- a/changedetectionio/translations/it/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/it/LC_MESSAGES/messages.po
@@ -4141,6 +4141,29 @@ msgstr "Rilevamento disponibilità e prezzi per pagine con UN SINGOLO prodotto"
msgid "Detects if the product goes back to in-stock"
msgstr "Rileva se il prodotto torna disponibile"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/ja/LC_MESSAGES/messages.po b/changedetectionio/translations/ja/LC_MESSAGES/messages.po
index 1abc22ae..54ddeafd 100644
--- a/changedetectionio/translations/ja/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/ja/LC_MESSAGES/messages.po
@@ -4158,6 +4158,29 @@ msgstr "単一製品ページの在庫補充&価格検知"
msgid "Detects if the product goes back to in-stock"
msgstr "製品が在庫ありに戻ったかどうかを検知します"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/ko/LC_MESSAGES/messages.po b/changedetectionio/translations/ko/LC_MESSAGES/messages.po
index 1d6d5466..461a4635 100644
--- a/changedetectionio/translations/ko/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/ko/LC_MESSAGES/messages.po
@@ -4149,6 +4149,29 @@ msgstr "단일 제품이 포함된 페이지의 재입고 및 가격 감지"
msgid "Detects if the product goes back to in-stock"
msgstr "제품이 다시 재고 있음 상태가 되었는지 감지합니다."
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/messages.pot b/changedetectionio/translations/messages.pot
index 5a4921fe..8ec58866 100644
--- a/changedetectionio/translations/messages.pot
+++ b/changedetectionio/translations/messages.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: changedetection.io 0.55.8\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2026-07-22 10:10+0200\n"
+"POT-Creation-Date: 2026-07-22 15:56+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -4138,6 +4138,29 @@ msgstr ""
msgid "Detects if the product goes back to in-stock"
msgstr ""
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po
index 4da8589a..947d0e67 100644
--- a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po
@@ -4189,6 +4189,29 @@ msgstr "Detecção de Estoque e Preço para páginas com um ÚNICO produto"
msgid "Detects if the product goes back to in-stock"
msgstr "Detecta se o produto volta ao estoque"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/ru/LC_MESSAGES/messages.po b/changedetectionio/translations/ru/LC_MESSAGES/messages.po
index e045857f..bdc99c24 100644
--- a/changedetectionio/translations/ru/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/ru/LC_MESSAGES/messages.po
@@ -4255,6 +4255,29 @@ msgstr "Пополнение запасов и определение цен д
msgid "Detects if the product goes back to in-stock"
msgstr "Определяет, возвращается ли товар на склад"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/tr/LC_MESSAGES/messages.po b/changedetectionio/translations/tr/LC_MESSAGES/messages.po
index ca0868be..601e37ba 100644
--- a/changedetectionio/translations/tr/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/tr/LC_MESSAGES/messages.po
@@ -4192,6 +4192,29 @@ msgstr "TEK bir ürüne sahip sayfalar için Yeniden Stoklama ve Fiyat tespiti"
msgid "Detects if the product goes back to in-stock"
msgstr "Ürünün tekrar stoka girip girmediğini tespit eder"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/uk/LC_MESSAGES/messages.po b/changedetectionio/translations/uk/LC_MESSAGES/messages.po
index 3fedc751..6f2ba4c9 100644
--- a/changedetectionio/translations/uk/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/uk/LC_MESSAGES/messages.po
@@ -4171,6 +4171,29 @@ msgstr "Виявлення поповнення та ціни для сторі
msgid "Detects if the product goes back to in-stock"
msgstr "Визначає, чи повернувся товар у наявність"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/zh/LC_MESSAGES/messages.po b/changedetectionio/translations/zh/LC_MESSAGES/messages.po
index af077117..24e13e81 100644
--- a/changedetectionio/translations/zh/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/zh/LC_MESSAGES/messages.po
@@ -4145,6 +4145,29 @@ msgstr "适用于单一商品页面的补货与价格检测"
msgid "Detects if the product goes back to in-stock"
msgstr "检测商品是否恢复有库存"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""
diff --git a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po
index e89bec1e..d26e6839 100644
--- a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po
+++ b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po
@@ -4145,6 +4145,29 @@ msgstr "針對單一產品頁面的補貨與價格檢測"
msgid "Detects if the product goes back to in-stock"
msgstr "檢測產品是否恢復庫存"
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "More than one price detected on this page - restock/price detection needs a single-product page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+msgid "No price or stock information was detected on this page."
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "price: %(price)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "availability: %(availability)s"
+msgstr ""
+
+#: changedetectionio/processors/restock_diff/processor.py
+#, python-format
+msgid "Detected — %(details)s"
+msgstr ""
+
#: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html
msgid "Price & stock history"
msgstr ""