Umsetzung des "Website Masterplan" (16 Seiten) unter /webdesign. Zugangsschutz mit EIGENER Schranke (server/webdesign-gate.js) statt gate.js: gate.js laesst seit dem oeffentlichen Start am 21.08.2026 jeden durch, weil die Pruefung auf SITE_PUBLIC_LAUNCH_AT als allererste Zeile steht. Haette man /webdesign dahintergehaengt, waere der ausdruecklich nicht-oeffentliche Bereich inklusive Preisen und spaeteren Kundendaten ab der ersten Sekunde fuer jeden lesbar gewesen. Eigenes Sitzungs-Cookie, bereich="webdesign" im Token, damit ein gueltiges Universe-Cookie hier NICHT gilt. 37/37 Tests. Sieben oeffentliche Seiten in fuenf Sprachen (de, de-CH mit echtem Dialekt, en, fr, pt). Preise, Zeitrahmen, Paketnamen und die 30-%-Regel stehen an genau EINER Stelle in wd-core.js -- der Masterplan verlangt "ueberall widerspruchsfrei", und vier Kopien laufen bei der ersten Preisaenderung auseinander. Als App installierbar auf Handy und PC. Der Service Worker speichert bewusst KEINE HTML-Seite zwischen: nach dem Abmelden wuerden sonst geschuetzte Seiten weiter ausgeliefert, ohne dass der Server je gefragt wird. 18/18 Tests. Handy-Abnahme ueber alle Seiten in fuenf Breiten (320-1440) und fuenf Sprachen: 40/40. Der Test fand 35 echte Fehler (Touch-Ziele unter 44px), behoben im Designsystem statt einzeln pro Seite. PayPal (Wunsch 22.08.2026 "sofort auf meinem paypal"): Orders API mit intent=CAPTURE, also sofortiger Einzug statt blosser Reservierung. Gebuehr und Nettobetrag getrennt gespeichert. Betraege durchgehend als Ganzzahl in Cent. Gefaelschte Webhooks werden abgewiesen. Fail closed solange Zugangsdaten fehlen. 28/28 Tests gegen einen nachgebauten PayPal-Server. Datenbank: 15 Tabellen mit Praefix wd_, fachlich vollstaendig vom Universe getrennt. Co-Authored-By: Claude Opus 5 <[email protected]>
109 lines
4.9 KiB
JavaScript
109 lines
4.9 KiB
JavaScript
/* =====================================================================
|
|
i18n-wd-zugang.js — Texte der Zugangswand (/webdesign/zugang.html)
|
|
Fünf Sprachen wie im gesamten Dogfather Universe.
|
|
Schweizerdeutsch ist echter Dialekt, keine ß→ss-Umschrift.
|
|
===================================================================== */
|
|
window.I18N_WD = {
|
|
seiten_titel: {
|
|
de: "Zugang — Dogfather Webdesign",
|
|
"de-CH": "Zuegang — Dogfather Webdesign",
|
|
en: "Access — Dogfather Web Design",
|
|
fr: "Accès — Dogfather Web Design",
|
|
pt: "Acesso — Dogfather Web Design",
|
|
},
|
|
|
|
zg_eyebrow: {
|
|
de: "Nicht öffentlich bis zur Freigabe",
|
|
"de-CH": "Nöd öffentlich bis zur Freigab",
|
|
en: "Not public until release",
|
|
fr: "Non public jusqu'à la validation",
|
|
pt: "Não público até à aprovação",
|
|
},
|
|
zg_h1: {
|
|
de: "Willkommen zurück",
|
|
"de-CH": "Willkomme zrugg",
|
|
en: "Welcome back",
|
|
fr: "Bon retour",
|
|
pt: "Bem-vindo de volta",
|
|
},
|
|
zg_text: {
|
|
de: "Diese Vorabversion ist nur für Dogfather und VanVan gedacht. Wähle deine Karte und gib deinen persönlichen Zugangscode ein.",
|
|
"de-CH": "Die Vorabversion isch nur für dä Dogfather und d VanVan dänkt. Wähl dini Charte und tipp din persönlich Zuegangscode ii.",
|
|
en: "This preview is intended for Dogfather and VanVan only. Choose your card and enter your personal access code.",
|
|
fr: "Cette version préliminaire est réservée à Dogfather et VanVan. Choisis ta carte et saisis ton code d'accès personnel.",
|
|
pt: "Esta versão prévia destina-se apenas ao Dogfather e à VanVan. Escolhe o teu cartão e introduz o teu código de acesso pessoal.",
|
|
},
|
|
|
|
zg_dogfather: { de: "Dogfather", "de-CH": "Dogfather", en: "Dogfather", fr: "Dogfather", pt: "Dogfather" },
|
|
zg_vanvan: { de: "VanVan", "de-CH": "VanVan", en: "VanVan", fr: "VanVan", pt: "VanVan" },
|
|
|
|
/* Beide Karten tragen bewusst dieselbe Rollenbeschreibung — Masterplan
|
|
S.4: "Exakt dieselbe vollständige Ansicht", "Exakt dieselben
|
|
Verwaltungs-, Änderungs- und Freigaberechte". */
|
|
zg_rolle: {
|
|
de: "Volladministrator",
|
|
"de-CH": "Volladministrator",
|
|
en: "Full administrator",
|
|
fr: "Administrateur complet",
|
|
pt: "Administrador total",
|
|
},
|
|
zg_code_label: {
|
|
de: "Zugangscode",
|
|
"de-CH": "Zuegangscode",
|
|
en: "Access code",
|
|
fr: "Code d'accès",
|
|
pt: "Código de acesso",
|
|
},
|
|
zg_oeffnen: { de: "Öffnen", "de-CH": "Ufmache", en: "Open", fr: "Ouvrir", pt: "Abrir" },
|
|
zg_pruefe: {
|
|
de: "Wird geprüft…",
|
|
"de-CH": "Wird prüeft…",
|
|
en: "Checking…",
|
|
fr: "Vérification…",
|
|
pt: "A verificar…",
|
|
},
|
|
zg_willkommen: {
|
|
de: "Willkommen!",
|
|
"de-CH": "Willkomme!",
|
|
en: "Welcome!",
|
|
fr: "Bienvenue !",
|
|
pt: "Bem-vindo!",
|
|
},
|
|
zg_leer: {
|
|
de: "Bitte zuerst den Zugangscode eingeben.",
|
|
"de-CH": "Bitte zerscht dä Zuegangscode iigäh.",
|
|
en: "Please enter your access code first.",
|
|
fr: "Merci de saisir d'abord ton code d'accès.",
|
|
pt: "Introduz primeiro o teu código de acesso.",
|
|
},
|
|
zg_falsch: {
|
|
de: "Falscher Zugangscode.",
|
|
"de-CH": "Falsche Zuegangscode.",
|
|
en: "Wrong access code.",
|
|
fr: "Code d'accès incorrect.",
|
|
pt: "Código de acesso incorreto.",
|
|
},
|
|
|
|
zg_sicher_titel: {
|
|
de: "Warum ein Code?",
|
|
"de-CH": "Wieso en Code?",
|
|
en: "Why a code?",
|
|
fr: "Pourquoi un code ?",
|
|
pt: "Porquê um código?",
|
|
},
|
|
zg_sicher_text: {
|
|
de: "Solange die Seite nicht freigegeben ist, soll niemand Preise, Beispiele oder Kundendaten sehen können. Der Code wird ausschließlich auf dem Server geprüft und nie im Browser gespeichert. Nach fünf Fehlversuchen greift eine kurze Wartezeit.",
|
|
"de-CH": "So lang d Site nöd freigäh isch, söll niemert Priis, Bispiel oder Kundedate gseh chönne. Dä Code wird nur uf em Server prüeft und nie im Browser gspeicheret. Nach füf Fählversüech chunnt e churzi Wartziit.",
|
|
en: "Until the site is released, nobody should be able to see prices, examples or client data. The code is checked exclusively on the server and never stored in the browser. After five failed attempts a short waiting period applies.",
|
|
fr: "Tant que le site n'est pas validé, personne ne doit voir les tarifs, les exemples ou les données clients. Le code est vérifié uniquement sur le serveur et n'est jamais stocké dans le navigateur. Après cinq tentatives échouées, un court délai d'attente s'applique.",
|
|
pt: "Enquanto o site não for aprovado, ninguém deve conseguir ver preços, exemplos ou dados de clientes. O código é verificado exclusivamente no servidor e nunca é guardado no navegador. Após cinco tentativas falhadas aplica-se um curto período de espera.",
|
|
},
|
|
zg_zurueck: {
|
|
de: "Zum Dogfather Universe",
|
|
"de-CH": "Zum Dogfather Universe",
|
|
en: "To the Dogfather Universe",
|
|
fr: "Vers le Dogfather Universe",
|
|
pt: "Para o Dogfather Universe",
|
|
},
|
|
};
|