mirror of
https://github.com/discourse/discourse.git
synced 2026-08-11 02:59:07 +08:00
Previously, the RSS Polling plugin's admin page predated Discourse's admin interface guidelines: it was a single inline-editable table with no breadcrumbs or page header, it truncated long feed URLs, it required horizontal scrolling on mobile, and it gave admins no way to verify a feed before saving it. This change rebuilds the page on the standard plugin "show route" structure (breadcrumbs, page header, and Settings + Feeds tabs) with a `d-table` feed list and dedicated FormKit new/edit routes, so the UI now matches the rest of the admin interface and works on mobile. It also: - Adds a **Test feed** dry-run that fetches a feed and previews which items would be imported or skipped, with plain-language reasons, so admins can validate a feed (and fix setup errors) before saving it. - Adds the `rss_polling_feed_request_timeout` and `rss_polling_verbose_logging` site settings. - Extracts the fetch/parse and import/skip logic into `FeedFetcher` and `FeedAnalyzer`, shared by the poll job and the new preview so the dry-run and the real import always agree. - Normalizes feed dates and categories so Atom feeds (which use `<updated>` and `term`-style `<category>` elements) are handled like RSS, and returns a clean error instead of a 500 when a feed cannot be read. --------- Co-authored-by: Martin Brennan <martin@discourse.org>
104 lines
5.1 KiB
YAML
Vendored
104 lines
5.1 KiB
YAML
Vendored
en:
|
|
admin_js:
|
|
admin:
|
|
site_settings:
|
|
categories:
|
|
discourse_rss_polling: "Discourse RSS Polling"
|
|
js:
|
|
rss_polling:
|
|
title: RSS Polling
|
|
|
|
admin:
|
|
logs:
|
|
staff_actions:
|
|
actions:
|
|
create_rss_polling_feed: create RSS feed
|
|
update_rss_polling_feed: update RSS feed
|
|
destroy_rss_polling_feed: delete RSS feed
|
|
enable_rss_polling_feed: enable RSS feed
|
|
disable_rss_polling_feed: disable RSS feed
|
|
poll_rss_polling_feed: poll RSS feed now
|
|
rss_polling:
|
|
feed_settings: Feed settings
|
|
discourse_settings: Discourse settings
|
|
author: Author
|
|
feed_url: URL
|
|
feed_url_must_be_http: Enter a valid feed URL starting with http:// or https://.
|
|
discourse_category: Category
|
|
discourse_tags: Tags
|
|
required_tags_hint: "This category requires one of these tags — add one or imported topics will be rejected:"
|
|
required_tag_error: 'Add at least %{count} tag(s) from the "%{tag_group}" group, otherwise imported topics will be rejected.'
|
|
feed_category_filter: Category filter
|
|
feed_category_filter_description: Only import items whose feed category contains this text (case-insensitive). Leave blank to import everything.
|
|
showing: "Showing the first %{count} of %{total} items."
|
|
feeds:
|
|
title: Feeds
|
|
nav_description: Manage the RSS/Atom feeds that are imported into Discourse.
|
|
description: Configure the RSS/Atom feeds that are polled and imported as topics.
|
|
add: Add feed
|
|
add_header: Add feed
|
|
edit_header: Edit feed
|
|
empty: You haven't configured any feeds yet.
|
|
edit: Edit
|
|
delete: Delete
|
|
enable: Enable feed
|
|
disable: Disable feed
|
|
back: Back to feeds
|
|
save: Save
|
|
confirm_delete: "Are you sure you want to delete this feed?"
|
|
delete_success: Feed deleted
|
|
save_success: Feed saved
|
|
enable_success: Feed enabled
|
|
disable_success: Feed disabled
|
|
test:
|
|
button: Test feed
|
|
title: Preview
|
|
empty: This feed returned no items.
|
|
dismiss: Dismiss
|
|
would_import: Would import
|
|
summary:
|
|
would_import: "%{count} would import"
|
|
already_imported: "%{count} already imported"
|
|
skipped: "%{count} would skip"
|
|
already_imported: "Already imported — polling would update the <a href='%{topic_url}' target='_blank' rel='noopener noreferrer'>existing topic</a>."
|
|
already_imported_plain: "Already imported — polling would update the existing topic."
|
|
skip_reasons:
|
|
missing_content: Skipped — the item has no content.
|
|
missing_title: Skipped — the item has no title.
|
|
invalid_url: Skipped — the item has no valid link to import from.
|
|
category_filter_mismatch: "Skipped — item categories: %{categories}"
|
|
category_filter_mismatch_none: Skipped — the item has no categories.
|
|
errors:
|
|
fetch_failed: Couldn't fetch the feed. Check that the URL is correct and reachable.
|
|
parse_failed: The response doesn't look like a valid RSS or Atom feed.
|
|
invalid_feed: The feed couldn't be read because it's malformed.
|
|
blank_feed_url: Enter a feed URL to test.
|
|
category_deleted: The category this feed imports into no longer exists. Edit the feed and choose a new category.
|
|
unknown: Couldn't read this feed. It may be temporarily unavailable or returning unexpected content. Test the feed to diagnose, or check the logs for details.
|
|
status:
|
|
enabled: Enabled
|
|
disabled: Disabled
|
|
disabled_note: Won't poll on schedule
|
|
history:
|
|
recent: Recent polls
|
|
show_older: "Show %{count} older"
|
|
poll_now: Poll now
|
|
poll_now_dirty: Save your changes before polling.
|
|
poll_now_disabled: Enable the feed before polling.
|
|
poll_confirm: Polling now will fetch this feed and import or update topics. Continue?
|
|
poll_started: Polling started — the latest attempt will appear here shortly.
|
|
empty: This feed hasn't been polled yet.
|
|
no_items: No items were processed in this poll.
|
|
no_changes: No changes
|
|
imported_count: "%{count} imported"
|
|
updated_count: "%{count} updated"
|
|
skipped_count: "%{count} skipped"
|
|
failed_count: "%{count} failed"
|
|
imported: "Imported as a new <a href='%{topic_url}' target='_blank' rel='noopener noreferrer'>topic</a>."
|
|
imported_plain: "Imported as a new topic."
|
|
updated: "Updated the <a href='%{topic_url}' target='_blank' rel='noopener noreferrer'>existing topic</a>."
|
|
updated_plain: "Updated the existing topic."
|
|
failed: Failed to import.
|
|
failed_reasons:
|
|
import_rejected: "Couldn't be imported — the item doesn't have a valid link to import from."
|
|
import_error: "Couldn't be imported: %{error}"
|