Files
dogfather-universe/assets/js/i18n-wd-portal.js
T
DogFatherGitandClaude Opus 5 c597753abf Portal: Zahlenkreise, Typografie und eine echte Farblogik fuer Phasen
Drei Rueckmeldungen vom 22.08.2026, alle drei berechtigt.

1) "die kisten sollen auch eine spezielle farbe bekommen wenn sie fertig
   sind" -- das war inhaltlich der wichtigste Punkt. Vorher sahen
   erledigte und gerade laufende Phase fast gleich blau aus. Damit ging
   die einzige Aussage verloren, die die Leiste ueberhaupt traegt:
   naemlich WO man steht. Jetzt drei klar getrennte Zustaende:
     erledigt     gruen, ruhig
     laeuft grad  leuchtendes Blau mit langsamem Puls
     kommt noch   gedaempft
   Die Vorschau erklaert die Logik gleich mit: ihre Leiste wandert von
   blau nach gruen, statt nur an- und auszugehen.
   Dazu eine Legende in Worten. Farbe allein ist nie Information -- wer
   sie nicht unterscheiden kann, liest hier trotzdem, was sie bedeutet.

2) "die zahlen sollen besser im kreis sein" -- vorher ein flacher Kreis
   mit Zahl. Jetzt ein doppelter Ring: aussen ein Farbverlauf als Rand,
   innen die dunkle Flaeche, dazu ein weicher Schein. Derselbe Kniff wie
   bei den Karten (Verlauf ueber border-box); der Kreis wirkt dadurch
   plastisch statt aufgemalt. Jede der vier Kacheln hat ihre eigene
   Farbe -- vier gleiche Kacheln wirken wie eine Aufzaehlung, vier
   unterscheidbare wie ein System.

3) "schrift soll spezieller sein" -- die Kachel-Ueberschrift war so gross
   wie der Text darunter und ging unter. Jetzt groesser, in der
   Headline-Schrift, enger gesetzt mit leicht negativer Laufweite. Die
   Ueberschrift "Gleich geht es los" bekommt einen Farbverlauf.

45/45 Handy-Abnahme, i18n vollstaendig, prefers-reduced-motion beachtet.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-22 22:14:00 +02:00

264 lines
18 KiB
JavaScript

/* =====================================================================
i18n-wd-portal.js — Kundenportal (Masterplan S.12), fünf Sprachen.
Anders als die Verwaltung ist das Portal mehrsprachig: hier landen
Kunden, und die können Franzosen oder Portugiesen sein. Die Sprache
folgt derselben Auswahl wie auf der öffentlichen Seite.
===================================================================== */
window.I18N_WD = {
seiten_titel: {
de: "Kundenportal — Dogfather Webdesign",
"de-CH": "Kundeportal — Dogfather Webdesign",
en: "Client portal — Dogfather Web Design",
fr: "Espace client — Dogfather Web Design",
pt: "Portal do cliente — Dogfather Web Design",
},
/* ---------- Anmeldung ---------- */
po_login_h1: { de: "Dein Projektraum", "de-CH": "Din Projektruum", en: "Your project space", fr: "Ton espace projet", pt: "O teu espaço de projeto" },
po_login_text: {
de: "Hier siehst du deinen Projektstand, alle Dateien und offene Punkte. Zugangsdaten bekommst du von Dogfather, sobald dein Projekt startet.",
"de-CH": "Do gsehsch din Projektstand, alli Datei und offni Pünkt. Zuegangsdate überchunnsch vom Dogfather, sobald dis Projekt startet.",
en: "Here you see your project status, all files and open points. You receive your access details from Dogfather once your project starts.",
fr: "Ici tu vois l'état de ton projet, tous les fichiers et les points ouverts. Tes accès te sont remis par Dogfather au démarrage du projet.",
pt: "Aqui vês o estado do teu projeto, todos os ficheiros e pontos em aberto. Recebes os teus acessos do Dogfather quando o projeto arrancar.",
},
po_email: { de: "E-Mail", "de-CH": "E-Mail", en: "E-mail", fr: "E-mail", pt: "E-mail" },
po_passwort: { de: "Passwort", "de-CH": "Passwort", en: "Password", fr: "Mot de passe", pt: "Palavra-passe" },
po_anmelden: { de: "Anmelden", "de-CH": "Aamälde", en: "Sign in", fr: "Se connecter", pt: "Entrar" },
po_anmelden_laeuft: { de: "Wird geprüft…", "de-CH": "Wird prüeft…", en: "Checking…", fr: "Vérification…", pt: "A verificar…" },
po_abmelden: { de: "Abmelden", "de-CH": "Abmälde", en: "Sign out", fr: "Se déconnecter", pt: "Sair" },
po_login_leer: {
de: "Bitte E-Mail und Passwort eingeben.",
"de-CH": "Bitte E-Mail und Passwort iigäh.",
en: "Please enter e-mail and password.",
fr: "Merci de saisir l'e-mail et le mot de passe.",
pt: "Introduz o e-mail e a palavra-passe.",
},
po_kein_zugang: {
de: "Noch keinen Zugang? Der Projektraum wird freigeschaltet, sobald dein Projekt oder deine Betreuung beginnt.",
"de-CH": "No kein Zuegang? Dr Projektruum wird freigschalte, sobald dis Projekt oder dini Betreuig aafoht.",
en: "No access yet? The project space is unlocked once your project or support plan begins.",
fr: "Pas encore d'accès ? L'espace projet est activé dès le démarrage de ton projet ou de ton suivi.",
pt: "Ainda sem acesso? O espaço de projeto é ativado quando o teu projeto ou acompanhamento começar.",
},
/* ---------- Passwort setzen ---------- */
po_setz_h1: { de: "Passwort festlegen", "de-CH": "Passwort festleggä", en: "Set your password", fr: "Définir ton mot de passe", pt: "Definir a palavra-passe" },
po_setz_text: {
de: "Wähl ein Passwort für deinen Projektraum. Ein kurzer Satz ist sicherer und leichter zu merken als ein kryptisches Wort.",
"de-CH": "Wähl es Passwort für din Projektruum. En churze Satz isch sicherer und liechter z merke als es kryptischs Wort.",
en: "Choose a password for your project space. A short sentence is safer and easier to remember than a cryptic word.",
fr: "Choisis un mot de passe pour ton espace projet. Une courte phrase est plus sûre et plus facile à retenir qu'un mot cryptique.",
pt: "Escolhe uma palavra-passe para o teu espaço. Uma frase curta é mais segura e fácil de lembrar do que uma palavra críptica.",
},
po_setz_knopf: { de: "Passwort speichern", "de-CH": "Passwort speichere", en: "Save password", fr: "Enregistrer le mot de passe", pt: "Guardar palavra-passe" },
po_setz_fertig: {
de: "Passwort gespeichert. Du kannst dich jetzt anmelden.",
"de-CH": "Passwort gspeicheret. Du chasch dich jetzt aamälde.",
en: "Password saved. You can sign in now.",
fr: "Mot de passe enregistré. Tu peux te connecter.",
pt: "Palavra-passe guardada. Já podes entrar.",
},
/* ---------- Übersicht ---------- */
po_hallo: { de: "Hallo", "de-CH": "Hoi", en: "Hello", fr: "Bonjour", pt: "Olá" },
po_projekte: { de: "Deine Projekte", "de-CH": "Dini Projekt", en: "Your projects", fr: "Tes projets", pt: "Os teus projetos" },
po_keine_projekte: {
de: "Hier erscheint dein Projekt, sobald es angelegt ist.",
"de-CH": "Do erschiint dis Projekt, sobald es aagleit isch.",
en: "Your project appears here as soon as it is set up.",
fr: "Ton projet apparaîtra ici dès sa création.",
pt: "O teu projeto aparece aqui assim que for criado.",
},
/* --- Leerer Zustand: fuehrt, statt zu enttaeuschen --- */
po_vorschau: {
de: "Vorschau",
"de-CH": "Vorschau",
en: "Preview",
fr: "Aperçu",
pt: "Pré-visualização",
},
po_vorschau_titel: {
de: "So sieht dein Projekt hier aus",
"de-CH": "So gseht dis Projekt do us",
en: "This is how your project will look here",
fr: "Voici à quoi ressemblera ton projet",
pt: "É assim que o teu projeto vai aparecer aqui",
},
po_vorschau_schritt: {
de: "Entwurf ansehen und Rückmeldung geben",
"de-CH": "Entwurf aaluege und Rückmäldig gäh",
en: "Review the draft and give feedback",
fr: "Consulter la maquette et donner ton retour",
pt: "Ver o esboço e dar feedback",
},
po_l_fertig: { de: "erledigt", "de-CH": "erledigt", en: "done", fr: "terminé", pt: "concluído" },
po_l_jetzt: { de: "läuft gerade", "de-CH": "lauft grad", en: "in progress", fr: "en cours", pt: "em curso" },
po_l_offen: { de: "kommt noch", "de-CH": "chunnt no", en: "still to come", fr: "à venir", pt: "ainda por vir" },
po_leer_h3: {
de: "Gleich geht es los",
"de-CH": "Glii gohts los",
en: "It starts soon",
fr: "Ça commence bientôt",
pt: "Está quase a começar",
},
po_leer_1: { de: "Projektstand", "de-CH": "Projektstand", en: "Project status", fr: "État du projet", pt: "Estado do projeto" },
po_leer_1t: {
de: "Eine Leiste zeigt dir jederzeit, in welcher Phase dein Projekt gerade ist — vom Briefing bis zur Übergabe.",
"de-CH": "E Leischte zeigt dir jederziit, i welere Phase dis Projekt grad isch — vom Briefing bis zur Übergab.",
en: "A bar shows you at any time which phase your project is in — from briefing to handover.",
fr: "Une barre t'indique à tout moment la phase de ton projet — du briefing à la remise.",
pt: "Uma barra mostra-te a qualquer momento em que fase está o teu projeto — do briefing à entrega.",
},
po_leer_2: { de: "Wer gerade dran ist", "de-CH": "Wär grad dra isch", en: "Whose turn it is", fr: "À qui le tour", pt: "De quem é a vez" },
po_leer_2t: {
de: "Du siehst sofort, ob gerade auf dich gewartet wird oder ob Dogfather am Zug ist. Kein Nachfragen nötig.",
"de-CH": "Du gsehsch sofort, ob grad uf dich gwartet wird oder ob dr Dogfather am Zug isch. Kes Nachefroge nötig.",
en: "You see immediately whether we are waiting for you or Dogfather is working on it. No need to ask.",
fr: "Tu vois immédiatement si l'on t'attend ou si Dogfather s'en occupe. Pas besoin de demander.",
pt: "Vês logo se estamos à tua espera ou se o Dogfather está a tratar. Sem precisares de perguntar.",
},
po_leer_3: { de: "Dateien und Nachrichten", "de-CH": "Datei und Nachrichte", en: "Files and messages", fr: "Fichiers et messages", pt: "Ficheiros e mensagens" },
po_leer_3t: {
de: "Angebote, Entwürfe und Freigaben liegen hier gebündelt — nichts geht in E-Mails unter.",
"de-CH": "Aagebot, Entwürf und Freigabe liged do bündlet — nüt goht i E-Mails under.",
en: "Quotes, drafts and approvals are kept together here — nothing gets lost in e-mails.",
fr: "Devis, maquettes et validations sont regroupés ici — rien ne se perd dans les e-mails.",
pt: "Orçamentos, esboços e aprovações ficam reunidos aqui — nada se perde em e-mails.",
},
po_leer_4: { de: "Ideen jederzeit", "de-CH": "Ideä jederziit", en: "Ideas anytime", fr: "Des idées à tout moment", pt: "Ideias a qualquer momento" },
po_leer_4t: {
de: "Fällt dir später etwas ein, trägst du es hier ein. Du bekommst Aufwand und Preis genannt und entscheidest in Ruhe.",
"de-CH": "Fallt dir spöter öppis ii, treisch es do ii. Du überchunnsch Ufwand und Priis gnennt und entscheidsch i Rueh.",
en: "If something occurs to you later, note it here. You get effort and price quoted and decide at your own pace.",
fr: "Si une idée te vient plus tard, note-la ici. Tu reçois l'effort et le prix, et tu décides tranquillement.",
pt: "Se te ocorrer algo mais tarde, aponta aqui. Recebes esforço e preço e decides com calma.",
},
po_leer_fuss: {
de: "Sobald dein Projekt angelegt ist, erscheint es automatisch hier — du musst nichts tun.",
"de-CH": "Sobald dis Projekt aagleit isch, erschiint es automatisch do — du muesch nüt mache.",
en: "As soon as your project is created it appears here automatically — you do not have to do anything.",
fr: "Dès que ton projet est créé, il apparaît ici automatiquement — tu n'as rien à faire.",
pt: "Assim que o teu projeto for criado, aparece aqui automaticamente — não tens de fazer nada.",
},
po_betreuung: { de: "Laufende Betreuung", "de-CH": "Laufendi Betreuig", en: "Ongoing support", fr: "Suivi en cours", pt: "Acompanhamento em curso" },
po_offene_zahlungen: { de: "Offene Zahlungen", "de-CH": "Offni Zahlige", en: "Open payments", fr: "Paiements en attente", pt: "Pagamentos em aberto" },
po_jetzt_bezahlen: { de: "Jetzt bezahlen", "de-CH": "Jetzt zahle", en: "Pay now", fr: "Payer maintenant", pt: "Pagar agora" },
po_naechste_zahlung: { de: "Nächste Zahlung", "de-CH": "Nöchsti Zahlig", en: "Next payment", fr: "Prochain paiement", pt: "Próximo pagamento" },
/* ---------- Projektstatus ---------- */
po_status: { de: "Stand", "de-CH": "Stand", en: "Status", fr: "État", pt: "Estado" },
po_st_briefing: { de: "Briefing", "de-CH": "Briefing", en: "Briefing", fr: "Briefing", pt: "Briefing" },
po_st_angebot: { de: "Angebot", "de-CH": "Aagebot", en: "Quote", fr: "Devis", pt: "Orçamento" },
po_st_design: { de: "Design", "de-CH": "Design", en: "Design", fr: "Design", pt: "Design" },
po_st_entwicklung: { de: "Entwicklung", "de-CH": "Entwicklig", en: "Development", fr: "Développement", pt: "Desenvolvimento" },
po_st_tests: { de: "Tests", "de-CH": "Teschts", en: "Testing", fr: "Tests", pt: "Testes" },
po_st_abnahme: { de: "Abnahme", "de-CH": "Abnahm", en: "Acceptance", fr: "Validation", pt: "Aceitação" },
po_st_uebergeben: { de: "Übergeben", "de-CH": "Übergäh", en: "Handed over", fr: "Remis", pt: "Entregue" },
po_st_pausiert: { de: "Pausiert", "de-CH": "Pausiert", en: "Paused", fr: "En pause", pt: "Em pausa" },
po_st_abgebrochen: { de: "Abgebrochen", "de-CH": "Abbroche", en: "Cancelled", fr: "Annulé", pt: "Cancelado" },
po_naechster_schritt: { de: "Nächster Schritt", "de-CH": "Nöchste Schritt", en: "Next step", fr: "Prochaine étape", pt: "Próximo passo" },
po_wartet_kunde: {
de: "Wir warten auf dich",
"de-CH": "Mir warted uf dich",
en: "Waiting for you",
fr: "En attente de ta part",
pt: "À espera de ti",
},
po_wartet_dogfather: {
de: "Dogfather ist dran",
"de-CH": "Dr Dogfather isch dra",
en: "Dogfather is working on it",
fr: "Dogfather s'en occupe",
pt: "O Dogfather está a tratar",
},
po_richttermin: { de: "Richttermin", "de-CH": "Richttermin", en: "Target date", fr: "Date cible", pt: "Data prevista" },
po_oeffnen: { de: "Öffnen", "de-CH": "Ufmache", en: "Open", fr: "Ouvrir", pt: "Abrir" },
po_zurueck: { de: "Zurück zur Übersicht", "de-CH": "Zrugg zur Übersicht", en: "Back to overview", fr: "Retour à l'aperçu", pt: "Voltar à visão geral" },
/* ---------- Projektdetail ---------- */
po_dateien: { de: "Dateien", "de-CH": "Datei", en: "Files", fr: "Fichiers", pt: "Ficheiros" },
po_keine_dateien: { de: "Noch keine Dateien.", "de-CH": "No kei Datei.", en: "No files yet.", fr: "Aucun fichier pour l'instant.", pt: "Ainda sem ficheiros." },
po_version: { de: "Fassung", "de-CH": "Fassig", en: "Version", fr: "Version", pt: "Versão" },
po_nachrichten: { de: "Nachrichten", "de-CH": "Nachrichte", en: "Messages", fr: "Messages", pt: "Mensagens" },
po_keine_nachrichten: { de: "Noch keine Nachrichten.", "de-CH": "No kei Nachrichte.", en: "No messages yet.", fr: "Aucun message pour l'instant.", pt: "Ainda sem mensagens." },
po_nachricht_platzhalter: {
de: "Frage oder Rückmeldung schreiben…",
"de-CH": "Frog oder Rückmäldig schriibe…",
en: "Write a question or some feedback…",
fr: "Écris une question ou un retour…",
pt: "Escreve uma pergunta ou um comentário…",
},
po_senden: { de: "Senden", "de-CH": "Schicke", en: "Send", fr: "Envoyer", pt: "Enviar" },
/* ---------- Änderungswünsche ---------- */
po_ideen: { de: "Ideen &amp; Änderungswünsche", "de-CH": "Ideä &amp; Änderigswünsch", en: "Ideas &amp; change requests", fr: "Idées &amp; demandes de modification", pt: "Ideias &amp; pedidos de alteração" },
po_ideen_text: {
de: "Trag hier ein, was dir noch einfällt. Ich prüfe Aufwand und Preis und melde mich — du entscheidest danach in Ruhe.",
"de-CH": "Trag do ii, was dir no iifallt. Ich prüefe Ufwand und Priis und mälde mich — du entscheidsch dernoch i Rueh.",
en: "Note down whatever comes to mind. I review effort and price and get back to you — you then decide at your own pace.",
fr: "Note ici tout ce qui te vient. J'évalue l'effort et le prix et je reviens vers toi — tu décides ensuite tranquillement.",
pt: "Aponta aqui o que te ocorrer. Avalio esforço e preço e volto a contactar-te — depois decides com calma.",
},
po_idee_titel: { de: "Kurz gesagt", "de-CH": "Churz gseit", en: "In short", fr: "En bref", pt: "Em resumo" },
po_idee_text: { de: "Beschreibung", "de-CH": "Beschriibig", en: "Description", fr: "Description", pt: "Descrição" },
po_idee_senden: { de: "Idee einreichen", "de-CH": "Idee iireiche", en: "Submit idea", fr: "Envoyer l'idée", pt: "Enviar ideia" },
po_idee_leer: {
de: "Bitte gib der Idee einen Titel und beschreib sie kurz.",
"de-CH": "Bitte gib dr Idee en Titel und beschriib si churz.",
en: "Please give the idea a title and describe it briefly.",
fr: "Merci de donner un titre à l'idée et de la décrire brièvement.",
pt: "Dá um título à ideia e descreve-a brevemente.",
},
po_keine_ideen: { de: "Noch keine Ideen eingereicht.", "de-CH": "No kei Ideä iigreicht.", en: "No ideas submitted yet.", fr: "Aucune idée soumise pour l'instant.", pt: "Ainda sem ideias submetidas." },
po_ae_eingereicht: { de: "Eingereicht", "de-CH": "Iigreicht", en: "Submitted", fr: "Soumise", pt: "Submetida" },
po_ae_geprueft: { de: "Wird geprüft", "de-CH": "Wird prüeft", en: "Under review", fr: "En cours d'examen", pt: "Em análise" },
po_ae_angeboten: { de: "Angebot liegt vor", "de-CH": "Aagebot ligt vor", en: "Quote available", fr: "Devis disponible", pt: "Orçamento disponível" },
po_ae_angenommen: { de: "Angenommen", "de-CH": "Aagno", en: "Accepted", fr: "Acceptée", pt: "Aceite" },
po_ae_abgelehnt: { de: "Abgelehnt", "de-CH": "Abglehnt", en: "Declined", fr: "Refusée", pt: "Recusada" },
po_ae_umgesetzt: { de: "Umgesetzt", "de-CH": "Umgsetzt", en: "Implemented", fr: "Réalisée", pt: "Implementada" },
po_zusatzpreis: { de: "Zusätzlich", "de-CH": "Zuesätzlich", en: "Additional", fr: "En supplément", pt: "Adicional" },
po_zusatzdauer: { de: "Zusätzliche Dauer", "de-CH": "Zuesätzlichi Duur", en: "Additional time", fr: "Délai supplémentaire", pt: "Tempo adicional" },
po_annehmen: { de: "Annehmen", "de-CH": "Aanäh", en: "Accept", fr: "Accepter", pt: "Aceitar" },
po_ablehnen: { de: "Ablehnen", "de-CH": "Ablähne", en: "Decline", fr: "Refuser", pt: "Recusar" },
po_annehmen_frage: {
de: "Damit nimmst du das Zusatzangebot verbindlich an. Fortfahren?",
"de-CH": "Demit nimmsch s Zuesatzaagebot verbindlich aa. Wiitermache?",
en: "This accepts the additional quote as binding. Continue?",
fr: "Cela accepte le devis complémentaire de manière ferme. Continuer ?",
pt: "Isto aceita o orçamento adicional de forma vinculativa. Continuar?",
},
/* ---------- Zahlungen ---------- */
po_zahlungen: { de: "Zahlungen", "de-CH": "Zahlige", en: "Payments", fr: "Paiements", pt: "Pagamentos" },
po_za_offen: { de: "Offen", "de-CH": "Offe", en: "Open", fr: "En attente", pt: "Em aberto" },
po_za_freigegeben: { de: "In Bearbeitung", "de-CH": "I Bearbeitig", en: "Processing", fr: "En cours", pt: "Em processamento" },
po_za_bezahlt: { de: "Bezahlt", "de-CH": "Zahlt", en: "Paid", fr: "Payé", pt: "Pago" },
po_za_fehlge: { de: "Fehlgeschlagen", "de-CH": "Fählgschlage", en: "Failed", fr: "Échoué", pt: "Falhou" },
po_za_erstattet: { de: "Erstattet", "de-CH": "Erstattet", en: "Refunded", fr: "Remboursé", pt: "Reembolsado" },
po_keine_zahlungen: { de: "Keine Zahlungen vorgemerkt.", "de-CH": "Kei Zahlige vorgmerkt.", en: "No payments due.", fr: "Aucun paiement prévu.", pt: "Sem pagamentos previstos." },
/* ---------- Fehler ---------- */
po_fehler_login: {
de: "E-Mail oder Passwort stimmt nicht.",
"de-CH": "E-Mail oder Passwort stimmt nöd.",
en: "E-mail or password is incorrect.",
fr: "L'e-mail ou le mot de passe est incorrect.",
pt: "E-mail ou palavra-passe incorretos.",
},
po_abgelaufen: {
de: "Deine Sitzung ist abgelaufen. Bitte melde dich erneut an.",
"de-CH": "Dini Sitzig isch abgloffe. Bitte mäld dich nomol aa.",
en: "Your session has expired. Please sign in again.",
fr: "Ta session a expiré. Merci de te reconnecter.",
pt: "A tua sessão expirou. Inicia sessão novamente.",
},
};