Skip to content
Success

Changes

Summary

  1. Full DE/EN with runtime switch, benefit-led section, free-of-charge messaging (commit: 1b159ec) (details)
Commit 1b159ec466b3092fcd9e053fc84a89b6f54023fb by info
Full DE/EN with runtime switch, benefit-led section, free-of-charge messaging

English translation with a language switch in the header. Uses a typed message
catalogue plus a small composable rather than @nuxtjs/i18n: the site is 12
components and 4 pages, and i18n would add vue-i18n plus a build transform and
want to own the URL space (/en/...), breaking every in-page anchor and every link
already shared. Both languages live on one URL, so a shared link always works.
en.ts is typed against de.ts, so a missing key fails the type check.

Locale precedence is ?lang= then the b24_lang cookie then Accept-Language, with
German winning on absence, ties, wildcards and unparsable input. It is resolved
once on the server and carried through the payload, so hydration cannot disagree.
Confirmation, welcome and duplicate mails follow the language stored on the
registration row rather than the language of whoever triggered them; the internal
ops mail stays German.

Impressum and Datenschutz are translated for comprehension only — the English
pages carry a notice that the German version is solely authoritative and link
back to it. "Freiberufler" is left untranslated with a gloss because the English
options all name different legal statuses, and German statute short names are
kept. The privacy notice now discloses the b24_lang cookie.

"Verfall & Kosten" becomes "Ihr Vorteil" / "Your benefit", led by the gain rather
than the loss. The worked example stays labelled as our own assumption — no
invented statistics. #vorteil is the new anchor and #verfall still resolves.

Free registration and use is stated in the hero, the proof band, the registration
CTA and the dialog header, claiming only what is actually free.

Fixes the dialog keeping the last confirmation screen: reopening after a completed
submission resets the form, while dismissing mid-typing keeps every keystroke,
because the reset runs on open and only when the previous run finished. Replaces
"Weitere Einrichtung registrieren" with a plain close action.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
(commit: 1b159ec)
The file was modifiedapp/components/AndroidBadge.vue (diff)
The file was modifiedapp/components/SectionHero.vue (diff)
The file was addedserver/utils/i18n.ts
The file was modifiedserver/utils/mail.ts (diff)
The file was addedapp/locales/en.ts
The file was modifiedREADME.md (diff)
The file was modifiedapp/components/RegistrationDialog.vue (diff)
The file was modifiedapp/components/RegistrationForm.vue (diff)
The file was modifiedapp/components/SectionFeatures.vue (diff)
The file was removedapp/components/SectionWaste.vue
The file was modifiedserver/utils/registrationValidation.ts (diff)
The file was addedapp/locales/index.ts
The file was modifiedserver/api/registration/confirm.post.ts (diff)
The file was modifiedserver/utils/registrationDb.ts (diff)
The file was addedapp/locales/detect.ts
The file was modifiedapp/components/SectionCourier.vue (diff)
The file was modifiedapp/components/SiteFooter.vue (diff)
The file was modifiedapp/components/SectionHowItWorks.vue (diff)
The file was modifiedapp/pages/index.vue (diff)
The file was addedapp/components/LegalTranslationNotice.vue
The file was modifiedapp/components/StockMatrixPreview.vue (diff)
The file was modifiedapp/composables/useRegistrationDialog.ts (diff)
The file was modifiedapp/components/SectionApp.vue (diff)
The file was modifiednuxt.config.ts (diff)
The file was addedapp/locales/de.ts
The file was modifiedapp/components/SiteHeader.vue (diff)
The file was modifiedapp/pages/bestaetigung.vue (diff)
The file was modifiedapp/components/SectionProof.vue (diff)
The file was modifiedapp/pages/datenschutz.vue (diff)
The file was modifiedapp/pages/impressum.vue (diff)
The file was modifiedscripts/test-registration.mjs (diff)
The file was modifiedserver/api/registration/submit.post.ts (diff)
The file was modifiedapp/components/SectionRegistration.vue (diff)
The file was modifiedapp/app.vue (diff)
The file was addedapp/components/SectionBenefit.vue
The file was addedapp/composables/useLocale.ts