diff --git a/.github/workflows/test-only.yml b/.github/workflows/test-only.yml index fb4d0964..2316d05d 100644 --- a/.github/workflows/test-only.yml +++ b/.github/workflows/test-only.yml @@ -35,20 +35,14 @@ jobs: run: | pip install "$(grep -E '^dennis ?>=' requirements.txt)" dennis-cmd lint --errorsonly changedetectionio/translations/ - - name: Lint .pot template with dennis (baseline-limited warnings) - # BASELINE: dennis warnings present when this check was introduced. Ratchet down only. - # Each time a warning is fixed, lower BASELINE_LIMIT to lock in the improvement. - # Once it reaches 0, replace this step with a strict (`warnings > 0` fails) check, - # matching the `.po` step. - env: - BASELINE_LIMIT: 12 + - name: Lint .pot template with dennis (warnings) run: | output=$(dennis-cmd lint changedetectionio/translations/messages.pot) echo "$output" warnings=$(echo "$output" | awk '/Warnings:/ {print $NF; exit}') - if (( ${warnings:-0} > BASELINE_LIMIT )); then - echo "ERROR: ${warnings} dennis warning(s) exceed baseline of ${BASELINE_LIMIT} in messages.pot" - echo "Fix the new warning(s). BASELINE_LIMIT may only ratchet downward." + if (( ${warnings:-0} > 0 )); then + echo "ERROR: ${warnings} dennis warning(s) detected in messages.pot" + echo "Fix the warning(s)." exit 1 fi - name: Lint .po files with dennis (warnings) diff --git a/changedetectionio/blueprint/imports/importer.py b/changedetectionio/blueprint/imports/importer.py index 5e18209b..aa4379dc 100644 --- a/changedetectionio/blueprint/imports/importer.py +++ b/changedetectionio/blueprint/imports/importer.py @@ -75,7 +75,7 @@ class import_url_list(Importer): self.remaining_data = [] self.remaining_data.append(url) - flash(gettext("{} Imported from list in {:.2f}s, {} Skipped.").format(good, time.time() - now, len(self.remaining_data))) + flash(gettext("{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped.").format(count=good, duration=time.time() - now, skipped_count=len(self.remaining_data))) class import_distill_io_json(Importer): @@ -136,7 +136,7 @@ class import_distill_io_json(Importer): self.new_uuids.append(new_uuid) good += 1 - flash(gettext("{} Imported from Distill.io in {:.2f}s, {} Skipped.").format(len(self.new_uuids), time.time() - now, len(self.remaining_data))) + flash(gettext("{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped.").format(count=len(self.new_uuids), duration=time.time() - now, skipped_count=len(self.remaining_data))) class import_xlsx_wachete(Importer): @@ -212,7 +212,7 @@ class import_xlsx_wachete(Importer): logger.error(e) flash(gettext("Error processing row number {}, check all cell data types are correct, row was skipped.").format(row_id), 'error') - flash(gettext("{} imported from Wachete .xlsx in {:.2f}s").format(len(self.new_uuids), time.time() - now)) + flash(gettext("{count} imported from Wachete .xlsx in {duration:.2f}s").format(count=len(self.new_uuids), duration=time.time() - now)) class import_xlsx_custom(Importer): @@ -293,4 +293,4 @@ class import_xlsx_custom(Importer): logger.error(e) flash(gettext("Error processing row number {}, check all cell data types are correct, row was skipped.").format(row_i), 'error') - flash(gettext("{} imported from custom .xlsx in {:.2f}s").format(len(self.new_uuids), time.time() - now)) \ No newline at end of file + flash(gettext("{count} imported from custom .xlsx in {duration:.2f}s").format(count=len(self.new_uuids), duration=time.time() - now)) \ No newline at end of file diff --git a/changedetectionio/blueprint/settings/__init__.py b/changedetectionio/blueprint/settings/__init__.py index 9bacff0f..7e4e5750 100644 --- a/changedetectionio/blueprint/settings/__init__.py +++ b/changedetectionio/blueprint/settings/__init__.py @@ -181,8 +181,8 @@ def construct_blueprint(datastore: ChangeDetectionStore): # Check CPU core availability and warn if worker count is high cpu_count = os.cpu_count() if cpu_count and new_worker_count >= (cpu_count * 0.9): - flash(gettext("Warning: Worker count ({}) is close to or exceeds available CPU cores ({})").format( - new_worker_count, cpu_count), 'warning') + flash(gettext("Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})").format( + worker_count=new_worker_count, cpu_count=cpu_count), 'warning') result = worker_pool.adjust_async_worker_count( new_count=new_worker_count, diff --git a/changedetectionio/blueprint/settings/llm.py b/changedetectionio/blueprint/settings/llm.py index 356358b0..2658633e 100644 --- a/changedetectionio/blueprint/settings/llm.py +++ b/changedetectionio/blueprint/settings/llm.py @@ -122,7 +122,7 @@ def construct_llm_blueprint(datastore: ChangeDetectionStore): except OSError as e: logger.warning(f"Could not remove LLM summary cache file {f}: {e}") logger.info(f"LLM summary cache cleared: {count} file(s) removed") - flash(gettext("AI summary cache cleared (%(n)s file(s) removed).", n=count), 'notice') + flash(gettext("AI summary cache cleared (%(count)s file(s) removed).", count=count), 'notice') return redirect(url_for('settings.settings_page') + '#ai') return llm_blueprint diff --git a/changedetectionio/blueprint/settings/templates/settings_llm_tab.html b/changedetectionio/blueprint/settings/templates/settings_llm_tab.html index 541d1026..636b348d 100644 --- a/changedetectionio/blueprint/settings/templates/settings_llm_tab.html +++ b/changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -333,7 +333,7 @@ {{ _('(set via LLM_MAX_INPUT_CHARS)') | safe }} {% else %} {{ form.llm.form.llm_max_input_chars(placeholder='100000', value=llm_stored.get('max_input_chars', 100000) or '') }} - {{ _('characters — currently enforcing: %(n)s', n='{:,}'.format(llm_effective_max_input_chars)) }} + {{ _('characters — currently enforcing: %(limit)s', limit='{:,}'.format(llm_effective_max_input_chars)) }} {% endif %} @@ -364,7 +364,7 @@ {{ _('(set via LLM_MAX_INPUT_CHARS)') | safe }} {% else %} {{ form.llm.form.llm_max_input_chars(placeholder='100000', value=llm_stored.get('max_input_chars', 100000) or '') }} - {{ _('characters — currently enforcing: %(n)s', n='{:,}'.format(llm_effective_max_input_chars)) }} + {{ _('characters — currently enforcing: %(limit)s', limit='{:,}'.format(llm_effective_max_input_chars)) }} {% endif %} diff --git a/changedetectionio/blueprint/ui/__init__.py b/changedetectionio/blueprint/ui/__init__.py index 751b4023..663bacf4 100644 --- a/changedetectionio/blueprint/ui/__init__.py +++ b/changedetectionio/blueprint/ui/__init__.py @@ -307,8 +307,8 @@ def construct_blueprint(datastore: ChangeDetectionStore, update_q, worker_pool, # Provide feedback about skipped watches skipped_count = len(watches_to_queue) - len(watches_to_queue_filtered) if skipped_count > 0: - flash(gettext("Queued {} watches for rechecking ({} already queued or running).").format( - len(watches_to_queue_filtered), skipped_count)) + flash(gettext("Queued {count} watches for rechecking ({skipped_count} already queued or running).").format( + count=len(watches_to_queue_filtered), skipped_count=skipped_count)) else: if len(watches_to_queue_filtered) == 1: flash(gettext("Queued 1 watch for rechecking.")) diff --git a/changedetectionio/forms.py b/changedetectionio/forms.py index eaaedefa..ff5abdfb 100644 --- a/changedetectionio/forms.py +++ b/changedetectionio/forms.py @@ -618,8 +618,8 @@ class ValidateCSSJSONXPATHInput(object): try: elementpath.select(tree, line.strip(), parser=SafeXPath3Parser) except elementpath.ElementPathError as e: - message = field.gettext('\'%s\' is not a valid XPath expression. (%s)') - raise ValidationError(message % (line, str(e))) + message = field.gettext('\'%(expression)s\' is not a valid XPath expression. (%(error)s)') + raise ValidationError(message % {'expression': line, 'error': str(e)}) except: raise ValidationError("A system-error occurred when validating your XPath expression") @@ -633,8 +633,8 @@ class ValidateCSSJSONXPATHInput(object): try: tree.xpath(line.strip()) except etree.XPathEvalError as e: - message = field.gettext('\'%s\' is not a valid XPath expression. (%s)') - raise ValidationError(message % (line, str(e))) + message = field.gettext('\'%(expression)s\' is not a valid XPath expression. (%(error)s)') + raise ValidationError(message % {'expression': line, 'error': str(e)}) except: raise ValidationError("A system-error occurred when validating your XPath expression") @@ -653,8 +653,8 @@ class ValidateCSSJSONXPATHInput(object): try: parse(input) except (JsonPathParserError, JsonPathLexerError) as e: - message = field.gettext('\'%s\' is not a valid JSONPath expression. (%s)') - raise ValidationError(message % (input, str(e))) + message = field.gettext('\'%(expression)s\' is not a valid JSONPath expression. (%(error)s)') + raise ValidationError(message % {'expression': input, 'error': str(e)}) except: raise ValidationError("A system-error occurred when validating your JSONPath expression") @@ -677,8 +677,8 @@ class ValidateCSSJSONXPATHInput(object): validate_jq_expression(input) jq.compile(input) except (ValueError) as e: - message = field.gettext('\'%s\' is not a valid jq expression. (%s)') - raise ValidationError(message % (input, str(e))) + message = field.gettext('\'%(expression)s\' is not a valid jq expression. (%(error)s)') + raise ValidationError(message % {'expression': input, 'error': str(e)}) except: raise ValidationError("A system-error occurred when validating your jq expression") diff --git a/changedetectionio/store/__init__.py b/changedetectionio/store/__init__.py index db17b2bb..f469fdfd 100644 --- a/changedetectionio/store/__init__.py +++ b/changedetectionio/store/__init__.py @@ -743,7 +743,7 @@ class ChangeDetectionStore(DatastoreUpdatesMixin, FileSavingDataStore): current_watch_count = len(self.__data['watching']) if current_watch_count >= page_watch_limit: logger.error(f"Watch limit reached: {current_watch_count}/{page_watch_limit} watches. Cannot add {url}") - flash(gettext("Watch limit reached ({}/{} watches). Cannot add more watches.").format(current_watch_count, page_watch_limit), 'error') + flash(gettext("Watch limit reached ({current}/{limit} watches). Cannot add more watches.").format(current=current_watch_count, limit=page_watch_limit), 'error') return None except ValueError: logger.warning(f"Invalid PAGE_WATCH_LIMIT value: {page_watch_limit}, ignoring limit check") diff --git a/changedetectionio/translations/cs/LC_MESSAGES/messages.mo b/changedetectionio/translations/cs/LC_MESSAGES/messages.mo index bdb14d81..7a7d9394 100644 Binary files a/changedetectionio/translations/cs/LC_MESSAGES/messages.mo and b/changedetectionio/translations/cs/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/cs/LC_MESSAGES/messages.po b/changedetectionio/translations/cs/LC_MESSAGES/messages.po index 61bec172..5b4d3d71 100644 --- a/changedetectionio/translations/cs/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/cs/LC_MESSAGES/messages.po @@ -160,8 +160,8 @@ msgstr "Importuje se prvních 5000 URL adres, další lze načíst opakovaným i #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} importováno ze seznamu za {:.2f}s, {} přeskočeno." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} importováno ze seznamu za {duration:.2f}s, {skipped_count} přeskočeno." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -173,8 +173,8 @@ msgstr "Strukturovaný JSON text je neplatný, byl poškozen?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} importováno z Distill.io za {:.2f}s, {} přeskočeno." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} importováno z Distill.io za {duration:.2f}s, {skipped_count} přeskočeno." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -192,13 +192,13 @@ msgstr "Chyba při zpracování řádku {}, zkontrolujte že všechny typy dat v #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} importováno z Wachete .xlsx za {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} importováno z Wachete .xlsx za {duration:.2f}s" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} importováno z vlastního .xlsx za {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} importováno z vlastního .xlsx za {duration:.2f}s" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -313,8 +313,8 @@ msgstr "Ochrana heslem odebrána." #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "Upozornění: Počet pracovních procesů ({}) se blíží nebo překračuje počet CPU jader ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "Upozornění: Počet pracovních procesů ({worker_count}) se blíží nebo překračuje počet CPU jader ({cpu_count})" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -369,7 +369,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1071,7 +1071,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1429,8 +1429,8 @@ msgstr "" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "Do fronty přidáno {} sledování k opětovné kontrole ({} již ve frontě nebo běží)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "Do fronty přidáno {count} sledování k opětovné kontrole ({skipped_count} již ve frontě nebo běží)." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2668,18 +2668,18 @@ msgstr "RegEx '%s' není platný regulární výraz." #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s' není platný výraz XPath. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s' není platný výraz XPath. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s' není platný výraz JSONPath. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s' není platný výraz JSONPath. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s' není platný výraz jq. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s' není platný výraz jq. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3381,7 +3381,7 @@ msgstr "" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html diff --git a/changedetectionio/translations/de/LC_MESSAGES/messages.mo b/changedetectionio/translations/de/LC_MESSAGES/messages.mo index 72fcc225..1f74db27 100644 Binary files a/changedetectionio/translations/de/LC_MESSAGES/messages.mo and b/changedetectionio/translations/de/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/de/LC_MESSAGES/messages.po b/changedetectionio/translations/de/LC_MESSAGES/messages.po index e8ead9b0..62e67247 100644 --- a/changedetectionio/translations/de/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/de/LC_MESSAGES/messages.po @@ -162,8 +162,8 @@ msgstr "Es werden 5.000 der ersten URLs aus Ihrer Liste importiert, der Rest kan #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} aus Liste importiert in {:.2f}s, {} übersprungen." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} aus Liste importiert in {duration:.2f}s, {skipped_count} übersprungen." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -175,8 +175,8 @@ msgstr "JSON-Struktur sieht ungültig aus, ist sie beschädigt?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} aus Distill.io importiert in {:.2f}s, {} übersprungen." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} aus Distill.io importiert in {duration:.2f}s, {skipped_count} übersprungen." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -194,13 +194,13 @@ msgstr "Fehler bei der Verarbeitung von Zeile {}, prüfen Sie, ob alle Zelldaten #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} aus Wachete .xlsx importiert in {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} aus Wachete .xlsx importiert in {duration:.2f}s" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} aus benutzerdefinierter .xlsx importiert in {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} aus benutzerdefinierter .xlsx importiert in {duration:.2f}s" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -319,8 +319,8 @@ msgstr "Passwortschutz entfernt." #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "Warnung: Anzahl der Worker ({}) nähert sich oder überschreitet die verfügbaren CPU-Kerne ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "Warnung: Anzahl der Worker ({worker_count}) nähert sich oder überschreitet die verfügbaren CPU-Kerne ({cpu_count})" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -375,7 +375,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1087,7 +1087,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1452,8 +1452,8 @@ msgstr "1 Überwachung zur erneuten Überprüfung in Warteschlange gestellt." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{} Überwachungen zur erneuten Überprüfung eingereiht ({} bereits in Warteschlange oder laufend)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count} Überwachungen zur erneuten Überprüfung eingereiht ({skipped_count} bereits in Warteschlange oder laufend)." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2719,18 +2719,18 @@ msgstr "RegEx „%s“ ist kein gültiger regulärer Ausdruck." #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "„%s“ ist kein gültiger XPath-Ausdruck. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "„%(expression)s“ ist kein gültiger XPath-Ausdruck. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "„%s“ ist kein gültiger JSONPath-Ausdruck. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "„%(expression)s“ ist kein gültiger JSONPath-Ausdruck. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "„%s“ ist kein gültiger JQ-Ausdruck. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "„%(expression)s“ ist kein gültiger JQ-Ausdruck. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3435,7 +3435,7 @@ msgstr "Das Protokoll wird nicht unterstützt oder das URL-Format ist ungültig. #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html diff --git a/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po b/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po index edd9ad78..aa094f98 100644 --- a/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/en_GB/LC_MESSAGES/messages.po @@ -160,7 +160,7 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." msgstr "" #: changedetectionio/blueprint/imports/importer.py @@ -173,7 +173,7 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." msgstr "" #: changedetectionio/blueprint/imports/importer.py @@ -192,12 +192,12 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" msgstr "" #: changedetectionio/blueprint/imports/templates/import.html @@ -311,7 +311,7 @@ msgstr "" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" msgstr "" #: changedetectionio/blueprint/settings/__init__.py @@ -367,7 +367,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1069,7 +1069,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1425,7 +1425,7 @@ msgstr "" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." msgstr "" #: changedetectionio/blueprint/ui/__init__.py @@ -2662,17 +2662,17 @@ msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py @@ -3375,7 +3375,7 @@ msgstr "" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html diff --git a/changedetectionio/translations/en_US/LC_MESSAGES/messages.po b/changedetectionio/translations/en_US/LC_MESSAGES/messages.po index 9e25a1c6..1c6b87c0 100644 --- a/changedetectionio/translations/en_US/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/en_US/LC_MESSAGES/messages.po @@ -160,7 +160,7 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." msgstr "" #: changedetectionio/blueprint/imports/importer.py @@ -173,7 +173,7 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." msgstr "" #: changedetectionio/blueprint/imports/importer.py @@ -192,12 +192,12 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" msgstr "" #: changedetectionio/blueprint/imports/templates/import.html @@ -311,7 +311,7 @@ msgstr "" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" msgstr "" #: changedetectionio/blueprint/settings/__init__.py @@ -367,7 +367,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1069,7 +1069,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1425,7 +1425,7 @@ msgstr "" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." msgstr "" #: changedetectionio/blueprint/ui/__init__.py @@ -2662,17 +2662,17 @@ msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py @@ -3375,7 +3375,7 @@ msgstr "" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html diff --git a/changedetectionio/translations/es/LC_MESSAGES/messages.mo b/changedetectionio/translations/es/LC_MESSAGES/messages.mo index 2d6d61e2..5a57c19c 100644 Binary files a/changedetectionio/translations/es/LC_MESSAGES/messages.mo and b/changedetectionio/translations/es/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/es/LC_MESSAGES/messages.po b/changedetectionio/translations/es/LC_MESSAGES/messages.po index 46f78610..89931980 100644 --- a/changedetectionio/translations/es/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/es/LC_MESSAGES/messages.po @@ -160,8 +160,8 @@ msgstr "Importando 5.000 de las primeras URL de tu lista, el resto se puede impo #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} importado de la lista en {:.2f}s, {} omitido." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} importado de la lista en {duration:.2f}s, {skipped_count} omitido." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -173,8 +173,8 @@ msgstr "La estructura JSON parece no válida, ¿estaba rota?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} importado de Distill.io en {:.2f}s, {} omitido." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} importado de Distill.io en {duration:.2f}s, {skipped_count} omitido." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -194,13 +194,13 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} importado de Wachete .xlsx en {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} importado de Wachete .xlsx en {duration:.2f}s" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} importado desde .xlsx personalizado en {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} importado desde .xlsx personalizado en {duration:.2f}s" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -317,8 +317,10 @@ msgstr "Se eliminó la protección con contraseña." #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "Advertencia: recuento de trabajadores ({} ) está cerca o excede los núcleos de CPU disponibles ({} )" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "" +"Advertencia: recuento de trabajadores ({worker_count} ) está cerca o excede los núcleos de CPU disponibles " +"({cpu_count} )" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -373,7 +375,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1105,7 +1107,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1470,8 +1472,8 @@ msgstr "1 monitor en cola para volver a verificar." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{} monitores en cola para volver a comprobar ({} ya en cola o en ejecución)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count} monitores en cola para volver a comprobar ({skipped_count} ya en cola o en ejecución)." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2733,18 +2735,18 @@ msgstr "Expresión regular '%s' no es una expresión regular válida." #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s' no es una expresión XPath válida. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s' no es una expresión XPath válida. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s' no es una expresión JSONPath válida. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s' no es una expresión JSONPath válida. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s' no es una expresión jq válida. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s' no es una expresión jq válida. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3446,8 +3448,8 @@ msgstr "El protocolo de visualización no está permitido o el formato de URL no #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." -msgstr "Límite de visualización alcanzado ({} /{} monitores). No se pueden agregar más monitores." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." +msgstr "Límite de visualización alcanzado ({current} /{limit} monitores). No se pueden agregar más monitores." #: changedetectionio/templates/_common_fields.html msgid "Body for all notifications — You can use" diff --git a/changedetectionio/translations/fr/LC_MESSAGES/messages.mo b/changedetectionio/translations/fr/LC_MESSAGES/messages.mo index 0fc2de1e..650de025 100644 Binary files a/changedetectionio/translations/fr/LC_MESSAGES/messages.mo and b/changedetectionio/translations/fr/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/fr/LC_MESSAGES/messages.po b/changedetectionio/translations/fr/LC_MESSAGES/messages.po index 433925c6..13a62a71 100644 --- a/changedetectionio/translations/fr/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/fr/LC_MESSAGES/messages.po @@ -160,8 +160,8 @@ msgstr "Importation de 5 000 des premières URL de votre liste, le reste peut ê #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} importées de la liste en {:.2f}s, {} ignorées." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} importées de la liste en {duration:.2f}s, {skipped_count} ignorées." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -173,8 +173,8 @@ msgstr "La structure JSON semble invalide, est-elle corrompue ?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} importées de Distill.io en {:.2f}s, {} ignorées." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} importées de Distill.io en {duration:.2f}s, {skipped_count} ignorées." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -194,13 +194,13 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} importées de Wachete .xlsx en {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} importées de Wachete .xlsx en {duration:.2f}s" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} importées de .xlsx personnalisé en {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} importées de .xlsx personnalisé en {duration:.2f}s" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -315,8 +315,8 @@ msgstr "" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "Avertissement: Le nombre de workers ({}) approche ou dépasse les cœurs CPU disponibles ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "Avertissement: Le nombre de workers ({worker_count}) approche ou dépasse les cœurs CPU disponibles ({cpu_count})" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -371,7 +371,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1075,7 +1075,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1434,8 +1434,8 @@ msgstr "" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{} moniteurs mis en file d'attente ({} déjà en file ou en cours)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count} moniteurs mis en file d'attente ({skipped_count} déjà en file ou en cours)." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2675,18 +2675,18 @@ msgstr "RegEx '%s' n'est pas une expression régulière valide." #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s' n'est pas une expression XPath valide. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s' n'est pas une expression XPath valide. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s' n'est pas une expression JSONPath valide. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s' n'est pas une expression JSONPath valide. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s' n'est pas une expression jq valide. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s' n'est pas une expression jq valide. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3388,7 +3388,7 @@ msgstr "" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html diff --git a/changedetectionio/translations/it/LC_MESSAGES/messages.mo b/changedetectionio/translations/it/LC_MESSAGES/messages.mo index d4e1f39a..a49ecffa 100644 Binary files a/changedetectionio/translations/it/LC_MESSAGES/messages.mo and b/changedetectionio/translations/it/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/it/LC_MESSAGES/messages.po b/changedetectionio/translations/it/LC_MESSAGES/messages.po index 10094f9c..789dd5dd 100644 --- a/changedetectionio/translations/it/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/it/LC_MESSAGES/messages.po @@ -160,8 +160,8 @@ msgstr "Importazione delle prime 5.000 URL dalla tua lista, il resto può essere #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} Importate dalla lista in {:.2f}s, {} Ignorate." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} Importate dalla lista in {duration:.2f}s, {skipped_count} Ignorate." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -173,8 +173,8 @@ msgstr "La struttura JSON sembra non valida, è danneggiata?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} Importate da Distill.io in {:.2f}s, {} Ignorate." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} Importate da Distill.io in {duration:.2f}s, {skipped_count} Ignorate." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -194,13 +194,13 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} importate da Wachete .xlsx in {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} importate da Wachete .xlsx in {duration:.2f}s" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} importate da .xlsx personalizzato in {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} importate da .xlsx personalizzato in {duration:.2f}s" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -313,8 +313,8 @@ msgstr "" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "Avviso: Il numero di worker ({}) si avvicina o supera i core CPU disponibili ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "Avviso: Il numero di worker ({worker_count}) si avvicina o supera i core CPU disponibili ({cpu_count})" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -369,7 +369,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1071,7 +1071,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1427,8 +1427,8 @@ msgstr "" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{} monitor in coda ({} già in coda o in esecuzione)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count} monitor in coda ({skipped_count} già in coda o in esecuzione)." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2664,18 +2664,18 @@ msgstr "La RegEx '%s' non è un'espressione regolare valida." #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s' non è un'espressione XPath valida. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s' non è un'espressione XPath valida. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s' non è un'espressione JSONPath valida. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s' non è un'espressione JSONPath valida. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s' non è un'espressione jq valida. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s' non è un'espressione jq valida. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3377,7 +3377,7 @@ msgstr "Protocollo non consentito o formato URL non valido" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html diff --git a/changedetectionio/translations/ja/LC_MESSAGES/messages.mo b/changedetectionio/translations/ja/LC_MESSAGES/messages.mo index 56223d1e..562ad453 100644 Binary files a/changedetectionio/translations/ja/LC_MESSAGES/messages.mo and b/changedetectionio/translations/ja/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/ja/LC_MESSAGES/messages.po b/changedetectionio/translations/ja/LC_MESSAGES/messages.po index 78b234a1..098f827d 100644 --- a/changedetectionio/translations/ja/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/ja/LC_MESSAGES/messages.po @@ -161,8 +161,8 @@ msgstr "リストの最初の5,000件のURLをインポートしています。 #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} 件をリストから {:.2f}秒でインポートしました。{} 件をスキップしました。" +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} 件をリストから {duration:.2f}秒でインポートしました。{skipped_count} 件をスキップしました。" #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -174,8 +174,8 @@ msgstr "JSONの構造が無効のようです。ファイルが壊れていま #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} 件を Distill.io から {:.2f}秒でインポートしました。{} 件をスキップしました。" +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} 件を Distill.io から {duration:.2f}秒でインポートしました。{skipped_count} 件をスキップしました。" #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -193,13 +193,13 @@ msgstr "行番号 {} の処理中にエラーが発生しました。すべて #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} 件を Wachete .xlsx から {:.2f}秒でインポートしました" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} 件を Wachete .xlsx から {duration:.2f}秒でインポートしました" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} 件をカスタム .xlsx から {:.2f}秒でインポートしました" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} 件をカスタム .xlsx から {duration:.2f}秒でインポートしました" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -315,8 +315,8 @@ msgstr "パスワード保護が解除されました。" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "警告:ワーカー数({})が利用可能なCPUコア数({})に近いか超えています" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "警告:ワーカー数({worker_count})が利用可能なCPUコア数({cpu_count})に近いか超えています" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -371,7 +371,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1076,7 +1076,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1433,8 +1433,8 @@ msgstr "1件のウォッチを再チェックのためキューに追加しま #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{} 件のウォッチを再チェックのためキューに追加しました({} 件はすでにキュー済みまたは実行中)。" +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count} 件のウォッチを再チェックのためキューに追加しました({skipped_count} 件はすでにキュー済みまたは実行中)。" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2681,18 +2681,18 @@ msgstr "正規表現 '%s' は有効な正規表現ではありません。" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s' は有効なXPath式ではありません。(%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s' は有効なXPath式ではありません。(%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s' は有効なJSONPath式ではありません。(%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s' は有効なJSONPath式ではありません。(%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s' は有効なjq式ではありません。(%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s' は有効なjq式ではありません。(%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3394,8 +3394,8 @@ msgstr "ウォッチのプロトコルが許可されていないか、URL形式 #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." -msgstr "ウォッチの上限に達しました({}/{} ウォッチ)。これ以上ウォッチを追加できません。" +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." +msgstr "ウォッチの上限に達しました({current}/{limit} ウォッチ)。これ以上ウォッチを追加できません。" #: changedetectionio/templates/_common_fields.html msgid "Body for all notifications — You can use" diff --git a/changedetectionio/translations/ko/LC_MESSAGES/messages.mo b/changedetectionio/translations/ko/LC_MESSAGES/messages.mo index 0ab9e7fd..19538596 100644 Binary files a/changedetectionio/translations/ko/LC_MESSAGES/messages.mo and b/changedetectionio/translations/ko/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/ko/LC_MESSAGES/messages.po b/changedetectionio/translations/ko/LC_MESSAGES/messages.po index 1078b3c7..9d62c841 100644 --- a/changedetectionio/translations/ko/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/ko/LC_MESSAGES/messages.po @@ -160,8 +160,8 @@ msgstr "목록의 처음 5,000개 URL만 가져옵니다. 나머지는 다시 #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "목록에서 {}개를 {:.2f}초 만에 가져왔습니다. {}개는 건너뛰었습니다." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "목록에서 {count}개를 {duration:.2f}초 만에 가져왔습니다. {skipped_count}개는 건너뛰었습니다." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -173,8 +173,8 @@ msgstr "JSON 구조가 올바르지 않습니다. 파일이 손상되었나요?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "Distill.io에서 {}개를 {:.2f}초 만에 가져왔습니다. {}개는 건너뛰었습니다." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "Distill.io에서 {count}개를 {duration:.2f}초 만에 가져왔습니다. {skipped_count}개는 건너뛰었습니다." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -192,13 +192,13 @@ msgstr "{}행 처리 중 오류가 발생했습니다. 모든 셀 데이터 형 #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "Wachete .xlsx에서 {}개를 {:.2f}초 만에 가져왔습니다." +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "Wachete .xlsx에서 {count}개를 {duration:.2f}초 만에 가져왔습니다." #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "사용자 지정 .xlsx에서 {}개를 {:.2f}초 만에 가져왔습니다." +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "사용자 지정 .xlsx에서 {count}개를 {duration:.2f}초 만에 가져왔습니다." #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -313,8 +313,8 @@ msgstr "비밀번호 보호가 해제되었습니다." #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "경고: 워커 수({})가 사용 가능한 CPU 코어 수({})에 근접하거나 초과합니다" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "경고: 워커 수({worker_count})가 사용 가능한 CPU 코어 수({cpu_count})에 근접하거나 초과합니다" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -369,8 +369,8 @@ msgstr "AI / LLM 설정이 제거되었습니다." #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." -msgstr "AI 요약 캐시가 지워졌습니다(%(n)s개 파일 제거됨)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." +msgstr "AI 요약 캐시가 지워졌습니다(%(count)s개 파일 제거됨)." #: changedetectionio/blueprint/settings/templates/notification-log.html msgid "Notification debug log" @@ -1077,8 +1077,8 @@ msgstr "(LLM_MAX_INPUT_CHARS로 설정됨)" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" -msgstr "문자 - 현재 적용 중: %(n)s" +msgid "characters — currently enforcing: %(limit)s" +msgstr "문자 - 현재 적용 중: %(limit)s" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html msgid "No AI usage recorded yet." @@ -1435,8 +1435,8 @@ msgstr "모니터링 1개를 재확인 대기열에 추가했습니다." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{}개 모니터링을 재확인 대기열에 추가했습니다. ({}개는 이미 대기 중이거나 실행 중)" +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count}개 모니터링을 재확인 대기열에 추가했습니다. ({skipped_count}개는 이미 대기 중이거나 실행 중)" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2672,18 +2672,18 @@ msgstr "정규식 '%s'은(는) 유효하지 않습니다." #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s'은(는) 유효한 XPath 표현식이 아닙니다. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s'은(는) 유효한 XPath 표현식이 아닙니다. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s'은(는) 유효한 JSONPath 표현식이 아닙니다. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s'은(는) 유효한 JSONPath 표현식이 아닙니다. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s'은(는) 유효한 jq 표현식이 아닙니다. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s'은(는) 유효한 jq 표현식이 아닙니다. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3385,8 +3385,8 @@ msgstr "모니터링 프로토콜이 허용되지 않거나 URL 형식이 올바 #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." -msgstr "모니터링 한도에 도달했습니다. ({}/{}개) 더 이상 모니터링을 추가할 수 없습니다." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." +msgstr "모니터링 한도에 도달했습니다. ({current}/{limit}개) 더 이상 모니터링을 추가할 수 없습니다." #: changedetectionio/templates/_common_fields.html msgid "Body for all notifications — You can use" @@ -3843,7 +3843,7 @@ msgstr "이 태그/그룹의 모든 모니터링에 판단 기준을 설정합 #: changedetectionio/templates/edit/include_llm_intent.html #, python-format msgid "From group '%(name)s': %(value)s" -msgstr "'%(name)s' 그룹에서 가져옴: %(value)s" +msgstr "" #: 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." diff --git a/changedetectionio/translations/messages.pot b/changedetectionio/translations/messages.pot index ce4f2330..6f2a7138 100644 --- a/changedetectionio/translations/messages.pot +++ b/changedetectionio/translations/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: changedetection.io 0.55.3\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-28 16:31+0900\n" +"POT-Creation-Date: 2026-04-30 19:35+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -159,7 +159,7 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." msgstr "" #: changedetectionio/blueprint/imports/importer.py @@ -172,7 +172,7 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." msgstr "" #: changedetectionio/blueprint/imports/importer.py @@ -191,12 +191,12 @@ msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" msgstr "" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" msgstr "" #: changedetectionio/blueprint/imports/templates/import.html @@ -310,7 +310,7 @@ msgstr "" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" msgstr "" #: changedetectionio/blueprint/settings/__init__.py @@ -366,7 +366,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1068,7 +1068,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1424,7 +1424,7 @@ msgstr "" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." msgstr "" #: changedetectionio/blueprint/ui/__init__.py @@ -2661,17 +2661,17 @@ msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" msgstr "" #: changedetectionio/forms.py @@ -3374,7 +3374,7 @@ msgstr "" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html diff --git a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.mo b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.mo index 7acab35d..41f45929 100644 Binary files a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.mo and b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po index f99ed7d2..63dacadb 100644 --- a/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/pt_BR/LC_MESSAGES/messages.po @@ -161,8 +161,8 @@ msgstr "Importando as primeiras 5.000 URLs da sua lista, o restante pode ser imp #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} Importados da lista em {:.2f}s, {} Ignorados." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} Importados da lista em {duration:.2f}s, {skipped_count} Ignorados." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -174,8 +174,8 @@ msgstr "A estrutura do JSON parece inválida, ele está corrompido?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} Importados do Distill.io em {:.2f}s, {} Ignorados." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} Importados do Distill.io em {duration:.2f}s, {skipped_count} Ignorados." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -193,13 +193,13 @@ msgstr "Erro ao processar a linha {}, verifique se os tipos de dados das célula #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} importados do Wachete .xlsx em {:.2f}s" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} importados do Wachete .xlsx em {duration:.2f}s" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} importados do .xlsx personalizado em {:.2f}s" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} importados do .xlsx personalizado em {duration:.2f}s" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -316,8 +316,8 @@ msgstr "Proteção por senha removida." #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "Aviso: O número de workers ({}) está próximo ou excede os núcleos de CPU disponíveis ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "Aviso: O número de workers ({worker_count}) está próximo ou excede os núcleos de CPU disponíveis ({cpu_count})" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -372,7 +372,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1094,7 +1094,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1457,8 +1457,8 @@ msgstr "1 monitoramento enfileirado para rechecagem." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{} monitoramentos enfileirados para rechecagem ({} já na fila ou rodando)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count} monitoramentos enfileirados para rechecagem ({skipped_count} já na fila ou rodando)." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2710,18 +2710,18 @@ msgstr "RegEx '%s' não é uma expressão regular válida." #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s' não é uma expressão XPath válida. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s' não é uma expressão XPath válida. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s' não é uma expressão JSONPath válida. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s' não é uma expressão JSONPath válida. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s' não é uma expressão jq válida. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s' não é uma expressão jq válida. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3423,8 +3423,8 @@ msgstr "O protocolo de monitoramento não é permitido ou o formato da URL é in #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." -msgstr "Limite de monitoramentos atingido ({}/{}). Não é possível adicionar mais." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." +msgstr "Limite de monitoramentos atingido ({current}/{limit}). Não é possível adicionar mais." #: changedetectionio/templates/_common_fields.html msgid "Body for all notifications — You can use" diff --git a/changedetectionio/translations/tr/LC_MESSAGES/messages.mo b/changedetectionio/translations/tr/LC_MESSAGES/messages.mo index 2d2ea00a..8d5cb3ab 100644 Binary files a/changedetectionio/translations/tr/LC_MESSAGES/messages.mo and b/changedetectionio/translations/tr/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/tr/LC_MESSAGES/messages.po b/changedetectionio/translations/tr/LC_MESSAGES/messages.po index 4074745a..c6196867 100644 --- a/changedetectionio/translations/tr/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/tr/LC_MESSAGES/messages.po @@ -165,8 +165,8 @@ msgstr "Listenizden ilk 5.000 URL içe aktarılıyor, geri kalanı daha sonra te #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} kayıt listeden {:.2f} saniyede içe aktarıldı, {} atlandı." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} kayıt listeden {duration:.2f} saniyede içe aktarıldı, {skipped_count} atlandı." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -178,8 +178,8 @@ msgstr "JSON yapısı geçersiz görünüyor, bozuk olabilir mi?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} kayıt Distill.io'dan {:.2f} saniyede içe aktarıldı, {} atlandı." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} kayıt Distill.io'dan {duration:.2f} saniyede içe aktarıldı, {skipped_count} atlandı." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -197,13 +197,13 @@ msgstr "Satır numarası {} işlenirken hata oluştu, tüm hücre veri tiplerini #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} kayıt Wachete .xlsx dosyasından {:.2f} saniyede içe aktarıldı" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} kayıt Wachete .xlsx dosyasından {duration:.2f} saniyede içe aktarıldı" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} kayıt özel .xlsx dosyasından {:.2f} saniyede içe aktarıldı" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} kayıt özel .xlsx dosyasından {duration:.2f} saniyede içe aktarıldı" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -320,8 +320,8 @@ msgstr "Parola koruması kaldırıldı." #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "Uyarı: Çalışan sayısı ({}), mevcut CPU çekirdek sayısına ({}) yakın veya bunu aşıyor" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "Uyarı: Çalışan sayısı ({worker_count}), mevcut CPU çekirdek sayısına ({cpu_count}) yakın veya bunu aşıyor" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -376,7 +376,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1104,7 +1104,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1464,8 +1464,8 @@ msgstr "1 izleyici yeniden kontrol için sıraya alındı." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{} izleyici yeniden kontrol için sıraya alındı ({} tanesi zaten sırada veya çalışıyor)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count} izleyici yeniden kontrol için sıraya alındı ({skipped_count} tanesi zaten sırada veya çalışıyor)." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2715,18 +2715,18 @@ msgstr "'%s' RegEx'i geçerli bir düzenli ifade değil." #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s' geçerli bir XPath ifadesi değil. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s' geçerli bir XPath ifadesi değil. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s' geçerli bir JSONPath ifadesi değil. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s' geçerli bir JSONPath ifadesi değil. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s' geçerli bir jq ifadesi değil. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s' geçerli bir jq ifadesi değil. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3428,8 +3428,8 @@ msgstr "İzleyici protokolüne izin verilmiyor veya geçersiz URL formatı" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." -msgstr "İzleyici sınırına ulaşıldı ({}/{} izleyici). Daha fazla izleyici eklenemez." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." +msgstr "İzleyici sınırına ulaşıldı ({current}/{limit} izleyici). Daha fazla izleyici eklenemez." #: changedetectionio/templates/_common_fields.html msgid "Body for all notifications — You can use" diff --git a/changedetectionio/translations/uk/LC_MESSAGES/messages.mo b/changedetectionio/translations/uk/LC_MESSAGES/messages.mo index bea0be03..3a4d57d0 100644 Binary files a/changedetectionio/translations/uk/LC_MESSAGES/messages.mo and b/changedetectionio/translations/uk/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/uk/LC_MESSAGES/messages.po b/changedetectionio/translations/uk/LC_MESSAGES/messages.po index 49d5203a..61fe7b17 100644 --- a/changedetectionio/translations/uk/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/uk/LC_MESSAGES/messages.po @@ -159,8 +159,8 @@ msgstr "Імпортуються перші 5000 URL з вашого списк #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} Імпортовано зі списку за {:.2f}с, {} Пропущено." +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} Імпортовано зі списку за {duration:.2f}с, {skipped_count} Пропущено." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -172,8 +172,8 @@ msgstr "Структура JSON виглядає некоректною, мож #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} Імпортовано з Distill.io за {:.2f}с, {} Пропущено." +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} Імпортовано з Distill.io за {duration:.2f}с, {skipped_count} Пропущено." #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -191,13 +191,13 @@ msgstr "Помилка обробки рядка {}, перевірте прав #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} імпортовано з Wachete .xlsx за {:.2f}с" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} імпортовано з Wachete .xlsx за {duration:.2f}с" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} імпортовано з власного .xlsx за {:.2f}с" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} імпортовано з власного .xlsx за {duration:.2f}с" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -312,8 +312,10 @@ msgstr "Захист паролем вимкнено." #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "Увага: Кількість воркерів ({}) наближається до кількості доступних ядер процесора або перевищує її ({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "" +"Увага: Кількість воркерів ({worker_count}) наближається до кількості доступних ядер процесора або перевищує її " +"({cpu_count})" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -368,7 +370,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1082,7 +1084,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1443,8 +1445,8 @@ msgstr "1 завдання додано в чергу на перевірку." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "Додано {} завдань у чергу ({} вже в черзі або виконуються)." +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "Додано {count} завдань у чергу ({skipped_count} вже в черзі або виконуються)." #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2692,18 +2694,18 @@ msgstr "RegEx '%s' не є допустимим регулярним вираз #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "'%s' не є допустимим виразом XPath. (%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "'%(expression)s' не є допустимим виразом XPath. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "'%s' не є допустимим виразом JSONPath. (%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "'%(expression)s' не є допустимим виразом JSONPath. (%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "'%s' не є допустимим виразом jq. (%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "'%(expression)s' не є допустимим виразом jq. (%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3405,8 +3407,8 @@ msgstr "Протокол завдання не дозволено або нев #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." -msgstr "Досягнуто ліміту завдань ({}/{}). Неможливо додати більше." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." +msgstr "Досягнуто ліміту завдань ({current}/{limit}). Неможливо додати більше." #: changedetectionio/templates/_common_fields.html msgid "Body for all notifications — You can use" diff --git a/changedetectionio/translations/zh/LC_MESSAGES/messages.mo b/changedetectionio/translations/zh/LC_MESSAGES/messages.mo index c308e72a..c50133b9 100644 Binary files a/changedetectionio/translations/zh/LC_MESSAGES/messages.mo and b/changedetectionio/translations/zh/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/zh/LC_MESSAGES/messages.po b/changedetectionio/translations/zh/LC_MESSAGES/messages.po index 549af80e..36aab44d 100644 --- a/changedetectionio/translations/zh/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/zh/LC_MESSAGES/messages.po @@ -160,8 +160,8 @@ msgstr "仅导入列表前 5,000 个 URL,其余可稍后继续导入。" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "从列表导入 {} 条,用时 {:.2f} 秒,跳过 {} 条。" +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "从列表导入 {count} 条,用时 {duration:.2f} 秒,跳过 {skipped_count} 条。" #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -173,8 +173,8 @@ msgstr "JSON 结构无效,文件是否损坏?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "从 Distill.io 导入 {} 条,用时 {:.2f} 秒,跳过 {} 条。" +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "从 Distill.io 导入 {count} 条,用时 {duration:.2f} 秒,跳过 {skipped_count} 条。" #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -192,13 +192,13 @@ msgstr "处理第 {} 行时出错,请检查单元格数据类型是否正确 #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "从 Wachete .xlsx 导入 {} 条,用时 {:.2f} 秒" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "从 Wachete .xlsx 导入 {count} 条,用时 {duration:.2f} 秒" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "从自定义 .xlsx 导入 {} 条,用时 {:.2f} 秒" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "从自定义 .xlsx 导入 {count} 条,用时 {duration:.2f} 秒" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -315,8 +315,8 @@ msgstr "已移除密码保护。" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "警告:工作线程数({})接近或超过可用CPU核心数({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "警告:工作线程数({worker_count})接近或超过可用CPU核心数({cpu_count})" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -371,7 +371,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1073,7 +1073,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1429,8 +1429,8 @@ msgstr "已将 1 个监控项加入重新检查队列。" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "{}个监视器已加入队列({}个已在队列中)。" +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "{count}个监视器已加入队列({skipped_count}个已在队列中)。" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2667,18 +2667,18 @@ msgstr "正则表达式“%s”无效。" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "“%s”不是有效的 XPath 表达式。(%s)" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "“%(expression)s”不是有效的 XPath 表达式。(%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "“%s”不是有效的 JSONPath 表达式。(%s)" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "“%(expression)s”不是有效的 JSONPath 表达式。(%(error)s)" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "“%s”不是有效的 jq 表达式。(%s)" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "“%(expression)s”不是有效的 jq 表达式。(%(error)s)" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3380,7 +3380,7 @@ msgstr "监控协议不允许或 URL 格式无效" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html diff --git a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index eef6591f..5d7895a1 100644 Binary files a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.mo and b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.mo differ diff --git a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po index 3bb7be08..3208ab9e 100644 --- a/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po +++ b/changedetectionio/translations/zh_Hant_TW/LC_MESSAGES/messages.po @@ -160,8 +160,8 @@ msgstr "正在匯入清單中的前 5,000 個 URL,其餘的可以再次匯入 #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from list in {:.2f}s, {} Skipped." -msgstr "{} 已從清單匯入,耗時 {:.2f} 秒,跳過 {} 筆。" +msgid "{count} Imported from list in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} 已從清單匯入,耗時 {duration:.2f} 秒,跳過 {skipped_count} 筆。" #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read JSON file, was it broken?" @@ -173,8 +173,8 @@ msgstr "JSON 結構看起來無效,檔案是否已損毀?" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} Imported from Distill.io in {:.2f}s, {} Skipped." -msgstr "{} 已從 Distill.io 匯入,耗時 {:.2f} 秒,跳過 {} 筆。" +msgid "{count} Imported from Distill.io in {duration:.2f}s, {skipped_count} Skipped." +msgstr "{count} 已從 Distill.io 匯入,耗時 {duration:.2f} 秒,跳過 {skipped_count} 筆。" #: changedetectionio/blueprint/imports/importer.py msgid "Unable to read export XLSX file, something wrong with the file?" @@ -192,13 +192,13 @@ msgstr "處理第 {} 行時發生錯誤,請檢查所有儲存格資料類型 #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from Wachete .xlsx in {:.2f}s" -msgstr "{} 已從 Wachete .xlsx 匯入,耗時 {:.2f} 秒" +msgid "{count} imported from Wachete .xlsx in {duration:.2f}s" +msgstr "{count} 已從 Wachete .xlsx 匯入,耗時 {duration:.2f} 秒" #: changedetectionio/blueprint/imports/importer.py #, python-brace-format -msgid "{} imported from custom .xlsx in {:.2f}s" -msgstr "{} 已從自訂 .xlsx 匯入,耗時 {:.2f} 秒" +msgid "{count} imported from custom .xlsx in {duration:.2f}s" +msgstr "{count} 已從自訂 .xlsx 匯入,耗時 {duration:.2f} 秒" #: changedetectionio/blueprint/imports/templates/import.html msgid "URL List" @@ -314,8 +314,8 @@ msgstr "密碼保護已移除。" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format -msgid "Warning: Worker count ({}) is close to or exceeds available CPU cores ({})" -msgstr "警告:工作程式數量({})接近或超過可用CPU核心數({})" +msgid "Warning: Worker count ({worker_count}) is close to or exceeds available CPU cores ({cpu_count})" +msgstr "警告:工作程式數量({worker_count})接近或超過可用CPU核心數({cpu_count})" #: changedetectionio/blueprint/settings/__init__.py #, python-brace-format @@ -370,7 +370,7 @@ msgstr "" #: changedetectionio/blueprint/settings/llm.py #, python-format -msgid "AI summary cache cleared (%(n)s file(s) removed)." +msgid "AI summary cache cleared (%(count)s file(s) removed)." msgstr "" #: changedetectionio/blueprint/settings/templates/notification-log.html @@ -1072,7 +1072,7 @@ msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html #, python-format -msgid "characters — currently enforcing: %(n)s" +msgid "characters — currently enforcing: %(limit)s" msgstr "" #: changedetectionio/blueprint/settings/templates/settings_llm_tab.html @@ -1428,8 +1428,8 @@ msgstr "已將 1 個監測任務排入複查佇列。" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format -msgid "Queued {} watches for rechecking ({} already queued or running)." -msgstr "已將 {} 個監測任務排入複查佇列({} 個已在佇列中或正在執行)。" +msgid "Queued {count} watches for rechecking ({skipped_count} already queued or running)." +msgstr "已將 {count} 個監測任務排入複查佇列({skipped_count} 個已在佇列中或正在執行)。" #: changedetectionio/blueprint/ui/__init__.py #, python-brace-format @@ -2666,18 +2666,18 @@ msgstr "RegEx 「%s」不是有效的正規表示式。" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid XPath expression. (%s)" -msgstr "「%s」不是有效的 XPath 表達式 (%s)。" +msgid "'%(expression)s' is not a valid XPath expression. (%(error)s)" +msgstr "「%(expression)s」不是有效的 XPath 表達式 (%(error)s)。" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid JSONPath expression. (%s)" -msgstr "「%s」不是有效的 JSONPath 表達式 (%s)。" +msgid "'%(expression)s' is not a valid JSONPath expression. (%(error)s)" +msgstr "「%(expression)s」不是有效的 JSONPath 表達式 (%(error)s)。" #: changedetectionio/forms.py #, python-format -msgid "'%s' is not a valid jq expression. (%s)" -msgstr "「%s」不是有效的 jq 表達式 (%s)。" +msgid "'%(expression)s' is not a valid jq expression. (%(error)s)" +msgstr "「%(expression)s」不是有效的 jq 表達式 (%(error)s)。" #: changedetectionio/forms.py msgid "Empty value not allowed." @@ -3379,7 +3379,7 @@ msgstr "監測協定不被允許或 URL 格式無效" #: changedetectionio/store/__init__.py #, python-brace-format -msgid "Watch limit reached ({}/{} watches). Cannot add more watches." +msgid "Watch limit reached ({current}/{limit} watches). Cannot add more watches." msgstr "" #: changedetectionio/templates/_common_fields.html