Files
craftvia/messages/en/trial.json
T
msolarczekandClaude Opus 5 d9290a187c L15 Testphase & Onboarding: Selbstanmeldung mit Double-Opt-in, Plattform-Wizard, Nur-Lesen-Sperre, Export, Lebenszyklus-Job
- Datenmodell: Testphasen-Lebenszyklus am Mandanten (plan, trialEndsAt, readOnlySince, deletionDueAt,
  Versandmarker), TrialSignup (Plattform, Hashes statt Klartext), TenantExport (RLS), Onboarding-Status
- /testen: 5-Schritte-Wizard (Betrieb, Admin-Konto, Enddatum, Einrichtung, Zusammenfassung),
  Bestätigung per POST, direkte Anmeldung über login-ticket; Rate-Limit je IP/E-Mail, Honeypot,
  Enumeration-Schutz, Slug-Kollisionen
- Plattform: Wizard „Testmandant anlegen“ mit Einladung, Badges/Filter, Enddatum ändern,
  umwandeln, beenden, Löschung vormerken/abbrechen (Bestätigung + Audit)
- Schreibsperre nach Ablauf zentral in moduleGuard und requireApiContext (non-GET über withApi),
  Upload-Routen, Einstellungen/Nutzerverwaltung, Worker-Jobs; Banner Backoffice + mobil
- Datenexport (ZIP mit CSV/JSON + Dateien) als Worker-Job, auch im Nur-Lesen-Zustand
- Täglicher Job trial-lifecycle: Erinnerungen 7/3/1, Ablauf, Löschhinweis, Löschung über das Offboarding
- Erste-Schritte-Checkliste im Dashboard, Mail-Vorlagen de/en, Tests + Smoke, Betriebsdoku

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 19:01:47 +02:00

270 lines
12 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"meta": {
"title": "Try for free",
"confirmTitle": "Confirm trial",
"termsTitle": "Terms of use",
"privacyTitle": "Privacy"
},
"public": {
"heading": "Try Craftvia for free",
"intro": "Set up in minutes. No payment details, no automatic renewal.",
"benefit1": "Plan work orders, record jobs on mobile, reports with signature",
"benefit2": "Choose the end date – afterwards your data stays readable and exportable",
"benefit3": "Optional sample data to try everything right away",
"haveAccount": "Already have an account?",
"login": "Sign in",
"terms": "Terms of use",
"privacy": "Privacy"
},
"steps": {
"company": "Company",
"account": "Admin account",
"period": "Trial period",
"setup": "Setup",
"summary": "Summary"
},
"progress": "Step {current} of {total}",
"progressLabel": "Progress",
"fields": {
"companyName": "Company name",
"sector": "Trade",
"sectorChoose": "Please choose (optional)",
"sectorOther": "Trade (free text)",
"companySize": "Company size",
"companySizeNone": "Not specified",
"adminName": "Your name",
"email": "E-mail address",
"emailHint": "The address is your sign-in name. We will send you a confirmation link.",
"password": "Password",
"passwordHint": "Requirements: {policy}",
"showPassword": "Show password",
"trialEndDate": "Trial until",
"sampleData": "Start with sample data",
"sampleDataHint": "Three customers, sites, one team and four work orders in different states. You can delete them at any time.",
"modules": "Modules",
"modulesHint": "All modules are preselected. Deselect modules you do not need – you can change this later.",
"acceptTerms": "I accept the {link}.",
"acceptPrivacy": "I have read the {link}.",
"required": "Required",
"website": "Website (leave empty)"
},
"sectors": {
"shk": "Plumbing, heating, air conditioning",
"electrical": "Electrical",
"roofing": "Roofing and facades",
"carpentry": "Carpentry and interior fit-out",
"painting": "Painting and decorating",
"facility": "Building services and facility",
"construction": "Construction and installation",
"metal": "Metalwork",
"other": "Other trade"
},
"sizes": {
"1_5": "1–5 employees",
"6_20": "6–20 employees",
"21_50": "21–50 employees",
"51_200": "51–200 employees",
"200_": "more than 200 employees"
},
"period": {
"until": "Trial until {date} ({days, plural, one {# day} other {# days}})",
"range": "Possible: {min} to {max}",
"afterEnd": "After the end date your data stays readable and exportable. Unless converted to the full version, we delete it 30 days later."
},
"summary": {
"intro": "Please check your details.",
"sampleYes": "with sample data",
"sampleNo": "without sample data",
"modulesCount": "{count} of {total} modules",
"edit": "Edit",
"noSector": "no trade specified"
},
"actions": {
"back": "Back",
"next": "Next",
"submit": "Start trial",
"submitting": "Sending …",
"checking": "Checking …"
},
"sent": {
"title": "Almost done – please confirm your e-mail",
"body": "We have sent you an e-mail. Click the link in it to start your trial.",
"hint": "The link is valid for 24 hours. No e-mail? Check your spam folder or start the signup again.",
"again": "Start signup again"
},
"errors": {
"company_required": "Please enter the company name (at least 2 characters).",
"too_long": "The input is too long.",
"invalid_choice": "Please choose an entry from the list.",
"name_required": "Please enter your name.",
"email_invalid": "Please enter a valid e-mail address.",
"password_policy": "The password does not meet the requirements.",
"date_invalid": "Please choose a valid date.",
"date_too_early": "The end date must be tomorrow at the earliest.",
"date_too_late": "The end date is too far in the future.",
"modules_required": "Please select at least one module.",
"terms_required": "Please accept the terms of use.",
"privacy_required": "Please confirm the privacy notice.",
"invalid_request": "The request was incomplete. Please reload the page.",
"rate_limited": "Too many attempts. Please try again in a few minutes.",
"failed": "That did not work. Please try again."
},
"confirm": {
"title": "Start trial",
"intro": "Confirm your signup. We then set up your account and sign you in right away.",
"company": "Company",
"until": "Trial until",
"sampleData": "Sample data",
"yes": "yes",
"no": "no",
"button": "Set up now",
"pending": "Setting up …",
"invalid": "The link is invalid or has already been used.",
"expired": "The link has expired. Please start the signup again.",
"rate_limited": "Too many attempts. Please try again in a few minutes.",
"toSignup": "Go to “Try for free”",
"toLogin": "Go to sign-in"
},
"legal": {
"back": "Back to signup",
"placeholder": "Placeholder – the binding text will be provided by the operator before go-live.",
"termsBody1": "The trial is free of charge and ends automatically on the chosen date. No contract for paid use is concluded.",
"termsBody2": "After the end the data stays readable and exportable for 30 days. Unless converted to the full version, it is deleted afterwards.",
"privacyBody1": "We process your details (company name, name, e-mail address) to set up and support the trial. Passwords are stored as a secure hash only.",
"privacyBody2": "Unconfirmed signups are deleted after a few days. Trial data is deleted after expiry as described in the terms of use."
},
"banner": {
"endsIn": "{days, plural, =0 {Trial ends today.} =1 {Trial ends tomorrow.} other {Trial ends in # days.}}",
"endsOn": "Last day: {date}.",
"expired": "Trial expired – read-only access.",
"deletion": "Data will be deleted on {date}.",
"contact": "Full version or extension: {email}",
"contactGeneric": "Full version or extension? Contact your Craftvia representative.",
"export": "Export data"
},
"onboarding": {
"title": "Getting started",
"welcome": "Welcome! Your trial is ready.",
"progress": "{done} of {total} done",
"hide": "Hide",
"markDone": "Mark as done",
"markOpen": "Reopen",
"open": "Open",
"auto": "detected",
"doneLabel": "Done",
"openLabel": "Open",
"items": {
"company": { "title": "Check company details", "text": "Address, phone and e-mail appear on reports." },
"team": { "title": "Create a team", "text": "Teams group technicians for planning and assignment." },
"technician": { "title": "Invite a technician", "text": "An invitation link is enough – the person sets their own password." },
"first_order": { "title": "Create or import the first work order", "text": "Enter it manually or upload a work order PDF." },
"mobile": { "title": "Open the mobile app", "text": "Open /m on your smartphone and add it to the home screen." }
}
},
"export": {
"crumb": "Organisation",
"title": "Data export",
"sub": "All data of your company as a ZIP file",
"contents": "Included: customers, contacts, sites, teams, work orders, times, material, reports, milestones and billing as CSV and JSON plus all stored files (documents, report PDFs, photos).",
"readOnlyHint": "The export stays available after the trial has expired.",
"request": "Create export",
"requested": "Export requested. The file is ready in a few minutes – reload the page then.",
"listTitle": "Recent exports",
"empty": "No export created yet.",
"created": "Requested",
"state": "Status",
"file": "File",
"status": { "queued": "Waiting", "running": "In progress", "done": "Ready", "failed": "Failed", "expired": "Expired" },
"download": "Download",
"expires": "until {date}",
"errors": {
"export_running": "An export is already running. Please wait until it has finished.",
"failed": "The export could not be requested."
}
},
"platform": {
"newTrial": "Create trial tenant",
"filter": "Filter",
"filterAll": "All",
"filterTrial": "Trial",
"filterFull": "Full",
"colPlan": "Version",
"badgeFull": "Full version",
"badgeUntil": "Trial until {date}",
"badgeExpired": "expired – read-only",
"badgeDeletion": "Deletion on {date}",
"badgeDeleted": "deleted",
"wizard": {
"crumb": "Platform operations",
"title": "Create trial tenant",
"sub": "Create a tenant with an end date; the admin receives an invitation to set a password.",
"sectionCompany": "1. Company",
"sectionAdmin": "2. Administrator",
"sectionPeriod": "3. Trial period",
"sectionSetup": "4. Setup",
"companyName": "Company name",
"sector": "Trade (optional)",
"adminName": "Name",
"adminEmail": "E-mail address",
"adminHint": "New addresses receive the existing invitation link (valid for 7 days). Existing accounts are only linked.",
"endDate": "Trial until",
"endDateHint": "Any date up to one year ahead.",
"sampleData": "With sample data",
"submit": "Create trial tenant",
"submitting": "Creating …",
"cancel": "Cancel"
},
"card": {
"title": "Trial",
"plan": "Version",
"until": "Last day",
"state": "State",
"stateActive": "running",
"stateExpired": "expired – read-only",
"stateConverted": "converted to full version",
"stateDeleted": "deleted",
"deletion": "Deletion",
"deletionNone": "not scheduled",
"source": "Origin",
"sourceSelf": "Self-service signup",
"sourcePlatform": "Platform wizard",
"extend": "Change / extend end date",
"convert": "Convert to full version",
"end": "End trial now",
"schedule": "Schedule deletion",
"cancel": "Cancel deletion",
"created": "Trial tenant created.",
"invited": "The invitation was sent to the administrator.",
"done": "Change saved."
},
"ops": {
"extendTitle": "Change end date",
"extendText": "New last trial day. If it lies in the future, the tenant is writable again immediately; reminders are rescheduled.",
"convertTitle": "Convert to full version",
"convertText": "The tenant stays writable permanently and is never deleted automatically.",
"endTitle": "End trial now",
"endText": "The tenant is read-only from now on. A scheduled deletion moves to 30 days from today.",
"scheduleTitle": "Schedule deletion",
"scheduleText": "Deletion 30 days after the end, at the earliest in 7 days (notice mail to the admins).",
"cancelTitle": "Cancel deletion",
"cancelText": "The tenant will not be deleted automatically. It stays read-only after expiry.",
"confirm": "I confirm this change.",
"submit": "Execute",
"submitting": "Executing …",
"close": "Close"
},
"errors": {
"confirm_required": "Please tick the confirmation.",
"invalid_input": "Please check your input.",
"date_invalid": "Please choose a valid date.",
"date_in_past": "The end date must not lie in the past.",
"date_too_late": "The end date is more than one year ahead.",
"not_a_trial": "This tenant is not a trial.",
"tenant_deleted": "The tenant has already been deleted.",
"platform_admin_required": "Only platform full administrators may do this.",
"tenant not found": "Tenant not found.",
"failed": "The action failed."
}
}
}