1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-06-27 16:36:00 +00:00

feat: add entry filters at the feed level

This commit is contained in:
Frédéric Guillot 2025-06-19 14:45:46 -07:00
parent cb59944d6b
commit 2a9d91c783
37 changed files with 513 additions and 350 deletions

View file

@ -160,8 +160,11 @@ type Feed struct {
FetchViaProxy bool `json:"fetch_via_proxy"`
ScraperRules string `json:"scraper_rules"`
RewriteRules string `json:"rewrite_rules"`
UrlRewriteRules string `json:"urlrewrite_rules"`
BlocklistRules string `json:"blocklist_rules"`
KeeplistRules string `json:"keeplist_rules"`
BlockFilterEntryRules string `json:"block_filter_entry_rules"`
KeepFilterEntryRules string `json:"keep_filter_entry_rules"`
Crawler bool `json:"crawler"`
UserAgent string `json:"user_agent"`
Cookie string `json:"cookie"`
@ -188,8 +191,11 @@ type FeedCreationRequest struct {
FetchViaProxy bool `json:"fetch_via_proxy"`
ScraperRules string `json:"scraper_rules"`
RewriteRules string `json:"rewrite_rules"`
UrlRewriteRules string `json:"urlrewrite_rules"`
BlocklistRules string `json:"blocklist_rules"`
KeeplistRules string `json:"keeplist_rules"`
BlockFilterEntryRules string `json:"block_filter_entry_rules"`
KeepFilterEntryRules string `json:"keep_filter_entry_rules"`
HideGlobally bool `json:"hide_globally"`
DisableHTTP2 bool `json:"disable_http2"`
ProxyURL string `json:"proxy_url"`
@ -202,8 +208,11 @@ type FeedModificationRequest struct {
Title *string `json:"title"`
ScraperRules *string `json:"scraper_rules"`
RewriteRules *string `json:"rewrite_rules"`
UrlRewriteRules *string `json:"urlrewrite_rules"`
BlocklistRules *string `json:"blocklist_rules"`
KeeplistRules *string `json:"keeplist_rules"`
BlockFilterEntryRules *string `json:"block_filter_entry_rules"`
KeepFilterEntryRules *string `json:"keep_filter_entry_rules"`
Crawler *bool `json:"crawler"`
UserAgent *string `json:"user_agent"`
Cookie *string `json:"cookie"`

View file

@ -1132,4 +1132,13 @@ var migrations = []func(tx *sql.Tx, driver string) error{
_, err = tx.Exec(sql)
return err
},
func(tx *sql.Tx, _ string) (err error) {
sql := `
ALTER TABLE feeds
ADD COLUMN block_filter_entry_rules text not null default '',
ADD COLUMN keep_filter_entry_rules text not null default ''
`
_, err = tx.Exec(sql)
return err
},
}

View file

@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Regeln",
"form.feed.label.allow_self_signed_certificates": "Erlaube selbstsignierte oder ungültige Zertifikate",
"form.feed.label.apprise_service_urls": "Kommaseparierte Liste der Apprise-Service-URLs",
"form.feed.label.blocklist_rules": "Blockierregeln",
"form.feed.label.block_filter_entry_rules": "Eintrags-Sperrregeln",
"form.feed.label.blocklist_rules": "Regex-basierte Sperrfilter",
"form.feed.label.category": "Kategorie",
"form.feed.label.cookie": "Cookies setzen",
"form.feed.label.crawler": "Originalinhalt herunterladen",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Den auf Anwendungsebene konfigurierten Proxy verwenden",
"form.feed.label.hide_globally": "Einträge in der globalen Ungelesen-Liste ausblenden",
"form.feed.label.ignore_http_cache": "Ignoriere HTTP-Cache",
"form.feed.label.keeplist_rules": "Erlaubnisregeln",
"form.feed.label.keep_filter_entry_rules": "Eintrags-Erlaubnisregeln",
"form.feed.label.keeplist_rules": "Regex-basierte Behalte-Filter",
"form.feed.label.no_media_player": "Kein Media-Player (Audio/Video)",
"form.feed.label.ntfy_activate": "Einträge zu ntfy pushen",
"form.feed.label.ntfy_default_priority": "Normale Ntfy-Priorität",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Höchste Pushoverpriorität",
"form.feed.label.pushover_min_priority": "Niedrigste Pushoverpriorität",
"form.feed.label.pushover_priority": "Pushover-Nachrichtenpriorität",
"form.feed.label.rewrite_rules": "Umschreiberegeln",
"form.feed.label.rewrite_rules": "Inhalts-Umschreibregeln",
"form.feed.label.scraper_rules": "Extraktionsregeln",
"form.feed.label.site_url": "URL der Webseite",
"form.feed.label.title": "Titel",
@ -295,7 +297,7 @@
"form.integration.readwise_api_key": "Readwise-Reader-Zugangstoken",
"form.integration.readwise_api_key_link": "Erhalten Sie Ihren Readwise-Zugangstoken",
"form.integration.rssbridge_activate": "Beim Hinzufügen von Abonnements RSS-Bridge prüfen.",
"form.integration.rssbridge_token": "RSS-Bridge authentication token",
"form.integration.rssbridge_token": "RSS-Bridge-Authentifizierungs-Token",
"form.integration.rssbridge_url": "RSS-Bridge-Server-URL",
"form.integration.shaarli_activate": "Artikel in Shaarli speichern",
"form.integration.shaarli_api_secret": "Shaarli-API-Geheimnis",
@ -403,7 +405,7 @@
"menu.show_only_starred_entries": "Nur markierte Artikel anzeigen",
"menu.show_only_unread_entries": "Nur ungelesene Artikel anzeigen",
"menu.starred": "Lesezeichen",
"menu.title": "Menu",
"menu.title": "Menü",
"menu.unread": "Ungelesen",
"menu.users": "Benutzer",
"page.about.author": "Autor:",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Zuletzt verwendeten",
"page.api_keys.table.token": "Zeichen",
"page.api_keys.title": "API-Schlüssel",
"page.categories_count": [
"%d Kategorie",
"%d Kategorien"
],
"page.categories.entries": "Artikel",
"page.categories.feed_count": [
"Es gibt %d Abonnement.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Abonnements",
"page.categories.no_feed": "Kein Abonnement.",
"page.categories.title": "Kategorien",
"page.categories_count": [
"%d Kategorie",
"%d Kategorien"
],
"page.category_label": "Kategorie: %s",
"page.edit_category.title": "Kategorie bearbeiten: %s",
"page.edit_feed.etag_header": "ETag-Kopfzeile:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "Hauptschlüssel registrieren",
"page.settings.webauthn.register.error": "Hauptschlüssel kann nicht registriert werden",
"page.shared_entries.title": "Geteilte Artikel",
"page.shared_entries_count": [
"%d geteilter Artikel",
"%d geteilte Artikel"
],
"page.shared_entries.title": "Geteilte Artikel",
"page.starred.title": "Lesezeichen",
"page.starred_entry_count": [
"%d Lesezeichen",
"%d Lesezeichen"
],
"page.starred.title": "Lesezeichen",
"page.total_entry_count": [
"%d Artikel insgesamt",
"%d Artikel insgesamt"
],
"page.unread.title": "Ungelesen",
"page.unread_entry_count": [
"%d ungelesener Artikel",
"%d ungelesene Artikel"
],
"page.unread.title": "Ungelesen",
"page.users.actions": "Aktionen",
"page.users.admin.no": "Nein",
"page.users.admin.yes": "Ja",

View file

@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Κανόνες",
"form.feed.label.allow_self_signed_certificates": "Να επιτρέπονται αυτο-υπογεγραμμένα ή μη έγκυρα πιστοποιητικά",
"form.feed.label.apprise_service_urls": "Λίστα διευθύνσεων URL υπηρεσιών Apprise διαχωρισμένων με κόμμα",
"form.feed.label.blocklist_rules": "Κανόνες Αποκλεισμού",
"form.feed.label.block_filter_entry_rules": "Κανόνες Αποκλεισμού Καταχωρήσεων",
"form.feed.label.blocklist_rules": "Φίλτρα Αποκλεισμού Βασισμένα σε Regex",
"form.feed.label.category": "Κατηγορία",
"form.feed.label.cookie": "Ορισμός Cookies",
"form.feed.label.crawler": "Λήψη αρχικού περιεχομένου",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Χρησιμοποιήστε τον διακομιστή μεσολάβησης που έχει ρυθμιστεί σε επίπεδο εφαρμογής",
"form.feed.label.hide_globally": "Απόκρυψη καταχωρήσεων σε γενική λίστα μη αναγνωσμένων",
"form.feed.label.ignore_http_cache": "Αγνοήστε την προσωρινή μνήμη HTTP",
"form.feed.label.keeplist_rules": "Κρατήστε Κανόνες",
"form.feed.label.keep_filter_entry_rules": "Κανόνες Επιτρεπόμενων Καταχωρήσεων",
"form.feed.label.keeplist_rules": "Φίλτρα Διατήρησης Βασισμένα σε Regex",
"form.feed.label.no_media_player": "Χωρίς πρόγραμμα αναπαραγωγής πολυμέσων (ήχος/βίντεο)",
"form.feed.label.ntfy_activate": "Προώθηση καταχωρήσεων στο ntfy",
"form.feed.label.ntfy_default_priority": "Προεπιλεγμένη προτεραιότητα Ntfy",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Μέγιστη προτεραιότητα Pushover",
"form.feed.label.pushover_min_priority": "Ελάχιστη προτεραιότητα Pushover",
"form.feed.label.pushover_priority": "Προτεραιότητα μηνύματος Pushover",
"form.feed.label.rewrite_rules": "Κανόνες Μετατροπής",
"form.feed.label.rewrite_rules": "Κανόνες Επανασύνταξης Περιεχομένου",
"form.feed.label.scraper_rules": "Κανόνες Scraper",
"form.feed.label.site_url": "Διεύθυνση URL ιστότοπου",
"form.feed.label.title": "Τίτλος",
@ -247,7 +249,7 @@
"form.integration.linkding_api_key": "Κλειδί API Linkding",
"form.integration.linkding_bookmark": "Σημείωση του σελιδοδείκτη ως μη αναγνωσμένου",
"form.integration.linkding_endpoint": "Τελικό σημείο Linkding API",
"form.integration.linkding_tags": "Linkding Tags",
"form.integration.linkding_tags": "Ετικέτες Linkding",
"form.integration.linkwarden_activate": "Αποθήκευση άρθρων στο Linkwarden",
"form.integration.linkwarden_api_key": "Κλειδί API Linkwarden",
"form.integration.linkwarden_endpoint": "Τελικό σημείο Linkwarden API",
@ -276,7 +278,7 @@
"form.integration.pinboard_activate": "Αποθήκευση άρθρων στο Pinboard",
"form.integration.pinboard_bookmark": "Σημείωση του σελιδοδείκτη ως μη αναγνωσμένου",
"form.integration.pinboard_tags": "Ετικέτες Pinboard",
"form.integration.pinboard_token": "Pinboard API Token",
"form.integration.pinboard_token": "Διακριτικό API Pinboard",
"form.integration.pushover_activate": "Προώθηση καταχωρήσεων στο Pushover",
"form.integration.pushover_device": "Συσκευή Pushover (προαιρετικό)",
"form.integration.pushover_prefix": "Πρόθεμα διεύθυνσης URL Pushover (προαιρετικό)",
@ -289,7 +291,7 @@
"form.integration.readeck_activate": "Αποθήκευση άρθρων στο Readeck",
"form.integration.readeck_api_key": "Κλειδί API Readeck",
"form.integration.readeck_endpoint": "Τελικό σημείο Readeck API",
"form.integration.readeck_labels": "Readeck Labels",
"form.integration.readeck_labels": "Ετικέτες Readeck",
"form.integration.readeck_only_url": "Αποστολή μόνο URL (αντί για πλήρες περιεχόμενο)",
"form.integration.readwise_activate": "Αποθήκευση καταχωρήσεων στο Readwise Reader",
"form.integration.readwise_api_key": "Διακριτικό πρόσβασης Readwise Reader",
@ -410,7 +412,7 @@
"page.about.build_date": "Ημερομηνία Κατασκευής:",
"page.about.credits": "Συνεισφέροντες",
"page.about.db_usage": "Μέγεθος βάσης δεδομένων:",
"page.about.git_commit": "Git Commit:",
"page.about.git_commit": "Υποβολή Git:",
"page.about.global_config_options": "Γενικές ρυθμίσεις",
"page.about.go_version": "Έκδοση Go:",
"page.about.license": "Άδεια:",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Τελευταία Χρήση",
"page.api_keys.table.token": "Token",
"page.api_keys.title": "Κλειδιά API",
"page.categories_count": [
"%d κατηγορία",
"%d κατηγορίες"
],
"page.categories.entries": "Άρθρα",
"page.categories.feed_count": [
"Υπάρχει μία %d ροή.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Συνδρομές",
"page.categories.no_feed": "Καμία ροή.",
"page.categories.title": "Κατηγορίες",
"page.categories_count": [
"%d κατηγορία",
"%d κατηγορίες"
],
"page.category_label": "Κατηγορία: %s",
"page.edit_category.title": "Επεξεργασία κατηγορίας: % s",
"page.edit_feed.etag_header": "Κεφαλίδα ETag:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Κωδικοί πρόσβασης",
"page.settings.webauthn.register": "Εγγραφή κωδικού πρόσβασης",
"page.settings.webauthn.register.error": "Δεν είναι δυνατή η εγγραφή του κωδικού πρόσβασης",
"page.shared_entries.title": "Κοινόχρηστες Καταχωρήσεις",
"page.shared_entries_count": [
"%d κοινόχρηστη καταχώρηση",
"%d κοινόχρηστες καταχωρήσεις"
],
"page.shared_entries.title": "Κοινόχρηστες Καταχωρήσεις",
"page.starred.title": "Αγαπημένo",
"page.starred_entry_count": [
"%d καταχώρηση με αστέρι",
"%d καταχωρήσεις με αστέρι"
],
"page.starred.title": "Αγαπημένo",
"page.total_entry_count": [
"%d καταχώρηση συνολικά",
"%d καταχωρήσεις συνολικά"
],
"page.unread.title": "Μη αναγνωσμένα",
"page.unread_entry_count": [
"%d μη αναγνωσμένη καταχώρηση",
"%d μη αναγνωσμένες καταχωρήσεις"
],
"page.unread.title": "Μη αναγνωσμένα",
"page.users.actions": "Eνέργειες",
"page.users.admin.no": "Όχι",
"page.users.admin.yes": "Ναι.",

View file

@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Rules",
"form.feed.label.allow_self_signed_certificates": "Allow self-signed or invalid certificates",
"form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs",
"form.feed.label.blocklist_rules": "Block Rules",
"form.feed.label.block_filter_entry_rules": "Entry Blocking Rules",
"form.feed.label.blocklist_rules": "Regex-Based Blocking Filters",
"form.feed.label.category": "Category",
"form.feed.label.cookie": "Set Cookies",
"form.feed.label.crawler": "Fetch original content",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Use the proxy configured at the application level",
"form.feed.label.hide_globally": "Hide entries in global unread list",
"form.feed.label.ignore_http_cache": "Ignore HTTP cache",
"form.feed.label.keeplist_rules": "Keep Rules",
"form.feed.label.keep_filter_entry_rules": "Entry Allow Rules",
"form.feed.label.keeplist_rules": "Regex-Based Keep Filters",
"form.feed.label.no_media_player": "No media player (audio/video)",
"form.feed.label.ntfy_activate": "Push entries to ntfy",
"form.feed.label.ntfy_default_priority": "Ntfy default priority",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Max priority",
"form.feed.label.pushover_min_priority": "Minimal priority",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.rewrite_rules": "Rewrite Rules",
"form.feed.label.rewrite_rules": "Content Rewrite Rules",
"form.feed.label.scraper_rules": "Scraper Rules",
"form.feed.label.site_url": "Site URL",
"form.feed.label.title": "Title",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Last Used",
"page.api_keys.table.token": "Token",
"page.api_keys.title": "API Keys",
"page.categories_count": [
"%d category",
"%d categories"
],
"page.categories.entries": "Entries",
"page.categories.feed_count": [
"There is %d feed.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Feeds",
"page.categories.no_feed": "No feed.",
"page.categories.title": "Categories",
"page.categories_count": [
"%d category",
"%d categories"
],
"page.category_label": "Category: %s",
"page.edit_category.title": "Edit Category: %s",
"page.edit_feed.etag_header": "ETag header:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "Register passkey",
"page.settings.webauthn.register.error": "Unable to register passkey",
"page.shared_entries.title": "Shared entries",
"page.shared_entries_count": [
"%d shared entry",
"%d shared entries"
],
"page.shared_entries.title": "Shared entries",
"page.starred.title": "Starred",
"page.starred_entry_count": [
"%d starred entry",
"%d starred entries"
],
"page.starred.title": "Starred",
"page.total_entry_count": [
"%d entry in total",
"%d entries in total"
],
"page.unread.title": "Unread",
"page.unread_entry_count": [
"%d unread entry",
"%d unread entries"
],
"page.unread.title": "Unread",
"page.users.actions": "Actions",
"page.users.admin.no": "No",
"page.users.admin.yes": "Yes",
@ -612,4 +614,4 @@
"time_elapsed.yesterday": "yesterday",
"tooltip.keyboard_shortcuts": "Keyboard Shortcut: %s",
"tooltip.logged_user": "Logged in as %s"
}
}

View file

@ -122,7 +122,7 @@
"error.invalid_display_mode": "Modo de visualización de la aplicación web no válido.",
"error.invalid_entry_direction": "Dirección de artículo no válida.",
"error.invalid_entry_order": "Orden de artículo no válido.",
"error.invalid_feed_proxy_url": "Invalid proxy URL.",
"error.invalid_feed_proxy_url": "URL de proxy inválida.",
"error.invalid_feed_url": "URL de feed no válida.",
"error.invalid_gesture_nav": "Navegación por gestos no válida.",
"error.invalid_language": "Idioma no válido.",
@ -132,12 +132,12 @@
"error.network_operation": "Miniflux no puede acceder a este sitio web debido a un error de red: %v.",
"error.network_timeout": "Este sitio web es demasiado lento y se agotó el tiempo de espera de la solicitud: %v",
"error.password_min_length": "La contraseña debería tener al menos 6 caracteres.",
"error.proxy_url_not_empty": "The proxy URL cannot be empty.",
"error.proxy_url_not_empty": "La URL del proxy no puede estar vacía.",
"error.settings_block_rule_fieldname_invalid": "Regla de bloqueo no válida: a la regla #%d le falta un nombre de campo válido (Opciones: %s)",
"error.settings_block_rule_invalid_regex": "Regla de bloqueo no válida: el patrón de la regla #%d no es una expresión regular válida",
"error.settings_block_rule_regex_required": "Regla de bloqueo no válida: no se ha proporcionado el patrón de la regla #%d",
"error.settings_block_rule_separator_required": "Regla de bloqueo no válida: el patrón de la regla #%d debe estar separado por un '='",
"error.settings_invalid_domain_list": "Invalid domain list. Please provide a space separated list of domains.",
"error.settings_invalid_domain_list": "Lista de dominios inválida. Por favor proporcione una lista de dominios separados por espacios.",
"error.settings_keep_rule_fieldname_invalid": "Regla de mantenimiento no válida: a la regla #%d le falta un nombre de campo válido (Opciones: %s)",
"error.settings_keep_rule_invalid_regex": "Regla de mantenimiento no válida: el patrón de la regla #%d no es una expresión regular válida",
"error.settings_keep_rule_regex_required": "Regla de conservación no válida: no se ha proporcionado la regla #%d patrón",
@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Reglas",
"form.feed.label.allow_self_signed_certificates": "Permitir certificados autofirmados o no válidos",
"form.feed.label.apprise_service_urls": "Lista separada por comas de las URL del servicio Apprise",
"form.feed.label.blocklist_rules": "Reglas de Filtrado (Bloquear)",
"form.feed.label.block_filter_entry_rules": "Reglas de Bloqueo de Entradas",
"form.feed.label.blocklist_rules": "Filtros de Bloqueo Basados en Regex",
"form.feed.label.category": "Categoría",
"form.feed.label.cookie": "Configurar las cookies",
"form.feed.label.crawler": "Obtener rastreador original",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Usar el proxy configurado a nivel de la aplicación",
"form.feed.label.hide_globally": "Ocultar artículos en la lista global de no leídos",
"form.feed.label.ignore_http_cache": "Ignorar caché HTTP",
"form.feed.label.keeplist_rules": "Reglas de Filtrado (Permitir)",
"form.feed.label.keep_filter_entry_rules": "Reglas de Permitir Entradas",
"form.feed.label.keeplist_rules": "Filtros de Mantener Basados en Regex",
"form.feed.label.no_media_player": "Sin reproductor multimedia (audio/video)",
"form.feed.label.ntfy_activate": "Enviar entradas a ntfy",
"form.feed.label.ntfy_default_priority": "Prioridad predeterminada a Ntfy",
@ -192,7 +194,7 @@
"form.feed.label.ntfy_min_priority": "Prioridad mínima a Ntfy",
"form.feed.label.ntfy_priority": "Prioridad Ntfy",
"form.feed.label.ntfy_topic": "Tema Ntfy (opcional)",
"form.feed.label.proxy_url": "Proxy URL",
"form.feed.label.proxy_url": "URL del Proxy",
"form.feed.label.pushover_activate": "Enviar artículos a pushover.net",
"form.feed.label.pushover_default_priority": "Prioridad predeterminada de Pushover",
"form.feed.label.pushover_high_priority": "Prioridad alta de Pushover",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Prioridad máxima de Pushover",
"form.feed.label.pushover_min_priority": "Prioridad mínima de Pushover",
"form.feed.label.pushover_priority": "Prioridad del mensaje de Pushover",
"form.feed.label.rewrite_rules": "Reglas de reescribir",
"form.feed.label.rewrite_rules": "Reglas de Reescritura de Contenido",
"form.feed.label.scraper_rules": "Reglas de extracción de información",
"form.feed.label.site_url": "URL del sitio",
"form.feed.label.title": "Título",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Último utilizado",
"page.api_keys.table.token": "simbólico",
"page.api_keys.title": "Claves API",
"page.categories_count": [
"%d categoría",
"%d categorías"
],
"page.categories.entries": "Artículos",
"page.categories.feed_count": [
"Hay %d fuente.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Fuentes",
"page.categories.no_feed": "Sin fuente.",
"page.categories.title": "Categorías",
"page.categories_count": [
"%d categoría",
"%d categorías"
],
"page.category_label": "Categoría: %s",
"page.edit_category.title": "Editar categoría: %s",
"page.edit_feed.etag_header": "Cabecera de ETag:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Claves de acceso",
"page.settings.webauthn.register": "Registrar clave de acceso",
"page.settings.webauthn.register.error": "No se puede registrar la clave de acceso",
"page.shared_entries.title": "Artículos compartidos",
"page.shared_entries_count": [
"%d artículo compartido",
"%d artículos compartidos"
],
"page.shared_entries.title": "Artículos compartidos",
"page.starred.title": "Marcadores",
"page.starred_entry_count": [
"%d artículo marcado",
"%d artículos marcados"
],
"page.starred.title": "Marcadores",
"page.total_entry_count": [
"%d artículo en total",
"%d artículos en total"
],
"page.unread.title": "No leídos",
"page.unread_entry_count": [
"%d artículo no leído",
"%d artículos no leídos"
],
"page.unread.title": "No leídos",
"page.users.actions": "Acciones",
"page.users.admin.no": "No",
"page.users.admin.yes": "Sí",

View file

@ -84,26 +84,26 @@
"error.api_key_already_exists": "API-avain on jo olemassa.",
"error.bad_credentials": "Virheellinen käyttäjänimi tai salasana.",
"error.category_already_exists": "Kategoria on jo olemassa. ",
"error.category_not_found": "This category does not exist or does not belong to this user.",
"error.database_error": "Database error: %v.",
"error.category_not_found": "Tämä kategoria ei ole olemassa tai se ei kuulu tälle käyttäjälle.",
"error.database_error": "Tietokantavirhe: %v.",
"error.different_passwords": "Salasanat eivät ole samat.",
"error.duplicate_fever_username": "There is already someone else with the same Fever username!",
"error.duplicate_fever_username": "Joku muu käyttää jo samaa Fever-käyttäjänimeä!",
"error.duplicate_googlereader_username": "On jo joku muu, jolla on sama Google-syötteenlukijan käyttäjätunnus!",
"error.duplicate_linked_account": "There is already someone associated with this provider!",
"error.duplicated_feed": "This feed already exists.",
"error.duplicate_linked_account": "Joku on jo yhdistetty tähän palveluntarjoajaan!",
"error.duplicated_feed": "Tämä syöte on jo olemassa.",
"error.empty_file": "Tiedosto on tyhjä.",
"error.entries_per_page_invalid": "Artikkelien määrä sivulla ei kelpaa.",
"error.feed_already_exists": "Tämä syöte on jo olemassa.",
"error.feed_category_not_found": "Tätä kategoriaa ei ole olemassa tai se ei kuulu tälle käyttäjälle.",
"error.feed_format_not_detected": "Unable to detect feed format: %v.",
"error.feed_invalid_blocklist_rule": "The block list rule is invalid.",
"error.feed_invalid_keeplist_rule": "The keep list rule is invalid.",
"error.feed_format_not_detected": "Syötteen muotoa ei voitu tunnistaa: %v.",
"error.feed_invalid_blocklist_rule": "Estolistan sääntö on virheellinen.",
"error.feed_invalid_keeplist_rule": "Säilytettävien listan sääntö on virheellinen.",
"error.feed_mandatory_fields": "URL-osoite ja kategoria ovat pakollisia.",
"error.feed_not_found": "This feed does not exist or does not belong to this user.",
"error.feed_not_found": "Tämä syöte ei ole olemassa tai se ei kuulu tälle käyttäjälle.",
"error.feed_title_not_empty": "Syötteen otsikko ei voi olla tyhjä.",
"error.feed_url_not_empty": "Syötteen URL-osoite ei voi olla tyhjä.",
"error.fields_mandatory": "Kaikki kentät ovat pakollisia.",
"error.http_bad_gateway": "The website is not available at the moment due to a bad gateway error. The problem is not on Miniflux side. Please, try again later.",
"error.http_bad_gateway": "Verkkosivusto ei ole tällä hetkellä saatavilla huonon yhdyskäytävän virheen vuoksi. Ongelma ei ole Miniflux-puolella. Yritä uudelleen myöhemmin.",
"error.http_body_read": "Unable to read the HTTP body: %v.",
"error.http_client_error": "HTTP client error: %v.",
"error.http_empty_response": "The HTTP response is empty. Perhaps, this website is using a bot protection mechanism?",
@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Rules",
"form.feed.label.allow_self_signed_certificates": "Salli itseallekirjoitetut tai virheelliset varmenteet",
"form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs",
"form.feed.label.blocklist_rules": "Block-säännöt",
"form.feed.label.block_filter_entry_rules": "Merkinnän estosäännöt",
"form.feed.label.blocklist_rules": "Regex-pohjaiset estosuodattimet",
"form.feed.label.category": "Kategoria",
"form.feed.label.cookie": "Aseta evästeet",
"form.feed.label.crawler": "Nouda alkuperäinen sisältö",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Käytä sovellustasolla määritettyä välityspalvelinta",
"form.feed.label.hide_globally": "Piilota artikkelit lukemattomien listassa",
"form.feed.label.ignore_http_cache": "Ohita HTTP-välimuisti",
"form.feed.label.keeplist_rules": "Keep-säännöt",
"form.feed.label.keep_filter_entry_rules": "Merkinnän sallimissäännöt",
"form.feed.label.keeplist_rules": "Regex-pohjaiset säilytyssuodattimet",
"form.feed.label.no_media_player": "No media player (audio/video)",
"form.feed.label.ntfy_activate": "Push entries to ntfy",
"form.feed.label.ntfy_default_priority": "Ntfy default priority",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.rewrite_rules": "Rewrite-säännöt",
"form.feed.label.rewrite_rules": "Sisällön uudelleenkirjoitussäännöt",
"form.feed.label.scraper_rules": "Scraper-säännöt",
"form.feed.label.site_url": "Sivuston URL-osoite",
"form.feed.label.title": "Otsikko",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Viimeksi käytetty",
"page.api_keys.table.token": "Tunnus",
"page.api_keys.title": "API-avaimet",
"page.categories_count": [
"%d category",
"%d categories"
],
"page.categories.entries": "Artikkelit",
"page.categories.feed_count": [
"On %d syöte.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Tilaukset",
"page.categories.no_feed": "Ei syötettä.",
"page.categories.title": "Kategoriat",
"page.categories_count": [
"%d category",
"%d categories"
],
"page.category_label": "Category: %s",
"page.edit_category.title": "Muokkaa kategoria: %s",
"page.edit_feed.etag_header": "ETag-otsikko:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "Rekisteröi salasana",
"page.settings.webauthn.register.error": "Salasanaa ei voi rekisteröidä",
"page.shared_entries.title": "Jaetut artikkelit",
"page.shared_entries_count": [
"%d shared entry",
"%d shared entries"
],
"page.shared_entries.title": "Jaetut artikkelit",
"page.starred.title": "Suosikit",
"page.starred_entry_count": [
"%d starred entry",
"%d starred entries"
],
"page.starred.title": "Suosikit",
"page.total_entry_count": [
"%d entry in total",
"%d entries in total"
],
"page.unread.title": "Lukemattomat",
"page.unread_entry_count": [
"%d unread entry",
"%d unread entries"
],
"page.unread.title": "Lukemattomat",
"page.users.actions": "Toiminnot",
"page.users.admin.no": "Ei",
"page.users.admin.yes": "Kyllä",

View file

@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Règles",
"form.feed.label.allow_self_signed_certificates": "Autoriser les certificats auto-signés ou non valides",
"form.feed.label.apprise_service_urls": "Liste séparée par des virgules des URL du service Apprise",
"form.feed.label.blocklist_rules": "Règles de blocage",
"form.feed.label.block_filter_entry_rules": "Règles de blocage des entrées",
"form.feed.label.blocklist_rules": "Filtres de blocage basés sur des expressions régulières",
"form.feed.label.category": "Catégorie",
"form.feed.label.cookie": "Définir les cookies",
"form.feed.label.crawler": "Récupérer le contenu original",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Utiliser le proxy configuré au niveau de l'application",
"form.feed.label.hide_globally": "Masquer les entrées dans la liste globale non lue",
"form.feed.label.ignore_http_cache": "Ignorer le cache HTTP",
"form.feed.label.keeplist_rules": "Règles d'autorisation",
"form.feed.label.keep_filter_entry_rules": "Règles d'autorisation des entrées",
"form.feed.label.keeplist_rules": "Filtres de conservation basés sur des expressions régulières",
"form.feed.label.no_media_player": "Pas de lecteur multimedia (audio/vidéo)",
"form.feed.label.ntfy_activate": "Activer les notifications",
"form.feed.label.ntfy_default_priority": "Priorité par défaut de notification",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Priorité maximale",
"form.feed.label.pushover_min_priority": "Priorité minimale",
"form.feed.label.pushover_priority": "Priorité des notifications Pushover",
"form.feed.label.rewrite_rules": "Règles de réécriture",
"form.feed.label.rewrite_rules": "Règles de réécriture du contenu",
"form.feed.label.scraper_rules": "Règles pour récupérer le contenu original",
"form.feed.label.site_url": "URL du site web",
"form.feed.label.title": "Titre",
@ -289,7 +291,7 @@
"form.integration.readeck_activate": "Sauvegarder les articles vers Readeck",
"form.integration.readeck_api_key": "Clé d'API de Readeck",
"form.integration.readeck_endpoint": "URL de l'API de Readeck",
"form.integration.readeck_labels": "Readeck Labels",
"form.integration.readeck_labels": "Libellés Readeck",
"form.integration.readeck_only_url": "Envoyer uniquement l'URL (au lieu du contenu complet)",
"form.integration.readwise_activate": "Enregistrer les entrées vers Readwise Reader",
"form.integration.readwise_api_key": "Jeton d'accès au lecteur Readwise",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Dernière utilisation",
"page.api_keys.table.token": "Jeton",
"page.api_keys.title": "Clés d'API",
"page.categories_count": [
"%d catégorie",
"%d catégories"
],
"page.categories.entries": "Articles",
"page.categories.feed_count": [
"Il y a %d abonnement.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Abonnements",
"page.categories.no_feed": "Aucun abonnement.",
"page.categories.title": "Catégories",
"page.categories_count": [
"%d catégorie",
"%d catégories"
],
"page.category_label": "Catégorie : %s",
"page.edit_category.title": "Modification de la catégorie : %s",
"page.edit_feed.etag_header": "En-tête ETag :",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Clés daccès",
"page.settings.webauthn.register": "Enregistrer une nouvelle clé daccès",
"page.settings.webauthn.register.error": "Impossible d'enregistrer la clé daccès",
"page.shared_entries.title": "Articles partagés",
"page.shared_entries_count": [
"%d article partagé",
"%d articles partagés"
],
"page.shared_entries.title": "Articles partagés",
"page.starred.title": "Favoris",
"page.starred_entry_count": [
"%d favori",
"%d favoris"
],
"page.starred.title": "Favoris",
"page.total_entry_count": [
"%d article au total",
"%d articles au total"
],
"page.unread.title": "Non lus",
"page.unread_entry_count": [
"%d article non lu",
"%d articles non lus"
],
"page.unread.title": "Non lus",
"page.users.actions": "Actions",
"page.users.admin.no": "Non",
"page.users.admin.yes": "Oui",

View file

@ -85,7 +85,7 @@
"error.bad_credentials": "अमान्य उपयोगकर्ता नाम या पासवर्ड।",
"error.category_already_exists": "यह श्रेणी पहले से मौजूद है।",
"error.category_not_found": "यह श्रेणी मौजूद नहीं है या इस उपयोगकर्ता से संबंधित नहीं है।",
"error.database_error": "Database error: %v.",
"error.database_error": "डेटाबेस त्रुटि: %v।",
"error.different_passwords": "पासवर्ड एक जैसे नहीं हैं।",
"error.duplicate_fever_username": "पहले से ही समान फीवर उपयोगकर्ता नाम वाला कोई और है!",
"error.duplicate_googlereader_username": "समान गूगल रीडर उपयोगकर्ता नाम वाला कोई और पहले से मौजूद है!",
@ -95,7 +95,7 @@
"error.entries_per_page_invalid": "प्रति पृष्ठ प्रविष्टियों की संख्या मान्य नहीं है।",
"error.feed_already_exists": "यह फ़ीड पहले से मौजूद है.",
"error.feed_category_not_found": "यह श्रेणी मौजूद नहीं है या इस उपयोगकर्ता से संबंधित नहीं है।",
"error.feed_format_not_detected": "Unable to detect feed format: %v.",
"error.feed_format_not_detected": "फ़ीड प्रारूप का पता नहीं लगा सकते: %v।",
"error.feed_invalid_blocklist_rule": "ब्लॉक सूची नियम अमान्य है।",
"error.feed_invalid_keeplist_rule": "सूची रखें नियम अमान्य है।",
"error.feed_mandatory_fields": "URL और श्रेणी अनिवार्य हैं।",
@ -103,12 +103,12 @@
"error.feed_title_not_empty": "फ़ीड शीर्षक खाली नहीं हो सकता.",
"error.feed_url_not_empty": "फ़ीड यूआरएल खाली नहीं हो सकता.",
"error.fields_mandatory": "सभी फील्ड अनिवार्य।",
"error.http_bad_gateway": "The website is not available at the moment due to a bad gateway error. The problem is not on Miniflux side. Please, try again later.",
"error.http_body_read": "Unable to read the HTTP body: %v.",
"error.http_client_error": "HTTP client error: %v.",
"error.http_empty_response": "The HTTP response is empty. Perhaps, this website is using a bot protection mechanism?",
"error.http_empty_response_body": "The HTTP response body is empty.",
"error.http_forbidden": "Access to this website is forbidden. Perhaps, this website has a bot protection mechanism?",
"error.http_bad_gateway": "खराब गेटवे त्रुटि के कारण वेबसाइट फिलहाल उपलब्ध नहीं है। समस्या Miniflux की तरफ नहीं है। कृपया बाद में फिर से कोशिश करें।",
"error.http_body_read": "HTTP बॉडी पढ़ने में असमर्थ: %v।",
"error.http_client_error": "HTTP क्लाइंट त्रुटि: %v।",
"error.http_empty_response": "HTTP प्रतिक्रिया खाली है। शायद यह वेबसाइट बॉट सुरक्षा तंत्र का उपयोग कर रही है?",
"error.http_empty_response_body": "HTTP प्रतिक्रिया बॉडी खाली है।",
"error.http_forbidden": "इस वेबसाइट तक पहुंच वर्जित है। शायद इस वेबसाइट में बॉट सुरक्षा तंत्र है?",
"error.http_gateway_timeout": "The website is not available at the moment due to a gateway timeout error. The problem is not on Miniflux side. Please, try again later.",
"error.http_internal_server_error": "The website is not available at the moment due to a server error. The problem is not on Miniflux side. Please, try again later.",
"error.http_not_authorized": "Access to this website is not authorized. It could be a bad username or password.",
@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Rules",
"form.feed.label.allow_self_signed_certificates": "स्व-हस्ताक्षरित या अमान्य प्रमाणपत्रों की अनुमति दें",
"form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs",
"form.feed.label.blocklist_rules": "ब्लॉक नियम",
"form.feed.label.block_filter_entry_rules": "प्रविष्टि अवरोधन नियम",
"form.feed.label.blocklist_rules": "रेगेक्स-आधारित अवरोधन फिल्टर",
"form.feed.label.category": "श्रेणी",
"form.feed.label.cookie": "कुकीज़ सेट करें",
"form.feed.label.crawler": "मूल सामग्री प्राप्त करें",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "एप्लिकेशन स्तर पर कॉन्फ़िगर किए गए प्रॉक्सी का उपयोग करें",
"form.feed.label.hide_globally": "वैश्विक अपठित सूची में प्रविष्टियां छिपाएं",
"form.feed.label.ignore_http_cache": "एचटीटीपी कैश पर ध्यान न दें",
"form.feed.label.keeplist_rules": "नियम बनाए रखें",
"form.feed.label.keep_filter_entry_rules": "प्रविष्टि अनुमति नियम",
"form.feed.label.keeplist_rules": "रेगेक्स-आधारित रखने वाले फिल्टर",
"form.feed.label.no_media_player": "No media player (audio/video)",
"form.feed.label.ntfy_activate": "Push entries to ntfy",
"form.feed.label.ntfy_default_priority": "Ntfy default priority",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.rewrite_rules": "नियम फिर से लिखें",
"form.feed.label.rewrite_rules": "सामग्री पुनर्लेखन नियम",
"form.feed.label.scraper_rules": "खुरचनी नियम",
"form.feed.label.site_url": "साइट यूआरएल",
"form.feed.label.title": "शीर्षक",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "आखरी इस्त्तमाल किया गया",
"page.api_keys.table.token": "टोकन",
"page.api_keys.title": "एपीआई कुंजी",
"page.categories_count": [
"%d category",
"%d categories"
],
"page.categories.entries": "विषयवस्तुया",
"page.categories.feed_count": [
"%d फ़ीड बाकी है।",
@ -442,6 +440,10 @@
"page.categories.feeds": "सदस्यता ले",
"page.categories.no_feed": "कोई फ़ीड नहीं है।",
"page.categories.title": "श्रेणियाँ",
"page.categories_count": [
"%d category",
"%d categories"
],
"page.category_label": "Category: %s",
"page.edit_category.title": "%s श्रेणी संपाद करे",
"page.edit_feed.etag_header": "ईटाग हैडर:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "रजिस्टर पासकी",
"page.settings.webauthn.register.error": "पासकी पंजीकृत करने में असमर्थ",
"page.shared_entries.title": "साझा किया हुआ प्रविष्टि",
"page.shared_entries_count": [
"%d shared entry",
"%d shared entries"
],
"page.shared_entries.title": "साझा किया हुआ प्रविष्टि",
"page.starred.title": "तारांकित",
"page.starred_entry_count": [
"%d starred entry",
"%d starred entries"
],
"page.starred.title": "तारांकित",
"page.total_entry_count": [
"%d entry in total",
"%d entries in total"
],
"page.unread.title": "अपठित",
"page.unread_entry_count": [
"%d unread entry",
"%d unread entries"
],
"page.unread.title": "अपठित",
"page.users.actions": "कार्रवाई",
"page.users.admin.no": "नहीं",
"page.users.admin.yes": "हां",

View file

@ -163,10 +163,11 @@
"form.feed.fieldset.general": "Umum",
"form.feed.fieldset.integration": "Pengaturan Pihak Ketiga",
"form.feed.fieldset.network_settings": "Pengaturan Jaringan",
"form.feed.fieldset.rules": "Rules",
"form.feed.fieldset.rules": "Aturan",
"form.feed.label.allow_self_signed_certificates": "Perbolehkan sertifikat web tidak valid atau sertifikasi sendiri",
"form.feed.label.apprise_service_urls": "Daftar yang dipisahkan koma untuk URL layanan Apprise",
"form.feed.label.blocklist_rules": "Aturan Blokir",
"form.feed.label.block_filter_entry_rules": "Aturan Pemblokiran Entri",
"form.feed.label.blocklist_rules": "Filter Pemblokiran Berbasis Regex",
"form.feed.label.category": "Kategori",
"form.feed.label.cookie": "Atur Kuki",
"form.feed.label.crawler": "Ambil konten asli",
@ -179,8 +180,9 @@
"form.feed.label.fetch_via_proxy": "Gunakan proksi yang dikonfigurasi di tingkat aplikasi",
"form.feed.label.hide_globally": "Sembunyikan entri di daftar belum dibaca global",
"form.feed.label.ignore_http_cache": "Abaikan Tembolok HTTP",
"form.feed.label.keeplist_rules": "Aturan Simpan",
"form.feed.label.no_media_player": "No media player (audio/video)",
"form.feed.label.keep_filter_entry_rules": "Aturan Izin Entri",
"form.feed.label.keeplist_rules": "Filter Simpan Berbasis Regex",
"form.feed.label.no_media_player": "Tidak ada pemutar media (audio/video)",
"form.feed.label.ntfy_activate": "Kirim artikel ke ntfy",
"form.feed.label.ntfy_default_priority": "Prioritas baku Ntfy",
"form.feed.label.ntfy_high_priority": "Priroritas tinggi Ntfy",
@ -197,7 +199,7 @@
"form.feed.label.pushover_max_priority": "Prioritas maksimal Pushover",
"form.feed.label.pushover_min_priority": "Prioritas minimal Pushover",
"form.feed.label.pushover_priority": "Prioritas pesan Pushover",
"form.feed.label.rewrite_rules": "Aturan Tulis Ulang",
"form.feed.label.rewrite_rules": "Aturan Penulisan Ulang Konten",
"form.feed.label.scraper_rules": "Aturan Pengambil Data",
"form.feed.label.site_url": "URL Situs",
"form.feed.label.title": "Judul",
@ -427,9 +429,6 @@
"page.api_keys.table.last_used_at": "Terakhir Digunakan",
"page.api_keys.table.token": "Token",
"page.api_keys.title": "Kunci API",
"page.categories_count": [
"%d kategori"
],
"page.categories.entries": "Artikel",
"page.categories.feed_count": [
"Ada %d umpan."
@ -437,6 +436,9 @@
"page.categories.feeds": "Langganan",
"page.categories.no_feed": "Tidak ada umpan.",
"page.categories.title": "Kategori",
"page.categories_count": [
"%d kategori"
],
"page.category_label": "Category: %s",
"page.edit_category.title": "Sunting Kategori: %s",
"page.edit_feed.etag_header": "Tajuk ETag:",
@ -539,21 +541,21 @@
"page.settings.webauthn.passkeys": "Passkey",
"page.settings.webauthn.register": "Daftar passkey",
"page.settings.webauthn.register.error": "Tidak dapat mendaftarkan passkey",
"page.shared_entries.title": "Entri yang Dibagikan",
"page.shared_entries_count": [
"%d entri yang dibagikan"
],
"page.shared_entries.title": "Entri yang Dibagikan",
"page.starred.title": "Markah",
"page.starred_entry_count": [
"%d entri dimarkahi"
],
"page.starred.title": "Markah",
"page.total_entry_count": [
"%d entri secara total"
],
"page.unread.title": "Belum Dibaca",
"page.unread_entry_count": [
"%d entri belum dibaca"
],
"page.unread.title": "Belum Dibaca",
"page.users.actions": "Tindakan",
"page.users.admin.no": "Tidak",
"page.users.admin.yes": "Ya",

View file

@ -85,7 +85,7 @@
"error.bad_credentials": "Nome utente o password non validi.",
"error.category_already_exists": "Questa categoria esiste già.",
"error.category_not_found": "Questa categoria non esiste o non appartiene a questo utente.",
"error.database_error": "Database error: %v.",
"error.database_error": "Errore del database: %v.",
"error.different_passwords": "Le password non coincidono.",
"error.duplicate_fever_username": "Esiste già un account Fever con lo stesso nome utente!",
"error.duplicate_googlereader_username": "Esiste già un account Google Reader con lo stesso nome utente!",
@ -103,12 +103,12 @@
"error.feed_title_not_empty": "Il titolo del feed non può essere vuoto.",
"error.feed_url_not_empty": "L'URL del feed non può essere vuoto.",
"error.fields_mandatory": "Tutti i campi sono obbligatori.",
"error.http_bad_gateway": "The website is not available at the moment due to a bad gateway error. The problem is not on Miniflux side. Please, try again later.",
"error.http_body_read": "Unable to read the HTTP body: %v.",
"error.http_client_error": "HTTP client error: %v.",
"error.http_empty_response": "The HTTP response is empty. Perhaps, this website is using a bot protection mechanism?",
"error.http_empty_response_body": "The HTTP response body is empty.",
"error.http_forbidden": "Access to this website is forbidden. Perhaps, this website has a bot protection mechanism?",
"error.http_bad_gateway": "Il sito web non è disponibile al momento a causa di un errore di gateway. Il problema non è dal lato di Miniflux. Per favore, riprova più tardi.",
"error.http_body_read": "Impossibile leggere il corpo HTTP: %v.",
"error.http_client_error": "Errore del client HTTP: %v.",
"error.http_empty_response": "La risposta HTTP è vuota. Forse questo sito web utilizza un meccanismo di protezione dai bot?",
"error.http_empty_response_body": "Il corpo della risposta HTTP è vuoto.",
"error.http_forbidden": "L'accesso a questo sito web è vietato. Forse questo sito web ha un meccanismo di protezione dai bot?",
"error.http_gateway_timeout": "The website is not available at the moment due to a gateway timeout error. The problem is not on Miniflux side. Please, try again later.",
"error.http_internal_server_error": "The website is not available at the moment due to a server error. The problem is not on Miniflux side. Please, try again later.",
"error.http_not_authorized": "Access to this website is not authorized. It could be a bad username or password.",
@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Rules",
"form.feed.label.allow_self_signed_certificates": "Consenti certificati autofirmati o non validi",
"form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs",
"form.feed.label.blocklist_rules": "Regole di blocco",
"form.feed.label.block_filter_entry_rules": "Regole di Blocco delle Voci",
"form.feed.label.blocklist_rules": "Filtri di Blocco Basati su Regex",
"form.feed.label.category": "Categoria",
"form.feed.label.cookie": "Installare i cookies",
"form.feed.label.crawler": "Scarica il contenuto integrale",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Usa il proxy configurato a livello di applicazione",
"form.feed.label.hide_globally": "Nascondere le voci nella lista globale dei non letti",
"form.feed.label.ignore_http_cache": "Ignora cache HTTP",
"form.feed.label.keeplist_rules": "Regole di autorizzazione",
"form.feed.label.keep_filter_entry_rules": "Regole di Permesso delle Voci",
"form.feed.label.keeplist_rules": "Filtri di Mantenimento Basati su Regex",
"form.feed.label.no_media_player": "No media player (audio/video)",
"form.feed.label.ntfy_activate": "Push entries to ntfy",
"form.feed.label.ntfy_default_priority": "Ntfy default priority",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.rewrite_rules": "Regole di impaginazione del contenuto",
"form.feed.label.rewrite_rules": "Regole di Riscrittura del Contenuto",
"form.feed.label.scraper_rules": "Regole di estrazione del contenuto",
"form.feed.label.site_url": "URL del sito",
"form.feed.label.title": "Titolo",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Ultimo uso",
"page.api_keys.table.token": "Gettone",
"page.api_keys.title": "Chiavi API",
"page.categories_count": [
"%d category",
"%d categories"
],
"page.categories.entries": "Articoli",
"page.categories.feed_count": [
"C'è %d feed.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Abbonamenti",
"page.categories.no_feed": "Nessun feed.",
"page.categories.title": "Categorie",
"page.categories_count": [
"%d category",
"%d categories"
],
"page.category_label": "Category: %s",
"page.edit_category.title": "Modifica categoria: %s",
"page.edit_feed.etag_header": "Header ETag:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "Registra la chiave di accesso",
"page.settings.webauthn.register.error": "Impossibile registrare la passkey",
"page.shared_entries.title": "Voci condivise",
"page.shared_entries_count": [
"%d shared entry",
"%d shared entries"
],
"page.shared_entries.title": "Voci condivise",
"page.starred.title": "Preferiti",
"page.starred_entry_count": [
"%d starred entry",
"%d starred entries"
],
"page.starred.title": "Preferiti",
"page.total_entry_count": [
"%d entry in total",
"%d entries in total"
],
"page.unread.title": "Da leggere",
"page.unread_entry_count": [
"%d unread entry",
"%d unread entries"
],
"page.unread.title": "Da leggere",
"page.users.actions": "Azioni",
"page.users.admin.no": "No",
"page.users.admin.yes": "Sì",

View file

@ -82,7 +82,7 @@
"error.bad_credentials": "ユーザー名かパスワードが間違っています。",
"error.category_already_exists": "このカテゴリは既に存在します。",
"error.category_not_found": "このカテゴリは存在しないか、このユーザーに属していません。",
"error.database_error": "Database error: %v.",
"error.database_error": "データベースエラー: %v。",
"error.different_passwords": "パスワードが一致しません。",
"error.duplicate_fever_username": "既に同じ名前の Fever ユーザー名が使われています!",
"error.duplicate_googlereader_username": "既に同じ名前の Google Reader ユーザー名が使われています!",
@ -100,12 +100,12 @@
"error.feed_title_not_empty": "フィードのタイトルを空にすることはできません。",
"error.feed_url_not_empty": "フィード URL を空にすることはできません。",
"error.fields_mandatory": "すべての項目が必要です。",
"error.http_bad_gateway": "The website is not available at the moment due to a bad gateway error. The problem is not on Miniflux side. Please, try again later.",
"error.http_body_read": "Unable to read the HTTP body: %v.",
"error.http_client_error": "HTTP client error: %v.",
"error.http_empty_response": "The HTTP response is empty. Perhaps, this website is using a bot protection mechanism?",
"error.http_empty_response_body": "The HTTP response body is empty.",
"error.http_forbidden": "Access to this website is forbidden. Perhaps, this website has a bot protection mechanism?",
"error.http_bad_gateway": "ウェブサイトは、不正なゲートウェイエラーのため現在利用できません。問題はMiniflux側にはありません。後でもう一度お試しください。",
"error.http_body_read": "HTTP本文を読み取れません: %v。",
"error.http_client_error": "HTTPクライアントエラー: %v。",
"error.http_empty_response": "HTTP応答が空です。おそらく、このウェブサイトはボット保護メカニズムを使用していますか",
"error.http_empty_response_body": "HTTP応答本文が空です。",
"error.http_forbidden": "このウェブサイトへのアクセスは禁止されています。おそらく、このウェブサイトはボット保護メカニズムを持っていますか?",
"error.http_gateway_timeout": "The website is not available at the moment due to a gateway timeout error. The problem is not on Miniflux side. Please, try again later.",
"error.http_internal_server_error": "The website is not available at the moment due to a server error. The problem is not on Miniflux side. Please, try again later.",
"error.http_not_authorized": "Access to this website is not authorized. It could be a bad username or password.",
@ -166,7 +166,8 @@
"form.feed.fieldset.rules": "Rules",
"form.feed.label.allow_self_signed_certificates": "自己署名証明書または無効な証明書を許可する",
"form.feed.label.apprise_service_urls": "Comma separated list of Apprise service URLs",
"form.feed.label.blocklist_rules": "Block ルール",
"form.feed.label.block_filter_entry_rules": "エントリブロッキングルール",
"form.feed.label.blocklist_rules": "正規表現ベースのブロッキングフィルター",
"form.feed.label.category": "カテゴリ",
"form.feed.label.cookie": "Cookie の設定",
"form.feed.label.crawler": "オリジナルの内容を取得",
@ -179,7 +180,8 @@
"form.feed.label.fetch_via_proxy": "アプリケーションレベルで設定されたプロキシを使用する",
"form.feed.label.hide_globally": "未読一覧に記事を表示しない",
"form.feed.label.ignore_http_cache": "HTTPキャッシュを無視",
"form.feed.label.keeplist_rules": "Keep ルール",
"form.feed.label.keep_filter_entry_rules": "エントリ許可ルール",
"form.feed.label.keeplist_rules": "正規表現ベースのキープフィルター",
"form.feed.label.no_media_player": "No media player (audio/video)",
"form.feed.label.ntfy_activate": "Push entries to ntfy",
"form.feed.label.ntfy_default_priority": "Ntfy default priority",
@ -197,7 +199,7 @@
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.rewrite_rules": "Rewrite ルール",
"form.feed.label.rewrite_rules": "コンテンツ書き換えルール",
"form.feed.label.scraper_rules": "Scraper ルール",
"form.feed.label.site_url": "サイト URL",
"form.feed.label.title": "タイトル",
@ -427,9 +429,6 @@
"page.api_keys.table.last_used_at": "最終使用",
"page.api_keys.table.token": "トークン",
"page.api_keys.title": "API キー",
"page.categories_count": [
"%d 件のカテゴリ"
],
"page.categories.entries": "記事一覧",
"page.categories.feed_count": [
"%d 件のフィードがあります。"
@ -437,6 +436,9 @@
"page.categories.feeds": "フィード一覧",
"page.categories.no_feed": "フィードはありません。",
"page.categories.title": "カテゴリ",
"page.categories_count": [
"%d 件のカテゴリ"
],
"page.category_label": "Category: %s",
"page.edit_category.title": "カテゴリを編集: %s",
"page.edit_feed.etag_header": "ETag ヘッダー:",
@ -539,21 +541,21 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "パスキーを登録する",
"page.settings.webauthn.register.error": "パスキーを登録できません",
"page.shared_entries.title": "共有エントリ",
"page.shared_entries_count": [
"%d 件の共有エントリ"
],
"page.shared_entries.title": "共有エントリ",
"page.starred.title": "星付き",
"page.starred_entry_count": [
"%d 件の星付きエントリ"
],
"page.starred.title": "星付き",
"page.total_entry_count": [
"合計 %d 件のエントリ"
],
"page.unread.title": "未読",
"page.unread_entry_count": [
"%d 件の未読エントリ"
],
"page.unread.title": "未読",
"page.users.actions": "アクション",
"page.users.admin.no": "非管理者",
"page.users.admin.yes": "管理者",

View file

@ -166,7 +166,8 @@
"form.feed.fieldset.rules": "Kui-chek",
"form.feed.label.allow_self_signed_certificates": "ún-chún chū chhiam ah-sī bô-hāu ê pîn-chèng",
"form.feed.label.apprise_service_urls": "Sú-iōng tō͘-tiám keh khui ê Apprise ho̍k-bū bāng-chí lia̍t-pió",
"form.feed.label.blocklist_rules": "Hong-só kui-chek",
"form.feed.label.block_filter_entry_rules": "Entry Blocking Rules",
"form.feed.label.blocklist_rules": "Regex-Based Blocking Filters",
"form.feed.label.category": "lūi-pia̍t",
"form.feed.label.cookie": "Siat-tēng Cookies",
"form.feed.label.crawler": "Lia̍h goân-tóe lōe-iông",
@ -179,7 +180,8 @@
"form.feed.label.fetch_via_proxy": "Iōng tī su-hāu-khì siat-tēng ê proxy",
"form.feed.label.hide_globally": "Tī choân-he̍k ah-bōe tha̍k--ê lia̍t-pió am-khàm siau-sit",
"form.feed.label.ignore_http_cache": "Pàng-ba̍k HTTP cache",
"form.feed.label.keeplist_rules": "Pó-liû kui-chek",
"form.feed.label.keep_filter_entry_rules": "Entry Allow Rules",
"form.feed.label.keeplist_rules": "Regex-Based Keep Filters",
"form.feed.label.no_media_player": "Bô mûi-thé hòng-sàng khì (im-sìn, sī-sìn)",
"form.feed.label.ntfy_activate": "Thui-sàng siau-sit khì ntfy",
"form.feed.label.ntfy_default_priority": "Ntfy ū-siat iu-sian sūn-sū",
@ -197,7 +199,7 @@
"form.feed.label.pushover_max_priority": "Pushover siōng koân iu-sian sūn-sū",
"form.feed.label.pushover_min_priority": "Pushover siōng kē iu-sian sūn-sū",
"form.feed.label.pushover_priority": "Pushover siau-sit iu-sian sūn-sū",
"form.feed.label.rewrite_rules": "Têng siá kui-chek",
"form.feed.label.rewrite_rules": "Content Rewrite Rules",
"form.feed.label.scraper_rules": "Lia̍h ê kui-chek",
"form.feed.label.site_url": "Bāng-chām bāng-chí",
"form.feed.label.title": "Piau-tôe",
@ -427,9 +429,6 @@
"page.api_keys.table.last_used_at": "Siōng-bóe pái sú-iōng",
"page.api_keys.table.token": "Só-sî",
"page.api_keys.title": "API só-sî",
"page.categories_count": [
"%d ê lūi-pia̍t"
],
"page.categories.entries": "Siau-sit",
"page.categories.feed_count": [
"Ū %d ê Siau-sit lâi-goân"
@ -437,6 +436,9 @@
"page.categories.feeds": "Siau-sit lâi-goân",
"page.categories.no_feed": "Ah-bô siau-sit lâi-goân",
"page.categories.title": "Lūi-pia̍t",
"page.categories_count": [
"%d ê lūi-pia̍t"
],
"page.category_label": "Lūi-pia̍t: %s",
"page.edit_category.title": "Pian-chi̍p lūi-pia̍t: %s",
"page.edit_feed.etag_header": "ETag piau-thâu:",
@ -539,21 +541,21 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "Chù-chheh Passkey",
"page.settings.webauthn.register.error": "Bô-hoat-tō͘ chù-chheh Passkey",
"page.shared_entries.title": "Hun-hióng kè ê siau-sit",
"page.shared_entries_count": [
"Í-keng hun-hióng %d ê siau-sit"
],
"page.shared_entries.title": "Hun-hióng kè ê siau-sit",
"page.starred.title": "Siu-chông",
"page.starred_entry_count": [
"%d ê siu-chông ê siau-sit"
],
"page.starred.title": "Siu-chông",
"page.total_entry_count": [
"Lóng-chóng %d ê siau-sit"
],
"page.unread.title": "Ah-bōe tha̍k",
"page.unread_entry_count": [
"%d ê siau-sit ah-bōe tha̍k"
],
"page.unread.title": "Ah-bōe tha̍k",
"page.users.actions": "chhau-chok",
"page.users.admin.no": "Hóⁿ",
"page.users.admin.yes": "Sī",
@ -594,4 +596,4 @@
"time_elapsed.yesterday": "cha-hng",
"tooltip.keyboard_shortcuts": "Khoài-sok khí%s",
"tooltip.logged_user": "Chit-má teng-lo̍k--ê: %s"
}
}

View file

@ -1,6 +1,6 @@
{
"action.cancel": "annuleren",
"action.download": "Download",
"action.download": "Downloaden",
"action.edit": "Bewerken",
"action.home_screen": "Toevoegen aan startscherm",
"action.import": "Importeren",
@ -42,7 +42,7 @@
"enclosure_media_controls.speed": "Snelheid:",
"enclosure_media_controls.speed.faster": "Versnel",
"enclosure_media_controls.speed.faster.title": "Versnel met %sx",
"enclosure_media_controls.speed.reset": "Reset",
"enclosure_media_controls.speed.reset": "Resetten",
"enclosure_media_controls.speed.reset.title": "Reset snelheid naar 1x",
"enclosure_media_controls.speed.slower": "Vertraag",
"enclosure_media_controls.speed.slower.title": "Vertraag met %sx",
@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Regels",
"form.feed.label.allow_self_signed_certificates": "Zelfondertekende of ongeldige certificaten toestaan",
"form.feed.label.apprise_service_urls": "Door komma's gescheiden lijst van Apprise service URL's",
"form.feed.label.blocklist_rules": "Blokkeerregels",
"form.feed.label.block_filter_entry_rules": "Blokkeerregels voor Items",
"form.feed.label.blocklist_rules": "Regex-gebaseerde Blokkeerfilters",
"form.feed.label.category": "Categorie",
"form.feed.label.cookie": "Cookies instellen",
"form.feed.label.crawler": "Download originele inhoud",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Gebruik de proxy die op applicatieniveau is geconfigureerd",
"form.feed.label.hide_globally": "Verberg artikelen in de globale ongelezen lijst",
"form.feed.label.ignore_http_cache": "Negeer HTTP-cache",
"form.feed.label.keeplist_rules": "Bewaarregels",
"form.feed.label.keep_filter_entry_rules": "Toestaan Regels voor Items",
"form.feed.label.keeplist_rules": "Regex-gebaseerde Bewaarfilters",
"form.feed.label.no_media_player": "Geen mediaspeler (audio/video)",
"form.feed.label.ntfy_activate": "Artikelen naar ntfy sturen",
"form.feed.label.ntfy_default_priority": "Ntfy standaard prioriteit",
@ -191,7 +193,7 @@
"form.feed.label.ntfy_max_priority": "Ntfy maximale prioriteit",
"form.feed.label.ntfy_min_priority": "Ntfy minimale prioriteit",
"form.feed.label.ntfy_priority": "Ntfy prioriteit",
"form.feed.label.ntfy_topic": "Ntfy topic (optional)",
"form.feed.label.ntfy_topic": "Ntfy onderwerp (optioneel)",
"form.feed.label.proxy_url": "Proxy URL",
"form.feed.label.pushover_activate": "Stuur artikelen naar pushover.net",
"form.feed.label.pushover_default_priority": "Pushover standaard prioriteit",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Pushover maximale prioriteit",
"form.feed.label.pushover_min_priority": "Pushover minimale prioriteit",
"form.feed.label.pushover_priority": "Pushover berichtprioriteit",
"form.feed.label.rewrite_rules": "Herschrijfregels",
"form.feed.label.rewrite_rules": "Inhoud Herschrijfregels",
"form.feed.label.scraper_rules": "Extractieregels",
"form.feed.label.site_url": "Website URL",
"form.feed.label.title": "Titel",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Laatst gebruikt",
"page.api_keys.table.token": "Token",
"page.api_keys.title": "API-sleutels",
"page.categories_count": [
"%d categorie",
"%d categorieën"
],
"page.categories.entries": "Artikelen",
"page.categories.feed_count": [
"Er is %d feed.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Feeds",
"page.categories.no_feed": "Geen feed.",
"page.categories.title": "Categorieën",
"page.categories_count": [
"%d categorie",
"%d categorieën"
],
"page.category_label": "Categorie: %s",
"page.edit_category.title": "Bewerk categorie: %s",
"page.edit_feed.etag_header": "ETAG header:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "Passkey registreren",
"page.settings.webauthn.register.error": "Kan passkey niet registreren",
"page.shared_entries.title": "Gedeelde artikelen",
"page.shared_entries_count": [
"%d gedeeld artikel",
"%d gedeelde artikelen"
],
"page.shared_entries.title": "Gedeelde artikelen",
"page.starred.title": "Favorieten",
"page.starred_entry_count": [
"%d favoriet artikel",
"%d favoriete artikelen"
],
"page.starred.title": "Favorieten",
"page.total_entry_count": [
"%d artikel totaal",
"%d artikelen totaal"
],
"page.unread.title": "Ongelezen",
"page.unread_entry_count": [
"%d ongelezen artikel",
"%d ongelezen artikelen"
],
"page.unread.title": "Ongelezen",
"page.users.actions": "Acties",
"page.users.admin.no": "Nee",
"page.users.admin.yes": "Ja",

View file

@ -172,7 +172,8 @@
"form.feed.fieldset.rules": "Reguły",
"form.feed.label.allow_self_signed_certificates": "Zezwalaj na samopodpisane lub nieprawidłowe certyfikaty",
"form.feed.label.apprise_service_urls": "Rozdzielana przecinkami lista adresów URL usług Appprise",
"form.feed.label.blocklist_rules": "Reguły blokowania",
"form.feed.label.block_filter_entry_rules": "Reguły Blokowania Wpisów",
"form.feed.label.blocklist_rules": "Filtry Blokujące Oparte na Regex",
"form.feed.label.category": "Kategoria",
"form.feed.label.cookie": "Ustaw ciasteczka",
"form.feed.label.crawler": "Pobierz oryginalną treść",
@ -185,7 +186,8 @@
"form.feed.label.fetch_via_proxy": "Użyj serwera proxy skonfigurowanego na poziomie aplikacji",
"form.feed.label.hide_globally": "Ukryj wpisy na globalnej liście nieprzeczytanych",
"form.feed.label.ignore_http_cache": "Zignoruj pamięć podręczną HTTP",
"form.feed.label.keeplist_rules": "Reguły utrzymywania",
"form.feed.label.keep_filter_entry_rules": "Reguły Zezwalania na Wpisy",
"form.feed.label.keeplist_rules": "Filtry Zachowywania Oparte na Regex",
"form.feed.label.no_media_player": "Brak odtwarzacza multimedialnego (audio i wideo)",
"form.feed.label.ntfy_activate": "Prześlij wpisy do ntfy",
"form.feed.label.ntfy_default_priority": "Domyślny priorytet ntfy",
@ -203,7 +205,7 @@
"form.feed.label.pushover_max_priority": "Maksymalny priorytet Pushover",
"form.feed.label.pushover_min_priority": "Minimalny priorytet Pushover",
"form.feed.label.pushover_priority": "Priorytet wiadomości Pushover",
"form.feed.label.rewrite_rules": "Reguły zapisu",
"form.feed.label.rewrite_rules": "Reguły Przepisywania Treści",
"form.feed.label.scraper_rules": "Reguły ekstrakcji",
"form.feed.label.site_url": "Adres URL strony",
"form.feed.label.title": "Tytuł",
@ -308,7 +310,7 @@
"form.integration.shiori_password": "Hasło do Shiori",
"form.integration.shiori_username": "Login do Shiori",
"form.integration.slack_activate": "Przesyłaj wpisy do Slack",
"form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.slack_webhook_link": "Link Webhook Slack",
"form.integration.telegram_bot_activate": "Przesyłaj nowe wpisy do czatu Telegram",
"form.integration.telegram_bot_disable_buttons": "Wyłącz przyciski",
"form.integration.telegram_bot_disable_notification": "Wyłącz powiadomienie",
@ -433,11 +435,6 @@
"page.api_keys.table.last_used_at": "Ostatnio używane",
"page.api_keys.table.token": "Token",
"page.api_keys.title": "Klucze API",
"page.categories_count": [
"%d kategoria",
"%d kategorie",
"%d kategorii"
],
"page.categories.entries": "Wpisy",
"page.categories.feed_count": [
"Jest %d kanał.",
@ -447,6 +444,11 @@
"page.categories.feeds": "Kanały",
"page.categories.no_feed": "Brak kanałów.",
"page.categories.title": "Kategorie",
"page.categories_count": [
"%d kategoria",
"%d kategorie",
"%d kategorii"
],
"page.category_label": "Kategoria: %s",
"page.edit_category.title": "Edytuj kategorię: %s",
"page.edit_feed.etag_header": "Nagłówek ETag:",
@ -555,29 +557,29 @@
"page.settings.webauthn.passkeys": "Klucze dostępu",
"page.settings.webauthn.register": "Zarejestruj klucz dostępu",
"page.settings.webauthn.register.error": "Nie można zarejestrować klucza dostępu",
"page.shared_entries.title": "Udostępnione wpisy",
"page.shared_entries_count": [
"%d udostępniony wpis",
"%d udostępnione wpisy",
"%d udostępnionych wpisów"
],
"page.shared_entries.title": "Udostępnione wpisy",
"page.starred.title": "Ulubione",
"page.starred_entry_count": [
"%d ulubiony wpis",
"%d ulubione wpisy",
"%d ulubionych wpisów"
],
"page.starred.title": "Ulubione",
"page.total_entry_count": [
"%d wpis łącznie",
"%d wpisy łącznie",
"%d wpisów łącznie"
],
"page.unread.title": "Nieprzeczytane",
"page.unread_entry_count": [
"%d nieprzeczytany wpis",
"%d nieprzeczytane wpisy",
"%d nieprzeczytanych wpisów"
],
"page.unread.title": "Nieprzeczytane",
"page.users.actions": "Działania",
"page.users.admin.no": "Nie",
"page.users.admin.yes": "Tak",

View file

@ -37,15 +37,15 @@
"confirm.question": "Tem certeza?",
"confirm.question.refresh": "Você deseja forçar a atualização?",
"confirm.yes": "Sim",
"enclosure_media_controls.seek": "Seek:",
"enclosure_media_controls.seek.title": "Seek %s seconds",
"enclosure_media_controls.speed": "Speed:",
"enclosure_media_controls.speed.faster": "Faster",
"enclosure_media_controls.speed.faster.title": "Faster by %sx",
"enclosure_media_controls.speed.reset": "Reset",
"enclosure_media_controls.speed.reset.title": "Reset speed to 1x",
"enclosure_media_controls.speed.slower": "Slower",
"enclosure_media_controls.speed.slower.title": "Slower by %sx",
"enclosure_media_controls.seek": "Procurar:",
"enclosure_media_controls.seek.title": "Procurar %s segundos",
"enclosure_media_controls.speed": "Velocidade:",
"enclosure_media_controls.speed.faster": "Mais Rápido",
"enclosure_media_controls.speed.faster.title": "Mais rápido em %sx",
"enclosure_media_controls.speed.reset": "Resetar",
"enclosure_media_controls.speed.reset.title": "Resetar velocidade para 1x",
"enclosure_media_controls.speed.slower": "Mais Lento",
"enclosure_media_controls.speed.slower.title": "Mais lento em %sx",
"entry.bookmark.toast.off": "Desfavoritado",
"entry.bookmark.toast.on": "Favoritado",
"entry.bookmark.toggle.off": "Remover dos Favoritos",
@ -148,7 +148,7 @@
"error.site_url_not_empty": "O URL do site não pode estar vazio.",
"error.subscription_not_found": "Não foi possível encontrar uma inscrição.",
"error.title_required": "O título é obrigatório.",
"error.tls_error": "TLS error: %q. You could disable TLS verification in the feed settings if you would like.",
"error.tls_error": "Erro TLS: %q. Você pode desabilitar a verificação TLS nas configurações do feed se desejar.",
"error.unable_to_create_api_key": "Não foi possível criar uma chave de API.",
"error.unable_to_create_category": "Não foi possível criar essa categoria.",
"error.unable_to_create_user": "Não foi possível criar esse usuário.",
@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Regras",
"form.feed.label.allow_self_signed_certificates": "Permitir certificados autoassinados ou inválidos",
"form.feed.label.apprise_service_urls": "Lista de URLs de serviços Apprise separadas por vírgula",
"form.feed.label.blocklist_rules": "Regras de bloqueio",
"form.feed.label.block_filter_entry_rules": "Regras de Bloqueio de Entradas",
"form.feed.label.blocklist_rules": "Filtros de Bloqueio Baseados em Regex",
"form.feed.label.category": "Categoria",
"form.feed.label.cookie": "Definir Cookies",
"form.feed.label.crawler": "Obter conteúdo original",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Usar o proxy configurado no nível da aplicação",
"form.feed.label.hide_globally": "Ocultar entradas na lista global não lida",
"form.feed.label.ignore_http_cache": "Ignorar cache HTTP",
"form.feed.label.keeplist_rules": "Regras de permissão",
"form.feed.label.keep_filter_entry_rules": "Regras de Permissão de Entradas",
"form.feed.label.keeplist_rules": "Filtros de Manutenção Baseados em Regex",
"form.feed.label.no_media_player": "Sem reprodutor de mídia (áudio/vídeo)",
"form.feed.label.ntfy_activate": "Enviar itens para o ntfy",
"form.feed.label.ntfy_default_priority": "Prioridade padrão do ntfy",
@ -200,7 +202,7 @@
"form.feed.label.pushover_max_priority": "Prioridade máxima do Pushover",
"form.feed.label.pushover_min_priority": "Prioridade mínima do Pushover",
"form.feed.label.pushover_priority": "Prioridade da mensagem do Pushover",
"form.feed.label.rewrite_rules": "Regras para o Rewrite",
"form.feed.label.rewrite_rules": "Regras de Reescrita de Conteúdo",
"form.feed.label.scraper_rules": "Regras do scraper",
"form.feed.label.site_url": "URL do site",
"form.feed.label.title": "Título",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Ultima utilização",
"page.api_keys.table.token": "Token",
"page.api_keys.title": "Chaves de API",
"page.categories_count": [
"%d categoria",
"%d categorias"
],
"page.categories.entries": "Itens",
"page.categories.feed_count": [
"Existe %d fonte.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Inscrições",
"page.categories.no_feed": "Sem fonte.",
"page.categories.title": "Categorias",
"page.categories_count": [
"%d categoria",
"%d categorias"
],
"page.category_label": "Categoria: %s",
"page.edit_category.title": "Editar categoria: %s",
"page.edit_feed.etag_header": "Cabeçalho 'ETag':",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Senhas",
"page.settings.webauthn.register": "Registrar senha",
"page.settings.webauthn.register.error": "Não foi possível registrar a senha",
"page.shared_entries.title": "Itens compartilhados",
"page.shared_entries_count": [
"%d item compartilhado",
"%d itens compartilhados"
],
"page.shared_entries.title": "Itens compartilhados",
"page.starred.title": "Favoritos",
"page.starred_entry_count": [
"%d item favorito",
"%d itens favoritos"
],
"page.starred.title": "Favoritos",
"page.total_entry_count": [
"%d item no total",
"%d itens no total"
],
"page.unread.title": "Não lidos",
"page.unread_entry_count": [
"%d item não lido",
"%d itens não lidos"
],
"page.unread.title": "Não lidos",
"page.users.actions": "Ações",
"page.users.admin.no": "Não",
"page.users.admin.yes": "Sim",

View file

@ -172,7 +172,8 @@
"form.feed.fieldset.rules": "Reguli",
"form.feed.label.allow_self_signed_certificates": "Permite certificatele auto-semnate sau invalide",
"form.feed.label.apprise_service_urls": "Lista de URL-uri ale serviciilor Apprise separate prin virgule",
"form.feed.label.blocklist_rules": "Reguli de Blocare",
"form.feed.label.block_filter_entry_rules": "Reguli de Blocare a Intrărilor",
"form.feed.label.blocklist_rules": "Filtre de Blocare Bazate pe Regex",
"form.feed.label.category": "Categorie",
"form.feed.label.cookie": "Setare Cookie-uri",
"form.feed.label.crawler": "Aduce conținutul original",
@ -185,7 +186,8 @@
"form.feed.label.fetch_via_proxy": "Utilizați proxy-ul configurat la nivelul aplicației",
"form.feed.label.hide_globally": "Ascunde intrările în lista globală de articole necitite",
"form.feed.label.ignore_http_cache": "Ignoră cache HTTP",
"form.feed.label.keeplist_rules": "Reguli de Păstrare",
"form.feed.label.keep_filter_entry_rules": "Reguli de Permitere a Intrărilor",
"form.feed.label.keeplist_rules": "Filtre de Păstrare Bazate pe Regex",
"form.feed.label.no_media_player": "Nu există player media (audio/video)",
"form.feed.label.ntfy_activate": "Împinge intrările la ntfy",
"form.feed.label.ntfy_default_priority": "Prioritate predefinită Ntfy",
@ -195,7 +197,7 @@
"form.feed.label.ntfy_min_priority": "Prioritate minimă Ntfy",
"form.feed.label.ntfy_priority": "Prioritate Ntfy",
"form.feed.label.ntfy_topic": "Subiect Ntfy (opțional)",
"form.feed.label.proxy_url": "Proxy URL",
"form.feed.label.proxy_url": "URL Proxy",
"form.feed.label.pushover_activate": "Activează Pushover",
"form.feed.label.pushover_default_priority": "Prioritate implicită Pushover",
"form.feed.label.pushover_high_priority": "Prioritate ridicată Pushover",
@ -203,7 +205,7 @@
"form.feed.label.pushover_max_priority": "Prioritate maximă Pushover",
"form.feed.label.pushover_min_priority": "Prioritate minimă Pushover",
"form.feed.label.pushover_priority": "Prioritate Pushover",
"form.feed.label.rewrite_rules": "Rescrie Regulile",
"form.feed.label.rewrite_rules": "Reguli de Rescriere a Conținutului",
"form.feed.label.scraper_rules": "Reguli de Eliminare",
"form.feed.label.site_url": "Adresă URL",
"form.feed.label.title": "Titlu",
@ -222,7 +224,7 @@
"form.integration.cubox_api_link": "Link APi Cubox",
"form.integration.discord_activate": "Împinge intrările pe Discord",
"form.integration.discord_webhook_link": "Link Webhook Discord",
"form.integration.espial_activate": "Save entries to Espial",
"form.integration.espial_activate": "Salvează intrările în Espial",
"form.integration.espial_api_key": "Cheie API Espial",
"form.integration.espial_endpoint": "Punct acces API Espial",
"form.integration.espial_tags": "Etichete Espial",
@ -433,11 +435,6 @@
"page.api_keys.table.last_used_at": "Utilizat ultima dată",
"page.api_keys.table.token": "Token",
"page.api_keys.title": "Chei API",
"page.categories_count": [
"%d categorie",
"%d categorii",
"%d categorie găsită"
],
"page.categories.entries": "Intrări",
"page.categories.feed_count": [
"Este %d flux.",
@ -447,6 +444,11 @@
"page.categories.feeds": "Fluxuri",
"page.categories.no_feed": "Nici un flux.",
"page.categories.title": "Categorii",
"page.categories_count": [
"%d categorie",
"%d categorii",
"%d categorie găsită"
],
"page.category_label": "Categorie: %s",
"page.edit_category.title": "Editare Categorie: %s",
"page.edit_feed.etag_header": "Antet ETag:",
@ -555,29 +557,29 @@
"page.settings.webauthn.passkeys": "Chei Acces",
"page.settings.webauthn.register": "Înregistrare cheie acces",
"page.settings.webauthn.register.error": "Eroare la înregistrarea cheii de acces",
"page.shared_entries.title": "Înregistrări partajate",
"page.shared_entries_count": [
"%d înregistrare partajată",
"%d înregistrări partajate",
"%d înregistrări partajate"
],
"page.shared_entries.title": "Înregistrări partajate",
"page.starred.title": "Marcate",
"page.starred_entry_count": [
"%d înregistrare marcată",
"%d Înregistrări marcate",
"%d Înregistrări marcate"
],
"page.starred.title": "Marcate",
"page.total_entry_count": [
"%d intrare în total",
"%d intrări în total",
"%d intrări în total"
],
"page.unread.title": "Necitite",
"page.unread_entry_count": [
"%d înregistrare necitită",
"%d înregistrări necitite",
"%d înregistrări necitite"
],
"page.unread.title": "Necitite",
"page.users.actions": "Acțiuni",
"page.users.admin.no": "Nu",
"page.users.admin.yes": "Da",

View file

@ -172,7 +172,8 @@
"form.feed.fieldset.rules": "Правила",
"form.feed.label.allow_self_signed_certificates": "Разрешить самоподписанные или недействительные сертификаты",
"form.feed.label.apprise_service_urls": "Список ссылок сервисов Apprise, разделенный запятой",
"form.feed.label.blocklist_rules": "Правила черного списка",
"form.feed.label.block_filter_entry_rules": "Правила блокировки записей",
"form.feed.label.blocklist_rules": "Фильтры блокировки на основе регулярных выражений",
"form.feed.label.category": "Категория",
"form.feed.label.cookie": "Установить куки",
"form.feed.label.crawler": "Извлечь оригинальное содержимое",
@ -185,7 +186,8 @@
"form.feed.label.fetch_via_proxy": "Использовать прокси, настроенный на уровне приложения",
"form.feed.label.hide_globally": "Скрыть записи в глобальном списке непрочитанных",
"form.feed.label.ignore_http_cache": "Игнорировать HTTP кеш",
"form.feed.label.keeplist_rules": "Правила белого списка",
"form.feed.label.keep_filter_entry_rules": "Правила разрешения записей",
"form.feed.label.keeplist_rules": "Фильтры сохранения на основе регулярных выражений",
"form.feed.label.no_media_player": "Отключить медиаплеер (аудио и видео)",
"form.feed.label.ntfy_activate": "Отправлять статьи в ntfy",
"form.feed.label.ntfy_default_priority": "По умолчанию",
@ -203,7 +205,7 @@
"form.feed.label.pushover_max_priority": "Высший",
"form.feed.label.pushover_min_priority": "Минимальный",
"form.feed.label.pushover_priority": "Приоритет сообщений Pushover",
"form.feed.label.rewrite_rules": "Правила перезаписи",
"form.feed.label.rewrite_rules": "Правила переписывания содержимого",
"form.feed.label.scraper_rules": "Правила сборщика",
"form.feed.label.site_url": "Адрес сайта",
"form.feed.label.title": "Название",
@ -433,11 +435,6 @@
"page.api_keys.table.last_used_at": "Последнее использование",
"page.api_keys.table.token": "Токен",
"page.api_keys.title": "API-ключи",
"page.categories_count": [
"%d категория",
"%d категории",
"%d категорий"
],
"page.categories.entries": "Статьи",
"page.categories.feed_count": [
"Есть %d подписка.",
@ -447,6 +444,11 @@
"page.categories.feeds": "Подписки",
"page.categories.no_feed": "Нет подписок.",
"page.categories.title": "Категории",
"page.categories_count": [
"%d категория",
"%d категории",
"%d категорий"
],
"page.category_label": "Категории: %s",
"page.edit_category.title": "Изменить категорию: %s",
"page.edit_feed.etag_header": "Заголовок ETag:",
@ -472,7 +474,7 @@
"page.integration.bookmarklet.help": "Эта специальная ссылка позволит вам подписаться на сайт, используя обыкновенную закладку в вашем браузере.",
"page.integration.bookmarklet.instructions": "Перетащите эту ссылку в ваши закладки.",
"page.integration.bookmarklet.name": "Добавить в Miniflux",
"page.integration.miniflux_api": "Miniflux API",
"page.integration.miniflux_api": "API Miniflux",
"page.integration.miniflux_api_endpoint": "Конечная точка API",
"page.integration.miniflux_api_password": "Пароль",
"page.integration.miniflux_api_password_value": "Пароль вашего аккаунта",
@ -555,29 +557,29 @@
"page.settings.webauthn.passkeys": "Ключи доступа",
"page.settings.webauthn.register": "Зарегистрировать пароль",
"page.settings.webauthn.register.error": "Не удается зарегистрировать пароль",
"page.shared_entries.title": "Общедоступные статьи",
"page.shared_entries_count": [
"%d общедоступная статья",
"%d общедоступных статьи",
"%d общедоступных статей"
],
"page.shared_entries.title": "Общедоступные статьи",
"page.starred.title": "Избранное",
"page.starred_entry_count": [
"%d избранная статья",
"%d избранные статьи",
"%d избранных статей"
],
"page.starred.title": "Избранное",
"page.total_entry_count": [
"%d статья всего",
"%d статьи всего",
"%d статей всего"
],
"page.unread.title": "Непрочитанное",
"page.unread_entry_count": [
"%d непрочитанная статья",
"%d непрочитанных статьи",
"%d непрочитанных статей"
],
"page.unread.title": "Непрочитанное",
"page.users.actions": "Действия",
"page.users.admin.no": "Нет",
"page.users.admin.yes": "Да",

View file

@ -169,7 +169,8 @@
"form.feed.fieldset.rules": "Kurallar",
"form.feed.label.allow_self_signed_certificates": "Kendinden imzalı veya geçersiz sertifikalara izin ver",
"form.feed.label.apprise_service_urls": "Apprise hizmet URL'lerinin virgülle ayrılmış listesi",
"form.feed.label.blocklist_rules": "Engelleme Kuralları",
"form.feed.label.block_filter_entry_rules": "Giriş Engelleme Kuralları",
"form.feed.label.blocklist_rules": "Regex Tabanlı Engelleme Filtreleri",
"form.feed.label.category": "Kategori",
"form.feed.label.cookie": "Çerezleri Ayarla",
"form.feed.label.crawler": "Orijinal içeriği çek",
@ -182,7 +183,8 @@
"form.feed.label.fetch_via_proxy": "Uygulama düzeyinde yapılandırılmış proxy'yi kullan",
"form.feed.label.hide_globally": "Genel okunmamış listesindeki girişleri gizle",
"form.feed.label.ignore_http_cache": "HTTP önbelleğini yoksay",
"form.feed.label.keeplist_rules": "Saklama Kuralları",
"form.feed.label.keep_filter_entry_rules": "Giriş İzin Kuralları",
"form.feed.label.keeplist_rules": "Regex Tabanlı Tutma Filtreleri",
"form.feed.label.no_media_player": "Medya oynatıcı yok (ses/video)",
"form.feed.label.ntfy_activate": "Makaleleri ntfy'ye gönder",
"form.feed.label.ntfy_default_priority": "Ntfy varsayılan öncelik",
@ -200,13 +202,13 @@
"form.feed.label.pushover_max_priority": "Pushover maksimum öncelik",
"form.feed.label.pushover_min_priority": "Pushover minimum öncelik",
"form.feed.label.pushover_priority": "Pushover mesaj önceliği",
"form.feed.label.rewrite_rules": "Yeniden Yazma Kuralları",
"form.feed.label.rewrite_rules": "İçerik Yeniden Yazma Kuralları",
"form.feed.label.scraper_rules": "Scrapper Kuralları",
"form.feed.label.site_url": "Site URL'si",
"form.feed.label.title": "Başlık",
"form.feed.label.urlrewrite_rules": "URL Yeniden Yazma Kuralları",
"form.feed.label.user_agent": "Varsayılan User Agent'i Geçersiz Kıl",
"form.feed.label.webhook_url": "Override webhook url",
"form.feed.label.webhook_url": "Webhook URL'sini geçersiz kıl",
"form.import.label.file": "OPML dosyası",
"form.import.label.url": "URL",
"form.integration.apprise_activate": "Makaleleri Apprise'a gönder",
@ -430,10 +432,6 @@
"page.api_keys.table.last_used_at": "Son Kullanılma",
"page.api_keys.table.token": "Token",
"page.api_keys.title": "API Anahtarları",
"page.categories_count": [
"%d kategori",
"%d kategori"
],
"page.categories.entries": "Makaleler",
"page.categories.feed_count": [
"%d besleme var.",
@ -442,6 +440,10 @@
"page.categories.feeds": "Beslemeler",
"page.categories.no_feed": "Besleme yok.",
"page.categories.title": "Kategoriler",
"page.categories_count": [
"%d kategori",
"%d kategori"
],
"page.category_label": "Kategori: %s",
"page.edit_category.title": "Kategoriyi Düzenle: %s",
"page.edit_feed.etag_header": "ETag başlığı:",
@ -547,25 +549,25 @@
"page.settings.webauthn.passkeys": "Passkeyler",
"page.settings.webauthn.register": "Passkey'i kaydet",
"page.settings.webauthn.register.error": "Passkey kaydedilemiyor",
"page.shared_entries.title": "Paylaşılan makaleler",
"page.shared_entries_count": [
"%d paylaşılan makaleler",
"%d paylaşılan makaleler"
],
"page.shared_entries.title": "Paylaşılan makaleler",
"page.starred.title": "Yıldızlı",
"page.starred_entry_count": [
"%d yıldızlanmış makale",
"%d yıldızlanmış makale"
],
"page.starred.title": "Yıldızlı",
"page.total_entry_count": [
"Toplamda %d makale",
"Toplamda %d makale"
],
"page.unread.title": "Okunmadı",
"page.unread_entry_count": [
"Toplamda %d okunmamış makale",
"Toplamda %d okunmamış makale"
],
"page.unread.title": "Okunmadı",
"page.users.actions": "Eylemler",
"page.users.admin.no": "Hayır",
"page.users.admin.yes": "Evet",

View file

@ -38,15 +38,15 @@
"confirm.question": "Ви впевнені?",
"confirm.question.refresh": "Ви хочете змусити оновити?",
"confirm.yes": "так",
"enclosure_media_controls.seek": "Seek:",
"enclosure_media_controls.seek.title": "Seek %s seconds",
"enclosure_media_controls.speed": "Speed:",
"enclosure_media_controls.speed.faster": "Faster",
"enclosure_media_controls.speed.faster.title": "Faster by %sx",
"enclosure_media_controls.speed.reset": "Reset",
"enclosure_media_controls.speed.reset.title": "Reset speed to 1x",
"enclosure_media_controls.speed.slower": "Slower",
"enclosure_media_controls.speed.slower.title": "Slower by %sx",
"enclosure_media_controls.seek": "Пошук:",
"enclosure_media_controls.seek.title": "Пошук %s секунд",
"enclosure_media_controls.speed": "Швидкість:",
"enclosure_media_controls.speed.faster": "Швидше",
"enclosure_media_controls.speed.faster.title": "Швидше на %sx",
"enclosure_media_controls.speed.reset": "Скинути",
"enclosure_media_controls.speed.reset.title": "Скинути швидкість до 1x",
"enclosure_media_controls.speed.slower": "Повільніше",
"enclosure_media_controls.speed.slower.title": "Повільніше на %sx",
"entry.bookmark.toast.off": "Без зірочки",
"entry.bookmark.toast.on": "З зірочкою",
"entry.bookmark.toggle.off": "Прибрати зірочку",
@ -151,7 +151,7 @@
"error.site_url_not_empty": "URL-адреса сайту не може бути порожньою.",
"error.subscription_not_found": "Не знайшлося жодної підписки.",
"error.title_required": "Назва є обов’язковою.",
"error.tls_error": "TLS error: %q. You could disable TLS verification in the feed settings if you would like.",
"error.tls_error": "Помилка TLS: %q. Ви можете відключити перевірку TLS в налаштуваннях фіду, якщо хочете.",
"error.unable_to_create_api_key": "Не вдається створити такий ключ API",
"error.unable_to_create_category": "Не вдається сворити категорію.",
"error.unable_to_create_user": "Не вдається створити користувача.",
@ -172,7 +172,8 @@
"form.feed.fieldset.rules": "Правила",
"form.feed.label.allow_self_signed_certificates": "Дозволити сертифікати з власним підписом або недійсні",
"form.feed.label.apprise_service_urls": "Список URL сервісів Apprise, розділених комами",
"form.feed.label.blocklist_rules": "Правила блокування",
"form.feed.label.block_filter_entry_rules": "Правила блокування записів",
"form.feed.label.blocklist_rules": "Фільтри блокування на основі регулярних виразів",
"form.feed.label.category": "Категорія",
"form.feed.label.cookie": "Встановити кукі",
"form.feed.label.crawler": "Завантажувати оригінальний вміст",
@ -185,7 +186,8 @@
"form.feed.label.fetch_via_proxy": "Використовувати проксі, налаштований на рівні програми",
"form.feed.label.hide_globally": "Приховати записи в глобальному списку непрочитаного",
"form.feed.label.ignore_http_cache": "Ігнорувати кеш HTTP",
"form.feed.label.keeplist_rules": "Правила дозволення",
"form.feed.label.keep_filter_entry_rules": "Правила дозволу записів",
"form.feed.label.keeplist_rules": "Фільтри збереження на основі регулярних виразів",
"form.feed.label.no_media_player": "Немає медіаплеєра (аудіо/відео)",
"form.feed.label.ntfy_activate": "Надсилати записи у ntfy",
"form.feed.label.ntfy_default_priority": "Стандартний пріоритет ntfy",
@ -203,7 +205,7 @@
"form.feed.label.pushover_max_priority": "Максимальний пріоритет Pushover",
"form.feed.label.pushover_min_priority": "Мінімальний пріоритет Pushover",
"form.feed.label.pushover_priority": "Пріоритет повідомлення Pushover",
"form.feed.label.rewrite_rules": "Правила Rewrite",
"form.feed.label.rewrite_rules": "Правила перезапису вмісту",
"form.feed.label.scraper_rules": "Правила Scraper",
"form.feed.label.site_url": "URL-адреса сайту",
"form.feed.label.title": "Назва",
@ -433,11 +435,6 @@
"page.api_keys.table.last_used_at": "Дата останнього використання",
"page.api_keys.table.token": "Токен",
"page.api_keys.title": "Ключі API",
"page.categories_count": [
"%d category",
"%d categories",
"%d categories"
],
"page.categories.entries": "Статті",
"page.categories.feed_count": [
"Містить %d стрічку.",
@ -447,6 +444,11 @@
"page.categories.feeds": "Підписки",
"page.categories.no_feed": "Немає стрічки.",
"page.categories.title": "Категорії",
"page.categories_count": [
"%d category",
"%d categories",
"%d categories"
],
"page.category_label": "Категорія: %s",
"page.edit_category.title": "Редагування категорії: %s",
"page.edit_feed.etag_header": "Заголовок ETag:",
@ -555,29 +557,29 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "Зареєструвати пароль",
"page.settings.webauthn.register.error": "Не вдалося зареєструвати ключ доступу",
"page.shared_entries.title": "Спільні записи",
"page.shared_entries_count": [
"%d shared entry",
"%d shared entries",
"%d shared entries"
],
"page.shared_entries.title": "Спільні записи",
"page.starred.title": "З зірочкою",
"page.starred_entry_count": [
"%d starred entry",
"%d starred entries",
"%d starred entries"
],
"page.starred.title": "З зірочкою",
"page.total_entry_count": [
"%d entry in total",
"%d entries in total",
"%d entries in total"
],
"page.unread.title": "Непрочитане",
"page.unread_entry_count": [
"%d unread entry",
"%d unread entries",
"%d unread entries"
],
"page.unread.title": "Непрочитане",
"page.users.actions": "Дії",
"page.users.admin.no": "Ні",
"page.users.admin.yes": "Так",

View file

@ -166,7 +166,8 @@
"form.feed.fieldset.rules": "规则",
"form.feed.label.allow_self_signed_certificates": "允许自签名证书或无效证书",
"form.feed.label.apprise_service_urls": "使用逗号分隔的 Apprise 服务 URL 列表",
"form.feed.label.blocklist_rules": "阻止规则",
"form.feed.label.block_filter_entry_rules": "条目屏蔽规则",
"form.feed.label.blocklist_rules": "基于正则表达式的屏蔽过滤器",
"form.feed.label.category": "类别",
"form.feed.label.cookie": "设置 Cookies",
"form.feed.label.crawler": "抓取全文内容",
@ -179,7 +180,8 @@
"form.feed.label.fetch_via_proxy": "使用在应用程序级别配置的代理",
"form.feed.label.hide_globally": "隐藏全局未读列表中的文章",
"form.feed.label.ignore_http_cache": "忽略 HTTP 缓存",
"form.feed.label.keeplist_rules": "保留规则",
"form.feed.label.keep_filter_entry_rules": "条目允许规则",
"form.feed.label.keeplist_rules": "基于正则表达式的保留过滤器",
"form.feed.label.no_media_player": "没有媒体播放器(音频/视频)",
"form.feed.label.ntfy_activate": "推送条目到ntfy",
"form.feed.label.ntfy_default_priority": "Ntfy 默认优先级",
@ -197,7 +199,7 @@
"form.feed.label.pushover_max_priority": "Pushover 最高优先级",
"form.feed.label.pushover_min_priority": "Pushover 最低优先级",
"form.feed.label.pushover_priority": "Pushover 消息优先级",
"form.feed.label.rewrite_rules": "重写规则",
"form.feed.label.rewrite_rules": "内容重写规则",
"form.feed.label.scraper_rules": "抓取规则",
"form.feed.label.site_url": "源网站 URL",
"form.feed.label.title": "标题",
@ -309,7 +311,7 @@
"form.integration.telegram_bot_disable_web_page_preview": "禁用网页预览",
"form.integration.telegram_bot_token": "机器人令牌",
"form.integration.telegram_chat_id": "聊天 ID",
"form.integration.telegram_topic_id": "Topic ID",
"form.integration.telegram_topic_id": "主题ID",
"form.integration.wallabag_activate": "保存文章到 Wallabag",
"form.integration.wallabag_client_id": "Wallabag 客户端 ID",
"form.integration.wallabag_client_secret": "Wallabag 客户端 密钥",
@ -407,7 +409,7 @@
"page.about.build_date": "构建日期:",
"page.about.credits": "版权",
"page.about.db_usage": "数据库容量",
"page.about.git_commit": "Git Commit:",
"page.about.git_commit": "Git提交:",
"page.about.global_config_options": "全局配置选项",
"page.about.go_version": "Go 版本号:",
"page.about.license": "协议:",
@ -427,9 +429,6 @@
"page.api_keys.table.last_used_at": "最后使用",
"page.api_keys.table.token": "令牌",
"page.api_keys.title": "API 密钥",
"page.categories_count": [
"%d 分类"
],
"page.categories.entries": "查看内容",
"page.categories.feed_count": [
"有 %d 个源"
@ -437,6 +436,9 @@
"page.categories.feeds": "查看源",
"page.categories.no_feed": "没有源",
"page.categories.title": "分类",
"page.categories_count": [
"%d 分类"
],
"page.category_label": "分类: %s",
"page.edit_category.title": "编辑分类 : %s",
"page.edit_feed.etag_header": "ETag 标题:",
@ -539,21 +541,21 @@
"page.settings.webauthn.passkeys": "通行密钥列表",
"page.settings.webauthn.register": "注册通行密钥",
"page.settings.webauthn.register.error": "无法注册通行密钥",
"page.shared_entries.title": "已分享的文章",
"page.shared_entries_count": [
"%d 已分享的文章"
],
"page.shared_entries.title": "已分享的文章",
"page.starred.title": "收藏",
"page.starred_entry_count": [
"%d 收藏的文章"
],
"page.starred.title": "收藏",
"page.total_entry_count": [
"%d 文章总数"
],
"page.unread.title": "未读",
"page.unread_entry_count": [
"%d 未读的文章"
],
"page.unread.title": "未读",
"page.users.actions": "操作",
"page.users.admin.no": "否",
"page.users.admin.yes": "是",

View file

@ -166,7 +166,8 @@
"form.feed.fieldset.rules": "規則",
"form.feed.label.allow_self_signed_certificates": "允許自簽或無效的憑證",
"form.feed.label.apprise_service_urls": "使用逗號分隔的 Apprise 服務網址列表",
"form.feed.label.blocklist_rules": "過濾規則",
"form.feed.label.block_filter_entry_rules": "條目封鎖規則",
"form.feed.label.blocklist_rules": "基於正則表達式的封鎖過濾器",
"form.feed.label.category": "類別",
"form.feed.label.cookie": "設定 Cookies",
"form.feed.label.crawler": "下載原文內容",
@ -179,7 +180,8 @@
"form.feed.label.fetch_via_proxy": "使用應用程式層級設定的代理",
"form.feed.label.hide_globally": "在全域未讀列表中隱藏文章",
"form.feed.label.ignore_http_cache": "忽略 HTTP 快取",
"form.feed.label.keeplist_rules": "保留規則",
"form.feed.label.keep_filter_entry_rules": "條目允許規則",
"form.feed.label.keeplist_rules": "基於正則表達式的保留過濾器",
"form.feed.label.no_media_player": "無媒體播放器 (音訊/視訊)",
"form.feed.label.ntfy_activate": "推送文章到 ntfy",
"form.feed.label.ntfy_default_priority": "Ntfy 預設優先順序",
@ -189,28 +191,28 @@
"form.feed.label.ntfy_min_priority": "Ntfy 最低優先順序",
"form.feed.label.ntfy_priority": "Ntfy 優先順序",
"form.feed.label.ntfy_topic": "Ntfy topic (選填)",
"form.feed.label.proxy_url": "Proxy URL",
"form.feed.label.proxy_url": "代理URL",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.rewrite_rules": "重寫規則",
"form.feed.label.pushover_priority": "Pushover消息優先級",
"form.feed.label.rewrite_rules": "內容重寫規則",
"form.feed.label.scraper_rules": "抓取規則",
"form.feed.label.site_url": "網站網址",
"form.feed.label.title": "標題",
"form.feed.label.urlrewrite_rules": "網址重寫規則",
"form.feed.label.user_agent": "覆蓋預設的使用者代理",
"form.feed.label.webhook_url": "Override webhook url",
"form.feed.label.webhook_url": "覆蓋webhook URL",
"form.import.label.file": "OPML 檔案",
"form.import.label.url": "URL",
"form.integration.apprise_activate": "推送文章到 Apprise",
"form.integration.apprise_services_url": "使用逗號分隔的 Apprise 服務網址列表",
"form.integration.apprise_url": "Apprise API 網址",
"form.integration.betula_activate": "儲存文章到 Betula",
"form.integration.betula_token": "Betula Token",
"form.integration.betula_token": "Betula令牌",
"form.integration.betula_url": "Betula 伺服器網址",
"form.integration.cubox_activate": "儲存文章到 Cubox",
"form.integration.cubox_api_link": "Cubox API 連結",
@ -427,9 +429,6 @@
"page.api_keys.table.last_used_at": "最後使用",
"page.api_keys.table.token": "金鑰",
"page.api_keys.title": "API 金鑰",
"page.categories_count": [
"%d 個分類"
],
"page.categories.entries": "檢視內容",
"page.categories.feed_count": [
"有 %d 個 Feed"
@ -437,6 +436,9 @@
"page.categories.feeds": "檢視 Feeds",
"page.categories.no_feed": "沒有 Feed",
"page.categories.title": "分類",
"page.categories_count": [
"%d 個分類"
],
"page.category_label": "分類:%s",
"page.edit_category.title": "編輯分類 : %s",
"page.edit_feed.etag_header": "ETag 標頭:",
@ -539,21 +541,21 @@
"page.settings.webauthn.passkeys": "Passkeys",
"page.settings.webauthn.register": "註冊 Passkey",
"page.settings.webauthn.register.error": "無法註冊 Passkey",
"page.shared_entries.title": "已分享的文章",
"page.shared_entries_count": [
"已分享 %d 篇文章"
],
"page.shared_entries.title": "已分享的文章",
"page.starred.title": "收藏",
"page.starred_entry_count": [
"%d 篇收藏文章"
],
"page.starred.title": "收藏",
"page.total_entry_count": [
"總共 %d 篇文章"
],
"page.unread.title": "未讀",
"page.unread_entry_count": [
"%d 篇未讀文章"
],
"page.unread.title": "未讀",
"page.users.actions": "操作",
"page.users.admin.no": "否",
"page.users.admin.yes": "是",

View file

@ -40,6 +40,8 @@ type Feed struct {
Crawler bool `json:"crawler"`
BlocklistRules string `json:"blocklist_rules"`
KeeplistRules string `json:"keeplist_rules"`
BlockFilterEntryRules string `json:"block_filter_entry_rules"`
KeepFilterEntryRules string `json:"keep_filter_entry_rules"`
UrlRewriteRules string `json:"urlrewrite_rules"`
UserAgent string `json:"user_agent"`
Cookie string `json:"cookie"`
@ -166,6 +168,8 @@ type FeedCreationRequest struct {
RewriteRules string `json:"rewrite_rules"`
BlocklistRules string `json:"blocklist_rules"`
KeeplistRules string `json:"keeplist_rules"`
BlockFilterEntryRules string `json:"block_filter_entry_rules"`
KeepFilterEntryRules string `json:"keep_filter_entry_rules"`
HideGlobally bool `json:"hide_globally"`
UrlRewriteRules string `json:"urlrewrite_rules"`
DisableHTTP2 bool `json:"disable_http2"`
@ -189,8 +193,10 @@ type FeedModificationRequest struct {
ScraperRules *string `json:"scraper_rules"`
RewriteRules *string `json:"rewrite_rules"`
BlocklistRules *string `json:"blocklist_rules"`
KeeplistRules *string `json:"keeplist_rules"`
UrlRewriteRules *string `json:"urlrewrite_rules"`
KeeplistRules *string `json:"keeplist_rules"`
BlockFilterEntryRules *string `json:"block_filter_entry_rules"`
KeepFilterEntryRules *string `json:"keep_filter_entry_rules"`
Crawler *bool `json:"crawler"`
UserAgent *string `json:"user_agent"`
Cookie *string `json:"cookie"`
@ -233,18 +239,26 @@ func (f *FeedModificationRequest) Patch(feed *Feed) {
feed.RewriteRules = *f.RewriteRules
}
if f.KeeplistRules != nil {
feed.KeeplistRules = *f.KeeplistRules
}
if f.UrlRewriteRules != nil {
feed.UrlRewriteRules = *f.UrlRewriteRules
}
if f.KeeplistRules != nil {
feed.KeeplistRules = *f.KeeplistRules
}
if f.BlocklistRules != nil {
feed.BlocklistRules = *f.BlocklistRules
}
if f.BlockFilterEntryRules != nil {
feed.BlockFilterEntryRules = *f.BlockFilterEntryRules
}
if f.KeepFilterEntryRules != nil {
feed.KeepFilterEntryRules = *f.KeepFilterEntryRules
}
if f.Crawler != nil {
feed.Crawler = *f.Crawler
}

View file

@ -21,36 +21,42 @@ const (
)
func IsBlockedEntry(feed *model.Feed, entry *model.Entry, user *model.User) bool {
// Check user-defined block rules first
if user.BlockFilterEntryRules != "" {
if matchesUserRules(user.BlockFilterEntryRules, entry, feed, filterActionBlock) {
if matchesEntryFilterRules(user.BlockFilterEntryRules, entry, feed, filterActionBlock) {
return true
}
}
if feed.BlockFilterEntryRules != "" {
if matchesEntryFilterRules(feed.BlockFilterEntryRules, entry, feed, filterActionBlock) {
return true
}
}
// Check feed-level blocklist rules
if feed.BlocklistRules == "" {
return false
}
return matchesFeedRules(feed.BlocklistRules, entry, feed, filterActionBlock)
return matchesEntryRegexRules(feed.BlocklistRules, entry, feed, filterActionBlock)
}
func IsAllowedEntry(feed *model.Feed, entry *model.Entry, user *model.User) bool {
// Check user-defined keep rules first
if user.KeepFilterEntryRules != "" {
return matchesUserRules(user.KeepFilterEntryRules, entry, feed, filterActionAllow)
return matchesEntryFilterRules(user.KeepFilterEntryRules, entry, feed, filterActionAllow)
}
if feed.KeepFilterEntryRules != "" {
return matchesEntryFilterRules(feed.KeepFilterEntryRules, entry, feed, filterActionAllow)
}
// Check feed-level keeplist rules
if feed.KeeplistRules == "" {
return true
}
return matchesFeedRules(feed.KeeplistRules, entry, feed, filterActionAllow)
return matchesEntryRegexRules(feed.KeeplistRules, entry, feed, filterActionAllow)
}
func matchesUserRules(rules string, entry *model.Entry, feed *model.Feed, filterAction filterActionType) bool {
func matchesEntryFilterRules(rules string, entry *model.Entry, feed *model.Feed, filterAction filterActionType) bool {
for rule := range strings.SplitSeq(rules, "\n") {
if matchesRule(rule, entry) {
logFilterAction(entry, feed, rule, filterAction)
@ -60,10 +66,10 @@ func matchesUserRules(rules string, entry *model.Entry, feed *model.Feed, filter
return false
}
func matchesFeedRules(rules string, entry *model.Entry, feed *model.Feed, filterAction filterActionType) bool {
func matchesEntryRegexRules(rules string, entry *model.Entry, feed *model.Feed, filterAction filterActionType) bool {
compiledRegex, err := regexp.Compile(rules)
if err != nil {
slog.Debug("Failed on regexp compilation",
slog.Warn("Failed on regexp compilation",
slog.String("pattern", rules),
slog.Any("error", err),
)

View file

@ -41,6 +41,7 @@ func TestBlockingEntries(t *testing.T) {
{&model.Feed{ID: 1}, &model.Entry{Author: "Different", Tags: []string{"example", "test"}}, &model.User{BlockFilterEntryRules: "EntryAuthor\nEntryTag=(?i)Test"}, true},
{&model.Feed{ID: 1}, &model.Entry{Date: time.Date(2024, 3, 14, 0, 0, 0, 0, time.UTC)}, &model.User{BlockFilterEntryRules: "EntryDate=before:2024-03-15"}, true},
{&model.Feed{ID: 1}, &model.Entry{Date: time.Date(2024, 3, 14, 0, 0, 0, 0, time.UTC)}, &model.User{BlockFilterEntryRules: "UnknownRuleType=test"}, false},
{&model.Feed{ID: 1, BlockFilterEntryRules: "EntryURL=(?i)example\nEntryTitle=(?i)Test"}, &model.Entry{URL: "https://example.com", Title: "Some Example"}, &model.User{}, true},
}
for _, tc := range scenarios {
@ -93,6 +94,7 @@ func TestAllowEntries(t *testing.T) {
{&model.Feed{ID: 1}, &model.Entry{Date: time.Date(2024, 2, 28, 0, 0, 0, 0, time.UTC)}, &model.User{KeepFilterEntryRules: "EntryDate=between:2024-03-15"}, false}, // missing second date in range
{&model.Feed{ID: 1}, &model.Entry{Date: time.Date(2024, 2, 28, 0, 0, 0, 0, time.UTC)}, &model.User{KeepFilterEntryRules: "EntryDate=abcd"}, false}, // no colon in rule value
{&model.Feed{ID: 1}, &model.Entry{Date: time.Date(2024, 2, 28, 0, 0, 0, 0, time.UTC)}, &model.User{KeepFilterEntryRules: "EntryDate=unknown:2024-03-15"}, false}, // unknown rule type
{&model.Feed{ID: 1, KeepFilterEntryRules: "EntryURL=(?i)example\nEntryTitle=(?i)Test"}, &model.Entry{URL: "https://example.com", Title: "Some Example"}, &model.User{}, true},
}
for _, tc := range scenarios {

View file

@ -61,6 +61,8 @@ func CreateFeedFromSubscriptionDiscovery(store *storage.Storage, userID int64, f
subscription.BlocklistRules = feedCreationRequest.BlocklistRules
subscription.KeeplistRules = feedCreationRequest.KeeplistRules
subscription.UrlRewriteRules = feedCreationRequest.UrlRewriteRules
subscription.BlockFilterEntryRules = feedCreationRequest.BlockFilterEntryRules
subscription.KeepFilterEntryRules = feedCreationRequest.KeepFilterEntryRules
subscription.EtagHeader = feedCreationRequest.ETag
subscription.LastModifiedHeader = feedCreationRequest.LastModified
subscription.FeedURL = feedCreationRequest.FeedURL
@ -158,9 +160,11 @@ func CreateFeed(store *storage.Storage, userID int64, feedCreationRequest *model
subscription.FetchViaProxy = feedCreationRequest.FetchViaProxy
subscription.ScraperRules = feedCreationRequest.ScraperRules
subscription.RewriteRules = feedCreationRequest.RewriteRules
subscription.UrlRewriteRules = feedCreationRequest.UrlRewriteRules
subscription.BlocklistRules = feedCreationRequest.BlocklistRules
subscription.KeeplistRules = feedCreationRequest.KeeplistRules
subscription.UrlRewriteRules = feedCreationRequest.UrlRewriteRules
subscription.BlockFilterEntryRules = feedCreationRequest.BlockFilterEntryRules
subscription.KeepFilterEntryRules = feedCreationRequest.KeepFilterEntryRules
subscription.HideGlobally = feedCreationRequest.HideGlobally
subscription.EtagHeader = responseHandler.ETag()
subscription.LastModifiedHeader = responseHandler.LastModified()

View file

@ -239,6 +239,8 @@ func (s *Storage) CreateFeed(feed *model.Feed) error {
rewrite_rules,
blocklist_rules,
keeplist_rules,
block_filter_entry_rules,
keep_filter_entry_rules,
ignore_http_cache,
allow_self_signed_certificates,
fetch_via_proxy,
@ -252,7 +254,7 @@ func (s *Storage) CreateFeed(feed *model.Feed) error {
proxy_url
)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28)
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30)
RETURNING
id
`
@ -275,6 +277,8 @@ func (s *Storage) CreateFeed(feed *model.Feed) error {
feed.RewriteRules,
feed.BlocklistRules,
feed.KeeplistRules,
feed.BlockFilterEntryRules,
feed.KeepFilterEntryRules,
feed.IgnoreHTTPCache,
feed.AllowSelfSignedCertificates,
feed.FetchViaProxy,
@ -344,31 +348,33 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) {
rewrite_rules=$11,
blocklist_rules=$12,
keeplist_rules=$13,
crawler=$14,
user_agent=$15,
cookie=$16,
username=$17,
password=$18,
disabled=$19,
next_check_at=$20,
ignore_http_cache=$21,
allow_self_signed_certificates=$22,
fetch_via_proxy=$23,
hide_globally=$24,
url_rewrite_rules=$25,
no_media_player=$26,
apprise_service_urls=$27,
webhook_url=$28,
disable_http2=$29,
description=$30,
ntfy_enabled=$31,
ntfy_priority=$32,
ntfy_topic=$33,
pushover_enabled=$34,
pushover_priority=$35,
proxy_url=$36
block_filter_entry_rules=$14,
keep_filter_entry_rules=$15,
crawler=$16,
user_agent=$17,
cookie=$18,
username=$19,
password=$20,
disabled=$21,
next_check_at=$22,
ignore_http_cache=$23,
allow_self_signed_certificates=$24,
fetch_via_proxy=$25,
hide_globally=$26,
url_rewrite_rules=$27,
no_media_player=$28,
apprise_service_urls=$29,
webhook_url=$30,
disable_http2=$31,
description=$32,
ntfy_enabled=$33,
ntfy_priority=$34,
ntfy_topic=$35,
pushover_enabled=$36,
pushover_priority=$37,
proxy_url=$38
WHERE
id=$37 AND user_id=$38
id=$39 AND user_id=$40
`
_, err = s.db.Exec(query,
feed.FeedURL,
@ -384,6 +390,8 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) {
feed.RewriteRules,
feed.BlocklistRules,
feed.KeeplistRules,
feed.BlockFilterEntryRules,
feed.KeepFilterEntryRules,
feed.Crawler,
feed.UserAgent,
feed.Cookie,

View file

@ -146,9 +146,11 @@ func (f *FeedQueryBuilder) GetFeeds() (model.Feeds, error) {
f.parsing_error_msg,
f.scraper_rules,
f.rewrite_rules,
f.url_rewrite_rules,
f.blocklist_rules,
f.keeplist_rules,
f.url_rewrite_rules,
f.block_filter_entry_rules,
f.keep_filter_entry_rules,
f.crawler,
f.user_agent,
f.cookie,
@ -225,9 +227,11 @@ func (f *FeedQueryBuilder) GetFeeds() (model.Feeds, error) {
&feed.ParsingErrorMsg,
&feed.ScraperRules,
&feed.RewriteRules,
&feed.UrlRewriteRules,
&feed.BlocklistRules,
&feed.KeeplistRules,
&feed.UrlRewriteRules,
&feed.BlockFilterEntryRules,
&feed.KeepFilterEntryRules,
&feed.Crawler,
&feed.UserAgent,
&feed.Cookie,

View file

@ -82,6 +82,18 @@
</a>
</div>
<input type="text" name="rewrite_rules" id="form-rewrite-rules" value="{{ .form.RewriteRules }}" spellcheck="false">
<div class="form-label-row">
<label for="form-urlrewrite-rules">
{{ t "form.feed.label.urlrewrite_rules" }}
</label>
&nbsp;
<a href=" https://miniflux.app/docs/rules.html#rewriteurl-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
{{ icon "external-link" }}
</a>
</div>
<input type="text" name="urlrewrite_rules" id="form-urlrewrite-rules" value="{{ .form.UrlRewriteRules }}" spellcheck="false">
<div class="form-label-row">
<label for="form-blocklist-rules">
{{ t "form.feed.label.blocklist_rules" }}
@ -105,15 +117,26 @@
<input type="text" name="keeplist_rules" id="form-keeplist-rules" value="{{ .form.KeeplistRules }}" spellcheck="false">
<div class="form-label-row">
<label for="form-urlrewrite-rules">
{{ t "form.feed.label.urlrewrite_rules" }}
<label for="form-block-filter-rules">
{{ t "form.feed.label.block_filter_entry_rules" }}
</label>
&nbsp;
<a href=" https://miniflux.app/docs/rules.html#rewriteurl-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
<a href=" https://miniflux.app/docs/rules.html#filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
{{ icon "external-link" }}
</a>
</div>
<input type="text" name="urlrewrite_rules" id="form-urlrewrite-rules" value="{{ .form.UrlRewriteRules }}" spellcheck="false">
<textarea id="form-block-filter-rules" name="block_filter_entry_rules" cols="40" rows="10" spellcheck="false">{{ .form.BlockFilterEntryRules }}</textarea>
<div class="form-label-row">
<label for="form-keep-filter-rules">
{{ t "form.feed.label.keep_filter_entry_rules" }}
</label>
&nbsp;
<a href=" https://miniflux.app/docs/rules.html#filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
{{ icon "external-link" }}
</a>
</div>
<textarea id="form-keep-filter-rules" name="keep_filter_entry_rules" cols="40" rows="10" spellcheck="false">{{ .form.KeepFilterEntryRules }}</textarea>
</div>
</details>

View file

@ -17,9 +17,11 @@
<input type="hidden" name="feed_password" value="{{ .form.Password }}">
<input type="hidden" name="scraper_rules" value="{{ .form.ScraperRules }}">
<input type="hidden" name="rewrite_rules" value="{{ .form.RewriteRules }}">
<input type="hidden" name="urlrewrite_rules" value="{{ .form.UrlRewriteRules }}">
<input type="hidden" name="blocklist_rules" value="{{ .form.BlocklistRules }}">
<input type="hidden" name="keeplist_rules" value="{{ .form.KeeplistRules }}">
<input type="hidden" name="urlrewrite_rules" value="{{ .form.UrlRewriteRules }}">
<input type="hidden" name="block_filter_entry_rules" value="{{ .form.BlockFilterEntryRules }}">
<input type="hidden" name="keep_filter_entry_rules" value="{{ .form.KeepFilterEntryRules }}">
<input type="hidden" name="proxy_url" value="{{ .form.ProxyURL }}">
{{ if .form.FetchViaProxy }}
<input type="hidden" name="fetch_via_proxy" value="1">

View file

@ -140,6 +140,18 @@
</a>
</div>
<input type="text" name="rewrite_rules" id="form-rewrite-rules" value="{{ .form.RewriteRules }}" spellcheck="false">
<div class="form-label-row">
<label for="form-urlrewrite-rules">
{{ t "form.feed.label.urlrewrite_rules" }}
</label>
&nbsp;
<a href="https://miniflux.app/docs/rules.html#rewriteurl-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
{{ icon "external-link" }}
</a>
</div>
<input type="text" name="urlrewrite_rules" id="form-urlrewrite-rules" value="{{ .form.UrlRewriteRules }}" spellcheck="false">
<div class="form-label-row">
<label for="form-blocklist-rules">
{{ t "form.feed.label.blocklist_rules" }}
@ -163,15 +175,26 @@
<input type="text" name="keeplist_rules" id="form-keeplist-rules" value="{{ .form.KeeplistRules }}" spellcheck="false">
<div class="form-label-row">
<label for="form-urlrewrite-rules">
{{ t "form.feed.label.urlrewrite_rules" }}
<label for="form-block-filter-rules">
{{ t "form.feed.label.block_filter_entry_rules" }}
</label>
&nbsp;
<a href="https://miniflux.app/docs/rules.html#rewriteurl-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
<a href=" https://miniflux.app/docs/rules.html#filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
{{ icon "external-link" }}
</a>
</div>
<input type="text" name="urlrewrite_rules" id="form-urlrewrite-rules" value="{{ .form.UrlRewriteRules }}" spellcheck="false">
<textarea id="form-block-filter-rules" name="block_filter_entry_rules" cols="40" rows="10" spellcheck="false">{{ .form.BlockFilterEntryRules }}</textarea>
<div class="form-label-row">
<label for="form-keep-filter-rules">
{{ t "form.feed.label.keep_filter_entry_rules" }}
</label>
&nbsp;
<a href=" https://miniflux.app/docs/rules.html#filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
{{ icon "external-link" }}
</a>
</div>
<textarea id="form-keep-filter-rules" name="keep_filter_entry_rules" cols="40" rows="10" spellcheck="false">{{ .form.KeepFilterEntryRules }}</textarea>
<div class="buttons">
<button type="submit" class="button button-primary" data-label-loading="{{ t "form.submit.saving" }}">{{ t "action.update" }}</button>

View file

@ -229,25 +229,26 @@
<fieldset>
<legend>{{ t "form.prefs.fieldset.global_feed_settings" }}</legend>
<div class="form-label-row">
<label for="form-blocklist-rules">
{{ t "form.feed.label.blocklist_rules" }}
<label for="form-block-filter-rules">
{{ t "form.feed.label.block_filter_entry_rules" }}
</label>
&nbsp;
<a href=" https://miniflux.app/docs/rules.html#global-filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
<a href=" https://miniflux.app/docs/rules.html#filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
{{ icon "external-link" }}
</a>
</div>
<textarea id="form-blocklist-rules" name="block_filter_entry_rules" cols="40" rows="10" spellcheck="false">{{ .form.BlockFilterEntryRules }}</textarea>
<textarea id="form-block-filter-rules" name="block_filter_entry_rules" cols="40" rows="10" spellcheck="false">{{ .form.BlockFilterEntryRules }}</textarea>
<div class="form-label-row">
<label for="form-keeplist-rules">
{{ t "form.feed.label.keeplist_rules" }}
<label for="form-keep-filter-rules">
{{ t "form.feed.label.keep_filter_entry_rules" }}
</label>
<a href=" https://miniflux.app/docs/rules.html#global-filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
&nbsp;
<a href=" https://miniflux.app/docs/rules.html#filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
{{ icon "external-link" }}
</a>
</div>
<textarea id="form-keeplist-rules" name="keep_filter_entry_rules" cols="40" rows="10" spellcheck="false">{{ .form.KeepFilterEntryRules }}</textarea>
<textarea id="form-keep-filter-rules" name="keep_filter_entry_rules" cols="40" rows="10" spellcheck="false">{{ .form.KeepFilterEntryRules }}</textarea>
<div class="buttons">
<button type="submit" class="button button-primary" data-label-loading="{{ t "form.submit.saving" }}">{{ t "action.update" }}</button>

View file

@ -46,9 +46,11 @@ func (h *handler) showEditFeedPage(w http.ResponseWriter, r *http.Request) {
Description: feed.Description,
ScraperRules: feed.ScraperRules,
RewriteRules: feed.RewriteRules,
UrlRewriteRules: feed.UrlRewriteRules,
BlocklistRules: feed.BlocklistRules,
KeeplistRules: feed.KeeplistRules,
UrlRewriteRules: feed.UrlRewriteRules,
BlockFilterEntryRules: feed.BlockFilterEntryRules,
KeepFilterEntryRules: feed.KeepFilterEntryRules,
Crawler: feed.Crawler,
UserAgent: feed.UserAgent,
Cookie: feed.Cookie,

View file

@ -18,9 +18,11 @@ type FeedForm struct {
Description string
ScraperRules string
RewriteRules string
UrlRewriteRules string
BlocklistRules string
KeeplistRules string
UrlRewriteRules string
BlockFilterEntryRules string
KeepFilterEntryRules string
Crawler bool
UserAgent string
Cookie string
@ -54,9 +56,11 @@ func (f FeedForm) Merge(feed *model.Feed) *model.Feed {
feed.Description = f.Description
feed.ScraperRules = f.ScraperRules
feed.RewriteRules = f.RewriteRules
feed.UrlRewriteRules = f.UrlRewriteRules
feed.BlocklistRules = f.BlocklistRules
feed.KeeplistRules = f.KeeplistRules
feed.UrlRewriteRules = f.UrlRewriteRules
feed.BlockFilterEntryRules = f.BlockFilterEntryRules
feed.KeepFilterEntryRules = f.KeepFilterEntryRules
feed.Crawler = f.Crawler
feed.UserAgent = f.UserAgent
feed.Cookie = f.Cookie
@ -108,9 +112,11 @@ func NewFeedForm(r *http.Request) *FeedForm {
UserAgent: r.FormValue("user_agent"),
Cookie: r.FormValue("cookie"),
RewriteRules: r.FormValue("rewrite_rules"),
UrlRewriteRules: r.FormValue("urlrewrite_rules"),
BlocklistRules: r.FormValue("blocklist_rules"),
KeeplistRules: r.FormValue("keeplist_rules"),
UrlRewriteRules: r.FormValue("urlrewrite_rules"),
BlockFilterEntryRules: r.FormValue("block_filter_entry_rules"),
KeepFilterEntryRules: r.FormValue("keep_filter_entry_rules"),
Crawler: r.FormValue("crawler") == "1",
CategoryID: int64(categoryID),
Username: r.FormValue("feed_username"),

View file

@ -24,9 +24,11 @@ type SubscriptionForm struct {
Password string
ScraperRules string
RewriteRules string
UrlRewriteRules string
BlocklistRules string
KeeplistRules string
UrlRewriteRules string
BlockFilterEntryRules string
KeepFilterEntryRules string
DisableHTTP2 bool
ProxyURL string
}
@ -79,9 +81,11 @@ func NewSubscriptionForm(r *http.Request) *SubscriptionForm {
Password: r.FormValue("feed_password"),
ScraperRules: r.FormValue("scraper_rules"),
RewriteRules: r.FormValue("rewrite_rules"),
UrlRewriteRules: r.FormValue("urlrewrite_rules"),
BlocklistRules: r.FormValue("blocklist_rules"),
KeeplistRules: r.FormValue("keeplist_rules"),
UrlRewriteRules: r.FormValue("urlrewrite_rules"),
KeepFilterEntryRules: r.FormValue("keep_filter_entry_rules"),
BlockFilterEntryRules: r.FormValue("block_filter_entry_rules"),
DisableHTTP2: r.FormValue("disable_http2") == "1",
ProxyURL: r.FormValue("proxy_url"),
}

View file

@ -58,9 +58,11 @@ func (h *handler) showChooseSubscriptionPage(w http.ResponseWriter, r *http.Requ
Password: subscriptionForm.Password,
ScraperRules: subscriptionForm.ScraperRules,
RewriteRules: subscriptionForm.RewriteRules,
UrlRewriteRules: subscriptionForm.UrlRewriteRules,
BlocklistRules: subscriptionForm.BlocklistRules,
KeeplistRules: subscriptionForm.KeeplistRules,
UrlRewriteRules: subscriptionForm.UrlRewriteRules,
KeepFilterEntryRules: subscriptionForm.KeepFilterEntryRules,
BlockFilterEntryRules: subscriptionForm.BlockFilterEntryRules,
FetchViaProxy: subscriptionForm.FetchViaProxy,
DisableHTTP2: subscriptionForm.DisableHTTP2,
ProxyURL: subscriptionForm.ProxyURL,

View file

@ -106,9 +106,11 @@ func (h *handler) submitSubscription(w http.ResponseWriter, r *http.Request) {
Password: subscriptionForm.Password,
ScraperRules: subscriptionForm.ScraperRules,
RewriteRules: subscriptionForm.RewriteRules,
UrlRewriteRules: subscriptionForm.UrlRewriteRules,
BlocklistRules: subscriptionForm.BlocklistRules,
KeeplistRules: subscriptionForm.KeeplistRules,
UrlRewriteRules: subscriptionForm.UrlRewriteRules,
KeepFilterEntryRules: subscriptionForm.KeepFilterEntryRules,
BlockFilterEntryRules: subscriptionForm.BlockFilterEntryRules,
FetchViaProxy: subscriptionForm.FetchViaProxy,
DisableHTTP2: subscriptionForm.DisableHTTP2,
ProxyURL: subscriptionForm.ProxyURL,
@ -134,9 +136,11 @@ func (h *handler) submitSubscription(w http.ResponseWriter, r *http.Request) {
Password: subscriptionForm.Password,
ScraperRules: subscriptionForm.ScraperRules,
RewriteRules: subscriptionForm.RewriteRules,
UrlRewriteRules: subscriptionForm.UrlRewriteRules,
BlocklistRules: subscriptionForm.BlocklistRules,
KeeplistRules: subscriptionForm.KeeplistRules,
UrlRewriteRules: subscriptionForm.UrlRewriteRules,
KeepFilterEntryRules: subscriptionForm.KeepFilterEntryRules,
BlockFilterEntryRules: subscriptionForm.BlockFilterEntryRules,
FetchViaProxy: subscriptionForm.FetchViaProxy,
DisableHTTP2: subscriptionForm.DisableHTTP2,
ProxyURL: subscriptionForm.ProxyURL,