dorfteich/packages/shared/i18n/en/settings.json
Claude Opus 4.8 462eca9699
All checks were successful
CD / Build and push images (push) Successful in 10m39s
CI / Lint, typecheck, test (push) Successful in 3m12s
CI / Auth e2e pack (push) Successful in 4m9s
CI / Build container images (push) Has been skipped
CD / Deploy to Test (push) Successful in 9s
CD / Smoke tests against Test (push) Successful in 1m18s
CD / Promote to Int (push) Successful in 11s
Add self-service GDPR data export (#68)
A signed-in account can export all of its own data — profile, a list of
its memberships/grants, and the Markdown of its personal pond plus the
shared ponds it owns — as one ZIP. Foreign content never appears: only
owned ponds are bundled and the per-page read filter (reused from #65)
runs for each.

- Reuse the conversion-job queue as the async carrier: a `data_export`
  job whose worker branch resolves DataExportService via a token (no DI
  cycle), builds the ZIP, and stores it with an `expiresAt`. The download
  link 404s past expiry and an hourly scheduled purge drops the bytes
  (data minimization, security.md §Privacy).
- Extract ExportService.appendPondMarkdown so the pond ZIP (#65) and the
  data export share one read-filtered pond archiver.
- Rate-limit requests per account (RateLimitService); POST
  /users/me/data-export enqueues, GET /jobs/:id(/result) poll/download.
- Settings UI "Export my data" (de+en); web share pollJob/downloadJobResult
  between the document and data export hooks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
2026-07-10 13:01:51 +02:00

50 lines
1.6 KiB
JSON

{
"title": "Settings",
"profile": {
"title": "Profile",
"displayName": "Display name",
"locale": "Language",
"locales": { "de": "Deutsch", "en": "English" },
"save": "Save",
"saved": "Saved."
},
"password": {
"title": "Change password",
"current": "Current password",
"new": "New password",
"submit": "Change password",
"changed": "Password changed. Other devices were signed out."
},
"sessions": {
"title": "Active sessions",
"current": "This session",
"created": "Signed in",
"lastSeen": "Last active",
"device": "Device",
"revoke": "Sign out",
"revokeAll": "Sign out all other sessions",
"empty": "No other active sessions."
},
"dataExport": {
"title": "Export my data",
"description": "Download a ZIP with your profile, a list of your memberships, and the Markdown export of your personal pond and the ponds you own.",
"request": "Prepare export",
"preparing": "Preparing your export…",
"download": "Download export",
"ready": "Your export is ready.",
"expiresHint": "The download link expires on {{when}}.",
"failed": "The export could not be prepared. Please try again.",
"rateLimited": "You requested an export recently. Please try again later."
},
"admin": {
"title": "Administration",
"instanceName": "Instance name",
"defaultLocale": "Default language",
"registrationMode": "Self-registration",
"registrationOpen": "Open — anyone can register",
"registrationClosed": "Closed — no new registrations",
"save": "Save",
"saved": "Saved."
}
}