feat: redirects screen

- golem15.seo.redirects list and form (UI-SPEC C8): chain rows marked,
  status, match, origin and chain filters, the navigation item lands here
- a field-less extension on the controller refuses a loop with
  redirects.loop on target, answers the chain notice and records history
- the status dropdown posts text, read through RedirectStatus
This commit is contained in:
2026-10-27 11:30:56 +01:00
parent 34a65b846e
commit 163b0aaf98
15 changed files with 677 additions and 24 deletions

View File

@@ -2,6 +2,7 @@ plugin:
name: SEO
description: Search engine metadata for every content type, URL rules and global SEO settings.
nav:
redirects: Redirects
seo: SEO
history: History
rules: URL rules
@@ -199,3 +200,40 @@ redirects:
regex_invalid: "This is not a valid regular expression: :error"
source_invalid: "Start the address with /. Use * only in a pattern."
source_taken: "Another redirect already uses this address and match."
new: "New redirect"
list_title: "Redirects"
name: "Redirect"
source: "From"
source_comment: "Exact: /old-post. Pattern: /old/* (the matched part replaces * in the target). Regex: ^/p/(\\d+)$ (use $1 in the target)."
match: "Match"
match_exact: "Exact"
match_pattern: "Pattern"
match_regex: "Regex"
target: "To"
target_comment: "A path or a full URL. Leave empty for 410 Gone."
status: "Status"
status_301: "301 Moved permanently"
status_302: "302 Found (temporary)"
status_410: "410 Gone"
query: "Query string"
query_ignore: "Ignore it"
query_pass: "Pass it to the target"
ignore_case: "Ignore letter case"
trailing_slash: "Match with and without a trailing slash"
note: "Note"
origin: "Origin"
origin_manual: "Manual"
origin_slug: "Address change"
origin_import: "Import"
origin_mcp: "MCP"
origin_notfound: "404 log"
updated: "Updated"
state_chain: "Chain"
filter_chain: "Chains"
filter_chain_only: "Only chains"
filter_chain_hide: "Hide chains"
list_empty: "No redirects yet. Create one, import a CSV file, or create one from the 404 log."
delete_confirm: "Delete this redirect? Its source address will return 404 again. You can undo it in History."
delete_selected_confirm:
one: "Delete :count redirect? Its source address will return 404 again. You can undo it in History."
other: "Delete :count redirects? Their source addresses will return 404 again. You can undo it in History."

View File

@@ -2,6 +2,7 @@ plugin:
name: SEO
description: Metadane dla wyszukiwarek we wszystkich typach treści, reguły adresów i globalne ustawienia SEO.
nav:
redirects: Przekierowania
seo: SEO
history: Historia zmian
rules: Reguły adresów
@@ -203,3 +204,42 @@ redirects:
regex_invalid: "To nie jest poprawne wyrażenie regularne: :error"
source_invalid: "Zacznij adres od /. Używaj * tylko we wzorcu."
source_taken: "Inne przekierowanie już używa tego adresu i dopasowania."
new: "Nowe przekierowanie"
list_title: "Przekierowania"
name: "Przekierowanie"
source: "Z adresu"
source_comment: "Dokładny: /stary-wpis. Wzorzec: /stare/* (dopasowana część zastępuje * w celu). Regex: ^/p/(\\d+)$ (użyj $1 w celu)."
match: "Dopasowanie"
match_exact: "Dokładne"
match_pattern: "Wzorzec"
match_regex: "Regex"
target: "Na adres"
target_comment: "Ścieżka lub pełny adres. Zostaw puste dla 410 Gone."
status: "Kod"
status_301: "301 Przeniesiono na stałe"
status_302: "302 Przeniesiono tymczasowo"
status_410: "410 Usunięto"
query: "Parametry adresu"
query_ignore: "Ignoruj"
query_pass: "Przekaż do celu"
ignore_case: "Ignoruj wielkość liter"
trailing_slash: "Dopasuj z ukośnikiem na końcu i bez"
note: "Notatka"
origin: "Pochodzenie"
origin_manual: "Ręcznie"
origin_slug: "Zmiana adresu"
origin_import: "Import"
origin_mcp: "MCP"
origin_notfound: "Dziennik 404"
updated: "Zaktualizowano"
state_chain: "Łańcuch"
filter_chain: "Łańcuchy"
filter_chain_only: "Tylko łańcuchy"
filter_chain_hide: "Ukryj łańcuchy"
list_empty: "Nie ma jeszcze przekierowań. Utwórz je, zaimportuj plik CSV lub utwórz je z dziennika 404."
delete_confirm: "Usunąć to przekierowanie? Jego adres źródłowy znowu zwróci 404. Możesz to cofnąć w Historii zmian."
delete_selected_confirm:
one: "Usunąć :count przekierowanie? Jego adres źródłowy znowu zwróci 404. Możesz to cofnąć w Historii zmian."
few: "Usunąć :count przekierowania? Ich adresy źródłowe znowu zwrócą 404. Możesz to cofnąć w Historii zmian."
many: "Usunąć :count przekierowań? Ich adresy źródłowe znowu zwrócą 404. Możesz to cofnąć w Historii zmian."
other: "Usunąć :count przekierowania? Ich adresy źródłowe znowu zwrócą 404. Możesz to cofnąć w Historii zmian."