Files
dogfather-universe/assets/js/i18n-index.js
T
DogFatherGitandClaude Opus 5 b3e191d3ca "Event des Jahres": Aktivieren-Schalter, leer bis befuellt, Detail-Fenster
Nutzer-Wunsch 20.08.2026: "diese zwei kisten sollen leer sein solang wie
ich nichts rein setze, am besten sollen die sogar immer nur erscheinen
wenn ich was rein setze und sie aktiviere ... wen ich drauf druecke dass
dann ein kleines fenster aufgeht wo das bild bissl groesser ist mit einem
groesseren text und beschreibung, und mit einem link ... die kacheln
sollen auch bissl spezieller sein."

- Kein hartkodierter Standardinhalt mehr auf der Startseite -- die Kachel
  UND der ganze Abschnitt bleiben komplett unsichtbar, bis mindestens ein
  Event in der Verwaltung ausgefuellt UND ueber einen neuen "Aktiv"-Schalter
  freigeschaltet ist. Genau 1 aktives Event -> zentrierte Einzelkachel
  statt halbleerem Zwei-Spalten-Raster.
- Klick auf eine Kachel oeffnet jetzt ein Detail-Fenster (groesseres Bild,
  groesserer Titel/Text, optionaler direkter Link) statt sofort
  wegzunavigieren.
- Kacheln bekommen einen goldenen Trophaeen-Akzent + dezenten wandernden
  Lichtschimmer statt der neutralen Standardkarten-Optik.
- Bugfix unterwegs gefunden (Playwright-Screenshot): .jahres-event-card
  blieb trotz [hidden]-Attribut sichtbar (dieselbe Ursache wie der
  frühere .jahres-event-bild-Bug: display:block ueberschreibt die
  eingebaute [hidden]-Regel bei gleicher Spezifitaet) -- explizite
  [hidden]-Regel ergaenzt.
- Backend: server-internal/routes/events.js liefert oeffentlich NUR noch
  aktivierte Slots aus (getEventsPublic), neuer authentifizierter Endpunkt
  getEventsAdmin liefert der Verwaltung auch Entwuerfe zum Vorausfuellen.
  10 automatisierte Tests gegen eine Fake-DB bestanden.

Backend-Teil (server-internal/) noch ohne Deploy-Zugriff -- Dogi muss ihn
manuell auf dogiintern ausrollen, sonst bleibt die Startseite beim alten
Verhalten (immer beide Slots zeigen, kein Aktiv-Schalter in der Verwaltung).

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

282 lines
17 KiB
JavaScript

/* =====================================================================
i18n-index.js — Übersetzungs-Wörterbuch NUR für index.html
Wird von main.js (applyTranslations) über data-i18n="schluessel" auf
die passenden Elemente angewendet. Nur auf der Startseite eingebunden
— andere Seiten haben aktuell noch kein eigenes Wörterbuch und bleiben
bewusst auf Deutsch (Navigation/Fußzeile/Musik-Widget sind aber überall
mehrsprachig, siehe I18N_CORE in main.js).
"de-CH" ist HIER bewusst echtes (geschriebenes) Schweizerdeutsch —
nicht nur Hochdeutsch mit ss statt ß. Dialekt hat keine einheitliche
Schriftform (Zürich ≠ Bern ≠ Wallis ...); hier wurde eine gängige,
breit verständliche Zürich-nahe Schreibweise gewählt, wie sie online
üblich ist. Markennamen (DogFather, HasiDog, Casper, VanVan, Team
Dogi, Modi-Team, Streamer, Creator, Community, Manager) bleiben
unverändert.
===================================================================== */
window.I18N_PAGE = {
idx_hero_h1: {
de: "Streamer. Community. HasiDog. Manager.<br>Gemeinsam stark.",
"de-CH": "Streamer. Community. HasiDog. Manager.<br>Zäme stark.",
en: "Streamer. Community. HasiDog. Manager.<br>Stronger together.",
fr: "Streamer. Communauté. HasiDog. Manager.<br>Plus forts ensemble.",
pt: "Streamer. Comunidade. HasiDog. Manager.<br>Mais fortes juntos.",
},
idx_hero_lead: {
de: "Drei Welten, eine Familie: Team Dogi.",
"de-CH": "Drü Wält, e Familie: Team Dogi.",
en: "Three worlds, one family: Team Dogi.",
fr: "Trois mondes, une famille : Team Dogi.",
pt: "Três mundos, uma família: Team Dogi.",
},
idx_live_loading: {
de: "Status wird geladen …",
"de-CH": "Status wird glade …",
en: "Loading status …",
fr: "Chargement du statut …",
pt: "Carregando status …",
},
idx_live_info: {
de: `DogFather geht <strong>jeden Tag ab 20 Uhr</strong> live — oft schon tagsüber, zu wechselnden Zeiten. <a href="streamplan.html">Streamplan ansehen →</a>`,
"de-CH": `DogFather isch <strong>jede Tag ab 20 Uhr</strong> live — oft scho tagsüber, zu wächslende Zyte. <a href="streamplan.html">Streamplan aluege →</a>`,
en: `DogFather goes live <strong>every day from 8 PM</strong> — often earlier too, at varying times. <a href="streamplan.html">View the schedule →</a>`,
fr: `DogFather est en live <strong>tous les jours à partir de 20h</strong> — souvent même plus tôt, à des horaires variables. <a href="streamplan.html">Voir le programme →</a>`,
pt: `DogFather fica ao vivo <strong>todos os dias a partir das 20h</strong> — muitas vezes já durante o dia, em horários variados. <a href="streamplan.html">Ver a programação →</a>`,
},
idx_hero_btn_links: {
de: "Alle Links 🩵", "de-CH": "Alli Links 🩵",
en: "All Links 🩵", fr: "Tous les liens 🩵", pt: "Todos os links 🩵",
},
idx_hero_btn_team: {
de: "Teil vom Team werden", "de-CH": "Teil vom Team wärde",
en: "Join the team", fr: "Rejoindre l'équipe", pt: "Fazer parte da equipe",
},
idx_hero_card1_tag: { de: "Welt 1", "de-CH": "Wält 1", en: "World 1", fr: "Monde 1", pt: "Mundo 1" },
idx_hero_card1_desc: {
de: "Streamer, Entertainer, das Herz hinter dem Kanal. Halligalli, Humor und ein offenes Ohr für die Community.",
"de-CH": "Streamer, Entertainer, s Herz hinter em Kanal. Halligalli, Humor und es offes Ohr für d Community.",
en: "Streamer, entertainer, the heart behind the channel. Good times, humor, and an open ear for the community.",
fr: "Streamer, entertainer, le cœur de la chaîne. Bonne humeur, humour et une oreille attentive pour la communauté.",
pt: "Streamer, entertainer, o coração por trás do canal. Diversão, humor e sempre um ouvido aberto para a comunidade.",
},
idx_hero_card2_tag: { de: "Welt 2", "de-CH": "Wält 2", en: "World 2", fr: "Monde 2", pt: "Mundo 2" },
idx_hero_card2_desc: {
de: "Die Community, das Maskottchen und Husky Casper — die verspielte, familiäre Seite von Team Dogi.",
"de-CH": "D Community, s Maskottli und de Husky Casper — die verspielt, familiäri Site vo Team Dogi.",
en: "The community, the mascot, and Husky Casper — the playful, family side of Team Dogi.",
fr: "La communauté, la mascotte et le husky Casper — le côté joueur et familial de Team Dogi.",
pt: "A comunidade, o mascote e o husky Casper — o lado brincalhão e familiar do Team Dogi.",
},
idx_hero_card3_tag: { de: "Welt 3", "de-CH": "Wält 3", en: "World 3", fr: "Monde 3", pt: "Mundo 3" },
idx_hero_card3_h3: {
de: "Manager DogFather", "de-CH": "Manager DogFather",
en: "DogFather's Manager", fr: "Manager de DogFather", pt: "Manager do DogFather",
},
idx_hero_card3_desc: {
de: "Als Manager bei Spicy Media: Scouts, Creator und faire Zusammenarbeit auf Augenhöhe.",
"de-CH": "Als Manager bi Spicy Media: Scouts, Creator und e fair Zämearbeit uf Ougehöchi.",
en: "As a manager at Spicy Media: scouts, creators, and fair collaboration at eye level.",
fr: "En tant que manager chez Spicy Media : scouts, creators et une collaboration équitable, d'égal à égal.",
pt: "Como manager na Spicy Media: scouts, creators e uma parceria justa entre iguais.",
},
/* ---------- "Event des Jahres" (20.08.2026, Nutzer-Wunsch) — volle Breite unter den
3 Welt-Kacheln, zeigt bewusst IMMER genau zwei Events. Texte sind gekürzte, inhaltlich
unveränderte Fassungen der ausführlichen Beschreibungen aus i18n-zeitreise.js
(zr_ev4_h3/p, zr_ev9_h3/p) — dieselben zwei Events, nur kompakter für die Kachel. ---------- */
idx_jahres_events_tag: {
de: "🏆 Event des Jahres", "de-CH": "🏆 Event vom Jahr",
en: "🏆 Event of the Year", fr: "🏆 Événement de l'année", pt: "🏆 Evento do ano",
},
idx_jahres_events_mehr: {
de: "Mehr erfahren →", "de-CH": "Mehr erfahre →",
en: "Learn more →", fr: "En savoir plus →", pt: "Saiba mais →",
},
idx_jahres_event_modal_link: {
de: "Direkt ansehen →", "de-CH": "Direkt aluege →",
en: "View directly →", fr: "Voir directement →", pt: "Ver diretamente →",
},
idx_char_eyebrow: {
de: "🩵 Die Gesichter der Welten", "de-CH": "🩵 D Gsichter vo de Wälte",
en: "🩵 The Faces of the Worlds", fr: "🩵 Les visages des mondes", pt: "🩵 Os rostos dos mundos",
},
idx_char_lead: {
de: "Zwei Charaktere, ein Universum — klick dich in ihre Welt.",
"de-CH": "Zwöi Charaktere, es Universum — klick dich in ihri Wält.",
en: "Two characters, one universe — click your way into their world.",
fr: "Deux personnages, un seul univers — clique pour entrer dans leur monde.",
pt: "Dois personagens, um universo — clique e entre no mundo deles.",
},
idx_char1_sub: {
de: "Streamer · Entertainer · Welt 1", "de-CH": "Streamer · Entertainer · Wält 1",
en: "Streamer · Entertainer · World 1", fr: "Streamer · Entertainer · Monde 1", pt: "Streamer · Entertainer · Mundo 1",
},
idx_char2_sub: {
de: "Community · Maskottchen · Welt 2", "de-CH": "Community · Maskottli · Wält 2",
en: "Community · Mascot · World 2", fr: "Communauté · Mascotte · Monde 2", pt: "Comunidade · Mascote · Mundo 2",
},
idx_char_go: {
de: "Zur Welt →", "de-CH": "Zur Wält →",
en: "Enter the world →", fr: "Découvrir le monde →", pt: "Ver o mundo →",
},
idx_collage_eyebrow: {
de: "🩵 Gesichter hinter dem Universum", "de-CH": "🩵 Gsichter hinter em Universum",
en: "🩵 Faces Behind the Universe", fr: "🩵 Les visages derrière l'univers", pt: "🩵 Rostos por trás do universo",
},
idx_collage_cap_team: { de: "Team 🩵🐾", "de-CH": "Team 🩵🐾", en: "Team 🩵🐾", fr: "Équipe 🩵🐾", pt: "Equipe 🩵🐾" },
idx_collage_cap_huskylife: { de: "Husky-Life", "de-CH": "Husky-Life", en: "Husky Life", fr: "Vie de husky", pt: "Vida de husky" },
idx_collage_cap_nose: { de: "Nase an Nase 🩵", "de-CH": "Nase a Nase 🩵", en: "Nose to Nose 🩵", fr: "Nez à nez 🩵", pt: "Nariz a nariz 🩵" },
idx_collage_footer: {
de: "DogFather & Casper — die zwei Gesichter hinter dem ganzen Universum. 🩵🐾",
"de-CH": "DogFather & Casper — die zwöi Gsichter hinter em ganze Universum. 🩵🐾",
en: "DogFather & Casper — the two faces behind the whole universe. 🩵🐾",
fr: "DogFather & Casper — les deux visages derrière tout l'univers. 🩵🐾",
pt: "DogFather & Casper — os dois rostos por trás de todo o universo. 🩵🐾",
},
idx_stats_team: {
de: "Menschen im Team Dogi", "de-CH": "Mönsche im Team Dogi",
en: "People in Team Dogi", fr: "Personnes dans Team Dogi", pt: "Pessoas no Team Dogi",
},
idx_stats_daily_label: { de: "Täglich", "de-CH": "Jede Tag", en: "Daily", fr: "Chaque jour", pt: "Diariamente" },
idx_stats_daily_desc: {
de: "live ab 20 Uhr", "de-CH": "live ab 20 Uhr",
en: "live from 8 PM", fr: "en live dès 20h", pt: "ao vivo a partir das 20h",
},
idx_stats_worlds: {
de: "Welten, eine Familie", "de-CH": "Wälte, e Familie",
en: "worlds, one family", fr: "mondes, une famille", pt: "mundos, uma família",
},
idx_stats_family: {
de: "Team Dogi ist Familie", "de-CH": "Team Dogi isch Familie",
en: "Team Dogi is family", fr: "Team Dogi, c'est la famille", pt: "Team Dogi é família",
},
idx_expect_eyebrow: {
de: "Ein bisschen von allem", "de-CH": "Es bitzli vo allem",
en: "A little bit of everything", fr: "Un peu de tout", pt: "Um pouco de tudo",
},
idx_expect_h2: {
de: "Was dich im Universum erwartet", "de-CH": "Was di im Universum erwartet",
en: "What awaits you in the universe", fr: "Ce qui t'attend dans l'univers", pt: "O que te espera no universo",
},
idx_expect_c1_h3: { de: "🎥 Streamer", "de-CH": "🎥 Streamer", en: "🎥 Streamer", fr: "🎥 Streamer", pt: "🎥 Streamer" },
idx_expect_c1_p: {
de: "Halligalli, Humor & Hasencontent.", "de-CH": "Halligalli, Humor & Hase-Content.",
en: "Good times, humor & bunny content.", fr: "Bonne humeur, humour et contenu de lapin.", pt: "Diversão, humor e conteúdo de coelho.",
},
idx_expect_c2_h3: { de: "🕰️ Zeitreise", "de-CH": "🕰️ Zytreis", en: "🕰️ Timeline", fr: "🕰️ Chronologie", pt: "🕰️ Linha do tempo" },
idx_expect_c2_p: {
de: "Die Geschichte von DogFather & Team Dogi.", "de-CH": "D Gschicht vo DogFather & Team Dogi.",
en: "The story of DogFather & Team Dogi.", fr: "L'histoire de DogFather et de Team Dogi.", pt: "A história de DogFather e do Team Dogi.",
},
idx_expect_c3_h3: { de: "🩵 Community", "de-CH": "🩵 Community", en: "🩵 Community", fr: "🩵 Communauté", pt: "🩵 Comunidade" },
idx_expect_c3_p: {
de: "Team Dogi ist Familie.", "de-CH": "Team Dogi isch Familie.",
en: "Team Dogi is family.", fr: "Team Dogi, c'est la famille.", pt: "Team Dogi é família.",
},
idx_expect_c4_h3: { de: "🐾 Casper", "de-CH": "🐾 Casper", en: "🐾 Casper", fr: "🐾 Casper", pt: "🐾 Casper" },
idx_expect_c4_p: {
de: "Der Husky an DogFathers Seite.", "de-CH": "De Husky a DogFathers Site.",
en: "The husky by DogFather's side.", fr: "Le husky aux côtés de DogFather.", pt: "O husky ao lado de DogFather.",
},
idx_expect_c5_h3: { de: "🧑‍🤝‍🧑 Modi-Team", "de-CH": "🧑‍🤝‍🧑 Modi-Team", en: "🧑‍🤝‍🧑 Modi-Team", fr: "🧑‍🤝‍🧑 Modi-Team", pt: "🧑‍🤝‍🧑 Modi-Team" },
idx_expect_c5_p: {
de: "VanVan, Diene & Co.", "de-CH": "VanVan, Diene & Co.",
en: "VanVan, Diene & co.", fr: "VanVan, Diene et l'équipe.", pt: "VanVan, Diene e equipe.",
},
idx_expect_c6_h3: { de: "🖼️ Medien: DogFather", "de-CH": "🖼️ Medie: DogFather", en: "🖼️ Media: DogFather", fr: "🖼️ Médias : DogFather", pt: "🖼️ Mídia: DogFather" },
idx_expect_c7_h3: { de: "🐰 Medien: HasiDog", "de-CH": "🐰 Medie: HasiDog", en: "🐰 Media: HasiDog", fr: "🐰 Médias : HasiDog", pt: "🐰 Mídia: HasiDog" },
idx_expect_c8_h3: { de: "🐺 Medien: Casper", "de-CH": "🐺 Medie: Casper", en: "🐺 Media: Casper", fr: "🐺 Médias : Casper", pt: "🐺 Mídia: Casper" },
idx_expect_media_p: {
de: "Fotos, Videos & Events.", "de-CH": "Fotos, Videos & Events.",
en: "Photos, videos & events.", fr: "Photos, vidéos et événements.", pt: "Fotos, vídeos e eventos.",
},
idx_team_h2: { de: "Team Dogi 🩵", "de-CH": "Team Dogi 🩵", en: "Team Dogi 🩵", fr: "Team Dogi 🩵", pt: "Team Dogi 🩵" },
idx_team_lead: {
de: "VanVan & Modis — die Menschen, die DOGFATHER UNIVERSE tragen.",
"de-CH": "VanVan & Modis — die Mönsche, wo DOGFATHER UNIVERSE tröget.",
en: "From VanVan & the Modis — the people who carry DOGFATHER UNIVERSE.",
fr: "De VanVan et des Modis — les personnes qui portent DOGFATHER UNIVERSE.",
pt: "De VanVan e dos Modis — as pessoas que sustentam o DOGFATHER UNIVERSE.",
},
idx_team_btn_modi: {
de: "Modi-Team ansehen", "de-CH": "Modi-Team aluege",
en: "View Modi-Team", fr: "Voir l'équipe Modi", pt: "Ver equipe Modi",
},
idx_aktionen_h2: {
de: "Was gerade läuft", "de-CH": "Was grad lauft",
en: "What's happening right now", fr: "Ce qui se passe en ce moment", pt: "O que está rolando agora",
},
idx_aktionen_btn: {
de: "Alle Aktionen & Projekte", "de-CH": "Alli Aktione & Projekt",
en: "All actions & projects", fr: "Toutes les actions et projets", pt: "Todas as ações e projetos",
},
idx_galerie_h2: { de: "Impressionen", "de-CH": "Impressione", en: "Impressions", fr: "Aperçus", pt: "Impressões" },
idx_galerie_btn: {
de: "Zur ganzen Galerie", "de-CH": "Zur ganze Galerie",
en: "View the full gallery", fr: "Voir toute la galerie", pt: "Ver galeria completa",
},
idx_testimonial_eyebrow: {
de: "Was andere sagen", "de-CH": "Was anderi säge",
en: "What others say", fr: "Ce que les autres disent", pt: "O que os outros dizem",
},
idx_testimonial_quote: {
de: "„Hier stehen bald echte Stimmen aus der Community. 🩵“",
"de-CH": "„Da stönd bald echti Stimme us de Community. 🩵“",
en: "“Real voices from the community will be here soon. 🩵”",
fr: "« De vrais témoignages de la communauté arriveront bientôt ici. 🩵 »",
pt: "“Em breve, depoimentos reais da comunidade estarão aqui. 🩵”",
},
idx_testimonial_attrib: {
de: "— Team Dogi", "de-CH": "— Team Dogi", en: "— Team Dogi", fr: "— Team Dogi", pt: "— Team Dogi",
},
idx_testimonial_btn: {
de: "Mehr Stimmen", "de-CH": "Meh Stimme",
en: "More voices", fr: "Plus de témoignages", pt: "Mais depoimentos",
},
idx_cta_eyebrow: { de: "🩵 Bereit?", "de-CH": "🩵 Bereit?", en: "🩵 Ready?", fr: "🩵 Prêt·e ?", pt: "🩵 Pronto?" },
idx_cta_h2: {
de: "Werde Teil von DOGFATHER UNIVERSE", "de-CH": "Wird Teil vo DOGFATHER UNIVERSE",
en: "Become part of DOGFATHER UNIVERSE", fr: "Rejoins DOGFATHER UNIVERSE", pt: "Faça parte do DOGFATHER UNIVERSE",
},
idx_cta_lead: {
de: "Als Zuschauer:in, Creator, Scout oder Kooperationspartner — hier ist für jeden Platz.",
"de-CH": "Als Zueschauer:in, Creator, Scout oder Kooperationspartner — da het's für jede Platz.",
en: "As a viewer, creator, scout, or cooperation partner — there's room for everyone here.",
fr: "Que tu sois spectateur·rice, creator, scout ou partenaire — il y a une place pour toi ici.",
pt: "Como espectador(a), creator, scout ou parceiro(a) — aqui há espaço para todos.",
},
idx_cta_btn_links: {
de: "Alle Links 🩵", "de-CH": "Alli Links 🩵",
en: "All Links 🩵", fr: "Tous les liens 🩵", pt: "Todos os links 🩵",
},
idx_cta_btn_bewerben: {
de: "Jetzt bewerben", "de-CH": "Jetzt bewärbe",
en: "Apply now", fr: "Postuler maintenant", pt: "Candidate-se agora",
},
/* Live-Status (wird von index.html per JS gesetzt, siehe dortiges
Inline-Skript — Schlüssel hier nur zentral gepflegt) */
idx_live_now: {
de: "Jetzt live: {titel}", "de-CH": "Jetzt live: {titel}",
en: "Live now: {titel}", fr: "En direct : {titel}", pt: "Ao vivo agora: {titel}",
},
idx_live_now_generic: {
de: "Jetzt live!", "de-CH": "Jetzt live!",
en: "Live now!", fr: "En direct !", pt: "Ao vivo agora!",
},
idx_live_offline: {
de: "Gerade offline", "de-CH": "Grad offline",
en: "Currently offline", fr: "Actuellement hors ligne", pt: "Offline no momento",
},
idx_live_error: {
de: "Status gerade nicht abrufbar", "de-CH": "Status grad nöd abrufbar",
en: "Status currently unavailable", fr: "Statut actuellement indisponible", pt: "Status indisponível no momento",
},
idx_foto_folgt: {
de: "Foto folgt", "de-CH": "Foto chunnt bald",
en: "Photo coming soon", fr: "Photo à venir", pt: "Foto em breve",
},
};