From f71daee2c44cf5ef5932140ba3e99ad75e044399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BB=85=C3=BC?= <53787985+LaiYueTing@users.noreply.github.com> Date: Thu, 10 Sep 2026 00:49:09 +0800 Subject: [PATCH] i18n: Update zh_Hant_TW translations (#4264) Co-authored-by: dgtlmoon --- .../watchlist/templates/watch-overview.html | 6 +- .../templates/restock_diff/difference.html | 6 +- .../static/js/restock-price-graph.js | 11 +- .../translations/cs/LC_MESSAGES/messages.po | 10 +- .../translations/de/LC_MESSAGES/messages.po | 10 +- .../en_GB/LC_MESSAGES/messages.po | 10 +- .../en_US/LC_MESSAGES/messages.po | 10 +- .../translations/es/LC_MESSAGES/messages.po | 10 +- .../translations/fr/LC_MESSAGES/messages.po | 10 +- .../translations/id/LC_MESSAGES/messages.po | 10 +- .../translations/it/LC_MESSAGES/messages.po | 10 +- .../translations/ja/LC_MESSAGES/messages.po | 10 +- .../translations/ko/LC_MESSAGES/messages.po | 10 +- changedetectionio/translations/messages.pot | 12 +- .../translations/pl/LC_MESSAGES/messages.po | 10 +- .../pt_BR/LC_MESSAGES/messages.po | 10 +- .../translations/ru/LC_MESSAGES/messages.po | 10 +- .../translations/tr/LC_MESSAGES/messages.po | 10 +- .../translations/uk/LC_MESSAGES/messages.po | 10 +- .../translations/zh/LC_MESSAGES/messages.po | 10 +- .../zh_Hant_TW/LC_MESSAGES/messages.mo | Bin 44885 -> 106670 bytes .../zh_Hant_TW/LC_MESSAGES/messages.po | 1212 +++++++++-------- 22 files changed, 732 insertions(+), 675 deletions(-) diff --git a/changedetectionio/blueprint/watchlist/templates/watch-overview.html b/changedetectionio/blueprint/watchlist/templates/watch-overview.html index 1861aba48..3abc148ae 100644 --- a/changedetectionio/blueprint/watchlist/templates/watch-overview.html +++ b/changedetectionio/blueprint/watchlist/templates/watch-overview.html @@ -140,8 +140,10 @@ window.watchOverviewI18n = { priceLow: {{ _('Currently low')|tojson }}, priceTypical: {{ _('Currently typical')|tojson }}, priceHigh: {{ _('Currently high')|tojson }}, - cheaperThan: {{ _('cheaper than %s% of tracked prices')|tojson }}, - pricierThan: {{ _('more expensive than %s% of tracked prices')|tojson }}, + {# TRANSLATORS: {pct} is a percentage including the % sign, e.g. "80%" #} + cheaperThan: {{ _('cheaper than {pct} of tracked prices')|tojson }}, + {# TRANSLATORS: {pct} is a percentage including the % sign, e.g. "80%" #} + pricierThan: {{ _('more expensive than {pct} of tracked prices')|tojson }}, typicalNote: {{ _('around the usual price')|tojson }}, avgLabel: {{ _('avg')|tojson }} }; diff --git a/changedetectionio/processors/restock_diff/templates/restock_diff/difference.html b/changedetectionio/processors/restock_diff/templates/restock_diff/difference.html index 0e3c601fc..4655e547c 100644 --- a/changedetectionio/processors/restock_diff/templates/restock_diff/difference.html +++ b/changedetectionio/processors/restock_diff/templates/restock_diff/difference.html @@ -86,8 +86,10 @@ price_low: {{ _('Currently low')|tojson }}, price_typical: {{ _('Currently typical')|tojson }}, price_high: {{ _('Currently high')|tojson }}, - cheaper_than: {{ _('cheaper than %s% of tracked prices')|tojson }}, - pricier_than: {{ _('more expensive than %s% of tracked prices')|tojson }}, + {# TRANSLATORS: {pct} is a percentage including the % sign, e.g. "80%" #} + cheaper_than: {{ _('cheaper than {pct} of tracked prices')|tojson }}, + {# TRANSLATORS: {pct} is a percentage including the % sign, e.g. "80%" #} + pricier_than: {{ _('more expensive than {pct} of tracked prices')|tojson }}, typical_note: {{ _('around the usual price')|tojson }}, avg_label: {{ _('avg')|tojson }} }; diff --git a/changedetectionio/static/js/restock-price-graph.js b/changedetectionio/static/js/restock-price-graph.js index 2481fa902..739a3cdb7 100644 --- a/changedetectionio/static/js/restock-price-graph.js +++ b/changedetectionio/static/js/restock-price-graph.js @@ -23,8 +23,11 @@ no_data: 'No price data available to graph yet.', load_error: 'Could not load price history.', changes: 'Changes', avg_price: 'Average price', price_low: 'Currently low', price_typical: 'Currently typical', price_high: 'Currently high', - cheaper_than: 'cheaper than %s% of tracked prices', - pricier_than: 'more expensive than %s% of tracked prices', + // {pct} is substituted with an already-formatted percentage, e.g. "80%". The percent sign is + // NOT part of the msgid on purpose: a bare "%" followed by a letter (" of") parses as a + // python-format conversion ("% o"), which makes pybabel reject any translation of it. + cheaper_than: 'cheaper than {pct} of tracked prices', + pricier_than: 'more expensive than {pct} of tracked prices', typical_note: 'around the usual price', avg_label: 'avg' }; const OVERLAY_MIN_POINTS = 5; // need enough history for low/typical/high to be meaningful @@ -260,9 +263,9 @@ $pill.append($('').text(i18n['price_' + summary.status] || '')); let sub; if (summary.status === 'low') { - sub = (i18n.cheaper_than || '').replace('%s', summary.cheaper_than_pct); + sub = (i18n.cheaper_than || '').replace('{pct}', summary.cheaper_than_pct + '%'); } else if (summary.status === 'high') { - sub = (i18n.pricier_than || '').replace('%s', summary.pricier_than_pct); + sub = (i18n.pricier_than || '').replace('{pct}', summary.pricier_than_pct + '%'); } else { sub = i18n.typical_note || ''; } diff --git a/changedetectionio/translations/cs/LC_MESSAGES/messages.po b/changedetectionio/translations/cs/LC_MESSAGES/messages.po index f3747882a..0c4de2a07 100644 --- a/changedetectionio/translations/cs/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/cs/LC_MESSAGES/messages.po @@ -2548,16 +2548,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/de/LC_MESSAGES/messages.po b/changedetectionio/translations/de/LC_MESSAGES/messages.po index b523325de..c4f44efe9 100644 --- a/changedetectionio/translations/de/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/de/LC_MESSAGES/messages.po @@ -2593,16 +2593,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po b/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po index 9bd938cee..6f8f98e7d 100644 --- a/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po @@ -2542,16 +2542,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/en_US/LC_MESSAGES/messages.po b/changedetectionio/translations/en_US/LC_MESSAGES/messages.po index f6afbb9a9..cef38cb9f 100644 --- a/changedetectionio/translations/en_US/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/en_US/LC_MESSAGES/messages.po @@ -2542,16 +2542,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/es/LC_MESSAGES/messages.po b/changedetectionio/translations/es/LC_MESSAGES/messages.po index 2f0aff716..89f176bcf 100644 --- a/changedetectionio/translations/es/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/es/LC_MESSAGES/messages.po @@ -2609,16 +2609,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/fr/LC_MESSAGES/messages.po b/changedetectionio/translations/fr/LC_MESSAGES/messages.po index 04904ab9f..61c3cc38a 100644 --- a/changedetectionio/translations/fr/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/fr/LC_MESSAGES/messages.po @@ -2553,16 +2553,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/id/LC_MESSAGES/messages.po b/changedetectionio/translations/id/LC_MESSAGES/messages.po index dfaf6b2f9..f06c24dbf 100644 --- a/changedetectionio/translations/id/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/id/LC_MESSAGES/messages.po @@ -2651,16 +2651,18 @@ msgstr "Saat ini normal" msgid "Currently high" msgstr "Saat ini tinggi" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/it/LC_MESSAGES/messages.po b/changedetectionio/translations/it/LC_MESSAGES/messages.po index 141500c2e..9d3e7e4e1 100644 --- a/changedetectionio/translations/it/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/it/LC_MESSAGES/messages.po @@ -2544,16 +2544,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/ja/LC_MESSAGES/messages.po b/changedetectionio/translations/ja/LC_MESSAGES/messages.po index 7cda5b383..6ae0e2923 100644 --- a/changedetectionio/translations/ja/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/ja/LC_MESSAGES/messages.po @@ -2561,16 +2561,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/ko/LC_MESSAGES/messages.po b/changedetectionio/translations/ko/LC_MESSAGES/messages.po index 1d6914914..dd4da9283 100644 --- a/changedetectionio/translations/ko/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/ko/LC_MESSAGES/messages.po @@ -2552,16 +2552,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/messages.pot b/changedetectionio/translations/messages.pot index e056eda00..548abcb8b 100644 --- a/changedetectionio/translations/messages.pot +++ b/changedetectionio/translations/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: changedetection.io 0.60.3\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-09-09 17:50+0200\n" +"POT-Creation-Date: 2026-09-09 18:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2541,16 +2541,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/pl/LC_MESSAGES/messages.po b/changedetectionio/translations/pl/LC_MESSAGES/messages.po index 7aac1d4cd..872555891 100644 --- a/changedetectionio/translations/pl/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/pl/LC_MESSAGES/messages.po @@ -2697,16 +2697,18 @@ msgstr "Obecnie typowe" msgid "Currently high" msgstr "Obecnie wysoki" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po index 8f424781c..a48e1afbb 100644 --- a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po @@ -2590,16 +2590,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/ru/LC_MESSAGES/messages.po b/changedetectionio/translations/ru/LC_MESSAGES/messages.po index f84756789..56ed6676d 100644 --- a/changedetectionio/translations/ru/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/ru/LC_MESSAGES/messages.po @@ -2656,16 +2656,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/tr/LC_MESSAGES/messages.po b/changedetectionio/translations/tr/LC_MESSAGES/messages.po index d52a137d4..5e8fc7dd5 100644 --- a/changedetectionio/translations/tr/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/tr/LC_MESSAGES/messages.po @@ -2595,16 +2595,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/uk/LC_MESSAGES/messages.po b/changedetectionio/translations/uk/LC_MESSAGES/messages.po index ccf3e5aec..42c74b864 100644 --- a/changedetectionio/translations/uk/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/uk/LC_MESSAGES/messages.po @@ -2574,16 +2574,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/zh/LC_MESSAGES/messages.po b/changedetectionio/translations/zh/LC_MESSAGES/messages.po index 429faec26..9e1d9624d 100644 --- a/changedetectionio/translations/zh/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/zh/LC_MESSAGES/messages.po @@ -2548,16 +2548,18 @@ msgstr "" msgid "Currently high" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" msgstr "" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" msgstr "" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html diff --git a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index 1860a57ba70578f16ba7ba556d5a54c990e60fd3..6c3969519294047fbec24a92e87f40dade500369 100644 GIT binary patch literal 106670 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¬ZL+)QotsEzWV;o^M9(Nu#1L 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 to disable" -msgstr "" +msgstr "設為 0 以停用" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/blueprint/ui/templates/edit.html msgid "Limit collection of history snapshots for each watch to this number of history items." -msgstr "" +msgstr "將每個監測任務的歷史快照收集限制為此歷史項目數量。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Set to empty to disable / no limit" -msgstr "" +msgstr "留空以停用 / 不限制" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Password protection for your changedetection.io application." -msgstr "" +msgstr "您的 changedetection.io 應用程式密碼保護。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Password is locked." -msgstr "" +msgstr "密碼已鎖定。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Clear Snapshot History" @@ -588,7 +588,7 @@ msgstr "啟用密碼時允許匿名存取監測歷史頁面" #: changedetectionio/blueprint/settings/templates/settings.html msgid "When a request returns no content, or the HTML does not contain any text, is this considered a change?" -msgstr "" +msgstr "當請求未傳回任何內容,或 HTML 不包含任何文字時,是否將其視為變更?" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Choose a default proxy for all watches" @@ -616,15 +616,15 @@ msgstr "這會等待 n 秒後才提取文字。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Number of concurrent workers to process watches. More workers = faster processing but higher memory usage." -msgstr "" +msgstr "處理監測任務的並行工作程序數量。更多工作程序 = 處理速度更快,但記憶體使用量更高。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Currently running:" -msgstr "目前運行:" +msgstr "目前執行中:" #: changedetectionio/blueprint/settings/templates/settings.html msgid "operational" -msgstr "運行中" +msgstr "運作中" #: changedetectionio/blueprint/settings/templates/settings.html msgid "workers" @@ -636,27 +636,27 @@ msgstr "活躍處理中" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Example - 3 seconds random jitter could trigger up to 3 seconds earlier or up to 3 seconds later" -msgstr "" +msgstr "範例 - 3 秒的隨機抖動可能會提早最多 3 秒或延後最多 3 秒觸發" #: changedetectionio/blueprint/settings/templates/settings.html msgid "For regular plain requests (not chrome based), maximum number of seconds until timeout, 1-999." -msgstr "" +msgstr "對於一般常規請求(非基於 Chrome),逾時前的最大秒數,1-999。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Applied to all requests." -msgstr "" +msgstr "套用至所有請求。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Note: Simply changing the User-Agent often does not defeat anti-robot technologies, it's important to consider" -msgstr "" +msgstr "注意:僅更改 User-Agent 通常無法破解反機器人技術,考慮瀏覽器被偵測的所有方式非常重要" #: changedetectionio/blueprint/settings/templates/settings.html msgid "all of the ways that the browser is detected" -msgstr "" +msgstr "瀏覽器被偵測的所有方式" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Connect using Bright Data proxies, find out more here." -msgstr "" +msgstr "使用 Bright Data 代理伺服器進行連線,在此處了解更多資訊。" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/blueprint/ui/templates/diff.html #: changedetectionio/blueprint/ui/templates/edit.html changedetectionio/templates/_common_fields.html @@ -665,7 +665,7 @@ msgstr "提示:" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Ignore whitespace, tabs and new-lines/line-feeds when considering if a change was detected." -msgstr "" +msgstr "判斷是否檢測到變更時,忽略空白、定位字元(Tabs)和換行符號(New-lines / Line-feeds)。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Note:" @@ -673,59 +673,59 @@ msgstr "注意:" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Changing this will change the status of your existing watches, possibly trigger alerts etc." -msgstr "" +msgstr "變更此項將會改變您現有監測任務的狀態,並可能觸發警報等。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Render anchor tag content, default disabled, when enabled renders links as" -msgstr "" +msgstr "渲染超連結(Anchor Tag)內容,預設停用,啟用時會將連結渲染為" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Changing this could affect the content of your existing watches, possibly trigger alerts etc." -msgstr "" +msgstr "變更此項可能會影響您現有監測任務的內容,並可能觸發警報等。" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/templates/edit/include_subtract.html msgid "Remove HTML element(s) by CSS and XPath selectors before text conversion." -msgstr "" +msgstr "在進行文字轉換之前,透過 CSS 和 XPath 選擇器移除 HTML 元素。" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/templates/edit/include_subtract.html msgid "Don't paste HTML here, use only CSS and XPath selectors" -msgstr "" +msgstr "請勿在此處貼上 HTML,僅使用 CSS 和 XPath 選擇器" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/templates/edit/include_subtract.html msgid "Add multiple elements, CSS or XPath selectors per line to ignore multiple parts of the HTML." -msgstr "" +msgstr "每行新增多個元素、CSS 或 XPath 選擇器,以忽略 HTML 的多個部分。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Note: This is applied globally in addition to the per-watch rules." -msgstr "" +msgstr "注意:除了每個監測任務的規則外,此設定還會套用至全域。" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/templates/edit/text-options.html msgid "Matching text will be ignored in the text snapshot (you can still see it but it wont trigger a change)" -msgstr "" +msgstr "符合的文字在文字快照中將被忽略(您仍然可以看到它,但它不會觸發變更)" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/templates/edit/text-options.html msgid "Each line processed separately, any line matching will be ignored (removed before creating the checksum)" -msgstr "" +msgstr "每行獨立處理,任何符合的行都將被忽略(在建立總和檢查碼 Checksum 之前移除)" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/templates/edit/text-options.html msgid "Regular Expression support, wrap the entire line in forward slash" -msgstr "" +msgstr "支援正規表示式(Regular Expression),請將整行包裹在斜線 / 中" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/templates/edit/text-options.html msgid "Changing this will affect the comparison checksum which may trigger an alert" -msgstr "" +msgstr "變更此項將會影響比對的總和檢查碼(Checksum),這可能會觸發警報" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Remove any text that appears in the \"Ignore text\" from the output (otherwise its just ignored for change-detection)" -msgstr "" +msgstr "自輸出中移除任何出現在「忽略文字」中的文字(否則它只是在變更檢測時被忽略)" #: changedetectionio/blueprint/settings/templates/settings.html msgid "API Access" -msgstr "" +msgstr "API 存取" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Drive your changedetection.io via API, More about" -msgstr "" +msgstr "透過 API 驅動您的 changedetection.io,更多關於" #: changedetectionio/blueprint/settings/templates/settings.html msgid "API access and examples here" @@ -733,19 +733,19 @@ msgstr "幫助與範例請見此處" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Restrict API access limit by using" -msgstr "" +msgstr "透過使用以下項目來限制 API 存取限制" #: changedetectionio/blueprint/settings/templates/settings.html msgid "header - required for the Chrome Extension to work" -msgstr "" +msgstr "標頭 - 這是 Chrome 擴充功能運作所必需的" #: changedetectionio/blueprint/settings/templates/settings.html msgid "copy" -msgstr "" +msgstr "複製" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Regenerate API key" -msgstr "" +msgstr "重新產生 API 金鑰" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Chrome Extension" @@ -753,43 +753,43 @@ msgstr "Chrome 擴充功能" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Easily add any web-page to your changedetection.io installation from within Chrome." -msgstr "" +msgstr "從 Chrome 內部輕鬆將任何網頁新增至您的 changedetection.io 安裝中。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Step 1" -msgstr "" +msgstr "步驟 1" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Install the extension," -msgstr "" +msgstr "安裝擴充功能," #: changedetectionio/blueprint/settings/templates/settings.html msgid "Step 2" -msgstr "" +msgstr "步驟 2" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Navigate to this page," -msgstr "" +msgstr "導覽至此頁面," #: changedetectionio/blueprint/settings/templates/settings.html msgid "Step 3" -msgstr "" +msgstr "步驟 3" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Open the extension from the toolbar and click" -msgstr "" +msgstr "從工具列開啟擴充功能並點擊" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Sync API Access" -msgstr "" +msgstr "同步 API 存取" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Try our new Chrome Extension!" -msgstr "" +msgstr "試試我們全新的 Chrome 擴充功能!" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Chrome store icon" -msgstr "" +msgstr "Chrome 線上應用程式商店圖示" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Chrome Webstore" @@ -797,57 +797,57 @@ msgstr "Chrome 線上應用程式商店" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Maximum number of history snapshots to include in the watch specific RSS feed." -msgstr "" +msgstr "特定監測任務 RSS Feed 中包含的歷史快照最大數量。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "For watching other RSS feeds - When watching RSS/Atom feeds, convert them into clean text for better change detection." -msgstr "" +msgstr "用於監測其他 RSS Feed - 監測 RSS / Atom Feed 時,將它們轉換為純文字以進行更好的變更檢測。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Does your reader support HTML? Set it here" -msgstr "" +msgstr "您的閱讀器支援 HTML 嗎?在此處設定" #: changedetectionio/blueprint/settings/templates/settings.html msgid "'System default' for the same template for all items, or re-use your \"Notification Body\" as the template." -msgstr "" +msgstr "所有項目皆使用相同範本的「系統預設」,或重複使用您的「通知內容」作為範本。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Ensure the settings below are correct, they are used to manage the time schedule for checking your web page watches." -msgstr "" +msgstr "請確保以下設定正確,它們用於管理檢查您網頁監測任務的時間排程。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "UTC Time & Date from Server:" -msgstr "" +msgstr "來自伺服器的 UTC 時間與日期:" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Local Time & Date in Browser:" -msgstr "" +msgstr "瀏覽器中的本地時間與日期:" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Enable this setting to open the diff page in a new tab. If disabled, the diff page will open in the current tab." -msgstr "" +msgstr "啟用此設定以在新分頁中開啟差異(Diff)頁面。如果停用,差異頁面將在目前分頁中開啟。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Realtime UI Updates Enabled - (Restart required if this is changed)" -msgstr "" +msgstr "已啟用即時 UI 更新 -(若變更此項需要重新啟動)" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Enable or Disable Favicons next to the watch list" -msgstr "" +msgstr "啟用或停用監測列表旁的網站圖示(Favicons)" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Number of items per page in the watch overview list, 0 to disable." -msgstr "" +msgstr "監測概覽列表中每頁的項目數量,設為 0 以停用。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "How \"Checked\" and \"Changed\" times are shown in the watch overview list." -msgstr "" +msgstr "「檢查時間」和「變更時間」在監測概覽列表中的顯示方式。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "" "\"Collapsed icon rail\" keeps the left navigation slim and reveals labels on mouse-over; \"Always expanded\" keeps " "labels visible." -msgstr "" +msgstr "「摺疊式圖示列」可保持左側導覽列精簡,並在滑鼠懸停時顯示標籤;「一律展開」則讓標籤保持可見。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Tip" @@ -855,21 +855,21 @@ msgstr "提示" #: changedetectionio/blueprint/settings/templates/settings.html msgid "\"Residential\" and \"Mobile\" proxy type can be more successful than \"Data Center\" for blocked websites." -msgstr "" +msgstr "對於被封鎖的網站,「住宅」與「行動網路」代理伺服器類型可能比「資料中心」更容易成功。" #: changedetectionio/blueprint/settings/templates/settings.html msgid "\"Name\" will be used for selecting the proxy in the Watch Edit settings" -msgstr "" +msgstr "「名稱」將用於在監測任務編輯設定中選擇代理伺服器" #: changedetectionio/blueprint/settings/templates/settings.html msgid "" "SOCKS5 proxies with authentication are only supported with 'plain requests' fetcher, for other fetchers you should " "whitelist the IP access instead" -msgstr "" +msgstr "僅「純文字請求」抓取器支援需要驗證的 SOCKS5 代理伺服器,對於其他抓取器,您應該改為將 IP 存取列入白名單" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Uptime:" -msgstr "" +msgstr "運行時間:" #: changedetectionio/blueprint/settings/templates/settings.html msgid "Python version:" @@ -895,105 +895,105 @@ msgstr "使用量" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Overview" -msgstr "" +msgstr "概覽" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Provider" -msgstr "" +msgstr "供應商" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Prompts" -msgstr "" +msgstr "提示詞" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Behaviour" -msgstr "" +msgstr "行為" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "AI-powered change monitoring" -msgstr "" +msgstr "AI 驅動的變更監測" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Connect an LLM to move from \"something changed\" to \"only the thing you care about changed\"." -msgstr "" +msgstr "連線大型語言模型(LLM),從「有內容變更」提升至「只有您關心的內容變更」。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Intent filtering" -msgstr "" +msgstr "意圖過濾" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format msgid "" "Each watch or tag can carry a plain-text intent — %(ex1)s or %(ex2)s. On every detected change the AI evaluates the " "diff against it and suppresses irrelevant noise." -msgstr "" +msgstr "每個監測任務或標籤都可以包含純文字意圖 — %(ex1)s 或 %(ex2)s。在每次檢測到變更時,AI 會根據該意圖評估差異(Diff)並抑制不相關的雜訊。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format msgid "" "Tip: intent evaluation benefits from a capable model — recommended %(local)s locally, or %(gpt)s / %(gemini)s. Very " "small models (≤3B) may misjudge numeric comparisons." -msgstr "" +msgstr "提示:意圖評估受益於效能較佳的模型 — 本地推薦 %(local)s,或雲端 %(gpt)s / %(gemini)s。極小型模型(≤3B)可能會誤判數值比較。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format msgid "" "Instead of raw diffs, receive plain-language summaries in notifications — %(ex1)s or %(ex2)s. Set a global default " "prompt here, or override per watch or tag." -msgstr "" +msgstr "在通知中接收通俗易懂的語言摘要,而非原始差異 — %(ex1)s 或 %(ex2)s。在此處設定全域預設提示詞,或針對每個監測任務或標籤進行獨立覆寫。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Minimal cost" -msgstr "" +msgstr "極低成本" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format msgid "" "The AI sees only a unified diff of what changed — never full page HTML. Low-cost models like %(gpt)s or %(gemini)s " "handle this well, typically fractions of a cent per check." -msgstr "" +msgstr "AI 僅會看到變更內容的統一差異(Unified Diff)— 絕非全頁 HTML。像 %(gpt)s 或 %(gemini)s 這樣的低成本模型可以很好地處理此任務,每次檢查通常只需幾分之一個美分。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "AI / LLM configured:" -msgstr "" +msgstr "已設定 AI / LLM:" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Configure AI Provider" -msgstr "" +msgstr "設定 AI 供應商" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "AI Provider" -msgstr "" +msgstr "AI 供應商" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Master switch — when off, all AI lookups are skipped even if a provider is configured below." -msgstr "" +msgstr "總開關 — 關閉時,即使下方已設定供應商,也將跳過所有 AI 查詢。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Third-party data transfer — please read" -msgstr "" +msgstr "第三方資料傳輸 — 請閱讀" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "When AI features are active, change data from the websites you monitor — including page diffs and extracted text — is" " sent to an external AI provider of your choice." -msgstr "" +msgstr "當 AI 功能啟用時,來自您監測網站的變更資料 — 包括網頁差異(Diff)和提取的文字 — 將會發送至您選擇的外部 AI 供應商。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "You are solely responsible for ensuring this complies with the terms of service of each website you monitor." -msgstr "" +msgstr "您必須全權負責確保此行為符合您監測之每個網站服務條款。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "You are solely responsible for compliance with applicable data-protection laws (e.g. GDPR) regarding any personal " "data that may appear in monitored content." -msgstr "" +msgstr "對於可能出現在監測內容中的任何個人資料,您必須全權負責遵守適用的資料保護法規(例如 GDPR)。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "API costs charged by your chosen provider are your own responsibility; this software has no visibility into or " "control over those charges." -msgstr "" +msgstr "您選擇的供應商所收取的 API 費用由您自行承擔;本軟體無法查看或控制這些費用。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" @@ -1002,39 +1002,41 @@ msgid "" "AI output must never be relied upon as complete or accurate. This software is provided as-is with no warranty of any " "kind." msgstr "" +"眾所皆知,AI / LLM 模型會產生幻覺(Hallucinate)— 帶著顯著的自信產出聽起來合理但實際上錯誤或完全捏造的輸出 — 且在設計上可能會在摘要過程中省略或截斷相關資料。絕不能依賴 AI " +"輸出的完整性或準確性。本軟體按原樣提供,不提供任何形式的保固。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "By enabling AI features you personally indemnify and hold harmless the creator(s) and contributor(s) of this software" " from any claims, damages, or liability arising from this data transfer or your use of AI features." -msgstr "" +msgstr "啟用 AI 功能即表示您個人同意賠償並使本軟體的創作者和貢獻者免受因該資料傳輸或您使用 AI 功能而產生的任何索賠、損害或責任。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "I have read and understood the above. I accept full responsibility and indemnify the creator(s) of this software." -msgstr "" +msgstr "我已閱讀並理解上述內容。我承擔全部責任並保障本軟體創作者免受損害。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html changedetectionio/templates/_common_fields.html msgid "Note" -msgstr "" +msgstr "注意" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format msgid "" "AI / LLM is configured via environment variables (LLM_MODEL=%(model)s%(api_base)s). Remove the " "LLM_MODEL environment variable to configure via this form instead." -msgstr "" +msgstr "AI / LLM 是透過環境變數(LLM_MODEL=%(model)s%(api_base)s)設定的。請移除 LLM_MODEL 環境變數以改為透過此表單進行設定。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "select a provider" -msgstr "" +msgstr "選擇供應商" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "OpenAI-compatible (vLLM, LM Studio, llama.cpp)" -msgstr "" +msgstr "與 OpenAI 相容(vLLM、LM Studio、llama.cpp)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Only needed for Ollama or custom/self-hosted endpoints. Leave blank for cloud providers." -msgstr "" +msgstr "僅適用於 Ollama 或自訂 / 自行架設的端點。雲端供應商請留空。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format @@ -1045,34 +1047,37 @@ msgid "" "Applied to Ollama and OpenAI-compatible endpoints — other cloud providers (OpenAI, Anthropic, Gemini) keep their " "original tight caps." msgstr "" +"推理模型(Qwen3、DeepSeek-R1、Gemma 3 等)會在給出最終答案之前輸出思考鏈(Chain-of-thought)。此乘數會放大該端點的每個 max_tokens " +"上限,以留出推理空間。預設為 %(default)s;如果回應遭到截斷或為空,請將其調高;如果您希望在付費端點上設定更嚴格的限制,請將其調低(最低至 1x)。套用至 Ollama 和與 OpenAI 相容的端點 — " +"其他雲端供應商(OpenAI、Anthropic、Gemini)則保持其原本嚴格的上限。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Load available models" -msgstr "" +msgstr "載入可用模型" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Available models" -msgstr "" +msgstr "可用模型" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "choose a model" -msgstr "" +msgstr "選擇模型" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Enter API key and click 'Load available models'" -msgstr "" +msgstr "輸入 API 金鑰並點擊「載入可用模型」" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Remove AI / LLM configuration?" -msgstr "" +msgstr "是否移除 AI / LLM 設定?" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "This will remove your saved AI provider, model, and API key." -msgstr "" +msgstr "這將會移除您儲存的 AI 供應商、模型和 API 金鑰。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Remove" -msgstr "" +msgstr "移除" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #: changedetectionio/blueprint/ui/templates/clear_all_history.html changedetectionio/templates/base.html @@ -1081,225 +1086,225 @@ msgstr "取消" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Test connection" -msgstr "" +msgstr "測試連線" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "Your API key is stored locally and sent only to your chosen provider. On each detected change, the watch's diff and " "extracted text are sent to the LLM — no full page HTML." -msgstr "" +msgstr "您的 API 金鑰儲存在本地,且僅發送至您選擇的供應商。在每次檢測到變更時,監測任務的差異(Diff)和提取的文字會被發送至 LLM — 絕非全頁 HTML。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Cache" -msgstr "" +msgstr "快取" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Clear all summary cache?" -msgstr "" +msgstr "是否清除所有摘要快取?" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "This will remove all cached AI change summaries across all watches." -msgstr "" +msgstr "這將移除所有監測任務中所有已快取的 AI 變更摘要。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "They will be regenerated on the next check." -msgstr "" +msgstr "它們將在下次檢查時重新產生。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Clear cache" -msgstr "" +msgstr "清除快取" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Clear all summary cache" -msgstr "" +msgstr "清除所有摘要快取" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Removes all cached AI change summaries across all watches. They will be regenerated on the next check." -msgstr "" +msgstr "移除所有監測任務中所有已快取的 AI 變更摘要。它們將在下次檢查時重新產生。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "Enables litellm verbose output (routed through loguru). Useful when diagnosing provider errors or empty responses. " "Leave off in production — generates a lot of log volume." -msgstr "" +msgstr "啟用 litellm 詳細輸出(透過 loguru 路由)。在診斷供應商錯誤或空回應時非常有用。在生產環境中請保持關閉 — 這會產生大量的日誌量。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Default AI Change Summary" -msgstr "" +msgstr "預設 AI 變更摘要" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Used for all watches unless overridden by the watch or its tag/group." -msgstr "" +msgstr "用於所有監測任務,除非被監測任務或其標籤 / 群組覆寫。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #: changedetectionio/templates/edit/include_llm_intent.html msgid "Modify default prompt" -msgstr "" +msgstr "修改預設提示詞" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format msgid "" "When enabled, the %(diff)s notification token shows the AI summary instead of the raw diff. Use " "%(raw_diff)s to always get the original." -msgstr "" +msgstr "啟用時,%(diff)s 通知權杖將顯示 AI 摘要而非原始差異(Diff)。使用 %(raw_diff)s 以一律獲取原始內容。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "When enabled, the AI will be used as a last resort to extract price and stock status from product pages where no " "structured metadata (JSON-LD, microdata, OpenGraph) is found." -msgstr "" +msgstr "啟用時,在找不到結構化中繼資料(JSON-LD、微資料 microdata、OpenGraph)的產品網頁上,AI 將被用作提取價格和庫存狀態的最後手段。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "For Gemini 2.5+ models only. Thinking tokens improve reasoning quality but count against the output budget. Set to " "Off if summaries are being cut short." -msgstr "" +msgstr "僅適用於 Gemini 2.5+ 模型。思考權杖(Thinking Tokens)可提高推理品質,但會計入輸出配額。如果摘要遭到截斷,請設為關閉(Off)。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "Upper limit on tokens the AI may use when writing a change summary. Higher values allow longer summaries but cost " "more." -msgstr "" +msgstr "AI 撰寫變更摘要時可使用的權杖(Tokens)上限。較高的值允許較長的摘要,但成本更高。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Which baseline the watchlist “Summary” link compares the latest version against by default." -msgstr "" +msgstr "設定監測列表「摘要」連結在預設情況下,要將最新版本與哪一個基準版本進行比對。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Configure a provider first to unlock behaviour settings." -msgstr "" +msgstr "請先設定供應商以解鎖行為設定。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Token & Cost Tracking" -msgstr "" +msgstr "權杖與成本追蹤" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "This month" -msgstr "" +msgstr "本月" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "tokens" -msgstr "" +msgstr "權杖" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format msgid "%(percent)s%% of %(budget)s" -msgstr "" +msgstr "%(percent)s%% / %(budget)s" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "All-time total" -msgstr "" +msgstr "歷史總計" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Monthly token budget reached. AI summarisation is paused until next month." -msgstr "" +msgstr "已達每月權杖配額上限。AI 摘要功能已暫停,直到下個月恢復。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Token budget this period" -msgstr "" +msgstr "此週期的權杖配額" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "(set via LLM_TOKEN_BUDGET_MONTH)" -msgstr "" +msgstr "(透過 LLM_TOKEN_BUDGET_MONTH 設定)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "0 = unlimited" -msgstr "" +msgstr "0 = 不限制" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "tokens (0 = unlimited)" -msgstr "" +msgstr "權杖(0 = 不限制)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Current billing period" -msgstr "" +msgstr "目前計費週期" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "(set via LLM_MAX_INPUT_CHARS)" -msgstr "" +msgstr "(透過 LLM_MAX_INPUT_CHARS 設定)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format msgid "characters — currently enforcing: %(limit)s" -msgstr "" +msgstr "個字元 — 目前強制執行:%(limit)s" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "" "tokens — skips AI evaluation on a watch once its usage within the current period (monthly) hits this cap (0 = " "unlimited)" -msgstr "" +msgstr "權杖 — 當監測任務在目前週期(每月)內的使用量達到此上限時,將跳過該監測任務的 AI 評估(0 = 不限制)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "No AI usage recorded yet." -msgstr "" +msgstr "尚無 AI 使用記錄。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Token budget" -msgstr "" +msgstr "權杖配額" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "tokens per month (0 = unlimited)" -msgstr "" +msgstr "每月權杖(0 = 不限制)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "platform.openai.com → API keys" -msgstr "" +msgstr "platform.openai.com → API 金鑰" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "console.anthropic.com → API keys" -msgstr "" +msgstr "console.anthropic.com → API 金鑰" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "aistudio.google.com → Get API key" -msgstr "" +msgstr "aistudio.google.com → 獲取 API 金鑰" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "No API key needed for local Ollama" -msgstr "" +msgstr "本地 Ollama 不需要 API 金鑰" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Bearer token for your self-hosted server (vLLM, LM Studio, etc.)" -msgstr "" +msgstr "您自行架設伺服器的 Bearer 權杖(vLLM、LM Studio 等)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "openrouter.ai → Keys" -msgstr "" +msgstr "openrouter.ai → 金鑰" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Select a provider first." -msgstr "" +msgstr "請先選擇供應商。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Loading…" -msgstr "" +msgstr "載入中 ..." #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "No models returned by the provider." -msgstr "" +msgstr "供應商未傳回任何模型。" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "— choose a model —" -msgstr "" +msgstr "— 選擇模型 —" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "models available with your key" -msgstr "" +msgstr "個可用模型(搭配您的金鑰)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Request failed" -msgstr "" +msgstr "請求失敗" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Testing…" -msgstr "" +msgstr "測試中 ..." #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Connected" -msgstr "" +msgstr "已連線" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "Failed" -msgstr "" +msgstr "失敗" #: changedetectionio/blueprint/tags/__init__.py #, python-brace-format @@ -1316,11 +1321,11 @@ msgstr "標籤已刪除,正在背景從監測任務中移除" #: changedetectionio/blueprint/tags/__init__.py msgid "Unlinking tag from watches in background" -msgstr "" +msgstr "正在背景解除標籤與監測任務的連結" #: changedetectionio/blueprint/tags/__init__.py msgid "All tags deleted, clearing from watches in background" -msgstr "" +msgstr "所有標籤已刪除,正在背景從監測任務中清除" #: changedetectionio/blueprint/tags/__init__.py msgid "Tag not found" @@ -1332,19 +1337,19 @@ msgstr "已更新" #: changedetectionio/blueprint/tags/form.py msgid "Activate for individual watches in this tag/group?" -msgstr "" +msgstr "是否為此標籤 / 群組中的個別監測任務啟用?" #: changedetectionio/blueprint/tags/form.py msgid "Auto-apply to watches with URLs matching" -msgstr "" +msgstr "自動套用至 URL 符合以下條件的監測任務" #: changedetectionio/blueprint/tags/form.py msgid "e.g. *://example.com/* or github.com/myorg" -msgstr "" +msgstr "例如 *://example.com/* 或 github.com/myorg" #: changedetectionio/blueprint/tags/form.py changedetectionio/blueprint/tags/templates/edit-tag.html msgid "Tag colour" -msgstr "" +msgstr "標籤顏色" #: changedetectionio/blueprint/tags/form.py msgid "Must be a hex colour, for example #4f8ef7" @@ -1368,7 +1373,7 @@ msgstr "" #: changedetectionio/blueprint/tags/form.py msgid "Tag name" -msgstr "" +msgstr "標籤名稱" #: changedetectionio/blueprint/tags/templates/edit-tag.html changedetectionio/blueprint/ui/templates/edit.html msgid "Filters & Triggers" @@ -1378,19 +1383,19 @@ msgstr "過濾器與觸發器" msgid "" "Automatically applies this tag to any watch whose URL matches. Supports wildcards: *example.com* or " "plain substring: github.com/myorg" -msgstr "" +msgstr "自動將此標籤套用至任何 URL 符合條件的監測任務。支援萬用字元:*example.com* 或純字串:github.com/myorg" #: changedetectionio/blueprint/tags/templates/edit-tag.html msgid "Currently matching watches" -msgstr "" +msgstr "目前符合的監測任務" #: changedetectionio/blueprint/tags/templates/edit-tag.html msgid "Custom colour" -msgstr "" +msgstr "自訂顏色" #: changedetectionio/blueprint/tags/templates/edit-tag.html msgid "Leave unchecked to use the auto-generated colour based on the tag name." -msgstr "" +msgstr "保持未勾選以使用根據標籤名稱自動產生的顏色。" #. CJK fonts lack native italics; allow substitution with conventional local styling. dennis-ignore: W303 #: changedetectionio/blueprint/tags/templates/edit-tag.html @@ -1422,7 +1427,7 @@ msgstr "注意!" msgid "" "There are system-wide notification URLs enabled, this form will override notification " "settings for this watch only ‐ an empty Notification URL list here will still send notifications." -msgstr "目前有已啟用的全系統通知 URL,此表單將僅覆寫此監測任務的通知設定 ‐ 此處留空的通知 URL 列表仍會發送通知。" +msgstr "目前有 已啟用的全系統通知 URL,此表單將僅覆寫此監測任務的通知設定 ‐ 此處留空的通知 URL 列表仍會發送通知。" #: changedetectionio/blueprint/tags/templates/edit-tag.html changedetectionio/blueprint/ui/templates/edit.html msgid "Use system defaults" @@ -1446,7 +1451,7 @@ msgstr "標籤 / 名稱" #: changedetectionio/blueprint/tags/templates/groups-overview.html msgid "No website organisational tags/groups configured" -msgstr "未設定群組/標籤" +msgstr "未設定群組 / 標籤" #: changedetectionio/blueprint/tags/templates/groups-overview.html changedetectionio/templates/menu.html msgid "Mute notifications" @@ -1557,20 +1562,20 @@ msgstr "{} 個監測任務已設為使用預設通知設定" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format msgid "Browser / fetch method updated on {} watches" -msgstr "" +msgstr "已更新 {} 個監測任務的瀏覽器 / 抓取方式" #: changedetectionio/blueprint/ui/__init__.py msgid "Invalid browser / fetch method selected" -msgstr "" +msgstr "選擇了無效的瀏覽器 / 抓取方式" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format msgid "Proxy updated on {} watches" -msgstr "" +msgstr "已更新 {} 個監測任務的代理伺服器" #: changedetectionio/blueprint/ui/__init__.py msgid "Invalid proxy selected" -msgstr "" +msgstr "選擇了無效的代理伺服器" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -1588,11 +1593,11 @@ msgstr "已清除監測任務 {} 的快照歷史記錄" #: changedetectionio/blueprint/ui/__init__.py changedetectionio/blueprint/ui/templates/clear_all_history.html msgid "clear" -msgstr "clear" +msgstr "清除" #: changedetectionio/blueprint/ui/__init__.py msgid "History clearing started in background" -msgstr "" +msgstr "已在背景開始清除歷史記錄" #: changedetectionio/blueprint/ui/__init__.py msgid "Incorrect confirmation text." @@ -1631,7 +1636,7 @@ msgstr "已將 {} 個監測任務排入複查佇列。" #: changedetectionio/blueprint/ui/__init__.py msgid "Queueing watches for rechecking in background..." -msgstr "背景將監測任務排入複查佇列..." +msgstr "背景將監測任務排入複查佇列 ..." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -1653,7 +1658,7 @@ msgstr "歷史記錄不足(需要 2 個快照)以顯示此監測任務的差 #: changedetectionio/blueprint/ui/diff.py #, python-format msgid "Monthly AI token budget of %(budget)s tokens reached (%(used)s used). Resets next month." -msgstr "" +msgstr "已達到每月 %(budget)s 權杖的 AI 權杖配額(已使用 %(used)s)。將於下個月重置。" #: changedetectionio/blueprint/ui/edit.py msgid "No watches to edit" @@ -1672,20 +1677,20 @@ msgstr "已切換至模式 - {}。" #: changedetectionio/blueprint/ui/edit.py #, python-brace-format msgid "Could not load '{}' processor, processor plugin might be missing. Please select a different processor." -msgstr "" +msgstr "無法載入「{}」處理器,可能缺少處理器外掛程式。請選擇不同的處理器。" #: changedetectionio/blueprint/ui/edit.py #, python-brace-format msgid "Could not load '{}' processor, processor plugin might be missing." -msgstr "" +msgstr "無法載入「{}」處理器,可能缺少處理器外掛程式。" #: changedetectionio/blueprint/ui/edit.py changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "System settings default" -msgstr "" +msgstr "系統設定預設值" #: changedetectionio/blueprint/ui/edit.py changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Default" -msgstr "" +msgstr "預設值" #: changedetectionio/blueprint/ui/edit.py msgid "Updated watch - unpaused!" @@ -1701,7 +1706,7 @@ msgstr "預覽無法使用 - 未完成抓取 / 檢查或未觸發" #: changedetectionio/blueprint/ui/preview.py msgid "Diff" -msgstr "" +msgstr "差異" #: changedetectionio/blueprint/ui/queue.py changedetectionio/blueprint/watchlist/__init__.py #, python-brace-format @@ -1710,16 +1715,16 @@ msgstr "顯示第 {start} - {end} 條{record_name},共 {total} #: changedetectionio/blueprint/ui/queue.py msgid "queued items" -msgstr "" +msgstr "個排程項目" #: changedetectionio/blueprint/ui/queue.py #, python-brace-format msgid "Queue cleared ({} items removed)." -msgstr "" +msgstr "已清除排程佇列(已移除 {} 個項目)。" #: changedetectionio/blueprint/ui/templates/clear_all_history.html msgid "This will remove version history (snapshots) for ALL watches, but keep your list of URLs!" -msgstr "這將移除「所有」監測任務的版本歷史記錄(快照),但保留您的 URL 列表!" +msgstr "這將移除「所有」監測任務的版本歷史記錄(快照),外加保留您的 URL 列表!" #: changedetectionio/blueprint/ui/templates/clear_all_history.html msgid "You may like to use the" @@ -1807,11 +1812,11 @@ msgstr "已替換" #: changedetectionio/blueprint/ui/templates/diff.html msgid "Include all intermediate snapshots between the selected versions in the AI summary" -msgstr "" +msgstr "在 AI 摘要中包含所選版本之間的所有中間快照" #: changedetectionio/blueprint/ui/templates/diff.html msgid "AI: every change between versions" -msgstr "" +msgstr "AI:版本之間的所有變更" #: changedetectionio/blueprint/ui/templates/diff.html changedetectionio/blueprint/ui/templates/preview.html msgid "Keyboard:" @@ -1876,7 +1881,7 @@ msgstr "專業提示:您可以於設定中啟用 「啟用密碼時分 #: changedetectionio/blueprint/ui/templates/diff.html changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Generating change summary…" -msgstr "" +msgstr "正在產生變更摘要 ..." #: changedetectionio/blueprint/ui/templates/diff.html msgid "Goto single snapshot" @@ -1888,7 +1893,7 @@ msgstr "反白文字以分享或新增至忽略列表。" #: changedetectionio/blueprint/ui/templates/diff.html msgid "Download difference patch" -msgstr "" +msgstr "下載差異修補檔(Patch)" #: changedetectionio/blueprint/ui/templates/diff.html changedetectionio/blueprint/ui/templates/preview.html msgid "For now, Differences are performed on text, not graphically, only the latest screenshot is available." @@ -1946,11 +1951,11 @@ msgstr "幫助與範例請見此處" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Organisational tag/group name used in the main listing page" -msgstr "群組/標籤名稱" +msgstr "群組 / 標籤名稱" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Also automatically applied by URL pattern:" -msgstr "" +msgstr "也會透過 URL 模式自動套用:" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Automatically uses the page title if found, you can also use your own title/description here" @@ -1970,7 +1975,7 @@ msgstr "每次檢查之間的間隔 / 時間量。" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Set to empty to use system settings default" -msgstr "" +msgstr "留空以使用系統設定預設值" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Connect using Bright Data and Oxylabs Proxies, find out more here." @@ -2030,7 +2035,7 @@ msgstr "開啟文字尋找器" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Please wait, first browser step can take a little time to load.." -msgstr "請稍候,第一個瀏覽器步驟可能需要一點時間載入.." +msgstr "請稍候,第一個瀏覽器步驟可能需要一點時間載入 ..." #: changedetectionio/blueprint/ui/templates/edit.html msgid "Click here to Start" @@ -2149,7 +2154,7 @@ msgstr "移除每行文字前後的所有空白" #: changedetectionio/blueprint/ui/templates/edit.html msgid "AI Intent preview" -msgstr "" +msgstr "AI 意圖預覽" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Loading..." @@ -2191,7 +2196,7 @@ msgstr "繪製區域" #: changedetectionio/blueprint/ui/templates/edit.html msgid "One moment, fetching screenshot and element information.." -msgstr "請稍候,正在抓取截圖和元素資訊.." +msgstr "請稍候,正在抓取截圖和元素資訊 ..." #: changedetectionio/blueprint/ui/templates/edit.html msgid "Sorry, this functionality only works with fetchers that support Javascript and screenshots (such as playwright etc)." @@ -2235,11 +2240,11 @@ msgstr "否" #: changedetectionio/blueprint/ui/templates/edit.html msgid "AI tokens (last check)" -msgstr "" +msgstr "AI 權杖(上次檢查)" #: changedetectionio/blueprint/ui/templates/edit.html msgid "AI tokens (total)" -msgstr "" +msgstr "AI 權杖(總計)" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Download latest HTML snapshot" @@ -2247,7 +2252,7 @@ msgstr "下載最新 HTML 快照" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Download watch data package" -msgstr "" +msgstr "下載監測任務資料包" #: changedetectionio/blueprint/ui/templates/edit.html msgid "Delete Watch?" @@ -2296,55 +2301,55 @@ msgstr "截圖需要支援截圖的內容抓取器 (Sockpuppetbrowser, selenium #: changedetectionio/blueprint/ui/templates/queue.html #, python-format msgid "Worker %(num)s" -msgstr "" +msgstr "工作程序 %(num)s" #: changedetectionio/blueprint/ui/templates/queue.html msgid "— idle" -msgstr "" +msgstr " — 閒置" #: changedetectionio/blueprint/ui/templates/queue.html msgid "running" -msgstr "" +msgstr "執行中" #: changedetectionio/blueprint/ui/templates/queue.html msgid "idle" -msgstr "" +msgstr "閒置" #: changedetectionio/blueprint/ui/templates/queue.html msgid "done" -msgstr "" +msgstr "完成" #: changedetectionio/blueprint/ui/templates/queue.html msgid "cancel" -msgstr "" +msgstr "取消" #: changedetectionio/blueprint/ui/templates/queue.html msgid "No workers configured and queue is empty" -msgstr "" +msgstr "未設定工作程序且排程佇列為空" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Watch no longer exists" -msgstr "" +msgstr "監測任務已不存在" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Nothing running" -msgstr "" +msgstr "無執行中的項目" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Check queue" -msgstr "" +msgstr "檢查佇列" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Live view of what the workers are doing right now and what is waiting in line." -msgstr "" +msgstr "即時查看工作程序目前正在執行的操作以及正在排隊等候的項目。" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Workers" -msgstr "" +msgstr "工作程序" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Running now" -msgstr "" +msgstr "正在執行" #: changedetectionio/blueprint/ui/templates/queue.html #: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html @@ -2353,39 +2358,39 @@ msgstr "已排程" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Clear Queue?" -msgstr "" +msgstr "是否清除佇列?" #: changedetectionio/blueprint/ui/templates/queue.html msgid "

This will remove every pending check from the queue.

Running checks will continue.

" -msgstr "" +msgstr "

這將會移除佇列中所有待處理的檢查。

正在執行的檢查將會繼續。

" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Clear" -msgstr "" +msgstr "清除" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Clear Queue" -msgstr "" +msgstr "清除佇列" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Workers & queue" -msgstr "" +msgstr "工作程序與佇列" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Elapsed" -msgstr "" +msgstr "已耗時" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Status" -msgstr "" +msgstr "狀態" #: changedetectionio/blueprint/ui/templates/queue.html msgid "No workers configured (FETCH_WORKERS=0) and queue is empty" -msgstr "" +msgstr "未設定工作程序(FETCH_WORKERS=0)且排程佇列為空" #: changedetectionio/blueprint/ui/templates/queue.html msgid "Waiting for new pages to check…" -msgstr "" +msgstr "正在等待新網頁以進行檢查 ..." #: changedetectionio/blueprint/ui/views.py #, python-brace-format @@ -2488,7 +2493,7 @@ msgstr "預覽" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Changedetection.io can monitor more than just web-pages! See our plugins!" -msgstr "" +msgstr "Changedetection.io 不僅能監測網頁!快來看看我們的外掛程式!" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "More info" @@ -2496,103 +2501,105 @@ msgstr "更多資訊" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "You can also add 'shared' watches." -msgstr "" +msgstr "您也可以新增「共享的」監測任務。" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Goto full history" -msgstr "" +msgstr "前往完整歷史記錄" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Loading price history…" -msgstr "" +msgstr "正在載入價格歷史記錄 ..." #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Out of stock" -msgstr "" +msgstr "缺貨" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "No price data available to graph yet." -msgstr "" +msgstr "尚無可用的價格資料以繪製圖表。" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Could not load price history." -msgstr "" +msgstr "無法載入價格歷史記錄。" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Changes" -msgstr "" +msgstr "變更" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Average price" -msgstr "" +msgstr "平均價格" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Currently low" -msgstr "" +msgstr "目前處於低點" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Currently typical" -msgstr "" +msgstr "目前處於一般水準" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Currently high" -msgstr "" +msgstr "目前處於高點" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "cheaper than %s% of tracked prices" -msgstr "" +#, python-brace-format +msgid "cheaper than {pct} of tracked prices" +msgstr "比 {pct} 已追蹤的價格更便宜" +#. {pct} is a percentage including the % sign, e.g. "80%" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html -#, python-format -msgid "more expensive than %s% of tracked prices" -msgstr "" +#, python-brace-format +msgid "more expensive than {pct} of tracked prices" +msgstr "比 {pct} 已追蹤的價格更昂貴" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "around the usual price" -msgstr "" +msgstr "大約在一般價格附近" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "avg" -msgstr "" +msgstr "平均" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Web page URL" -msgstr "" +msgstr "網頁 URL" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #, python-format msgid "All %(page)s on this page are selected." -msgstr "" +msgstr "已選取此頁面上的所有 %(page)s。" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #, python-format msgid "Select all %(total)s matching" -msgstr "" +msgstr "選取所有 %(total)s 個符合的項目" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #, python-format msgid "All %(total)s matching are selected." -msgstr "" +msgstr "已選取所有 %(total)s 個符合的項目。" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html #, python-format msgid "%(count)s records selected" -msgstr "" +msgstr "已選取 %(count)s 筆記錄" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Searching" @@ -2604,7 +2611,7 @@ msgstr "全部" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Filter watches" -msgstr "" +msgstr "過濾監測任務" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Unread" @@ -2612,7 +2619,7 @@ msgstr "未讀" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Deals" -msgstr "" +msgstr "特惠" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "With errors" @@ -2620,11 +2627,11 @@ msgstr "有錯誤" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Filter by type" -msgstr "" +msgstr "按類型過濾" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "All types" -msgstr "" +msgstr "所有類型" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Mark all viewed" @@ -2641,11 +2648,11 @@ msgstr "於 '%(title)s'" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "RSS Feed" -msgstr "" +msgstr "RSS Feed" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Invert" -msgstr "" +msgstr "反選" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Pause" @@ -2669,15 +2676,15 @@ msgstr "標籤" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Set browser / fetch method for selected" -msgstr "" +msgstr "為所選項目設定瀏覽器 / 抓取方式" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Apply" -msgstr "" +msgstr "套用" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Set proxy for selected" -msgstr "" +msgstr "為所選項目設定代理伺服器" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Mark viewed" @@ -2718,11 +2725,11 @@ msgstr "

您確定要刪除所選的監測任務嗎?

#: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/templates/base.html msgid "Close" -msgstr "" +msgstr "關閉" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Web page" -msgstr "" +msgstr "網頁" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html msgid "Restock & Price" @@ -2738,165 +2745,165 @@ msgstr "匯入列表" #: changedetectionio/conditions/__init__.py msgid "Choose one - Operator" -msgstr "" +msgstr "選擇一個 - 運算子" #: changedetectionio/conditions/__init__.py msgid "Greater Than" -msgstr "" +msgstr "大於" #: changedetectionio/conditions/__init__.py msgid "Less Than" -msgstr "" +msgstr "小於" #: changedetectionio/conditions/__init__.py msgid "Greater Than or Equal To" -msgstr "" +msgstr "大於或等於" #: changedetectionio/conditions/__init__.py msgid "Less Than or Equal To" -msgstr "" +msgstr "小於或等於" #: changedetectionio/conditions/__init__.py msgid "Equals" -msgstr "" +msgstr "等於" #: changedetectionio/conditions/__init__.py msgid "Not Equals" -msgstr "" +msgstr "不等於" #: changedetectionio/conditions/__init__.py msgid "Contains" -msgstr "" +msgstr "包含" #: changedetectionio/conditions/__init__.py msgid "Choose one - Field" -msgstr "" +msgstr "選擇一個 - 欄位" #: changedetectionio/conditions/default_plugin.py msgid "Does NOT Contain" -msgstr "" +msgstr "不包含" #: changedetectionio/conditions/default_plugin.py msgid "Text Starts With" -msgstr "" +msgstr "文字開頭為" #: changedetectionio/conditions/default_plugin.py msgid "Text Ends With" -msgstr "" +msgstr "文字結尾為" #: changedetectionio/conditions/default_plugin.py msgid "Length minimum" -msgstr "" +msgstr "最小長度" #: changedetectionio/conditions/default_plugin.py msgid "Length maximum" -msgstr "" +msgstr "最大長度" #: changedetectionio/conditions/default_plugin.py msgid "Text Matches Regex" -msgstr "" +msgstr "文字符合正規表示式" #: changedetectionio/conditions/default_plugin.py msgid "Text Does NOT Match Regex" -msgstr "" +msgstr "文字不符合正規表示式" #: changedetectionio/conditions/default_plugin.py msgid "Extracted number after 'Filters & Triggers'" -msgstr "" +msgstr "「過濾器與觸發器」之後提取的數字" #: changedetectionio/conditions/default_plugin.py msgid "Page text after 'Filters & Triggers'" -msgstr "" +msgstr "「過濾器與觸發器」之後的網頁文字" #: changedetectionio/conditions/form.py msgid "Field" -msgstr "" +msgstr "欄位" #: changedetectionio/conditions/form.py msgid "Operator" -msgstr "" +msgstr "運算子" #: changedetectionio/conditions/form.py msgid "A value" -msgstr "" +msgstr "數值" #: changedetectionio/conditions/form.py msgid "Operator is required." -msgstr "" +msgstr "必須填寫運算子。" #: changedetectionio/conditions/form.py msgid "Field is required." -msgstr "" +msgstr "必須填寫欄位。" #: changedetectionio/conditions/form.py msgid "Value is required." -msgstr "" +msgstr "必須填寫數值。" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Levenshtein - Text similarity ratio" -msgstr "" +msgstr "Levenshtein - 文字相似度比例" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Levenshtein - Text change distance" -msgstr "" +msgstr "Levenshtein - 文字變更距離" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Not enough history to calculate Levenshtein metrics" -msgstr "" +msgstr "歷史記錄不足,無法計算 Levenshtein 指標" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Snapshot too large for edit statistics, skipping." -msgstr "" +msgstr "快照太大,無法進行編輯統計,跳過。" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Unable to calculate Levenshtein metrics" -msgstr "" +msgstr "無法計算 Levenshtein 指標" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Levenshtein Text Similarity Details" -msgstr "" +msgstr "Levenshtein 文字相似度詳細資訊" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Raw distance (edits needed)" -msgstr "" +msgstr "原始距離(需要的編輯次數)" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Similarity ratio" -msgstr "" +msgstr "相似度比例" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Percent similar" -msgstr "" +msgstr "相似百分比" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "" "Levenshtein metrics compare the last two snapshots, measuring how many character edits are needed to transform one " "into the other." -msgstr "" +msgstr "Levenshtein 指標會比較最後兩個快照,測量將一個快照轉換為另一個快照需要多少個字元編輯。" #: changedetectionio/conditions/plugins/levenshtein_plugin.py msgid "Error calculating Levenshtein metrics" -msgstr "" +msgstr "計算 Levenshtein 指標時發生錯誤" #: changedetectionio/conditions/plugins/wordcount_plugin.py msgid "Word count of content" -msgstr "" +msgstr "內容字數" #: changedetectionio/conditions/plugins/wordcount_plugin.py msgid "Content Analysis" -msgstr "" +msgstr "內容分析" #: changedetectionio/conditions/plugins/wordcount_plugin.py msgid "Word count (latest snapshot)" -msgstr "" +msgstr "字數(最新快照)" #: changedetectionio/conditions/plugins/wordcount_plugin.py msgid "Word count is a simple measure of content length, calculated by splitting text on whitespace." -msgstr "" +msgstr "字數是內容長度的簡單測量方式,透過在空白處拆分文字來計算。" #: changedetectionio/content_fetchers/requests.py msgid "Basic fast Plaintext/HTTP Client" -msgstr "" +msgstr "基礎快速純文字 / HTTP 用戶端" #: changedetectionio/blueprint/watchlist/templates/watch-overview-single-row.html changedetectionio/flask_app.py #: changedetectionio/realtime/socket_server.py @@ -2905,59 +2912,59 @@ msgstr "還沒有" #: changedetectionio/flask_app.py msgid "0 seconds" -msgstr "" +msgstr "0 秒" #: changedetectionio/flask_app.py msgid "year" -msgstr "" +msgstr "年" #: changedetectionio/flask_app.py msgid "years" -msgstr "" +msgstr "年" #: changedetectionio/flask_app.py msgid "month" -msgstr "" +msgstr "月" #: changedetectionio/flask_app.py msgid "months" -msgstr "" +msgstr "月" #: changedetectionio/flask_app.py msgid "week" -msgstr "" +msgstr "週" #: changedetectionio/flask_app.py msgid "weeks" -msgstr "" +msgstr "週" #: changedetectionio/flask_app.py msgid "day" -msgstr "" +msgstr "天" #: changedetectionio/flask_app.py msgid "days" -msgstr "" +msgstr "天" #: changedetectionio/flask_app.py msgid "hour" -msgstr "" +msgstr "小時" #: changedetectionio/flask_app.py msgid "hours" -msgstr "" +msgstr "小時" #: changedetectionio/flask_app.py msgid "minute" -msgstr "" +msgstr "分鐘" #: changedetectionio/flask_app.py msgid "minutes" -msgstr "" +msgstr "分鐘" #: changedetectionio/flask_app.py msgid "second" -msgstr "" +msgstr "秒" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/flask_app.py msgid "seconds" @@ -3119,7 +3126,7 @@ msgstr "處理器" #: changedetectionio/blueprint/watchlist/templates/watch-overview.html changedetectionio/forms.py msgid "Browser" -msgstr "" +msgstr "瀏覽器" #: changedetectionio/forms.py msgid "Edit > Watch" @@ -3167,7 +3174,7 @@ msgstr "通知基礎 URL 覆寫" #: changedetectionio/forms.py msgid "Not set" -msgstr "" +msgstr "未設定" #: changedetectionio/blueprint/tags/form.py changedetectionio/blueprint/tags/templates/groups-overview.html #: changedetectionio/forms.py @@ -3200,7 +3207,7 @@ msgstr "選擇器" #: changedetectionio/forms.py msgid "CSS or xPath selector" -msgstr "" +msgstr "CSS 或 xPath 選擇器" #: changedetectionio/forms.py msgid "value" @@ -3208,11 +3215,11 @@ msgstr "值" #: changedetectionio/conditions/form.py changedetectionio/forms.py msgid "Value" -msgstr "" +msgstr "值" #: changedetectionio/forms.py msgid "Web Page URL" -msgstr "" +msgstr "網頁 URL" #: changedetectionio/forms.py msgid "Open Link Override" @@ -3220,7 +3227,7 @@ msgstr "" #: changedetectionio/forms.py msgid "Group Tag" -msgstr "" +msgstr "群組標籤" #: changedetectionio/forms.py msgid "Time Between Check" @@ -3237,7 +3244,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html changedetectionio/blueprint/ui/templates/diff.html #: changedetectionio/forms.py msgid "AI Change Summary" -msgstr "" +msgstr "AI 變更摘要" #: changedetectionio/blueprint/tags/form.py changedetectionio/forms.py msgid "Change Summary prompt - Append or Replace the default?" @@ -3265,7 +3272,7 @@ msgstr "移除元素" #: changedetectionio/forms.py msgid "Extract lines containing" -msgstr "" +msgstr "提取包含此內容的行" #: changedetectionio/forms.py msgid "Extract text" @@ -3378,7 +3385,7 @@ msgstr "在列表中使用頁面 " #: changedetectionio/forms.py msgid "Number of history items per watch to keep" -msgstr "" +msgstr "每個監測任務要保留的歷史項目數量" #: changedetectionio/forms.py msgid "Body must be empty when Request Method is set to GET" @@ -3477,19 +3484,19 @@ msgstr "在監測概覽列表中使用頁面 <title>" #: changedetectionio/forms.py msgid "Relative time format" -msgstr "" +msgstr "相對時間格式" #: changedetectionio/forms.py msgid "Long (1 minute ago)" -msgstr "" +msgstr "完整格式(1 分鐘前)" #: changedetectionio/forms.py msgid "Short (1m ago)" -msgstr "" +msgstr "精簡格式(1 分鐘前)" #: changedetectionio/forms.py msgid "Navigation sidebar" -msgstr "" +msgstr "導覽側邊欄" #: changedetectionio/forms.py msgid "API access token security check enabled" @@ -3509,7 +3516,7 @@ msgstr "忽略空白" #: changedetectionio/forms.py msgid "Screenshot: Minimum Change Percentage" -msgstr "" +msgstr "截圖:最小變更百分比" #: changedetectionio/forms.py changedetectionio/processors/image_ssim_diff/forms.py msgid "Must be between 0 and 100" @@ -3573,7 +3580,7 @@ msgstr "發送通知前允許過濾器遺失的次數" #: changedetectionio/forms.py msgid "Model" -msgstr "" +msgstr "模型" #: changedetectionio/blueprint/settings/templates/settings.html changedetectionio/forms.py msgid "API Key" @@ -3581,79 +3588,79 @@ msgstr "API 金鑰" #: changedetectionio/forms.py msgid "API Base URL" -msgstr "" +msgstr "API 基礎 URL" #: changedetectionio/forms.py msgid "Token multiplier for local reasoning models" -msgstr "" +msgstr "本地推理模型的權杖乘數" #: changedetectionio/forms.py msgid "Default AI Change Summary prompt" -msgstr "" +msgstr "預設 AI 變更摘要提示詞" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html changedetectionio/forms.py msgid "Max tokens per watch per period" -msgstr "" +msgstr "每個週期內每個監測任務的最大權杖數" #: changedetectionio/forms.py msgid "Monthly token budget" -msgstr "" +msgstr "每月權杖配額" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html changedetectionio/forms.py msgid "Max input characters" -msgstr "" +msgstr "最大輸入字元數" #: changedetectionio/forms.py msgid "Enable AI / LLM features" -msgstr "" +msgstr "啟用 AI / LLM 功能" #: changedetectionio/forms.py msgid "Replace {{diff}} notification token with AI summary" -msgstr "" +msgstr "將 {{diff}} 通知權杖替換為 AI 摘要" #: changedetectionio/forms.py msgid "Use LLM as a fallback for extracting price and restock info" -msgstr "" +msgstr "在找不到結構化資料時,使用 LLM 作為提取價格和補貨資訊的備用方案" #: changedetectionio/forms.py msgid "Enable LLM debug logging" -msgstr "" +msgstr "啟用 LLM 除錯記錄" #: changedetectionio/forms.py msgid "AI thinking budget (tokens)" -msgstr "" +msgstr "AI 思考配額(權杖)" #: changedetectionio/forms.py msgid "Off (no thinking)" -msgstr "" +msgstr "關閉(不進行思考)" #: changedetectionio/forms.py msgid "Max AI summary length (tokens)" -msgstr "" +msgstr "最大 AI 摘要長度(權杖)" #: changedetectionio/forms.py msgid "When monthly token budget is reached" -msgstr "" +msgstr "當達到每月權杖配額上限時" #: changedetectionio/forms.py msgid "Skip AI summarisation only (watch still checks)" -msgstr "" +msgstr "僅跳過 AI 摘要(監測任務仍會進行檢查)" #: changedetectionio/forms.py msgid "Skip the watch check entirely" -msgstr "" +msgstr "完全跳過該監測任務檢查" #: changedetectionio/forms.py msgid "Watchlist \"Summary\" link compares" -msgstr "" +msgstr "監測列表「摘要」連結比對對象" #: changedetectionio/forms.py msgid "Previous version (second-last vs latest)" -msgstr "" +msgstr "上一個版本(倒數第二個快照 vs 最新快照)" #: changedetectionio/forms.py msgid "Changes since you last viewed the watch" -msgstr "" +msgstr "自您上次檢視該監測任務以來的變更" #: changedetectionio/forms.py msgid "RegEx to extract" @@ -3669,125 +3676,125 @@ msgstr "剛剛" #: changedetectionio/languages.py msgid "right now" -msgstr "一會兒" +msgstr "立刻" #: changedetectionio/languages.py #, python-format msgid "%ss ago" -msgstr "%s秒前" +msgstr "%s 秒前" #: changedetectionio/languages.py #, python-format msgid "in %ss" -msgstr "%s秒後" +msgstr "%s 秒後" #: changedetectionio/languages.py msgid "1m ago" -msgstr "1分前" +msgstr "1 分鐘前" #: changedetectionio/languages.py msgid "in 1m" -msgstr "1分後" +msgstr "1 分鐘後" #: changedetectionio/languages.py #, python-format msgid "%sm ago" -msgstr "%s分前" +msgstr "%s 分鐘前" #: changedetectionio/languages.py #, python-format msgid "in %sm" -msgstr "%s分後" +msgstr "%s 分鐘後" #: changedetectionio/languages.py msgid "1h ago" -msgstr "1時前" +msgstr "1 小時前" #: changedetectionio/languages.py msgid "in 1h" -msgstr "1時後" +msgstr "1 小時後" #: changedetectionio/languages.py #, python-format msgid "%sh ago" -msgstr "%s時前" +msgstr "%s 小時前" #: changedetectionio/languages.py #, python-format msgid "in %sh" -msgstr "%s時後" +msgstr "%s 小時後" #: changedetectionio/languages.py msgid "1d ago" -msgstr "1天前" +msgstr "1 天前" #: changedetectionio/languages.py msgid "in 1d" -msgstr "1天後" +msgstr "1 天後" #: changedetectionio/languages.py #, python-format msgid "%sd ago" -msgstr "%s天前" +msgstr "%s 天前" #: changedetectionio/languages.py #, python-format msgid "in %sd" -msgstr "%s天後" +msgstr "%s 天後" #: changedetectionio/languages.py msgid "1w ago" -msgstr "1週前" +msgstr "1 週前" #: changedetectionio/languages.py msgid "in 1w" -msgstr "1週後" +msgstr "1 週後" #: changedetectionio/languages.py #, python-format msgid "%sw ago" -msgstr "%s週前" +msgstr "%s 週前" #: changedetectionio/languages.py #, python-format msgid "in %sw" -msgstr "%s週後" +msgstr "%s 週後" #: changedetectionio/languages.py msgid "1mo ago" -msgstr "1月前" +msgstr "1 個月前" #: changedetectionio/languages.py msgid "in 1mo" -msgstr "1月後" +msgstr "1 個月後" #: changedetectionio/languages.py #, python-format msgid "%smo ago" -msgstr "%s月前" +msgstr "%s 個月前" #: changedetectionio/languages.py #, python-format msgid "in %smo" -msgstr "%s月後" +msgstr "%s 個月後" #: changedetectionio/languages.py msgid "1yr ago" -msgstr "1年前" +msgstr "1 年前" #: changedetectionio/languages.py msgid "in 1yr" -msgstr "1年後" +msgstr "1 年後" #: changedetectionio/languages.py #, python-format msgid "%syr ago" -msgstr "%s年前" +msgstr "%s 年前" #: changedetectionio/languages.py #, python-format msgid "in %syr" -msgstr "%s年後" +msgstr "%s 年後" #: changedetectionio/processors/extract.py msgid "No matches found while scanning all of the watch history for that RegEx." @@ -3869,20 +3876,20 @@ msgstr "使用快速 OpenCV 演算法比對截圖,比 SSIM 快 10-100 倍" #: changedetectionio/processors/restock_diff/difference.py msgid "Date" -msgstr "" +msgstr "日期" #: changedetectionio/processors/restock_diff/difference.py msgid "Stock status" -msgstr "" +msgstr "庫存狀態" #: changedetectionio/processors/restock_diff/difference.py msgid "Currency" -msgstr "" +msgstr "貨幣" #: changedetectionio/processors/restock_diff/difference.py #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Price history" -msgstr "" +msgstr "價格歷史記錄" #: changedetectionio/processors/restock_diff/forms.py msgid "Re-stock detection" @@ -3938,59 +3945,59 @@ msgstr "檢測產品是否恢復庫存" #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Price & stock history" -msgstr "" +msgstr "價格與庫存歷史記錄" #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Download as XLSX" -msgstr "" +msgstr "下載為 XLSX" #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "When" -msgstr "" +msgstr "時間" #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Stock" -msgstr "" +msgstr "庫存" #: changedetectionio/processors/restock_diff/templates/restock_diff/difference.html msgid "Not enough price data points yet to draw a graph - keep monitoring and the price history will appear here." -msgstr "" +msgstr "目前尚無足夠的價格資料點以繪製圖表 - 請保持監測,價格歷史記錄將會顯示於此。" #: changedetectionio/processors/templates/extract.html msgid "Screenshot" -msgstr "" +msgstr "截圖" #: changedetectionio/processors/templates/extract.html msgid "This tool will extract text data from all of the watch history." -msgstr "" +msgstr "此工具將從所有監測歷史記錄中提取文字資料。" #: changedetectionio/processors/templates/extract.html msgid "A <strong>RegEx</strong> is a pattern that identifies exactly which part inside of the text that you want to extract." -msgstr "" +msgstr "<strong>RegEx</strong>(正規表示式)是一種模式,用於精確識別文字中您想要提取的部分。" #: changedetectionio/processors/templates/extract.html msgid "For example, to extract only the numbers from text" -msgstr "" +msgstr "例如,若要僅從文字中提取數字" #: changedetectionio/processors/templates/extract.html msgid "Raw text" -msgstr "" +msgstr "原始文字" #: changedetectionio/processors/templates/extract.html msgid "RegEx to extract:" -msgstr "" +msgstr "要提取的 RegEx:" #: changedetectionio/processors/templates/extract.html msgid "Be sure to test your RegEx here." -msgstr "" +msgstr "請務必在此處測試您的 RegEx。" #: changedetectionio/processors/templates/extract.html msgid "Each RegEx group bracket" -msgstr "" +msgstr "每個 RegEx 群組括號" #: changedetectionio/processors/templates/extract.html msgid "will be in its own column, the first column value is always the date." -msgstr "" +msgstr "都將位於獨立的欄位中,第一欄的值一律為日期。" #: changedetectionio/processors/text_json_diff/processor.py msgid "Webpage Text/HTML, JSON and PDF changes" @@ -4020,15 +4027,15 @@ msgstr "所有通知的內文 — 您可以使用" #: changedetectionio/templates/_common_fields.html msgid "templating in the notification title, body and URL, and tokens from below." -msgstr "" +msgstr "在通知標題、內文和 URL 中使用範本,以及下方的權杖。" #: changedetectionio/templates/_common_fields.html msgid "Show token/placeholders" -msgstr "" +msgstr "顯示權杖 / 預留位置" #: changedetectionio/templates/_common_fields.html msgid "Token" -msgstr "" +msgstr "權杖" #: changedetectionio/templates/_common_fields.html msgid "Description" @@ -4036,11 +4043,11 @@ msgstr "描述" #: changedetectionio/templates/_common_fields.html msgid "The URL of the changedetection.io instance you are running." -msgstr "" +msgstr "您正在執行的 changedetection.io 執行個體 URL。" #: changedetectionio/templates/_common_fields.html msgid "The URL being watched." -msgstr "" +msgstr "正在被監測的 URL。" #: changedetectionio/templates/_common_fields.html msgid "" @@ -4054,7 +4061,7 @@ msgstr "監測任務的 UUID。" #: changedetectionio/templates/_common_fields.html msgid "The page title of the watch, uses <title> if not set, falls back to URL" -msgstr "" +msgstr "監測任務的網頁標題,若未設定則使用 <title>,否則恢復為 URL" #: changedetectionio/templates/_common_fields.html msgid "The watch group / tag" @@ -4062,110 +4069,110 @@ msgstr "群組 / 標籤" #: changedetectionio/templates/_common_fields.html msgid "The URL of the preview page generated by changedetection.io." -msgstr "" +msgstr "由 changedetection.io 產生的預覽網頁 URL。" #: changedetectionio/templates/_common_fields.html #, python-format msgid "Date/time of the change, accepts format=, %(call)s, default is '%(default)s'" -msgstr "" +msgstr "變更的日期 / 時間,接受 format=,%(call)s,預設為 '%(default)s'" #: changedetectionio/templates/_common_fields.html msgid "The URL of the diff output for the watch." -msgstr "" +msgstr "監測任務差異(Diff)輸出的 URL。" #: changedetectionio/templates/_common_fields.html msgid "The diff output - only changes, additions, and removals" -msgstr "" +msgstr "差異輸出 - 僅包含變更、新增和移除" #: changedetectionio/templates/_common_fields.html msgid "All diff variants accept" -msgstr "" +msgstr "所有差異變體皆接受" #: changedetectionio/templates/_common_fields.html msgid "args, e.g." -msgstr "" +msgstr "參數,例如" #: changedetectionio/templates/_common_fields.html msgid "The diff output - only changes, additions, and removals —" -msgstr "" +msgstr "差異輸出 - 僅包含變更、新增和移除 —" #: changedetectionio/templates/_common_fields.html msgid "Without (added) prefix or colors" -msgstr "" +msgstr "不含 (新增) 字首或顏色" #: changedetectionio/templates/_common_fields.html msgid "The diff output - only changes and additions" -msgstr "" +msgstr "差異輸出 - 僅包含變更和新增" #: changedetectionio/templates/_common_fields.html msgid "The diff output - only changes and additions —" -msgstr "" +msgstr "差異輸出 - 僅包含變更和新增 —" #: changedetectionio/templates/_common_fields.html msgid "The diff output - only changes and removals" -msgstr "" +msgstr "差異輸出 - 僅包含變更和移除" #: changedetectionio/templates/_common_fields.html msgid "The diff output - only changes and removals —" -msgstr "" +msgstr "差異輸出 - 僅包含變更和移除 —" #: changedetectionio/templates/_common_fields.html msgid "The diff output - full difference output" -msgstr "" +msgstr "差異輸出 - 完整差異輸出" #: changedetectionio/templates/_common_fields.html msgid "The diff output - full difference output —" -msgstr "" +msgstr "差異輸出 - 完整差異輸出 —" #: changedetectionio/templates/_common_fields.html msgid "The diff output - patch in unified format" -msgstr "" +msgstr "差異輸出 - 統一格式(Unified Format)的修補檔(Patch)" #: changedetectionio/templates/_common_fields.html msgid "" "Only the changed words/values from the previous version — e.g. the old price. Best when a single value changes per " "line; multiple changed fragments are joined by newline." -msgstr "" +msgstr "僅包含來自舊版本變更的字詞 / 數值 — 例如舊價格。最適合每行僅單一數值變更的情況;多個變更片段將透過換行符號連接。" #: changedetectionio/templates/_common_fields.html msgid "" "Only the changed words/values from the new version — e.g. the new price. Best when a single value changes per line; " "multiple changed fragments are joined by newline." -msgstr "" +msgstr "僅包含來自新版本變更的字詞 / 數值 — 例如新價格。最適合每行僅單一數值變更的情況;多個變更片段將透過換行符號連接。" #: changedetectionio/templates/_common_fields.html msgid "The current snapshot text contents value, useful when combined with JSON or CSS filters" -msgstr "" +msgstr "目前快照的文字內容數值,與 JSON 或 CSS 過濾器結合使用時非常有用" #: changedetectionio/templates/_common_fields.html msgid "Text that tripped the trigger from filters" -msgstr "" +msgstr "來自過濾器並觸發變更的文字" #: changedetectionio/templates/_common_fields.html msgid "(upgraded)" -msgstr "" +msgstr "(已升級)" #: changedetectionio/templates/_common_fields.html msgid "" "When AI Change Summary is configured, contains the AI-generated description instead of the raw diff. Falls back to " "raw diff when not configured." -msgstr "" +msgstr "當設定了 AI 變更摘要時,包含 AI 產生的描述而非原始差異(Diff)。未設定時則恢復為原始差異。" #: changedetectionio/templates/_common_fields.html msgid "Always the raw +/- diff, regardless of AI Change Summary setting." -msgstr "" +msgstr "無論 AI 變更摘要如何設定,一律顯示原始的 +/- 差異(Diff)。" #: changedetectionio/templates/_common_fields.html msgid "The AI Change Summary text (same as the upgraded {{diff}} — explicit reference)." -msgstr "" +msgstr "AI 變更摘要文字(與已升級的 {{diff}} 相同 — 顯式引用)。" #: changedetectionio/templates/_common_fields.html msgid "The AI Change Intent that was evaluated." -msgstr "" +msgstr "已評估的 AI 變更意圖。" #: changedetectionio/templates/_common_fields.html msgid "Warning: Contents of" -msgstr "" +msgstr "警告:" #: changedetectionio/templates/_common_fields.html msgid "and" @@ -4173,11 +4180,11 @@ msgstr "和" #: changedetectionio/templates/_common_fields.html msgid "depend on how the difference algorithm perceives the change." -msgstr "" +msgstr "的內容取決於差異演算法如何看待變更。" #: changedetectionio/templates/_common_fields.html msgid "For example, an addition or removal could be perceived as a change in some cases." -msgstr "" +msgstr "例如,在某些情況下,新增或移除可能會被視為變更。" #: changedetectionio/templates/_common_fields.html msgid "More Here" @@ -4185,15 +4192,15 @@ msgstr "更多資訊" #: changedetectionio/templates/_common_fields.html msgid "Add email notification:" -msgstr "" +msgstr "新增電子郵件通知:" #: changedetectionio/templates/_common_fields.html msgid "Add to list" -msgstr "" +msgstr "新增至清單" #: changedetectionio/templates/_common_fields.html msgid "Add an email address" -msgstr "" +msgstr "新增電子郵件地址" #: changedetectionio/templates/_common_fields.html msgid "Send test notification" @@ -4205,17 +4212,17 @@ msgstr "通知除錯記錄" #: changedetectionio/templates/_common_fields.html msgid "Processing.." -msgstr "處理中.." +msgstr "處理中 ..." #: changedetectionio/templates/_common_fields.html #, python-format msgid "Use <a target=\"newwindow\" href=\"%(url)s\">AppRise Notification URLs</a> for notification to just about any service!" -msgstr "" +msgstr "使用 <a target=\"newwindow\" href=\"%(url)s\">AppRise 通知 URL</a> 可向幾乎任何服務發送通知!" #. CJK fonts lack native italics; allow substitution with conventional local styling. dennis-ignore: W303 #: changedetectionio/templates/_common_fields.html msgid "<i>Please read the notification services wiki here for important configuration notes</i>" -msgstr "" +msgstr "<i>請在此處閱讀通知服務 Wiki 以獲取重要的設定注意事項</i>" #: changedetectionio/templates/_common_fields.html changedetectionio/templates/edit/include_subtract.html msgid "Show advanced help and tips" @@ -4223,39 +4230,39 @@ msgstr "顯示進階說明與提示" #: changedetectionio/templates/_common_fields.html msgid "(or" -msgstr "" +msgstr "(或" #: changedetectionio/templates/_common_fields.html msgid "only supports a maximum" -msgstr "" +msgstr "僅支援最大" #: changedetectionio/templates/_common_fields.html msgid "2,000 characters" -msgstr "" +msgstr "2,000 個字元" #: changedetectionio/templates/_common_fields.html msgid "of notification text, including the title." -msgstr "通知標題" +msgstr "的通知文字,包含標題。" #: changedetectionio/templates/_common_fields.html msgid "bots can't send messages to other bots, so you should specify chat ID of non-bot user." -msgstr "" +msgstr "聊天機器人(Bots)無法向其他機器人發送訊息,因此您應該指定非機器人使用者的聊天 ID(Chat ID)。" #: changedetectionio/templates/_common_fields.html msgid "only supports very limited HTML and can fail when extra tags are sent," -msgstr "" +msgstr "僅支援非常有限的 HTML,且在發送額外標籤時可能會失敗," #: changedetectionio/templates/_common_fields.html msgid "(or use plaintext/markdown format)" -msgstr "" +msgstr "(或使用純文字 / Markdown 格式)" #: changedetectionio/templates/_common_fields.html msgid "for direct API calls (or omit the" -msgstr "" +msgstr "用於直接 API 呼喚(或省略" #: changedetectionio/templates/_common_fields.html msgid "for non-SSL ie" -msgstr "" +msgstr "用於非 SSL 即" #: changedetectionio/templates/_common_fields.html msgid "more help here" @@ -4264,11 +4271,11 @@ msgstr "更多幫助和範例請見此處" #: changedetectionio/templates/_common_fields.html #, python-format msgid "Accepts the <code>%(token)s</code> placeholders listed below" -msgstr "" +msgstr "接受下方列出的 <code>%(token)s</code> 預留位置" #: changedetectionio/templates/_common_fields.html msgid "Customise notifications" -msgstr "" +msgstr "自訂通知" #: changedetectionio/templates/_common_fields.html msgid "Title for all notifications" @@ -4276,15 +4283,15 @@ msgstr "所有通知的標題" #: changedetectionio/templates/_common_fields.html msgid "For JSON payloads, use" -msgstr "" +msgstr "對於 JSON 承載資料(Payloads),使用" #: changedetectionio/templates/_common_fields.html msgid "without quotes for automatic escaping, for example -" -msgstr "" +msgstr "且不加引號以進行自動逸出,例如 -" #: changedetectionio/templates/_common_fields.html msgid "URL encoding, use" -msgstr "" +msgstr "URL 編碼,使用" #: changedetectionio/templates/_common_fields.html msgid "for example -" @@ -4292,11 +4299,11 @@ msgstr "例如 -" #: changedetectionio/templates/_common_fields.html msgid "Regular-expression replace, use" -msgstr "" +msgstr "正規表示式替換,使用" #: changedetectionio/templates/_common_fields.html msgid "For a complete reference of all Jinja2 built-in filters, users can refer to the" -msgstr "" +msgstr "如需所有 Jinja2 內建過濾器的完整參考,使用者可以參閱" #: changedetectionio/templates/_common_fields.html msgid "Format for all notifications" @@ -4304,19 +4311,19 @@ msgstr "所有通知的格式" #: changedetectionio/templates/_common_fields.html msgid "Discord does not render HTML — switch to" -msgstr "" +msgstr "Discord 不會渲染 HTML — 請切換至" #: changedetectionio/templates/_common_fields.html msgid "Plain Text" -msgstr "" +msgstr "純文字" #: changedetectionio/templates/_common_fields.html msgid "format to avoid" -msgstr "" +msgstr "格式,以避免" #: changedetectionio/templates/_common_fields.html msgid "and other HTML entities appearing literally in your notifications." -msgstr "" +msgstr "及其他 HTML 實體字元直接以字面形式出現在您的通知中。" #: changedetectionio/templates/_helpers.html msgid "Entry" @@ -4404,135 +4411,135 @@ msgstr "當文字符合時,阻擋變更檢測" #: changedetectionio/templates/_stab.html msgid "Settings sections" -msgstr "" +msgstr "設定區段" #: changedetectionio/templates/base.html msgid "Confirm Action" -msgstr "" +msgstr "確認操作" #: changedetectionio/templates/base.html msgid "Are you sure?" -msgstr "" +msgstr "您確定嗎?" #: changedetectionio/templates/base.html msgid "<p>Are you sure you want to proceed?</p>" -msgstr "" +msgstr "<p>您確定要繼續嗎?</p>" #: changedetectionio/templates/base.html msgid "Confirm" -msgstr "" +msgstr "確認" #: changedetectionio/templates/base.html #, python-format msgid "Delete %(name)s?" -msgstr "" +msgstr "刪除 %(name)s?" #: changedetectionio/templates/base.html #, python-format msgid "<p>Are you sure you want to delete <strong>%(name)s</strong>?</p><p>This action cannot be undone.</p>" -msgstr "" +msgstr "<p>您確定要刪除 <strong>%(name)s</strong> 嗎?</p><p>此動作無法復原。</p>" #: changedetectionio/templates/base.html #, python-format msgid "Unlink %(name)s?" -msgstr "" +msgstr "解除連結 %(name)s?" #: changedetectionio/templates/base.html #, python-format msgid "" "<p>Are you sure you want to unlink all watches from <strong>%(name)s</strong>?</p><p>The tag will be kept but watches" " will be removed from it.</p>" -msgstr "" +msgstr "<p>您確定要從 <strong>%(name)s</strong> 解除所有監測任務的連結嗎?</p><p>標籤將被保留,但監測任務將從中移除。</p>" #: changedetectionio/templates/base.html msgid "There was an error communicating with the server." -msgstr "" +msgstr "與伺服器通訊時發生錯誤。" #: changedetectionio/templates/base.html msgid "There was a problem processing the request, please reload the page." -msgstr "" +msgstr "處理請求時發生問題,請重新載入網頁。" #: changedetectionio/templates/base.html #, python-format msgid "There was a problem processing the request: %(error)s" -msgstr "" +msgstr "處理請求時發生問題:%(error)s" #: changedetectionio/templates/base.html msgid "Existing filters under the 'Filters & Triggers' tab were cleared." -msgstr "" +msgstr "「過濾器與觸發器」分頁下的現有過濾器已清除。" #: changedetectionio/templates/base.html msgid "Fetching element data.." -msgstr "" +msgstr "正在抓取元素資料 ..." #: changedetectionio/templates/base.html msgid "Rendering.." -msgstr "" +msgstr "正在渲染 ..." #: changedetectionio/templates/base.html msgid "Draw mode - click and drag to select an area" -msgstr "" +msgstr "繪製模式 - 點擊並拖曳以選擇區域" #: changedetectionio/templates/base.html msgid "Hover over elements to select" -msgstr "" +msgstr "將滑鼠懸停在元素上以進行選擇" #: changedetectionio/templates/base.html msgid "Image copied to clipboard!" -msgstr "" +msgstr "圖片已複製到剪貼簿!" #: changedetectionio/templates/base.html msgid "Failed to copy image. Your browser may not support this feature." -msgstr "" +msgstr "複製圖片失敗。您的瀏覽器可能不支援此功能。" #: changedetectionio/templates/base.html msgid "Please select the text/lines you want to capture first by highlighting with your mouse." -msgstr "" +msgstr "請先使用滑鼠反白來選擇您想要捕捉的文字 / 行。" #: changedetectionio/templates/base.html msgid "Please select text within the diff content." -msgstr "" +msgstr "請在差異(Diff)內容中選擇文字。" #: changedetectionio/templates/base.html #, python-format msgid "Failed to generate image: %(error)s" -msgstr "" +msgstr "產生圖片失敗:%(error)s" #: changedetectionio/templates/base.html msgid "Change Detection Diff" -msgstr "" +msgstr "變更檢測差異(Diff)" #: changedetectionio/templates/base.html msgid "Check out this change detected via changedetection.io" -msgstr "" +msgstr "查看透過 changedetection.io 檢測到的此變更" #: changedetectionio/templates/base.html msgid "Please fill in all fields (Field, Operator, and Value) before verifying." -msgstr "" +msgstr "請在驗證前填寫所有欄位(欄位、運算子和數值)。" #: changedetectionio/templates/base.html msgid "Error verifying condition." -msgstr "" +msgstr "驗證條件時發生錯誤。" #: changedetectionio/templates/base.html msgid "Destination email" -msgstr "" +msgstr "目的電子郵件" #: changedetectionio/templates/base.html msgid "Content after filters" -msgstr "" +msgstr "過濾後的內容" #: changedetectionio/templates/base.html msgid "Content raw/before filters" -msgstr "" +msgstr "過濾前的原始內容" #: changedetectionio/templates/base.html msgid "Main navigation" -msgstr "" +msgstr "主導覽列" #: changedetectionio/templates/base.html msgid "Share this link:" -msgstr "" +msgstr "分享此連結:" #: changedetectionio/templates/base.html msgid "Real-time updates offline" @@ -4552,15 +4559,15 @@ msgstr "語言支援尚在 Beta 階段,請在 GitHub 上提交 PR 以協助我 #: changedetectionio/templates/base.html msgid "AI / LLM not configured" -msgstr "" +msgstr "AI / LLM 未設定" #: changedetectionio/templates/base.html msgid "LLM-powered summaries are not yet enabled. Configure an AI provider in Settings to get started." -msgstr "" +msgstr "尚未啟用 LLM 驅動的摘要功能。請在「設定」中設定 AI 供應商以開始使用。" #: changedetectionio/templates/base.html msgid "Go to AI / LLM Settings" -msgstr "" +msgstr "前往 AI / LLM 設定" #: changedetectionio/templates/base.html changedetectionio/templates/sidebar-nav.html msgid "Search" @@ -4600,60 +4607,60 @@ msgstr "" msgid "" "Describe what you care about. The AI evaluates every detected change against this and only notifies you when it " "matches." -msgstr "" +msgstr "描述您關心的內容。AI 會針對此描述評估每次檢測到的變更,且僅在符合時才通知您。" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Set a change intent for all watches in this tag/group. Each watch can override with its own." -msgstr "" +msgstr "為此標籤 / 群組中的所有監測任務設定變更意圖。每個監測任務都可以使用自己的意圖進行覆寫。" #: changedetectionio/templates/edit/include_llm_intent.html #, python-format msgid "From group '%(name)s': %(value)s" -msgstr "" +msgstr "來自群組 '%(name)s':%(value)s" #: changedetectionio/templates/edit/include_llm_intent.html msgid "e.g. Alert me when the price drops below $300, or a new product is launched. Ignore footer and navigation changes." -msgstr "" +msgstr "例如:當價格跌破 $300 或推出新產品時提醒我。忽略頁尾與導覽列的變更。" #: changedetectionio/templates/edit/include_llm_intent.html msgid "e.g. Flag price changes or new product launches across all watches in this group" -msgstr "" +msgstr "例如:在此群組中的所有監測任務中標記價格變更或新產品推出" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Examples:" -msgstr "" +msgstr "範例:" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Only notify if the price drops below $200, or a limited-time deal is added" -msgstr "" +msgstr "僅在價格降至 $200 以下或新增限時優惠時通知" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Alert when a new recall, safety notice, or product withdrawal is published" -msgstr "" +msgstr "當發布新的召回、安全通知或產品撤銷時發出警報" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Notify when a new grant round opens or an application deadline is announced" -msgstr "" +msgstr "當新一輪補助開放或宣布申請截止日期時通知" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Only important if package versions change or a CVE is mentioned" -msgstr "" +msgstr "僅在套件版本變更或提及 CVE 時才重要" #: changedetectionio/templates/edit/include_llm_intent.html #, python-format msgid "AI pre-filter active: <code>%(filter)s</code> — narrows content scope before evaluation" -msgstr "" +msgstr "AI 預先過濾器已啟用:<code>%(filter)s</code> — 在評估前縮小內容範圍" #: changedetectionio/templates/edit/include_llm_intent.html #, python-format msgid "" "When a change is detected, the AI describes it according to your instructions and replaces <code>%(diff)s</code> in " "your notification. Use <code>%(raw_diff)s</code> if you still want the original diff." -msgstr "" +msgstr "當檢測到變更時,AI 會根據您的說明進行描述,並替換您通知中的 <code>%(diff)s</code>。如果您仍需要原始差異,請使用 <code>%(raw_diff)s</code>。" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Describe how changes should be summarised in notifications for all watches in this group." -msgstr "" +msgstr "描述此群組中所有監測任務的通知應如何摘要變更。" #: changedetectionio/templates/edit/include_llm_intent.html msgid "" @@ -4669,110 +4676,110 @@ msgstr "" #: changedetectionio/templates/edit/include_llm_intent.html msgid "List each new item added with its name and price. Translate to English." -msgstr "" +msgstr "列出每個新新增項目的名稱與價格。翻譯成英文。" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Summarise what events were added or cancelled. Two sentences maximum." -msgstr "" +msgstr "摘要新增或取消了哪些活動。最多兩句話。" #: changedetectionio/templates/edit/include_llm_intent.html msgid "Describe the price change: old price, new price, percentage difference." -msgstr "" +msgstr "描述價格變化:舊價格、新價格、百分比差異。" #: changedetectionio/templates/edit/include_llm_intent.html msgid "AI" -msgstr "" +msgstr "AI" #: changedetectionio/templates/edit/include_llm_intent.html #, python-format msgid "" "Configure an AI / LLM provider in <a href=\"%(url)s\">Settings → AI / LLM</a> to enable AI Change Intent and AI " "Change Summary." -msgstr "" +msgstr "請在 <a href=\"%(url)s\">設定 → AI / LLM</a> 中設定 AI / LLM 供應商,以啟用 AI 變更意圖與 AI 變更摘要功能。" #: changedetectionio/templates/edit/include_llm_intent.html #, python-format msgid "Configure an AI / LLM provider in <a href=\"%(url)s\">Settings → AI / LLM</a> to enable AI features for this group." -msgstr "" +msgstr "請在 <a href=\"%(url)s\">設定 → AI / LLM</a> 中設定 AI / LLM 供應商,以啟用此群組的 AI 功能。" #: changedetectionio/templates/edit/include_subtract.html msgid "Note!: //text() function does not work where the <element> contains <![CDATA[]]>" -msgstr "" +msgstr "注意!:若 <element> 包含 <![CDATA[]]>,則 //text() 函數將無法運作" #. CJK fonts lack native italics; allow substitution with conventional local styling. dennis-ignore: W303 #: changedetectionio/templates/edit/include_subtract.html msgid "One CSS, xPath 1 & 2, JSON Path/JQ selector per line, <i>any</i> rules that matches will be used." -msgstr "" +msgstr "每行一個 CSS、xPath 1 與 2、JSON Path / JQ 選擇器,將使用<i>任何</i>相符的規則。" #: changedetectionio/templates/edit/include_subtract.html msgid "Limit text to this CSS rule, only text matching this CSS rule is included." -msgstr "" +msgstr "將文字限制在此 CSS 規則中,僅包含符合此 CSS 規則的文字。" #: changedetectionio/templates/edit/include_subtract.html msgid "Prefix with <code>json:</code>, use <code>json:$</code> to force re-formatting if required," -msgstr "" +msgstr "字首加上 <code>json:</code>,如果需要,使用 <code>json:$</code> 強制重新格式化," #: changedetectionio/templates/edit/include_subtract.html msgid "test your JSONPath here" -msgstr "" +msgstr "在此處測試您的 JSONPath" #: changedetectionio/templates/edit/include_subtract.html msgid "Prefix <code>jqraw:</code> outputs the results as text instead of a JSON list." -msgstr "" +msgstr "字首 <code>jqraw:</code> 將結果輸出為純文字,而非 JSON 列表。" #: changedetectionio/templates/edit/include_subtract.html msgid "jq support not installed" -msgstr "" +msgstr "未安裝 jq 支援" #: changedetectionio/templates/edit/include_subtract.html msgid "" "Limit text to this XPath rule, simply start with a forward-slash. To specify XPath to be used explicitly or the XPath" " rule starts with an XPath function: Prefix with <code>xpath:</code>" -msgstr "" +msgstr "將文字限制在此 XPath 規則中,只需以正斜線開頭即可。若要明確指定要使用的 XPath,或 XPath 規則以 XPath 函數開頭:字首加上 <code>xpath:</code>" #: changedetectionio/templates/edit/include_subtract.html msgid "test your XPath here" -msgstr "" +msgstr "在此處測試您的 XPath" #: changedetectionio/templates/edit/include_subtract.html msgid "Get all titles from an RSS feed <code>//title/text()</code>" -msgstr "" +msgstr "從 RSS Feed 獲取所有標題 <code>//title/text()</code>" #: changedetectionio/templates/edit/include_subtract.html msgid "To use XPath1.0: Prefix with <code>xpath1:</code>" -msgstr "" +msgstr "若要使用 XPath 1.0:字首加上 <code>xpath1:</code>" #: changedetectionio/templates/edit/include_subtract.html msgid "here for more CSS selector help" -msgstr "" +msgstr "此處獲取更多 CSS 選擇器說明" #: changedetectionio/templates/edit/text-options.html msgid "Text to wait for before triggering a change/notification, all text and regex are tested case-insensitive." -msgstr "" +msgstr "觸發變更 / 通知前要等待的文字,所有文字與正規表示式皆不區分大小寫進行測試。" #: changedetectionio/templates/edit/text-options.html msgid "Trigger text is processed from the result-text that comes out of any CSS/JSON Filters for this monitor" -msgstr "" +msgstr "觸發文字由該監測器的任何 CSS / JSON 過濾器產生的結果文字進行處理" #: changedetectionio/templates/edit/text-options.html msgid "Each line is processed separately (think of each line as \"OR\")" -msgstr "" +msgstr "每行獨立處理(將每行視為「或 OR」)" #: changedetectionio/templates/edit/text-options.html msgid "Note: Wrap in forward slash / to use regex example:" -msgstr "" +msgstr "注意:包裹在正斜線 / 中以使用正規表示式,範例:" #: changedetectionio/templates/edit/text-options.html msgid "You can also use" -msgstr "" +msgstr "您也可以使用" #: changedetectionio/templates/edit/text-options.html msgid "conditions" -msgstr "" +msgstr "條件" #: changedetectionio/templates/edit/text-options.html msgid "\"Page text\" - with Contains, Starts With, Not Contains and many more" -msgstr "" +msgstr "「網頁文字」- 包含、開頭為、不包含以及更多選項" #: changedetectionio/templates/edit/text-options.html msgid "" @@ -4781,20 +4788,24 @@ msgid "" "Not in stock\n" "Unavailable" msgstr "" +"例如:Out of stock\n" +"Sold out\n" +"Not in stock\n" +"Unavailable" #: changedetectionio/templates/edit/text-options.html msgid "" "Block change-detection while this text is on the page, all text and regex are tested case-insensitive, good for " "waiting for when a product is available again" -msgstr "" +msgstr "當此文字出現在網頁上時阻擋變更檢測,所有文字與正規表示式皆不區分大小寫進行測試,適合用於等待產品重新開賣 / 有貨" #: changedetectionio/templates/edit/text-options.html msgid "Block text is processed from the result-text that comes out of any CSS/JSON Filters for this monitor" -msgstr "" +msgstr "阻擋文字由該監測器的任何 CSS / JSON 過濾器產生的結果文字進行處理" #: changedetectionio/templates/edit/text-options.html msgid "All lines here must not exist (think of each line as \"OR\")" -msgstr "" +msgstr "此處的所有行皆必須不存在(將每行視為「或 OR」)" #: changedetectionio/templates/edit/text-options.html msgid "" @@ -4802,59 +4813,62 @@ msgid "" "temperature\n" "price" msgstr "" +"celsius\n" +"temperature\n" +"price" #: changedetectionio/templates/edit/text-options.html msgid "Keep only lines that contain any of these words or phrases (plain text, case-insensitive)" -msgstr "" +msgstr "僅保留包含這些字詞或片語的行(純文字,不區分大小寫)" #: changedetectionio/templates/edit/text-options.html msgid "One entry per line — any line in the page text that contains a match is kept" -msgstr "" +msgstr "每行一個項目 — 網頁文字中任何包含相符內容的行都將被保留" #: changedetectionio/templates/edit/text-options.html msgid "Simpler alternative to regex — use this when you just want lines about a specific topic" -msgstr "" +msgstr "比正規表示式更簡單的替代方案 — 當您只想獲取關於特定主題的行時使用此功能" #: changedetectionio/templates/edit/text-options.html msgid "enter <code>celsius</code> to keep only lines mentioning temperature readings" -msgstr "" +msgstr "輸入 <code>celsius</code> 以僅保留提及溫度讀數的行" #: changedetectionio/templates/edit/text-options.html msgid "Extracts text in the final output (line by line) after other filters using regular expressions or string match:" -msgstr "" +msgstr "在其他過濾器之後,使用正規表示式或字串符合在最終輸出中提取文字(逐行):" #: changedetectionio/templates/edit/text-options.html msgid "Regular expression - example" -msgstr "" +msgstr "正規表示式 - 範例" #: changedetectionio/templates/edit/text-options.html msgid "Don't forget to consider the white-space at the start of a line" -msgstr "" +msgstr "請別忘記考慮行首的空白字元" #: changedetectionio/templates/edit/text-options.html #, python-format msgid "Use <code>//(?aiLmsux))</code> type flags (more <a href=\"%(url)s\">information here</a>)" -msgstr "" +msgstr "使用 <code>//(?aiLmsux))</code> 類型旗標(<a href=\"%(url)s\">更多資訊請見此處</a>)" #: changedetectionio/templates/edit/text-options.html msgid "Keyword example - example: <code>Out of stock</code>" -msgstr "" +msgstr "關鍵字範例 - 範例:<code>Out of stock</code>" #: changedetectionio/templates/edit/text-options.html msgid "Use groups to extract just that text - example" -msgstr "" +msgstr "使用群組以僅提取該文字 - 範例" #: changedetectionio/templates/edit/text-options.html msgid "returns a list of years only" -msgstr "" +msgstr "僅傳回年份列表" #: changedetectionio/templates/edit/text-options.html msgid "Example - match lines containing a keyword" -msgstr "" +msgstr "範例 - 符合包含關鍵字的行" #: changedetectionio/templates/edit/text-options.html msgid "One line per regular-expression/string match" -msgstr "" +msgstr "每個正規表示式 / 字串符合佔用一行" #: changedetectionio/templates/login.html msgid "Login" @@ -4862,23 +4876,23 @@ msgstr "登入" #: changedetectionio/templates/menu.html msgid "Resume automatic scheduling" -msgstr "" +msgstr "恢復自動排程" #: changedetectionio/templates/menu.html msgid "Pause auto-queue scheduling of watches" -msgstr "" +msgstr "暫停監測任務的自動佇列排程" #: changedetectionio/templates/menu.html msgid "Scheduling paused — click to resume" -msgstr "" +msgstr "排程已暫停 — 點擊以恢復" #: changedetectionio/templates/menu.html msgid "Scheduling active — click to pause all" -msgstr "" +msgstr "排程進行中 — 點擊以暫停全部" #: changedetectionio/templates/menu.html msgid "Paused" -msgstr "" +msgstr "已暫停" #: changedetectionio/templates/menu.html msgid "Running" @@ -4894,15 +4908,15 @@ msgstr "通知已靜音 - 點擊以取消靜音" #: changedetectionio/templates/menu.html msgid "Alerts on" -msgstr "" +msgstr "警報開啟" #: changedetectionio/templates/menu.html msgid "Log out" -msgstr "" +msgstr "登出" #: changedetectionio/templates/menu.html msgid "Settings" -msgstr "" +msgstr "設定" #: changedetectionio/templates/menu.html msgid "EDIT" @@ -4910,15 +4924,15 @@ msgstr "編輯" #: changedetectionio/templates/menu.html msgid "Website Change Detection and Notification." -msgstr "" +msgstr "網站變更檢測與通知。" #: changedetectionio/templates/menu.html msgid "Toggle AI Mode" -msgstr "" +msgstr "切換 AI 模式" #: changedetectionio/templates/menu.html msgid "Toggle AI mode" -msgstr "" +msgstr "切換 AI 模式" #: changedetectionio/templates/menu.html msgid "Toggle Light/Dark Mode" @@ -4930,35 +4944,35 @@ msgstr "切換亮 / 暗模式" #: changedetectionio/templates/sidebar-nav.html msgid "Add a page watch" -msgstr "" +msgstr "新增網頁監測" #: changedetectionio/templates/sidebar-nav.html msgid "Page Watches" -msgstr "" +msgstr "網頁監測任務" #: changedetectionio/templates/sidebar-nav.html msgid "Unread changes" -msgstr "" +msgstr "未讀變更" #: changedetectionio/templates/sidebar-nav.html msgid "Watch Groups" -msgstr "" +msgstr "監測群組" #: changedetectionio/templates/sidebar-nav.html msgid "Import lists of web pages" -msgstr "" +msgstr "匯入網頁清單" #: changedetectionio/templates/sidebar-nav.html msgid "Browsers (coming soon)" -msgstr "" +msgstr "瀏覽器(即即推出)" #: changedetectionio/templates/sidebar-nav.html msgid "Browsers" -msgstr "" +msgstr "瀏覽器" #: changedetectionio/templates/sidebar-nav.html msgid "soon" -msgstr "" +msgstr "即將推出" #: changedetectionio/templates/sidebar-nav.html msgid "Search, or Use Alt+S Key" @@ -4966,19 +4980,19 @@ msgstr "搜尋,或使用 Alt+S 鍵" #: changedetectionio/templates/sidebar-nav.html msgid "Queue" -msgstr "" +msgstr "佇列" #: changedetectionio/templates/sidebar-nav.html msgid "Live activity" -msgstr "" +msgstr "即時動態" #: changedetectionio/templates/sidebar-nav.html msgid "A new version is available" -msgstr "" +msgstr "有新版本可用" #: changedetectionio/validate_url.py msgid "API Base URL is not a valid http(s) URL." -msgstr "" +msgstr "API 基礎 URL 不是有效的 http(s) URL。" #: changedetectionio/validate_url.py msgid "" @@ -4986,6 +5000,8 @@ msgid "" "allow LLM endpoints on private networks (e.g. a local Ollama server) set the environment variable " "ALLOW_IANA_RESTRICTED_ADDRESSES=true and restart." msgstr "" +"API 基礎 URL 解析為私有、回圈(Loopback)、連結本地(Link-local)或保留的 IP 位址,並已被封鎖以防止 SSRF。若要允許私有網路上的 LLM 端點(例如本地 Ollama 伺服器),請設定環境變數 " +"ALLOW_IANA_RESTRICTED_ADDRESSES=true 並重新啟動。" #: changedetectionio/widgets/ternary_boolean.py msgid "Main settings"