Add section headers to language files and update petition messages

Add GDPR-compliant expiration to confirmation links
Add IP rate limiting error message
Update region list to current Norwegian counties
Add signature deletion functionality
Add thank you email with deletion option
Improve error messages and user feedback
This commit is contained in:
Ruben 2026-01-14 23:16:14 +01:00
parent 22717168ae
commit 443c44d095
2 changed files with 156 additions and 131 deletions

View file

@ -8,72 +8,85 @@ language_name_no = "Norsk"
categories = "Categories" categories = "Categories"
tags = "Tags" tags = "Tags"
; FAQ [faq]
faq_summary_label = "In short:" summary_label = "In short:"
faq_read_full_answer = "Read full answer" read_full_answer = "Read full answer"
; Footer [footer]
footer_social = "<a rel=\"me\" href=\"https://oslo.town/@stopplidelsen\">Follow us on Mastodon</a>" social = "<a rel=\"me\" href=\"https://oslo.town/@stopplidelsen\">Follow us on Mastodon</a>"
footer_copyright = "Copyright" copyright = "Copyright"
footer_follow_mastodon = "Follow us on Mastodon" follow_mastodon = "Follow us on Mastodon"
footer_handcoded = "This website was hand-coded by Ruben Solvang using HTML, CSS and minimal doses of PHP. It took" handcoded = "This website was hand-coded by Ruben Solvang using HTML, CSS and minimal doses of PHP. It took"
footer_page_time = "ms to generate this page." page_time = "ms to generate this page."
; Petition form [petition]
petition.form_title = "Sign the Petition" form_title = "Sign the Petition"
petition.firstname_label = "First name" firstname_label = "First name"
petition.firstname_placeholder = "Your first name" firstname_placeholder = "Your first name"
petition.firstname_required = "First name is required" firstname_required = "First name is required"
petition.surname_label = "Surname" surname_label = "Surname"
petition.surname_placeholder = "Your surname" surname_placeholder = "Your surname"
petition.surname_required = "Surname is required" surname_required = "Surname is required"
petition.email_label = "Email" email_label = "Email"
petition.email_placeholder = "your@email.com" email_placeholder = "your@email.com"
petition.email_help = "Not shown publicly, only for confirmation" email_help = "Not shown publicly, only for confirmation"
petition.email_required = "Valid email is required" email_required = "Valid email is required"
petition.region_label = "Region" region_label = "Region"
petition.region_required = "Please select a region" region_required = "Please select a region"
petition.region_placeholder = "Select region..." region_placeholder = "Select region..."
petition.display_legend = "How should you appear in the list?" display_legend = "How should you appear in the list?"
petition.display_semi = "Show my first name and region (default)" display_semi = "Show my first name and region (default)"
petition.display_anonymous = "Anonymous - only show my region" display_anonymous = "Anonymous - only show my region"
petition.anonymous_name = "Anonymous" anonymous_name = "Anonymous"
petition.from_region = "from" from_region = "from"
petition.display_full = "Show my full name and region" display_full = "Show my full name and region"
petition.submit_button = "Sign the Petition" submit_button = "Sign the Petition"
petition.signatures_title = "Signatures" signatures_title = "Signatures"
petition.signature_count = "{count} signature" signature_count = "{count} signature"
petition.signature_count_plural = "{count} signatures" signature_count_plural = "{count} signatures"
petition.newest_first = "Newest first" newest_first = "Newest first"
petition.error_csrf = "Security error. Please try again." error_csrf = "Security error. Please try again."
petition.error_honeypot = "Invalid submission." error_honeypot = "Invalid submission."
petition.error_rate_limit = "Please wait a moment before submitting again." error_rate_limit = "Please wait a moment before submitting again."
petition.error_time_check = "Multiple signature attempts were sent from the same computer within a short time. Please wait a moment and try again." error_ip_rate_limit = "Too many attempts from your IP address. Please wait 5 minutes before trying again."
petition.error_referrer = "Invalid request." error_time_check = "Multiple signature attempts were sent from the same computer within a short time. Please wait a moment and try again."
petition.error_validation = "Please correct the errors in the form." error_referrer = "Invalid request."
petition.error_email_send = "Could not send confirmation email. Please try again later." error_validation = "Please correct the errors in the form."
petition.error_already_signed = "This email address has already signed this petition." error_email_send = "Could not send confirmation email. Please try again later."
petition.success_pending = "Thank you! Check your email to confirm your signature." error_already_signed = "This email address has already signed this petition."
petition.confirm_success = "Thank you! Your signature has been confirmed and added to the list." success_pending = "Thank you! Check your email to confirm your signature."
petition.confirm_error = "Invalid or expired confirmation link." confirm_success = "Thank you! Your signature has been confirmed and added to the list."
petition.confirm_already = "This signature has already been confirmed." confirm_error = "Invalid confirmation link."
petition.email_subject = "Confirm your signature" confirm_expired = "This confirmation link has expired (max 30 days). Please sign the petition again if you still wish to support it."
petition.email_greeting = "Hello {name}," confirm_already = "This signature has already been confirmed."
petition.email_thanks = "Thank you for signing the petition \"{title}\"." email_subject = "Confirm your signature"
petition.email_confirm = "Please confirm your signature by clicking this link:" email_greeting = "Hello {name},"
petition.email_ignore = "If you did not sign this petition, please ignore this email." email_thanks = "Thank you for signing the petition \"{title}\"."
petition.email_signature = "Best regards" email_confirm = "Please confirm your signature by clicking this link:"
petition.email_org = "Stop the Suffering" email_expiry_notice = "This link is valid for 30 days for privacy reasons (GDPR compliance)."
email_ignore = "If you did not sign this petition, please ignore this email."
email_signature = "Best regards"
email_org = "Stop the Suffering"
email_thankyou_subject = "Thank you for your signature"
email_thankyou_confirmed = "Your signature on the petition \"{title}\" has been confirmed and registered."
email_delete_info = "If you wish to withdraw your signature, you can do so at any time by clicking this link:"
delete_success = "Your signature has been deleted."
delete_error = "Could not delete the signature. The link may be invalid."
; Norwegian regions (fylker) - kept in Norwegian as they are proper nouns ; Norwegian regions (fylker) - kept in Norwegian as they are proper nouns
regions.oslo = "Oslo" [regions]
regions.rogaland = "Rogaland" agder = "Agder"
regions.more_og_romsdal = "Møre og Romsdal" akershus = "Akershus"
regions.nordland = "Nordland" buskerud = "Buskerud"
regions.viken = "Viken" finnmark = "Finnmark"
regions.innlandet = "Innlandet" innlandet = "Innlandet"
regions.vestfold_og_telemark = "Vestfold og Telemark" more_og_romsdal = "Møre og Romsdal"
regions.agder = "Agder" nordland = "Nordland"
regions.vestland = "Vestland" oslo = "Oslo"
regions.trondelag = "Trøndelag" rogaland = "Rogaland"
regions.troms_og_finnmark = "Troms og Finnmark" telemark = "Telemark"
troms = "Troms"
trondelag = "Trøndelag"
vestfold = "Vestfold"
vestland = "Vestland"
ostfold = "Østfold"

View file

@ -8,72 +8,84 @@ language_name_en = "English"
categories = "Kategorier" categories = "Kategorier"
tags = "Stikkord" tags = "Stikkord"
; FAQ [faq]
faq_summary_label = "Kort oppsumert:" summary_label = "Kort oppsumert:"
faq_read_full_answer = "Les hele svaret" read_full_answer = "Les hele svaret"
; Footer [footer]
footer_social = "Følg oss på <a href=\"https://www.facebook.com/StoppLidelsen/\">Facebook</a>, <a href=\"https://www.instagram.com/stopplidelsen/\">Instagram</a> og <a rel=\"me\" href=\"https://oslo.town/@stopplidelsen\">Mastodon</a>" social = "Følg oss på <a href=\"https://www.facebook.com/StoppLidelsen/\">Facebook</a>, <a href=\"https://www.instagram.com/stopplidelsen/\">Instagram</a> og <a rel=\"me\" href=\"https://oslo.town/@stopplidelsen\">Mastodon</a>"
footer_copyright = "Opphavsrett" copyright = "Opphavsrett"
footer_follow_mastodon = "Følg oss på Mastodon" follow_mastodon = "Følg oss på Mastodon"
footer_handcoded = "Nettsiden er håndkodet av Ruben Solvang ved hjelp av HTML, CSS og minimale doser PHP. Det tok" handcoded = "Nettsiden er håndkodet av Ruben Solvang ved hjelp av HTML, CSS og minimale doser PHP. Det tok"
footer_page_time = "ms å generere siden." page_time = "ms å generere siden."
; Petition form [petition]
petition.form_title = "Signer underskriftskampanjen" form_title = "Signer underskriftskampanjen"
petition.firstname_label = "Fornavn" firstname_label = "Fornavn"
petition.firstname_placeholder = "Ditt fornavn" firstname_placeholder = "Ditt fornavn"
petition.firstname_required = "Fornavn er påkrevd" firstname_required = "Fornavn er påkrevd"
petition.surname_label = "Etternavn" surname_label = "Etternavn"
petition.surname_placeholder = "Ditt etternavn" surname_placeholder = "Ditt etternavn"
petition.surname_required = "Etternavn er påkrevd" surname_required = "Etternavn er påkrevd"
petition.email_label = "E-post" email_label = "E-post"
petition.email_placeholder = "din@epost.no" email_placeholder = "din@epost.no"
petition.email_help = "Vises ikke offentlig, kun for bekreftelse" email_help = "Vises ikke offentlig, kun for bekreftelse"
petition.email_required = "Gyldig e-post er påkrevd" email_required = "Gyldig e-post er påkrevd"
petition.region_label = "Fylke" region_label = "Fylke"
petition.region_required = "Velg fylke" region_required = "Velg fylke"
petition.region_placeholder = "Velg fylke..." region_placeholder = "Velg fylke..."
petition.display_legend = "Hvordan vil du vises i listen?" display_legend = "Hvordan vil du vises i listen?"
petition.display_semi = "Vis mitt fornavn og fylke (standard)" display_semi = "Vis mitt fornavn og fylke (standard)"
petition.display_anonymous = "Anonym - vis bare mitt fylke" display_anonymous = "Anonym - vis bare mitt fylke"
petition.anonymous_name = "Anonym" anonymous_name = "Anonym"
petition.from_region = "fra" from_region = "fra"
petition.display_full = "Vis mitt fulle navn og fylke" display_full = "Vis mitt fulle navn og fylke"
petition.submit_button = "Signer underskriftskampanjen" submit_button = "Signer underskriftskampanjen"
petition.signatures_title = "Underskrifter" signatures_title = "Underskrifter"
petition.signature_count = "{count} underskrift" signature_count = "{count} underskrift"
petition.signature_count_plural = "{count} underskrifter" signature_count_plural = "{count} underskrifter"
petition.newest_first = "Nyeste først" newest_first = "Nyeste først"
petition.error_csrf = "Sikkerhetsfeil. Vennligst prøv igjen." error_csrf = "Sikkerhetsfeil. Vennligst prøv igjen."
petition.error_honeypot = "Ugyldig innsending." error_honeypot = "Ugyldig innsending."
petition.error_rate_limit = "Vennligst vent litt før du sender på nytt." error_rate_limit = "Vennligst vent litt før du sender på nytt."
petition.error_time_check = "Flere underskrifter ble forsøkt levert fra samme PC innen et kort tidsrom. Vennligst vent en stund og prøv på nytt." error_ip_rate_limit = "For mange forsøk fra din IP-adresse. Vennligst vent 5 minutter før du prøver igjen."
petition.error_referrer = "Ugyldig forespørsel." error_time_check = "Flere underskrifter ble forsøkt levert fra samme PC innen et kort tidsrom. Vennligst vent en stund og prøv på nytt."
petition.error_validation = "Vennligst rett opp feilene i skjemaet." error_referrer = "Ugyldig forespørsel."
petition.error_email_send = "Kunne ikke sende bekreftelsesmail. Vennligst prøv igjen senere." error_validation = "Vennligst rett opp feilene i skjemaet."
petition.error_already_signed = "Denne e-postadressen har allerede signert denne kampanjen." error_email_send = "Kunne ikke sende bekreftelsesmail. Vennligst prøv igjen senere."
petition.success_pending = "Takk! Sjekk din e-post for å bekrefte signaturen." error_already_signed = "Denne e-postadressen har allerede signert denne kampanjen."
petition.confirm_success = "Takk! Din signatur er nå bekreftet og lagt til i listen." success_pending = "Takk! Sjekk din e-post for å bekrefte signaturen."
petition.confirm_error = "Ugyldig eller utløpt bekreftelseslenke." confirm_success = "Takk! Din signatur er nå bekreftet og lagt til i listen."
petition.confirm_already = "Denne signaturen er allerede bekreftet." confirm_error = "Ugyldig bekreftelseslenke."
petition.email_subject = "Bekreft din signatur" confirm_expired = "Denne bekreftelseslenken har utløpt (maks 30 dager). Vennligst signer kampanjen på nytt hvis du fortsatt ønsker å støtte den."
petition.email_greeting = "Hei {name}," confirm_already = "Denne signaturen er allerede bekreftet."
petition.email_thanks = "Takk for at du signerte underskriftskampanjen «{title}»." email_subject = "Bekreft din signatur"
petition.email_confirm = "Vennligst bekreft din signatur ved å klikke på denne lenken:" email_greeting = "Hei {name},"
petition.email_ignore = "Hvis du ikke signerte denne kampanjen, kan du ignorere denne e-posten." email_thanks = "Takk for at du signerte underskriftskampanjen «{title}»."
petition.email_signature = "Med vennlig hilsen" email_confirm = "Vennligst bekreft din signatur ved å klikke på denne lenken:"
petition.email_org = "Stopp Lidelsen" email_expiry_notice = "Denne lenken er gyldig i 30 dager av personvernhensyn (GDPR)."
email_ignore = "Hvis du ikke signerte denne kampanjen, kan du ignorere denne e-posten."
email_signature = "Med vennlig hilsen"
email_org = "Stopp Lidelsen"
email_thankyou_subject = "Takk for din signatur"
email_thankyou_confirmed = "Din signatur på underskriftskampanjen «{title}» er nå bekreftet og registrert."
email_delete_info = "Hvis du ønsker å trekke tilbake din signatur, kan du gjøre det når som helst ved å klikke på denne lenken:"
delete_success = "Din signatur er nå slettet."
delete_error = "Kunne ikke slette signaturen. Lenken kan være ugyldig."
; Norwegian regions (fylker) [regions]
regions.oslo = "Oslo" agder = "Agder"
regions.rogaland = "Rogaland" akershus = "Akershus"
regions.more_og_romsdal = "Møre og Romsdal" buskerud = "Buskerud"
regions.nordland = "Nordland" finnmark = "Finnmark"
regions.viken = "Viken" innlandet = "Innlandet"
regions.innlandet = "Innlandet" more_og_romsdal = "Møre og Romsdal"
regions.vestfold_og_telemark = "Vestfold og Telemark" nordland = "Nordland"
regions.agder = "Agder" oslo = "Oslo"
regions.vestland = "Vestland" rogaland = "Rogaland"
regions.trondelag = "Trøndelag" telemark = "Telemark"
regions.troms_og_finnmark = "Troms og Finnmark" troms = "Troms"
trondelag = "Trøndelag"
vestfold = "Vestfold"
vestland = "Vestland"
ostfold = "Østfold"