Files
dogfather-universe/assets/js/i18n-wd-ablauf.js
T
DogFatherGitandClaude Opus 5 4b3ec450d5 Webdesign-Bereich: Fundament, oeffentliche Seiten, Zugangsschutz, PayPal
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]>
2026-08-22 18:06:52 +02:00

108 lines
14 KiB
JavaScript

/* =====================================================================
i18n-wd-ablauf.js — Ablauf (Masterplan S.5, Punkt 05)
Die sechs Schritte selbst stehen in wd-core.js NICHT nochmal — sie sind
hier ausführlicher als auf der Startseite und deshalb eigene Texte.
===================================================================== */
window.I18N_WD = {
seiten_titel: {
de: "Ablauf — Dogfather Webdesign",
"de-CH": "So laufts — Dogfather Webdesign",
en: "Process — Dogfather Web Design",
fr: "Déroulement — Dogfather Web Design",
pt: "Processo — Dogfather Web Design",
},
ab_eyebrow: { de: "Ablauf", "de-CH": "So laufts", en: "Process", fr: "Déroulement", pt: "Processo" },
ab_h1: {
de: "Sieben Schritte, keine Überraschungen",
"de-CH": "Sibe Schritt, kei Überraschige",
en: "Seven steps, no surprises",
fr: "Sept étapes, aucune surprise",
pt: "Sete passos, sem surpresas",
},
ab_lead: {
de: "Jeder Schritt endet mit etwas, das du sehen und prüfen kannst. Du weißt jederzeit, wo dein Projekt steht und was als Nächstes von wem gebraucht wird.",
"de-CH": "Jede Schritt ändet mit öppisem, wo du gseh und prüefe chasch. Du weisch jederziit, wo dis Projekt stoht und was als nöchsts vo wäm bruucht wird.",
en: "Every step ends with something you can see and check. You always know where your project stands and what is needed next, from whom.",
fr: "Chaque étape se termine par quelque chose que tu peux voir et vérifier. Tu sais à tout moment où en est ton projet et ce qui est attendu, de qui.",
pt: "Cada passo termina com algo que podes ver e verificar. Sabes sempre em que ponto está o teu projeto e o que é preciso a seguir, e de quem.",
},
du_machst: { de: "Du machst", "de-CH": "Du machsch", en: "You do", fr: "Tu fais", pt: "Tu fazes" },
ich_mache: { de: "Ich mache", "de-CH": "Ich mache", en: "I do", fr: "Je fais", pt: "Eu faço" },
ergebnis: { de: "Am Ende steht", "de-CH": "Am Schluss stoht", en: "The outcome", fr: "Résultat de l'étape", pt: "No fim fica" },
/* --- 1 Anfrage --- */
s1_h2: { de: "Anfrage", "de-CH": "Aafrog", en: "Enquiry", fr: "Demande", pt: "Pedido" },
s1_du: { de: "Formular ausfüllen — Ziel, Umfang, Budgetrahmen, Wunschtermin.", "de-CH": "S Formular usfülle — Ziel, Umfang, Budgetrahme, Wunschtermin.", en: "Fill in the form — goal, scope, budget range, desired date.", fr: "Remplir le formulaire — objectif, étendue, budget, date souhaitée.", pt: "Preencher o formulário — objetivo, âmbito, orçamento, data pretendida." },
s1_ich: { de: "Anfrage prüfen und innerhalb weniger Tage melden.", "de-CH": "D Aafrog prüefe und innert weniger Täg mälde.", en: "Review the enquiry and get back to you within a few days.", fr: "Examiner la demande et revenir vers toi sous quelques jours.", pt: "Analisar o pedido e responder dentro de poucos dias." },
s1_erg: { de: "Eine Bestätigung mit Zusammenfassung dessen, was du angegeben hast.", "de-CH": "E Bestätigung mit ere Zämefassig vo dem, was du aagäh hesch.", en: "A confirmation with a summary of what you submitted.", fr: "Une confirmation avec le récapitulatif de ce que tu as indiqué.", pt: "Uma confirmação com o resumo do que indicaste." },
/* --- 2 Briefing --- */
s2_h2: { de: "Briefing", "de-CH": "Briefing", en: "Briefing", fr: "Briefing", pt: "Briefing" },
s2_du: { de: "Fragen beantworten und sagen, was du schon an Texten, Bildern und Logo hast.", "de-CH": "Frage beantworte und säge, was du scho a Täxt, Bilder und Logo hesch.", en: "Answer questions and say what texts, images and logo you already have.", fr: "Répondre aux questions et indiquer les textes, images et logo déjà disponibles.", pt: "Responder a perguntas e dizer que textos, imagens e logótipo já tens." },
s2_ich: { de: "Nachfragen, wo etwas unklar ist — lieber jetzt als mitten im Bau.", "de-CH": "Nachefroge, wo öppis unklar isch — lieber jetzt als mitte im Bau.", en: "Ask where something is unclear — better now than mid-build.", fr: "Poser des questions là où c'est flou — mieux vaut maintenant qu'en pleine construction.", pt: "Perguntar onde algo não está claro — melhor agora do que a meio da construção." },
s2_erg: { de: "Ein gemeinsames Bild davon, was die Seite können muss.", "de-CH": "Es gmeinsams Bild devo, was d Site chöne muess.", en: "A shared picture of what the site has to do.", fr: "Une vision commune de ce que le site doit faire.", pt: "Uma imagem partilhada do que o site tem de fazer." },
/* --- 3 Angebot --- */
s3_h2: { de: "Angebot &amp; Anzahlung", "de-CH": "Aagebot &amp; Aazahlig", en: "Quote &amp; deposit", fr: "Devis &amp; acompte", pt: "Orçamento &amp; sinal" },
s3_du: { de: "Angebot lesen, Fragen stellen, annehmen oder ablehnen — und bei Annahme die 30 % überweisen.", "de-CH": "S Aagebot läse, Frage stelle, aanäh oder ablähne — und bi dr Aanahm d 30 % überwiise.", en: "Read the quote, ask questions, accept or decline — and on acceptance transfer the 30 %.", fr: "Lire le devis, poser des questions, accepter ou refuser — et en cas d'acceptation verser les 30 %.", pt: "Ler o orçamento, colocar perguntas, aceitar ou recusar — e, ao aceitar, transferir os 30 %." },
s3_ich: { de: "Preis, Umfang, Zeitrahmen und alles, was extra kostet, schriftlich festhalten.", "de-CH": "Priis, Umfang, Ziitrahme und alles, was extra choschtet, schriftlich festhalte.", en: "Put price, scope, timeframe and everything that costs extra in writing.", fr: "Consigner par écrit le prix, l'étendue, le délai et tout ce qui coûte en supplément.", pt: "Registar por escrito preço, âmbito, prazo e tudo o que custa à parte." },
s3_erg: { de: "Ein reservierter Starttermin. Vorher wird kein Zeitfenster blockiert.", "de-CH": "En reservierte Starttermin. Vorher wird kes Ziitfenschter blockiert.", en: "A reserved start date. No slot is blocked before that.", fr: "Une date de démarrage réservée. Aucun créneau n'est bloqué avant.", pt: "Uma data de início reservada. Antes disso não há data bloqueada." },
/* --- 4 Design --- */
s4_h2: { de: "Design", "de-CH": "Design", en: "Design", fr: "Design", pt: "Design" },
s4_du: { de: "Entwurf ansehen und Rückmeldung geben — am besten gesammelt statt in vielen einzelnen Nachrichten.", "de-CH": "Dr Entwurf aaluege und Rückmäldig gäh — am beschte gsammlet statt i viilne einzelne Nachrichte.", en: "Look at the draft and give feedback — ideally bundled rather than in many separate messages.", fr: "Regarder la maquette et donner ton retour — de préférence groupé plutôt qu'en messages épars.", pt: "Ver o esboço e dar feedback — de preferência agrupado em vez de muitas mensagens soltas." },
s4_ich: { de: "Aufbau, Farben und Schriften entwerfen — und dir Handy- und Computeransicht zeigen, nicht nur eine davon.", "de-CH": "Ufbau, Farbe und Schrifte entwerfe — und dir Handy- und Computeraasicht zeige, nöd nur eini devo.", en: "Design layout, colours and typography — and show you both the mobile and desktop view, not just one.", fr: "Concevoir structure, couleurs et typographie — et te montrer la vue mobile ET ordinateur, pas seulement l'une.", pt: "Desenhar estrutura, cores e tipografia — e mostrar-te a vista de telemóvel e de computador, não só uma." },
s4_erg: { de: "Ein freigegebener Entwurf. Erst danach wird gebaut.", "de-CH": "En freigäh Entwurf. Erscht denn wird baut.", en: "An approved design. Only then does building start.", fr: "Une maquette validée. La construction ne commence qu'après.", pt: "Um design aprovado. Só depois se constrói." },
/* --- 5 Entwicklung --- */
s5_h2: { de: "Entwicklung", "de-CH": "Entwicklig", en: "Development", fr: "Développement", pt: "Desenvolvimento" },
s5_du: { de: "Fehlende Inhalte nachliefern, falls noch welche offen sind.", "de-CH": "Fählendi Inhalt nachliefere, falls no welli offe sind.", en: "Supply any content that is still outstanding.", fr: "Fournir les contenus encore manquants.", pt: "Fornecer os conteúdos que ainda faltem." },
s5_ich: { de: "Die Seite bauen — mit den echten Inhalten, nicht mit Blindtext.", "de-CH": "D Site baue — mit de ächte Inhalt, nöd mit Blindtäxt.", en: "Build the site — with the real content, not with dummy text.", fr: "Construire le site — avec les vrais contenus, pas du faux texte.", pt: "Construir o site — com os conteúdos reais, não com texto fictício." },
s5_erg: { de: "Eine benutzbare Seite auf einer Vorschauadresse, die nur du und ich kennen.", "de-CH": "E bruuchbari Site uf ere Vorschauadress, wo nur du und ich kenned.", en: "A usable site on a preview address only you and I know.", fr: "Un site utilisable sur une adresse de prévisualisation connue de toi et moi seuls.", pt: "Um site utilizável num endereço de pré-visualização que só tu e eu conhecemos." },
/* --- 6 Tests --- */
s6_h2: { de: "Tests", "de-CH": "Teschts", en: "Testing", fr: "Tests", pt: "Testes" },
s6_du: { de: "Selbst durchklicken — besonders auf deinem eigenen Handy.", "de-CH": "Sälber dureklicke — bsunders uf dim eigene Handy.", en: "Click through it yourself — especially on your own phone.", fr: "Tout parcourir toi-même — surtout sur ton propre téléphone.", pt: "Percorrer tudo tu mesmo — sobretudo no teu próprio telemóvel." },
s6_ich: { de: "Jedes Formular, jeden Link und jeden Fehlerfall durchspielen, auf Handy, Tablet und Computer.", "de-CH": "Jedes Formular, jede Link und jede Fählerfall durespiele, uf Handy, Tablet und Computer.", en: "Play through every form, every link and every error case, on mobile, tablet and desktop.", fr: "Tester chaque formulaire, chaque lien et chaque cas d'erreur, sur mobile, tablette et ordinateur.", pt: "Testar cada formulário, cada ligação e cada caso de erro, em telemóvel, tablet e computador." },
s6_erg: { de: "Eine Liste dessen, was geprüft wurde — und was bewusst nicht enthalten ist.", "de-CH": "E Lischte vo dem, was prüeft worde isch — und was bewusst nöd dinne isch.", en: "A list of what was checked — and what is deliberately not included.", fr: "Une liste de ce qui a été vérifié — et de ce qui n'est délibérément pas inclus.", pt: "Uma lista do que foi verificado — e do que fica deliberadamente de fora." },
/* --- 7 Übergabe --- */
s7_h2: { de: "Freigabe &amp; Übergabe", "de-CH": "Freigab &amp; Übergab", en: "Approval &amp; handover", fr: "Validation &amp; remise", pt: "Aprovação &amp; entrega" },
s7_du: { de: "Ausdrücklich freigeben und den Restbetrag begleichen.", "de-CH": "Uusdrücklich freigäh und dr Rescht zahle.", en: "Give explicit approval and settle the remaining amount.", fr: "Donner ta validation explicite et régler le solde.", pt: "Dar aprovação explícita e liquidar o valor restante." },
s7_ich: { de: "Live schalten, dich einweisen und die Zugänge übergeben.", "de-CH": "Live schalte, dich iiwiise und d Zuegäng übergäh.", en: "Take it live, walk you through it and hand over the access details.", fr: "Mettre en ligne, te former et te remettre les accès.", pt: "Colocar no ar, dar-te formação e entregar os acessos." },
s7_erg: { de: "Deine Seite, deine Zugänge, deine Nutzungsrechte. Betreuung ist optional, kein Zwang.", "de-CH": "Dini Site, dini Zuegäng, dini Nutzigsrächt. D Betreuig isch optional, kein Zwang.", en: "Your site, your access, your usage rights. Support is optional, not compulsory.", fr: "Ton site, tes accès, tes droits d'utilisation. Le suivi est optionnel, pas obligatoire.", pt: "O teu site, os teus acessos, os teus direitos de utilização. O acompanhamento é opcional, não obrigatório." },
ab_wichtig_titel: {
de: "Keine Veröffentlichung ohne deine Freigabe",
"de-CH": "Kei Veröffentlichig ohni dini Freigab",
en: "No publication without your approval",
fr: "Aucune mise en ligne sans ta validation",
pt: "Sem publicação sem a tua aprovação",
},
ab_wichtig_text: {
de: "Die Seite geht ausschließlich dann online, wenn du das ausdrücklich sagst. Das gilt auch für die Aufnahme ins Portfolio — beides ist getrennt und beides brauchst du nicht zu erlauben.",
"de-CH": "D Site goht uusschliesslich denn online, wenn du das uusdrücklich seisch. Das gilt au für d Ufnahm is Portfolio — beidi sind trennt und beidi muesch nöd erlaube.",
en: "The site goes online only when you explicitly say so. The same applies to being included in the portfolio — the two are separate and you need not permit either.",
fr: "Le site n'est mis en ligne que si tu le demandes explicitement. Il en va de même pour l'ajout au portfolio — les deux sont indépendants et tu n'es obligé d'accepter ni l'un ni l'autre.",
pt: "O site só vai para o ar quando o disseres explicitamente. O mesmo se aplica à inclusão no portfólio — são coisas separadas e não tens de autorizar nenhuma.",
},
ab_dauer_h2: {
de: "Wie lange dauert das insgesamt?",
"de-CH": "Wie lang duuret das im Ganze?",
en: "How long does all of this take?",
fr: "Combien de temps cela prend-il en tout ?",
pt: "Quanto tempo demora tudo isto?",
},
ab_dauer_p: {
de: "Die Zeitrahmen auf der Preisseite gelten ab dem Eingang der Anzahlung — nicht ab der ersten Nachricht. Der häufigste Grund für Verzögerungen ist nicht die Technik, sondern dass Texte oder Bilder noch fehlen. Deshalb wird im Formular gleich danach gefragt.",
"de-CH": "D Ziitrahme uf dr Priissite gälted ab em Iigang vo dr Aazahlig — nöd ab dr erschte Nachricht. Dr hüüfigscht Grund für Verzögerige isch nöd d Technik, sondern dass Täxt oder Bilder no fähled. Drum wird im Formular grad dernoch gfrogt.",
en: "The timeframes on the pricing page start when the deposit arrives — not from the first message. The most common reason for delays is not the technology but missing texts or images. That is why the form asks about it right away.",
fr: "Les délais indiqués sur la page tarifs courent à partir de la réception de l'acompte — pas du premier message. La principale cause de retard n'est pas la technique mais l'absence de textes ou d'images. C'est pourquoi le formulaire pose la question d'emblée.",
pt: "Os prazos na página de preços contam a partir da entrada do sinal — não da primeira mensagem. A causa mais comum de atrasos não é a tecnologia, mas a falta de textos ou imagens. Por isso o formulário pergunta isso logo.",
},
ab_zu_preise: { de: "Zu den Zeitrahmen", "de-CH": "Zu de Ziitrahme", en: "See the timeframes", fr: "Voir les délais", pt: "Ver os prazos" },
};