This commit is contained in:
martin 2026-02-06 02:11:23 +01:00
parent 099b5d80e1
commit af6eafdd21
68 changed files with 1269 additions and 212 deletions

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -13,7 +13,12 @@
"phoneInvalid": "Ungültige Telefonnummer", "phoneInvalid": "Ungültige Telefonnummer",
"successMessage": "Ihre Nachricht wurde erfolgreich gesendet!", "successMessage": "Ihre Nachricht wurde erfolgreich gesendet!",
"errorMessage": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal.", "errorMessage": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal.",
"notFound": {
"message": "Ups! Seite nicht gefunden",
"backHome": "Zur Startseite"
},
"generalNotice": { "generalNotice": {
"title": "Wichtiger Hinweis:",
"text": "Hinweis:\nDie auf diesen Seiten enthaltenen Tipps und Informationen stellen allgemeine, unverbindliche Hinweise zu Versicherungen dar. Es handelt sich um eine private Meinungsäußerung ohne Anspruch auf Richtigkeit, Vollständigkeit oder Haftung und ersetzt keine individuelle Beratung. Maßgeblich sind ausschließlich die jeweiligen Versicherungsbedingungen des Versicherungsunternehmens." "text": "Hinweis:\nDie auf diesen Seiten enthaltenen Tipps und Informationen stellen allgemeine, unverbindliche Hinweise zu Versicherungen dar. Es handelt sich um eine private Meinungsäußerung ohne Anspruch auf Richtigkeit, Vollständigkeit oder Haftung und ersetzt keine individuelle Beratung. Maßgeblich sind ausschließlich die jeweiligen Versicherungsbedingungen des Versicherungsunternehmens."
}, },
"nav": { "nav": {

View File

@ -0,0 +1,70 @@
{
"title": "Haftpflicht (Familie)",
"tabs": {
"overview": "Übersicht",
"details": "Details",
"form": "Anfrage",
"claims": "Schaden",
"catalog": "Ratgeber"
},
"overview": {
"badge": "Schutz vor hohen Forderungen",
"title": "Privathaftpflicht für Familien",
"subtitle": "Kinder & Eltern abgesichert",
"description": "Wenn etwas passiert, kann es teuer werden. Die Privathaftpflicht schützt vor Schadenersatzforderungen.",
"primaryButton": "Angebot anfordern",
"secondaryButton": "Beratung",
"card1Title": "Familien-Schutz",
"card1Subtitle": "Kinder mitversichert",
"card2Title": "Hohe Deckung",
"card2Subtitle": "sinnvoll & wichtig",
"rightCardTitle": "Alltag, Spiel, Missgeschick",
"rightCardText": "Tarifcheck schnell und fair."
},
"details": {
"title": "Worauf achten?",
"description": "Deckungssumme, deliktunfähige Kinder, Mietsachschäden, Schlüsselverlust, Forderungsausfalldeckung.",
"item1Title": "Deliktunfähig",
"item1Desc": "Absicherung bei Schäden durch kleine Kinder.",
"item2Title": "Schlüssel/Miete",
"item2Desc": "Wichtige Bausteine im Alltag.",
"tipTitle": "Tipp",
"tipSubtitle": "Deckungssumme nicht zu niedrig",
"tipText": "Heute sind 1050 Mio. € häufig sinnvoll."
},
"form": {
"title": "Anfrageformular",
"subtitle": "Wir vergleichen passende Tarife für deine Familie.",
"openContact": "Kontaktformular öffnen",
"savePdf": "Als PDF speichern",
"directTitle": "Direktkontakt",
"directSubtitle": "Wenn es schnell gehen soll.",
"phone": "Telefon: 0171 / 9864053",
"email": "E-Mail: info@finanzen-mizera.de"
},
"claims": {
"title": "Schadenmeldung",
"subtitle": "Kurz-Checkliste für den Schadenfall.",
"item1Title": "Daten sichern",
"item1Desc": "Fotos, Zeugen, Ablauf notieren.",
"item2Title": "Melden",
"item2Desc": "Wir helfen bei der Regulierung.",
"noteTitle": "Hinweis",
"noteSubtitle": "Keine Schuldanerkenntnisse",
"noteText": "Keine Zusagen ohne Prüfung. Erst melden."
},
"catalog": {
"title": "Ratgeber",
"subtitle": "Typische Fragen in Familien.",
"summaryTitle": "Das Gröbste auf einen Blick",
"summarySubtitle": "Beispiele Details je nach Tarif.",
"rows": {
"row1": "Sind Kinder deliktunfähig mitversichert?",
"row2": "Mietsachschäden enthalten?",
"row3": "Schlüsselverlust enthalten?",
"row4": "Forderungsausfalldeckung vorhanden?"
},
"questionTitle": "Frage?",
"questionSubtitle": "Wir beraten persönlich."
}
}

View File

@ -0,0 +1,55 @@
{
"title": "Familienpakete",
"tabs": {
"overview": "Übersicht",
"details": "Details",
"form": "Anfrage",
"catalog": "Ratgeber"
},
"overview": {
"badge": "Alles aus einer Hand",
"title": "Familienpakete",
"subtitle": "kombinieren & sparen",
"description": "Mit passenden Paketen lassen sich Leistungen bündeln und oft Beiträge optimieren.",
"primaryButton": "Beratung anfordern",
"secondaryButton": "Kontakt",
"card1Title": "Sinnvoll",
"card1Subtitle": "Bausteine passend",
"card2Title": "Familie",
"card2Subtitle": "ein Vertrag",
"rightCardTitle": "einfach, klar, passend",
"rightCardText": "Wir vergleichen Optionen und erklären verständlich."
},
"details": {
"title": "Beispiele",
"description": "Unfall + Haftpflicht + Zusatz je nach Bedarf.",
"combosTitle": "Typische Kombinationen",
"combosSubtitle": "Beispiele",
"combo1": "Kinderunfall + Haftpflicht",
"combo2": "Zahn + Stationär",
"combo3": "Reise + Ausland",
"tipTitle": "Tipp",
"tipSubtitle": "Keine Doppelungen",
"tipText": "Wir prüfen, was schon vorhanden ist."
},
"form": {
"title": "Anfrageformular",
"subtitle": "Wir bauen ein Paket passend zu deiner Familie.",
"openContact": "Kontaktformular öffnen",
"savePdf": "Als PDF speichern",
"directTitle": "Direktkontakt",
"directSubtitle": "Wenn es schnell gehen soll.",
"phone": "Telefon: 0171 / 9864053",
"email": "E-Mail: info@finanzen-mizera.de"
},
"catalog": {
"title": "Ratgeber",
"subtitle": "So findest du das passende Paket.",
"checklistTitle": "Checkliste",
"checklistSubtitle": "Beispiele",
"row1": "Welche Risiken sind wichtig?",
"row2": "Budget pro Monat",
"row3": "Bestehende Verträge prüfen",
"row4": "Leistung vor Preis"
}
}

View File

@ -0,0 +1,65 @@
{
"hero": {
"kicker": "Familien & Kinder",
"title": "Reise & Ausland",
"subtitle": "Auslandsreisekranken & mehr",
"primaryCta": "Beratung",
"secondaryCta": "Zur Übersicht"
},
"tabs": {
"overview": "Übersicht",
"details": "Details",
"form": "Anfrage",
"catalog": "Ratgeber"
},
"overview": {
"badge": "Sicher reisen mit Familie",
"title": "Reise & Auslandsschutz",
"subtitle": "Auslandsreisekranken & mehr",
"description": "Medizinische Behandlungen im Ausland können teuer werden. Passender Schutz sorgt für Sicherheit.",
"primaryButton": "Angebot anfordern",
"secondaryButton": "Beratung",
"card1Title": "Weltweit",
"card1Subtitle": "auch Familie",
"card2Title": "Schnell",
"card2Subtitle": "im Notfall",
"rightCardTitle": "Urlaub, Besuch, Ausland",
"rightCardText": "Tarifcheck passend zur Reise."
},
"details": {
"title": "Wichtige Bausteine",
"description": "Auslandsreisekranken, Rücktransport, Reiserücktritt (je nach Bedarf).",
"item1Title": "Rücktransport",
"item1Desc": "Wenn medizinisch sinnvoll.",
"item2Title": "Familie",
"item2Desc": "Ein Vertrag alle abgesichert.",
"hintTitle": "Hinweis",
"hintSubtitle": "EU-Karte reicht oft nicht",
"hintText": "Privatkliniken & Rücktransport sind oft nicht abgedeckt."
},
"form": {
"title": "Anfrageformular",
"subtitle": "Wir vergleichen passende Tarife für deine Reisen.",
"openContact": "Kontaktformular öffnen",
"savePdf": "Als PDF speichern",
"directTitle": "Direktkontakt",
"directSubtitle": "Wenn es schnell gehen soll.",
"phone": "Telefon: 0171 / 9864053",
"email": "E-Mail: info@finanzen-mizera.de"
},
"catalog": {
"title": "Ratgeber",
"subtitle": "Kurz-Checkliste vor der Reise.",
"checklistTitle": "Checkliste",
"checklistSubtitle": "Beispiele je nach Reiseziel.",
"tipTitle": "Tipp",
"tipSubtitle": "Früh prüfen",
"tipText": "Am besten vor der Buchung klären.",
"rows": {
"row1": "Reiseziel & Dauer",
"row2": "Rücktransport enthalten?",
"row3": "Familientarif vs. Einzelverträge",
"row4": "Reiserücktritt nötig?"
}
}
}

View File

@ -0,0 +1,62 @@
{
"hero": {
"kicker": "Familien & Kinder",
"title": "Vorsorge",
"subtitle": "Absicherung & Planung",
"primaryCta": "Beratung",
"secondaryCta": "Zur Übersicht"
},
"tabs": {
"overview": "Übersicht",
"details": "Details",
"form": "Anfrage",
"catalog": "Ratgeber"
},
"overview": {
"badge": "Finanziell vorsorgen",
"title": "Familienvorsorge",
"subtitle": "Absicherung & Planung",
"description": "Vorsorge bedeutet: die Familie schützen und Zukunft planen verständlich und transparent.",
"primaryButton": "Beratung anfordern",
"secondaryButton": "Kontakt",
"card1Title": "Absicherung",
"card1Subtitle": "Risiken reduzieren",
"card2Title": "Planung",
"card2Subtitle": "einfach & klar",
"rightCardTitle": "Zukunft für die Familie",
"rightCardText": "Wir erklären verständlich ohne Fachchinesisch."
},
"details": {
"title": "Mögliche Themen",
"description": "Absicherung, Vermögensaufbau, Altersvorsorge passend zur Familie.",
"item1Title": "Risikoschutz",
"item1Desc": "z. B. Absicherung bei Ausfall.",
"item2Title": "Vermögen",
"item2Desc": "aufbauen und strukturieren.",
"tipTitle": "Tipp",
"tipSubtitle": "Einfach anfangen",
"tipText": "Kleine Schritte sind besser als gar nicht starten."
},
"form": {
"title": "Anfrageformular",
"subtitle": "Kurz beschreiben wir melden uns mit Vorschlägen.",
"openContact": "Kontaktformular öffnen",
"savePdf": "Als PDF speichern",
"directTitle": "Direktkontakt",
"directSubtitle": "Wenn es schnell gehen soll.",
"phone": "Telefon: 0171 / 9864053",
"email": "E-Mail: info@finanzen-mizera.de"
},
"catalog": {
"title": "Ratgeber",
"subtitle": "Worauf Familien oft Wert legen.",
"checklistTitle": "Checkliste",
"checklistSubtitle": "Beispiele",
"rows": {
"row1": "Monatliches Budget",
"row2": "Ziele (Schule, Haus, Rente)",
"row3": "Risikopuffer",
"row4": "Bestehende Verträge"
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,19 @@
{
"meta": {
"title": "Gesundheitsvorsorge - Agentur Mizera",
"description": "Gesundheitsvorsorge: Umfassende Vorsorge und Prävention für Ihre Gesundheit. Unabhängige Beratung für alle Bereiche der Gesundheitsvorsorge."
},
"hero": {
"title": "Gesundheitsvorsorge",
"subtitle": "Umfassender Schutz für Ihre Gesundheit - im In- und Ausland",
"primaryCta": "Jetzt beraten lassen",
"secondaryCta": "Vergleich starten"
},
"tiles": {
"title": "Wählen Sie Ihren Versicherungsschutz",
"subtitle": "Wir bieten Ihnen maßgeschneiderte Lösungen für alle Bereiche der Gesundheitsvorsorge",
"pkv": "Private Krankenversicherung",
"zahn": "Zahnzusatzversicherung",
"ausland": "Auslandsreisekrankenversicherung"
}
}

View File

@ -85,6 +85,92 @@
"item6": { "title": "Unfall Was jetzt?" } "item6": { "title": "Unfall Was jetzt?" }
}, },
"topTopics": {
"kicker": "Bestseller",
"title": "Die beliebtesten Themen",
"subtitle": "Wählen Sie ein Thema und starten Sie mit wenigen Klicks.",
"allTopics": "Alle Themen anzeigen",
"items": {
"kfz": {
"title": "KFZ-Versicherung",
"description": "Tarife vergleichen und schnell zum passenden Schutz.",
"cta": "Jetzt informieren"
},
"privatkunden": {
"title": "Privatkunden",
"description": "Versicherungen für Alltag, Familie und Zuhause.",
"cta": "Jetzt informieren"
},
"gesundheit": {
"title": "Gesundheitsvorsorge",
"description": "Optimal abgesichert privat und individuell.",
"cta": "Mehr erfahren"
},
"zahnzusatz": {
"title": "Zahnzusatzversicherung",
"description": "Zahnersatz und -erhalt nach Maß: Stellen Sie sich die Leistungen nach Ihren Wünschen zusammen.",
"cta": "Jetzt informieren"
},
"ausland": {
"title": "Auslandskrankenversicherung",
"description": "Auch im Urlaub bestens abgesichert: weltweiter Schutz für medizinische Versorgung.",
"cta": "Jetzt informieren"
},
"sterbegeld": {
"title": "Sterbegeldversicherung",
"description": "Für Ihre Liebsten vorsorgen: finanzielle Sicherheit im Todesfall.",
"cta": "Jetzt informieren"
},
"rechtsschutz": {
"title": "Rechtsschutzversicherung",
"description": "Ihre Rechte schützen passende Bausteine finden.",
"cta": "Mehr erfahren"
},
"senioren": {
"title": "Senioren",
"description": "Sicherheit und Komfort Lösungen für jede Lebensphase.",
"cta": "Alle Themen"
},
"finanzen": {
"title": "Finanzen",
"description": "Vermögensaufbau, Altersvorsorge und Finanzierung.",
"cta": "Zur Übersicht"
}
}
},
"topTopicsExtra": {
"kicker": "Weitere Themen",
"title": "Mehr Absicherung passend zu Ihrer Situation",
"subtitle": "Beliebte Zusatzlösungen schnell erklärt und einfach anfragen.",
"items": {
"zahnzusatz": {
"title": "Zahnzusatzversicherung im Vergleich",
"description": "Zahnersatz und -erhalt nach Maß: Stellen Sie sich die Leistungen nach Ihren Wünschen zusammen.",
"cta": "Jetzt informieren",
"pricePrefix": "z.B.",
"priceValue": "21.95",
"priceUnit": "monatlich"
},
"ausland": {
"title": "Auslandskrankenversicherung",
"description": "Auch im Urlaub bestens abgesichert: mit der Auslandsreisekrankenversicherung - weltweiter Schutz für medizinische Versorgung.",
"cta": "Jetzt informieren",
"pricePrefix": "z.B. ab",
"priceValue": "9.90",
"priceUnit": "jährlich"
},
"sterbegeld": {
"title": "Sterbegeldversicherung",
"description": "Für Ihre Liebsten vorsorgen: finanzielle Sicherheit im Todesfall.",
"cta": "Jetzt informieren",
"pricePrefix": "z.B.\nBeitragsbeispiel",
"priceValue": "40,75",
"priceUnit": "pro Monat für 12.500 € Versicherungssumme\n• Männer/Frauen: ab 53 Jahre"
}
}
},
"services": { "services": {
"title": "Unsere Leistungen", "title": "Unsere Leistungen",
"subtitle": "Alles aus einer Hand für Ihren optimalen Schutz", "subtitle": "Alles aus einer Hand für Ihren optimalen Schutz",

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -28,5 +28,6 @@
"accidentInsurance": "Unfallversicherung", "accidentInsurance": "Unfallversicherung",
"service": "Service", "service": "Service",
"carInsurance": "KFZ-Versicherung", "carInsurance": "KFZ-Versicherung",
"propertyInsurance": "Sachversicherung" "propertyInsurance": "Sachversicherung",
"houseAndApartment": "Haus & Wohnung"
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"hero": {
"title": "Risikoschutz",
"subtitle": "Umfassender Schutz für Sie und Ihre Familie bei unvorhergesehenen Ereignissen"
},
"topics": {
"unfall": "Unfallversicherung",
"bu": "Berufsunfähigkeitsversicherung",
"haftpflicht": "Haftpflichtversicherung",
"rechtsschutz": "Rechtsschutzversicherung",
"tierhalter": "Tierhalterhaftpflicht",
"dread": "Dread-Disease Versicherung"
}
}

View File

@ -0,0 +1,14 @@
{
"hero": {
"title": "Sachversicherung",
"subtitle": "Schutz für Ihr Hab und Gut - von Hausrat bis Immobilie"
},
"topics": {
"hausrat": "Hausratversicherung",
"wohngebaeude": "Wohngebäudeversicherung",
"haftpflicht": "Haftpflichtversicherung",
"tiere": "Tierversicherung",
"rechtsschutz": "Rechtsschutzversicherung",
"elektro": "Elektrogeräteversicherung"
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -13,7 +13,12 @@
"phoneInvalid": "Nieprawidłowy numer telefonu", "phoneInvalid": "Nieprawidłowy numer telefonu",
"successMessage": "Twoja wiadomość została wysłana!", "successMessage": "Twoja wiadomość została wysłana!",
"errorMessage": "Wystąpił błąd. Prosimy spróbować później.", "errorMessage": "Wystąpił błąd. Prosimy spróbować później.",
"notFound": {
"message": "Ups! Nie znaleziono strony",
"backHome": "Wróć na stronę główną"
},
"generalNotice": { "generalNotice": {
"title": "Ważna informacja:",
"text": "Uwaga:\nWskazówki i informacje na tych stronach mają charakter ogólny i niewiążący. To prywatna opinia bez gwarancji poprawności, kompletności ani odpowiedzialności i nie zastępuje indywidualnej porady. Wiążące są wyłącznie warunki ubezpieczenia danego ubezpieczyciela." "text": "Uwaga:\nWskazówki i informacje na tych stronach mają charakter ogólny i niewiążący. To prywatna opinia bez gwarancji poprawności, kompletności ani odpowiedzialności i nie zastępuje indywidualnej porady. Wiążące są wyłącznie warunki ubezpieczenia danego ubezpieczyciela."
}, },
"nav": { "nav": {

View File

@ -0,0 +1,70 @@
{
"title": "OC (rodzina)",
"tabs": {
"overview": "Przegląd",
"details": "Szczegóły",
"form": "Zapytanie",
"claims": "Szkoda",
"catalog": "Poradnik"
},
"overview": {
"badge": "Ochrona przed wysokimi roszczeniami",
"title": "Prywatne OC dla rodzin",
"subtitle": "Dzieci i rodzice pod ochroną",
"description": "Gdy coś się wydarzy, koszty mogą być wysokie. Prywatne OC chroni przed roszczeniami odszkodowawczymi.",
"primaryButton": "Poproś o ofertę",
"secondaryButton": "Konsultacja",
"card1Title": "Ochrona rodziny",
"card1Subtitle": "dzieci w pakiecie",
"card2Title": "Wysoka suma",
"card2Subtitle": "ważne i sensowne",
"rightCardTitle": "Codzienność, zabawa, przypadek",
"rightCardText": "Porównanie szybko i uczciwie."
},
"details": {
"title": "Na co zwrócić uwagę?",
"description": "Suma ubezpieczenia, dzieci nieponoszące winy, szkody w wynajmie, utrata kluczy, ochrona przy braku wypłaty od sprawcy.",
"item1Title": "Brak odpowiedzialności dzieci",
"item1Desc": "Ochrona przy szkodach wyrządzonych przez małe dzieci.",
"item2Title": "Klucze / najem",
"item2Desc": "Ważne elementy w życiu codziennym.",
"tipTitle": "Wskazówka",
"tipSubtitle": "Nie za niska suma",
"tipText": "Obecnie często sensowne jest 1050 mln €."
},
"form": {
"title": "Formularz zapytania",
"subtitle": "Porównamy odpowiednie oferty dla Twojej rodziny.",
"openContact": "Otwórz formularz kontaktowy",
"savePdf": "Zapisz jako PDF",
"directTitle": "Kontakt bezpośredni",
"directSubtitle": "Gdy liczy się czas.",
"phone": "Telefon: 0171 / 9864053",
"email": "E-mail: info@finanzen-mizera.de"
},
"claims": {
"title": "Zgłoszenie szkody",
"subtitle": "Krótka checklista na wypadek szkody.",
"item1Title": "Zabezpiecz dane",
"item1Desc": "Zdjęcia, świadkowie, opisz przebieg.",
"item2Title": "Zgłoś",
"item2Desc": "Pomożemy w likwidacji szkody.",
"noteTitle": "Uwaga",
"noteSubtitle": "Bez uznania winy",
"noteText": "Nie składaj obietnic bez weryfikacji. Najpierw zgłoś."
},
"catalog": {
"title": "Poradnik",
"subtitle": "Typowe pytania rodzin.",
"summaryTitle": "Najważniejsze w skrócie",
"summarySubtitle": "Przykłady szczegóły zależą od taryfy.",
"rows": {
"row1": "Czy dzieci bez odpowiedzialności są objęte?",
"row2": "Czy szkody w wynajmie są w pakiecie?",
"row3": "Czy utrata kluczy jest w pakiecie?",
"row4": "Czy jest ochrona przy braku wypłaty od sprawcy?"
},
"questionTitle": "Pytanie?",
"questionSubtitle": "Doradzimy osobiście."
}
}

View File

@ -0,0 +1,55 @@
{
"title": "Pakiety rodzinne",
"tabs": {
"overview": "Przegląd",
"details": "Szczegóły",
"form": "Zapytanie",
"catalog": "Poradnik"
},
"overview": {
"badge": "Wszystko w jednym miejscu",
"title": "Pakiety rodzinne",
"subtitle": "łącz i oszczędzaj",
"description": "Dzięki pakietom można połączyć zakres ochrony i często zoptymalizować składkę.",
"primaryButton": "Poproś o konsultację",
"secondaryButton": "Kontakt",
"card1Title": "Sensownie",
"card1Subtitle": "dopasowane elementy",
"card2Title": "Rodzina",
"card2Subtitle": "jedna umowa",
"rightCardTitle": "prosto, jasno, dopasowane",
"rightCardText": "Porównamy opcje i wyjaśnimy zrozumiale."
},
"details": {
"title": "Przykłady",
"description": "Wypadek + OC + dodatki zależnie od potrzeb.",
"combosTitle": "Typowe zestawy",
"combosSubtitle": "Przykłady",
"combo1": "Wypadek dziecka + OC",
"combo2": "Zęby + szpital",
"combo3": "Podróż + zagranica",
"tipTitle": "Wskazówka",
"tipSubtitle": "Bez dublowania",
"tipText": "Sprawdzimy, co już masz."
},
"form": {
"title": "Formularz zapytania",
"subtitle": "Zbudujemy pakiet dopasowany do Twojej rodziny.",
"openContact": "Otwórz formularz kontaktowy",
"savePdf": "Zapisz jako PDF",
"directTitle": "Kontakt bezpośredni",
"directSubtitle": "Gdy liczy się czas.",
"phone": "Telefon: 0171 / 9864053",
"email": "E-mail: info@finanzen-mizera.de"
},
"catalog": {
"title": "Poradnik",
"subtitle": "Jak wybrać odpowiedni pakiet.",
"checklistTitle": "Checklista",
"checklistSubtitle": "Przykłady",
"row1": "Jakie ryzyka są ważne?",
"row2": "Budżet miesięczny",
"row3": "Sprawdź obecne umowy",
"row4": "Zakres przed ceną"
}
}

View File

@ -0,0 +1,65 @@
{
"hero": {
"kicker": "Rodzina i dzieci",
"title": "Podróż i zagranica",
"subtitle": "Ubezpieczenie podróżne i więcej",
"primaryCta": "Konsultacja",
"secondaryCta": "Do przeglądu"
},
"tabs": {
"overview": "Przegląd",
"details": "Szczegóły",
"form": "Zapytanie",
"catalog": "Poradnik"
},
"overview": {
"badge": "Bezpieczne podróże z rodziną",
"title": "Ochrona w podróży",
"subtitle": "Ubezpieczenie podróżne i więcej",
"description": "Leczenie za granicą może być kosztowne. Odpowiednia ochrona daje bezpieczeństwo.",
"primaryButton": "Poproś o ofertę",
"secondaryButton": "Konsultacja",
"card1Title": "Na całym świecie",
"card1Subtitle": "również rodzina",
"card2Title": "Szybko",
"card2Subtitle": "w razie potrzeby",
"rightCardTitle": "Wakacje, wizyta, zagranica",
"rightCardText": "Porównanie dopasowane do podróży."
},
"details": {
"title": "Ważne elementy",
"description": "Ubezpieczenie podróżne, transport powrotny, rezygnacja z podróży (wg potrzeb).",
"item1Title": "Transport powrotny",
"item1Desc": "Gdy jest medycznie uzasadniony.",
"item2Title": "Rodzina",
"item2Desc": "Jedna umowa wszyscy chronieni.",
"hintTitle": "Uwaga",
"hintSubtitle": "Karta EKUZ często nie wystarcza",
"hintText": "Prywatne kliniki i transport powrotny często nie są objęte."
},
"form": {
"title": "Formularz zapytania",
"subtitle": "Porównamy odpowiednie oferty dla Twoich podróży.",
"openContact": "Otwórz formularz kontaktowy",
"savePdf": "Zapisz jako PDF",
"directTitle": "Kontakt bezpośredni",
"directSubtitle": "Gdy liczy się czas.",
"phone": "Telefon: 0171 / 9864053",
"email": "E-mail: info@finanzen-mizera.de"
},
"catalog": {
"title": "Poradnik",
"subtitle": "Krótka checklista przed podróżą.",
"checklistTitle": "Checklista",
"checklistSubtitle": "Przykłady zależnie od celu podróży.",
"tipTitle": "Wskazówka",
"tipSubtitle": "Sprawdź wcześniej",
"tipText": "Najlepiej ustalić przed rezerwacją.",
"rows": {
"row1": "Cel i czas trwania",
"row2": "Czy obejmuje transport powrotny?",
"row3": "Taryfa rodzinna vs. indywidualne",
"row4": "Czy potrzebna jest rezygnacja z podróży?"
}
}
}

View File

@ -0,0 +1,62 @@
{
"hero": {
"kicker": "Rodzina i dzieci",
"title": "Zabezpieczenie",
"subtitle": "Ochrona i planowanie",
"primaryCta": "Konsultacja",
"secondaryCta": "Do przeglądu"
},
"tabs": {
"overview": "Przegląd",
"details": "Szczegóły",
"form": "Zapytanie",
"catalog": "Poradnik"
},
"overview": {
"badge": "Zadbaj o finanse",
"title": "Zabezpieczenie rodziny",
"subtitle": "Ochrona i planowanie",
"description": "Zabezpieczenie oznacza ochronę rodziny i planowanie przyszłości jasno i przejrzyście.",
"primaryButton": "Poproś o konsultację",
"secondaryButton": "Kontakt",
"card1Title": "Ochrona",
"card1Subtitle": "mniej ryzyka",
"card2Title": "Plan",
"card2Subtitle": "prosto i jasno",
"rightCardTitle": "Przyszłość rodziny",
"rightCardText": "Wyjaśniamy zrozumiale bez żargonu."
},
"details": {
"title": "Możliwe tematy",
"description": "Ochrona, budowanie majątku, emerytura dopasowane do rodziny.",
"item1Title": "Ochrona ryzyka",
"item1Desc": "np. zabezpieczenie na wypadek utraty dochodu.",
"item2Title": "Majątek",
"item2Desc": "budowanie i porządkowanie.",
"tipTitle": "Wskazówka",
"tipSubtitle": "Zacznij prosto",
"tipText": "Małe kroki są lepsze niż brak działania."
},
"form": {
"title": "Formularz zapytania",
"subtitle": "Opisz krótko wrócimy z propozycjami.",
"openContact": "Otwórz formularz kontaktowy",
"savePdf": "Zapisz jako PDF",
"directTitle": "Kontakt bezpośredni",
"directSubtitle": "Gdy liczy się czas.",
"phone": "Telefon: 0171 / 9864053",
"email": "E-mail: info@finanzen-mizera.de"
},
"catalog": {
"title": "Poradnik",
"subtitle": "Na co rodziny często zwracają uwagę.",
"checklistTitle": "Checklista",
"checklistSubtitle": "Przykłady",
"rows": {
"row1": "Miesięczny budżet",
"row2": "Cele (szkoła, dom, emerytura)",
"row3": "Bufor bezpieczeństwa",
"row4": "Obecne umowy"
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,19 @@
{
"meta": {
"title": "Ochrona zdrowia - Agentur Mizera",
"description": "Ochrona zdrowia: kompleksowa profilaktyka i prewencja. Niezależne doradztwo we wszystkich obszarach ochrony zdrowia."
},
"hero": {
"title": "Ochrona zdrowia",
"subtitle": "Kompleksowa ochrona zdrowia - w kraju i za granicą",
"primaryCta": "Umów konsultację",
"secondaryCta": "Rozpocznij porównanie"
},
"tiles": {
"title": "Wybierz zakres ochrony",
"subtitle": "Oferujemy rozwiązania dopasowane do wszystkich obszarów ochrony zdrowia",
"pkv": "Prywatne ubezpieczenie zdrowotne",
"zahn": "Dodatkowe ubezpieczenie stomatologiczne",
"ausland": "Ubezpieczenie podróżne"
}
}

View File

@ -98,6 +98,92 @@
"gesundheitsvorsorge": { "description": "Profilaktyka i prewencja" } "gesundheitsvorsorge": { "description": "Profilaktyka i prewencja" }
}, },
"topTopics": {
"kicker": "Bestsellery",
"title": "Najpopularniejsze tematy",
"subtitle": "Wybierz temat i zacznij w kilka kliknięć.",
"allTopics": "Pokaż wszystkie tematy",
"items": {
"kfz": {
"title": "Ubezpieczenie KFZ",
"description": "Porównaj oferty i szybko wybierz odpowiednią ochronę.",
"cta": "Dowiedz się więcej"
},
"privatkunden": {
"title": "Klienci prywatni",
"description": "Ubezpieczenia dla życia codziennego, rodziny i domu.",
"cta": "Dowiedz się więcej"
},
"gesundheit": {
"title": "Ochrona zdrowia",
"description": "Indywidualna ochrona zdrowotna dopasowana do Ciebie.",
"cta": "Więcej informacji"
},
"zahnzusatz": {
"title": "Dodatkowe ubezpieczenie stomatologiczne",
"description": "Uzupełnienia i leczenie zębów dopasowane do potrzeb: wybierz zakres świadczeń, który Ci odpowiada.",
"cta": "Dowiedz się więcej"
},
"ausland": {
"title": "Ubezpieczenie zdrowotne w podróży",
"description": "Bezpiecznie na urlopie: ochrona na całym świecie dla opieki medycznej.",
"cta": "Dowiedz się więcej"
},
"sterbegeld": {
"title": "Ubezpieczenie pogrzebowe",
"description": "Zadbaj o bliskich: bezpieczeństwo finansowe na wypadek śmierci.",
"cta": "Dowiedz się więcej"
},
"rechtsschutz": {
"title": "Ubezpieczenie ochrony prawnej",
"description": "Chroń swoje prawa dobierz odpowiednie moduły.",
"cta": "Więcej informacji"
},
"senioren": {
"title": "Seniorzy",
"description": "Bezpieczeństwo i komfort rozwiązania na każdym etapie życia.",
"cta": "Wszystkie tematy"
},
"finanzen": {
"title": "Finanse",
"description": "Budowanie majątku, emerytura i finansowanie.",
"cta": "Przejdź do strony"
}
}
},
"topTopicsExtra": {
"kicker": "Dodatkowe tematy",
"title": "Więcej ochrony dopasowane do Twojej sytuacji",
"subtitle": "Popularne ubezpieczenia dodatkowe krótko, jasno i z możliwością zapytania.",
"items": {
"zahnzusatz": {
"title": "Ubezpieczenie stomatologiczne porównanie",
"description": "Uzupełnienia i leczenie zębów dopasowane do potrzeb: wybierz zakres świadczeń, który Ci odpowiada.",
"cta": "Dowiedz się więcej",
"pricePrefix": "np.",
"priceValue": "21.95",
"priceUnit": "miesięcznie"
},
"ausland": {
"title": "Ubezpieczenie zdrowotne w podróży",
"description": "Bezpiecznie na urlopie: z ubezpieczeniem zdrowotnym w podróży ochrona na całym świecie dla opieki medycznej.",
"cta": "Dowiedz się więcej",
"pricePrefix": "np. od",
"priceValue": "9.90",
"priceUnit": "rocznie"
},
"sterbegeld": {
"title": "Ubezpieczenie pogrzebowe",
"description": "Zadbaj o bliskich: bezpieczeństwo finansowe na wypadek śmierci.",
"cta": "Dowiedz się więcej",
"pricePrefix": "np.\nPrzykład składki",
"priceValue": "40,75",
"priceUnit": "miesięcznie dla sumy ubezpieczenia 12 500 €\n• Kobiety/Mężczyźni: od 53 lat"
}
}
},
"experience": { "experience": {
"title": "Ponad {{years}} lata doświadczenia", "title": "Ponad {{years}} lata doświadczenia",
"description": "Od 1994 roku oferuję moim klientom w Düsseldorfie i okolicach profesjonalne i niezależne doradztwo ubezpieczeniowe. Moim celem jest znalezienie dla każdego optymalnej ochrony na uczciwych warunkach." "description": "Od 1994 roku oferuję moim klientom w Düsseldorfie i okolicach profesjonalne i niezależne doradztwo ubezpieczeniowe. Moim celem jest znalezienie dla każdego optymalnej ochrony na uczciwych warunkach."

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -28,5 +28,6 @@
"accidentInsurance": "Ubezpieczenie od wypadków", "accidentInsurance": "Ubezpieczenie od wypadków",
"service": "Serwis", "service": "Serwis",
"carInsurance": "Ubezpieczenie komunikacyjne", "carInsurance": "Ubezpieczenie komunikacyjne",
"propertyInsurance": "Ubezpieczenia majątkowe" "propertyInsurance": "Ubezpieczenia majątkowe",
"houseAndApartment": "Dom i mieszkanie"
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"hero": {
"title": "Ochrona ryzyka",
"subtitle": "Kompleksowa ochrona dla Ciebie i Twojej rodziny w nieprzewidzianych sytuacjach"
},
"topics": {
"unfall": "Ubezpieczenie od wypadków",
"bu": "Ubezpieczenie od niezdolności do pracy",
"haftpflicht": "Ubezpieczenie OC",
"rechtsschutz": "Ubezpieczenie ochrony prawnej",
"tierhalter": "OC posiadacza zwierząt",
"dread": "Ubezpieczenie na wypadek poważnych chorób"
}
}

View File

@ -0,0 +1,14 @@
{
"hero": {
"title": "Ubezpieczenia majątkowe",
"subtitle": "Ochrona Twojego mienia - od wyposażenia domu po nieruchomość"
},
"topics": {
"hausrat": "Ubezpieczenie mienia ruchomego",
"wohngebaeude": "Ubezpieczenie budynku",
"haftpflicht": "Ubezpieczenie OC",
"tiere": "Ubezpieczenie zwierząt",
"rechtsschutz": "Ubezpieczenie ochrony prawnej",
"elektro": "Ubezpieczenie sprzętu elektronicznego"
}
}

Binary file not shown.

View File

@ -119,7 +119,7 @@ const App = () => {
<Toaster /> <Toaster />
<Sonner /> <Sonner />
<ErrorBoundary> <ErrorBoundary>
<BrowserRouter> <BrowserRouter basename={import.meta.env.BASE_URL}>
<Routes> <Routes>
<Route path="/" element={<Index />} /> <Route path="/" element={<Index />} />
<Route path="/kfz" element={<KFZ />} /> <Route path="/kfz" element={<KFZ />} />

View File

@ -1,18 +1,24 @@
import { AlertTriangle } from 'lucide-react'; import { AlertTriangle } from 'lucide-react';
import { useTranslation } from 'react-i18next';
type Props = { type Props = {
className?: string; className?: string;
}; };
export default function GeneralNotice({ className }: Props) { export default function GeneralNotice({ className }: Props) {
const { t } = useTranslation('common');
return ( return (
<div className={className ?? 'mt-8 rounded-md border border-amber-200 bg-amber-50/80 p-4'}> <div className={className ?? 'mt-8 rounded-md border border-amber-200 bg-amber-50/80 p-4'}>
<div className="flex items-start gap-3"> <div className="flex items-start gap-3">
<AlertTriangle className="w-6 h-6 text-amber-600 mt-0.5 flex-shrink-0" /> <AlertTriangle className="w-6 h-6 text-amber-600 mt-0.5 flex-shrink-0" />
<div className="text-base text-amber-800 leading-relaxed"> <div className="text-base text-amber-800 leading-relaxed">
<h4 className="font-semibold mb-2">Wichtiger Hinweis:</h4> <h4 className="font-semibold mb-2">{t('generalNotice.title', 'Wichtiger Hinweis:')}</h4>
<p> <p>
Die auf diesen Seiten enthaltenen Tipps und Informationen stellen allgemeine, unverbindliche Hinweise zu Versicherungen dar. Es handelt sich um eine private Meinungsäußerung ohne Anspruch auf Richtigkeit, Vollständigkeit oder Haftung und ersetzt keine individuelle Beratung. Maßgeblich sind ausschließlich die jeweiligen Versicherungsbedingungen des Versicherungsunternehmens. {t(
'generalNotice.text',
'Die auf diesen Seiten enthaltenen Tipps und Informationen stellen allgemeine, unverbindliche Hinweise zu Versicherungen dar. Es handelt sich um eine private Meinungsäußerung ohne Anspruch auf Richtigkeit, Vollständigkeit oder Haftung und ersetzt keine individuelle Beratung. Maßgeblich sind ausschließlich die jeweiligen Versicherungsbedingungen des Versicherungsunternehmens.'
)}
</p> </p>
</div> </div>
</div> </div>

View File

@ -18,6 +18,8 @@ const Header = () => {
const navigation = [ const navigation = [
{ name: t('home'), href: '/', icon: Home }, { name: t('home'), href: '/', icon: Home },
{ name: t('privateCustomers'), href: '/privatkunden', icon: Users }, { name: t('privateCustomers'), href: '/privatkunden', icon: Users },
{ name: t('houseAndApartment', 'Haus & Wohnung'), href: '/sachversicherung', icon: Home },
{ name: t('health', 'Gesundheit'), href: '/gesundheitsvorsorge', icon: Shield },
{ name: t('familiesAndChildren', 'Familien & Kinder'), href: '/familien-kinder', icon: Users }, { name: t('familiesAndChildren', 'Familien & Kinder'), href: '/familien-kinder', icon: Users },
{ name: t('seniors'), href: '/senioren', icon: Shield }, { name: t('seniors'), href: '/senioren', icon: Shield },
{ name: t('businessCustomers'), href: '/geschaeftskunden', icon: Truck }, { name: t('businessCustomers'), href: '/geschaeftskunden', icon: Truck },
@ -36,13 +38,79 @@ const Header = () => {
{ name: t('carInsurance', 'KFZ'), href: '/kfz', icon: Truck }, { name: t('carInsurance', 'KFZ'), href: '/kfz', icon: Truck },
{ name: t('services', 'Leistungen'), href: '/leistungen', icon: FileText }, { name: t('services', 'Leistungen'), href: '/leistungen', icon: FileText },
{ name: 'Risikolebensversicherung', href: '/risikolebensversicherung', icon: Shield }, { name: 'Risikolebensversicherung', href: '/risikolebensversicherung', icon: Shield },
{ name: 'Sterbegeldversicherung', href: '/senioren-sterbegeldversicherung', icon: Shield },
{ name: 'Sterbegeld', href: '/senioren-sterbegeldversicherung', icon: Shield },
{ name: 'Bestattungsvorsorge', href: '/senioren-sterbegeldversicherung', icon: Shield },
{ name: 'Krankheits-Schutzbrief', href: '/krankheitsschutzbrief', icon: Shield }, { name: 'Krankheits-Schutzbrief', href: '/krankheitsschutzbrief', icon: Shield },
{ name: 'Vermögenssicherung', href: '/vermoegenssicherung', icon: Shield }, { name: 'Vermögenssicherung', href: '/vermoegenssicherung', icon: Shield },
{ name: 'Autoversicherung', href: '/autoversicherung', icon: Truck },
{ name: 'Motorradversicherung', href: '/motorradversicherung', icon: Truck },
{ name: 'Quadversicherung', href: '/quadversicherung', icon: Truck },
{ name: 'Quad', href: '/quadversicherung', icon: Truck },
{ name: 'FairMobil', href: '/fairmobil', icon: Truck },
{ name: 'Flottenversicherung', href: '/flottenversicherung', icon: Truck },
{ name: 'Drittfahrer-Schutz', href: '/drittfahrer-schutz', icon: Shield },
{ name: 'Hausratversicherung', href: '/hausratversicherung', icon: Shield },
{ name: 'Wohngebäudeversicherung', href: '/hausrat', icon: Shield },
{ name: 'Haftpflichtversicherung', href: '/haftpflicht', icon: Shield },
{ name: 'Haftpflicht', href: '/haftpflicht', icon: Shield },
{ name: 'Rechtsschutzversicherung', href: '/rechtsschutzversicherung', icon: Shield },
{ name: 'Tierversicherung', href: '/tierversicherung', icon: Shield },
{ name: 'Hundeversicherung', href: '/tierversicherung/hunde', icon: Shield },
{ name: 'Pferdeversicherung', href: '/tierversicherung/pferde', icon: Shield },
{ name: 'Katzenversicherung', href: '/tierversicherung/katzen', icon: Shield },
{ name: 'Familien & Kinder', href: '/familien-kinder', icon: Users },
{ name: 'Kinderunfall', href: '/familien-kinder/kinderunfall', icon: Shield },
{ name: 'Kinder Gesundheit', href: '/familien-kinder/gesundheit', icon: Shield },
{ name: 'Kinder Zahn', href: '/familien-kinder/gesundheit/zahn', icon: Shield },
{ name: 'Familien Reise', href: '/familien-kinder/reise', icon: Shield },
{ name: 'Familien Vorsorge', href: '/familien-kinder/vorsorge', icon: Shield },
{ name: 'Private Krankenversicherung', href: '/private-krankenversicherung', icon: Shield },
{ name: 'Zahnzusatzversicherung', href: '/zahnzusatzversicherung', icon: Shield },
{ name: 'Auslandsreisekrankenversicherung', href: '/auslandsreisekrankenversicherung', icon: Shield },
{ name: 'Gesundheitsvorsorge', href: '/gesundheitsvorsorge', icon: Shield },
{ name: 'Altersvorsorge', href: '/altersvorsorge', icon: Shield },
{ name: 'Risikoschutz', href: '/risikoschutz', icon: Shield },
{ name: 'Sachversicherung', href: '/sachversicherung', icon: Shield },
{ name: 'Riester-Rente', href: '/riester-rente', icon: FileText },
{ name: 'Tagesgeld', href: '/tagesgeld', icon: FileText },
{ name: 'Investmentsparplan', href: '/investmentsparplan', icon: FileText },
{ name: 'Depots', href: '/depots', icon: FileText },
{ name: 'Beteiligungen', href: '/beteiligungen', icon: FileText },
{ name: 'Finanzierung', href: '/finanzierung', icon: FileText },
{ name: 'Kreditvergleich', href: '/kreditvergleich', icon: FileText },
{ name: 'Kreditabsicherung', href: '/kreditabsicherung', icon: FileText },
{ name: 'Brutto-Netto-Rechner', href: '/bruttolnetto', icon: FileText },
{ name: 'Senioren Altersvorsorge', href: '/senioren-altersvorsorge', icon: Shield },
{ name: 'Senioren Gesundheitsvorsorge', href: '/senioren-gesundheitsvorsorge', icon: Shield },
{ name: 'Senioren Risikoschutz', href: '/senioren-risikoschutz', icon: Shield },
{ name: 'Geschäftskunden Flottenversicherung', href: '/geschaeftskunden/flottenversicherung', icon: Truck },
{ name: 'Geschäftskunden Betriebsrente', href: '/geschaeftskunden/betriebsrente', icon: FileText },
{ name: 'Geschäftskunden Betriebshaftpflicht', href: '/geschaeftskunden/betriebshaftpflicht', icon: Shield },
{ name: 'Geschäftskunden Betriebsunterbrechung', href: '/geschaeftskunden/betriebsunterbrechung', icon: Shield },
{ name: 'Geschäftskunden Betriebskrankenversicherung', href: '/geschaeftskunden/betriebskrankenversicherung', icon: Shield },
{ name: 'Geschäftskunden Cyber-Versicherung', href: '/geschaeftskunden/cyber-versicherung', icon: Shield },
{ name: 'Geschäftskunden Gebäudeversicherung', href: '/geschaeftskunden/gebaeudeversicherung', icon: Shield },
{ name: 'Geschäftskunden Rechtsschutz', href: '/geschaeftskunden/rechtsschutz', icon: Shield },
{ name: 'Geschäftskunden Risikoschutz', href: '/geschaeftskunden/risikoschutz', icon: Shield },
{ name: 'Geschäftskunden Sachversicherung', href: '/geschaeftskunden/sachversicherung', icon: Shield },
{ name: 'Geschäftskunden Umwelthaftpflicht', href: '/geschaeftskunden/umwelthaftpflicht', icon: Shield },
{ name: 'Geschäftskunden Vermögenssicherung', href: '/geschaeftskunden/vermoegenssicherung', icon: Shield },
]; ];
const normalizedQuery = searchQuery.trim().toLowerCase(); const normalizedQuery = searchQuery.trim().toLowerCase();
const filteredItems = normalizedQuery const filteredItems = normalizedQuery
? searchItems.filter((item) => item.name.toLowerCase().includes(normalizedQuery)) ? searchItems
.filter((item) => item.name.toLowerCase().includes(normalizedQuery))
.sort((a, b) => {
const aName = a.name.toLowerCase();
const bName = b.name.toLowerCase();
const aStarts = aName.startsWith(normalizedQuery);
const bStarts = bName.startsWith(normalizedQuery);
if (aStarts && !bStarts) return -1;
if (!aStarts && bStarts) return 1;
return aName.localeCompare(bName, 'de', { sensitivity: 'base' });
})
: []; : [];
return ( return (
@ -76,7 +144,7 @@ const Header = () => {
{filteredItems.length > 0 && ( {filteredItems.length > 0 && (
<div className="absolute right-0 mt-2 w-72 rounded-md border border-gray-200 bg-white shadow-sm overflow-hidden z-50"> <div className="absolute right-0 mt-2 w-72 rounded-md border border-gray-200 bg-white shadow-sm overflow-hidden z-50">
{filteredItems.slice(0, 8).map((item) => ( {filteredItems.slice(0, 20).map((item) => (
<button <button
key={`${item.href}-${item.name}`} key={`${item.href}-${item.name}`}
type="button" type="button"

View File

@ -44,6 +44,13 @@ i18n
'geschaeftskunden', 'geschaeftskunden',
'service', 'service',
'unfall', 'unfall',
'gesundheitsvorsorge',
'risikoschutz',
'sachversicherung',
'familienreise',
'familienvorsorge',
'familienpakete',
'familienhaftpflicht',
'vermoegenssicherung', 'vermoegenssicherung',
'risikolebensversicherung', 'risikolebensversicherung',
'krankheitsschutzbrief', 'krankheitsschutzbrief',

View File

@ -1,5 +1,6 @@
import React, { useState } from 'react'; import React, { useState } from 'react';
import { Link, useNavigate } from 'react-router-dom'; import { Link, useNavigate } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { Users, Shield, Phone, Mail, CheckCircle, Download, Home, FileText, Calculator } from 'lucide-react'; import { Users, Shield, Phone, Mail, CheckCircle, Download, Home, FileText, Calculator } from 'lucide-react';
import Layout from '@/components/Layout'; import Layout from '@/components/Layout';
import GeneralNotice from '@/components/GeneralNotice'; import GeneralNotice from '@/components/GeneralNotice';
@ -11,6 +12,7 @@ import RightImageCard from '@/components/tab-pages/RightImageCard';
const Familienpakete = () => { const Familienpakete = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const { t } = useTranslation('familienpakete');
const baseUrl = import.meta.env.BASE_URL; const baseUrl = import.meta.env.BASE_URL;
const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`; const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`;
const [activeTab, setActiveTab] = useState('overview'); const [activeTab, setActiveTab] = useState('overview');
@ -20,7 +22,7 @@ const Familienpakete = () => {
<div className="min-h-screen bg-gray-50"> <div className="min-h-screen bg-gray-50">
<div className="container mx-auto px-4 md:px-6 py-8"> <div className="container mx-auto px-4 md:px-6 py-8">
<div className="max-w-screen-2xl mx-auto"> <div className="max-w-screen-2xl mx-auto">
<h2 className="text-2xl font-bold text-gray-900 mb-6 text-center">Familienpakete</h2> <h2 className="text-2xl font-bold text-gray-900 mb-6 text-center">{t('title', 'Familienpakete')}</h2>
<div className="bg-white rounded-lg border border-gray-200 shadow-sm"> <div className="bg-white rounded-lg border border-gray-200 shadow-sm">
<Tabs value={activeTab} onValueChange={setActiveTab} className="w-full"> <Tabs value={activeTab} onValueChange={setActiveTab} className="w-full">
@ -31,28 +33,28 @@ const Familienpakete = () => {
className="relative px-3 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=active]:shadow-md data-[state=inactive]:bg-white data-[state=inactive]:text-gray-600 data-[state=inactive]:hover:bg-gray-50 data-[state=inactive]:border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 !outline-none !ring-0" className="relative px-3 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=active]:shadow-md data-[state=inactive]:bg-white data-[state=inactive]:text-gray-600 data-[state=inactive]:hover:bg-gray-50 data-[state=inactive]:border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 !outline-none !ring-0"
> >
<Home className="w-4 h-4 mr-1.5" /> <Home className="w-4 h-4 mr-1.5" />
Übersicht {t('tabs.overview', 'Übersicht')}
</TabsTrigger> </TabsTrigger>
<TabsTrigger <TabsTrigger
value="details" value="details"
className="relative px-3 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=active]:shadow-md data-[state=inactive]:bg-white data-[state=inactive]:text-gray-600 data-[state=inactive]:hover:bg-gray-50 data-[state=inactive]:border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 !outline-none !ring-0" className="relative px-3 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=active]:shadow-md data-[state=inactive]:bg-white data-[state=inactive]:text-gray-600 data-[state=inactive]:hover:bg-gray-50 data-[state=inactive]:border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 !outline-none !ring-0"
> >
<FileText className="w-4 h-4 mr-1.5" /> <FileText className="w-4 h-4 mr-1.5" />
Details {t('tabs.details', 'Details')}
</TabsTrigger> </TabsTrigger>
<TabsTrigger <TabsTrigger
value="form" value="form"
className="relative px-3 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=active]:shadow-md data-[state=inactive]:bg-white data-[state=inactive]:text-gray-600 data-[state=inactive]:hover:bg-gray-50 data-[state=inactive]:border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 !outline-none !ring-0" className="relative px-3 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=active]:shadow-md data-[state=inactive]:bg-white data-[state=inactive]:text-gray-600 data-[state=inactive]:hover:bg-gray-50 data-[state=inactive]:border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 !outline-none !ring-0"
> >
<Phone className="w-4 h-4 mr-1.5" /> <Phone className="w-4 h-4 mr-1.5" />
Anfrage {t('tabs.form', 'Anfrage')}
</TabsTrigger> </TabsTrigger>
<TabsTrigger <TabsTrigger
value="catalog" value="catalog"
className="relative px-3 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=active]:shadow-md data-[state=inactive]:bg-white data-[state=inactive]:text-gray-600 data-[state=inactive]:hover:bg-gray-50 data-[state=inactive]:border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 !outline-none !ring-0" className="relative px-3 py-2.5 text-sm font-medium rounded-lg transition-all duration-200 data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=active]:shadow-md data-[state=inactive]:bg-white data-[state=inactive]:text-gray-600 data-[state=inactive]:hover:bg-gray-50 data-[state=inactive]:border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 !outline-none !ring-0"
> >
<Shield className="w-4 h-4 mr-1.5" /> <Shield className="w-4 h-4 mr-1.5" />
Ratgeber {t('tabs.catalog', 'Ratgeber')}
</TabsTrigger> </TabsTrigger>
</TabsList> </TabsList>
</div> </div>
@ -65,22 +67,25 @@ const Familienpakete = () => {
<> <>
<div className="inline-flex items-center gap-2 rounded-full bg-green-50 border border-green-200 px-3 py-1 text-sm text-green-800 mb-4"> <div className="inline-flex items-center gap-2 rounded-full bg-green-50 border border-green-200 px-3 py-1 text-sm text-green-800 mb-4">
<Users className="w-4 h-4" /> <Users className="w-4 h-4" />
<span>Alles aus einer Hand</span> <span>{t('overview.badge', 'Alles aus einer Hand')}</span>
</div> </div>
<h1 className="text-3xl md:text-4xl font-bold text-gray-900 leading-tight"> <h1 className="text-3xl md:text-4xl font-bold text-gray-900 leading-tight">
Familienpakete {t('overview.title', 'Familienpakete')}
<span className="block text-green-700">kombinieren & sparen</span> <span className="block text-green-700">{t('overview.subtitle', 'kombinieren & sparen')}</span>
</h1> </h1>
<p className="mt-4 text-gray-600 text-lg"> <p className="mt-4 text-gray-600 text-lg">
Mit passenden Paketen lassen sich Leistungen bündeln und oft Beiträge optimieren. {t(
'overview.description',
'Mit passenden Paketen lassen sich Leistungen bündeln und oft Beiträge optimieren.'
)}
</p> </p>
<div className="mt-6 flex flex-col sm:flex-row gap-3"> <div className="mt-6 flex flex-col sm:flex-row gap-3">
<Button onClick={() => setActiveTab('form')} className="bg-green-700 hover:bg-green-800"> <Button onClick={() => setActiveTab('form')} className="bg-green-700 hover:bg-green-800">
Beratung anfordern {t('overview.primaryButton', 'Beratung anfordern')}
</Button> </Button>
<Button variant="outline" onClick={() => navigate('/kontakt')} className="border-gray-300"> <Button variant="outline" onClick={() => navigate('/kontakt')} className="border-gray-300">
Kontakt {t('overview.secondaryButton', 'Kontakt')}
</Button> </Button>
</div> </div>
@ -88,15 +93,15 @@ const Familienpakete = () => {
<div className="flex items-center gap-3 rounded-lg border border-gray-200 bg-white p-3"> <div className="flex items-center gap-3 rounded-lg border border-gray-200 bg-white p-3">
<Shield className="w-5 h-5 text-green-700" /> <Shield className="w-5 h-5 text-green-700" />
<div className="text-sm"> <div className="text-sm">
<div className="font-semibold text-gray-900">Sinnvoll</div> <div className="font-semibold text-gray-900">{t('overview.card1Title', 'Sinnvoll')}</div>
<div className="text-gray-600">Bausteine passend</div> <div className="text-gray-600">{t('overview.card1Subtitle', 'Bausteine passend')}</div>
</div> </div>
</div> </div>
<div className="flex items-center gap-3 rounded-lg border border-gray-200 bg-white p-3"> <div className="flex items-center gap-3 rounded-lg border border-gray-200 bg-white p-3">
<Users className="w-5 h-5 text-green-700" /> <Users className="w-5 h-5 text-green-700" />
<div className="text-sm"> <div className="text-sm">
<div className="font-semibold text-gray-900">Familie</div> <div className="font-semibold text-gray-900">{t('overview.card2Title', 'Familie')}</div>
<div className="text-gray-600">ein Vertrag</div> <div className="text-gray-600">{t('overview.card2Subtitle', 'ein Vertrag')}</div>
</div> </div>
</div> </div>
</div> </div>
@ -117,9 +122,11 @@ const Familienpakete = () => {
<div className="p-5"> <div className="p-5">
<div className="flex items-center gap-2 text-sm text-gray-600"> <div className="flex items-center gap-2 text-sm text-gray-600">
<Users className="w-4 h-4" /> <Users className="w-4 h-4" />
<span>einfach, klar, passend</span> <span>{t('overview.rightCardTitle', 'einfach, klar, passend')}</span>
</div>
<div className="mt-2 text-sm text-gray-600">
{t('overview.rightCardText', 'Wir vergleichen Optionen und erklären verständlich.')}
</div> </div>
<div className="mt-2 text-sm text-gray-600">Wir vergleichen Optionen und erklären verständlich.</div>
</div> </div>
</div> </div>
</div> </div>
@ -131,20 +138,20 @@ const Familienpakete = () => {
<TwoColumnTab <TwoColumnTab
left={ left={
<> <>
<h3 className="text-2xl font-bold text-gray-900">Beispiele</h3> <h3 className="text-2xl font-bold text-gray-900">{t('details.title', 'Beispiele')}</h3>
<p className="mt-2 text-gray-600">Unfall + Haftpflicht + Zusatz je nach Bedarf.</p> <p className="mt-2 text-gray-600">{t('details.description', 'Unfall + Haftpflicht + Zusatz je nach Bedarf.')}</p>
<Card className="mt-6 border-gray-200"> <Card className="mt-6 border-gray-200">
<CardHeader> <CardHeader>
<CardTitle className="text-lg">Typische Kombinationen</CardTitle> <CardTitle className="text-lg">{t('details.combosTitle', 'Typische Kombinationen')}</CardTitle>
<CardDescription>Beispiele</CardDescription> <CardDescription>{t('details.combosSubtitle', 'Beispiele')}</CardDescription>
</CardHeader> </CardHeader>
<CardContent className="text-sm"> <CardContent className="text-sm">
<div className="space-y-2"> <div className="space-y-2">
{[ {[
'Kinderunfall + Haftpflicht', t('details.combo1', 'Kinderunfall + Haftpflicht'),
'Zahn + Stationär', t('details.combo2', 'Zahn + Stationär'),
'Reise + Ausland', t('details.combo3', 'Reise + Ausland'),
].map((row) => ( ].map((row) => (
<div key={row} className="flex items-start gap-2"> <div key={row} className="flex items-start gap-2">
<CheckCircle className="w-4 h-4 text-green-700 mt-0.5" /> <CheckCircle className="w-4 h-4 text-green-700 mt-0.5" />
@ -159,10 +166,10 @@ const Familienpakete = () => {
right={ right={
<Card className="border-gray-200"> <Card className="border-gray-200">
<CardHeader> <CardHeader>
<CardTitle className="text-lg">Tipp</CardTitle> <CardTitle className="text-lg">{t('details.tipTitle', 'Tipp')}</CardTitle>
<CardDescription>Keine Doppelungen</CardDescription> <CardDescription>{t('details.tipSubtitle', 'Keine Doppelungen')}</CardDescription>
</CardHeader> </CardHeader>
<CardContent className="text-sm text-gray-700">Wir prüfen, was schon vorhanden ist.</CardContent> <CardContent className="text-sm text-gray-700">{t('details.tipText', 'Wir prüfen, was schon vorhanden ist.')}</CardContent>
</Card> </Card>
} }
/> />
@ -172,16 +179,16 @@ const Familienpakete = () => {
<TwoColumnTab <TwoColumnTab
left={ left={
<> <>
<h3 className="text-2xl font-bold text-gray-900">Anfrageformular</h3> <h3 className="text-2xl font-bold text-gray-900">{t('form.title', 'Anfrageformular')}</h3>
<p className="mt-2 text-gray-600">Wir bauen ein Paket passend zu deiner Familie.</p> <p className="mt-2 text-gray-600">{t('form.subtitle', 'Wir bauen ein Paket passend zu deiner Familie.')}</p>
<div className="mt-4 flex flex-col sm:flex-row gap-3"> <div className="mt-4 flex flex-col sm:flex-row gap-3">
<Link to="/contact" className="inline-flex"> <Link to="/contact" className="inline-flex">
<Button className="bg-green-700 hover:bg-green-800">Kontaktformular öffnen</Button> <Button className="bg-green-700 hover:bg-green-800">{t('form.openContact', 'Kontaktformular öffnen')}</Button>
</Link> </Link>
<Button variant="outline" className="gap-2" onClick={() => window.print()}> <Button variant="outline" className="gap-2" onClick={() => window.print()}>
<Download className="w-4 h-4" /> <Download className="w-4 h-4" />
Als PDF speichern {t('form.savePdf', 'Als PDF speichern')}
</Button> </Button>
</div> </div>
</> </>
@ -190,17 +197,17 @@ const Familienpakete = () => {
<RightImageCard src={assetUrl('iStock-956005062.jpg')} alt="Anfrage"> <RightImageCard src={assetUrl('iStock-956005062.jpg')} alt="Anfrage">
<Card className="border-gray-200"> <Card className="border-gray-200">
<CardHeader> <CardHeader>
<CardTitle className="text-lg">Direktkontakt</CardTitle> <CardTitle className="text-lg">{t('form.directTitle', 'Direktkontakt')}</CardTitle>
<CardDescription>Wenn es schnell gehen soll.</CardDescription> <CardDescription>{t('form.directSubtitle', 'Wenn es schnell gehen soll.')}</CardDescription>
</CardHeader> </CardHeader>
<CardContent className="space-y-3 text-sm text-gray-700"> <CardContent className="space-y-3 text-sm text-gray-700">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<Phone className="w-4 h-4 text-green-700" /> <Phone className="w-4 h-4 text-green-700" />
<span>Telefon: 0171 / 9864053</span> <span>{t('form.phone', 'Telefon: 0171 / 9864053')}</span>
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<Mail className="w-4 h-4 text-green-700" /> <Mail className="w-4 h-4 text-green-700" />
<span>E-Mail: info@finanzen-mizera.de</span> <span>{t('form.email', 'E-Mail: info@finanzen-mizera.de')}</span>
</div> </div>
</CardContent> </CardContent>
</Card> </Card>
@ -213,21 +220,21 @@ const Familienpakete = () => {
<TwoColumnTab <TwoColumnTab
left={ left={
<> <>
<h3 className="text-2xl font-bold text-gray-900">Ratgeber</h3> <h3 className="text-2xl font-bold text-gray-900">{t('catalog.title', 'Ratgeber')}</h3>
<p className="mt-2 text-gray-600">So findest du das passende Paket.</p> <p className="mt-2 text-gray-600">{t('catalog.subtitle', 'So findest du das passende Paket.')}</p>
<Card className="mt-6 border-gray-200"> <Card className="mt-6 border-gray-200">
<CardHeader> <CardHeader>
<CardTitle className="text-lg">Checkliste</CardTitle> <CardTitle className="text-lg">{t('catalog.checklistTitle', 'Checkliste')}</CardTitle>
<CardDescription>Beispiele</CardDescription> <CardDescription>{t('catalog.checklistSubtitle', 'Beispiele')}</CardDescription>
</CardHeader> </CardHeader>
<CardContent className="text-sm"> <CardContent className="text-sm">
<div className="space-y-2"> <div className="space-y-2">
{[ {[
'Welche Risiken sind wichtig?', t('catalog.row1', 'Welche Risiken sind wichtig?'),
'Budget pro Monat', t('catalog.row2', 'Budget pro Monat'),
'Bestehende Verträge prüfen', t('catalog.row3', 'Bestehende Verträge prüfen'),
'Leistung vor Preis', t('catalog.row4', 'Leistung vor Preis'),
].map((row) => ( ].map((row) => (
<div key={row} className="flex items-start gap-2"> <div key={row} className="flex items-start gap-2">
<CheckCircle className="w-4 h-4 text-green-700 mt-0.5" /> <CheckCircle className="w-4 h-4 text-green-700 mt-0.5" />

View File

@ -1,37 +1,45 @@
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Heart, Shield, Plane, ArrowRight } from 'lucide-react'; import { Heart, Shield, Plane, ArrowRight } from 'lucide-react';
import { useTranslation } from 'react-i18next';
import Layout from '@/components/Layout'; import Layout from '@/components/Layout';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import Disclaimer from '@/components/Disclaimer'; import Disclaimer from '@/components/Disclaimer';
const Gesundheitsvorsorge = () => { const Gesundheitsvorsorge = () => {
const { t } = useTranslation('gesundheitsvorsorge');
const baseUrl = import.meta.env.BASE_URL; const baseUrl = import.meta.env.BASE_URL;
const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`; const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`;
// Add SEO metadata for search // Add SEO metadata for search
useEffect(() => { useEffect(() => {
document.title = 'Gesundheitsvorsorge - Agentur Mizera'; document.title = t('meta.title', 'Gesundheitsvorsorge - Agentur Mizera');
const metaDescription = document.querySelector('meta[name="description"]'); const metaDescription = document.querySelector('meta[name="description"]');
if (metaDescription) { if (metaDescription) {
metaDescription.setAttribute('content', 'Gesundheitsvorsorge: Umfassende Vorsorge und Prävention für Ihre Gesundheit. Unabhängige Beratung für alle Bereiche der Gesundheitsvorsorge.'); metaDescription.setAttribute(
'content',
t(
'meta.description',
'Gesundheitsvorsorge: Umfassende Vorsorge und Prävention für Ihre Gesundheit. Unabhängige Beratung für alle Bereiche der Gesundheitsvorsorge.'
)
);
} }
}, []); }, [t]);
const healthTopics = [ const healthTopics = [
{ {
title: 'Private Krankenversicherung', title: t('tiles.pkv', 'Private Krankenversicherung'),
href: '/private-krankenversicherung', href: '/private-krankenversicherung',
image: assetUrl('head_kranken.jpg') image: assetUrl('head_kranken.jpg')
}, },
{ {
title: 'Zahnzusatzversicherung', title: t('tiles.zahn', 'Zahnzusatzversicherung'),
href: '/zahnzusatzversicherung', href: '/zahnzusatzversicherung',
image: assetUrl('Fotolia_45263348_S.jpg') image: assetUrl('Fotolia_45263348_S.jpg')
}, },
{ {
title: 'Auslandsreisekrankenversicherung', title: t('tiles.ausland', 'Auslandsreisekrankenversicherung'),
href: '/auslandsreisekrankenversicherung', href: '/auslandsreisekrankenversicherung',
image: assetUrl('iStock-637584740.jpg') image: assetUrl('iStock-637584740.jpg')
} }
@ -51,18 +59,18 @@ const Gesundheitsvorsorge = () => {
<div className="max-w-3xl"> <div className="max-w-3xl">
<div className="bg-black/40 text-white px-8 py-6 md:px-10 md:py-8 shadow-lg"> <div className="bg-black/40 text-white px-8 py-6 md:px-10 md:py-8 shadow-lg">
<h1 className="text-4xl md:text-5xl font-bold text-white mb-6"> <h1 className="text-4xl md:text-5xl font-bold text-white mb-6">
Gesundheitsvorsorge {t('hero.title', 'Gesundheitsvorsorge')}
</h1> </h1>
<p className="text-xl text-white/90 mb-8 max-w-2xl"> <p className="text-xl text-white/90 mb-8 max-w-2xl">
Umfassender Schutz für Ihre Gesundheit - im In- und Ausland {t('hero.subtitle', 'Umfassender Schutz für Ihre Gesundheit - im In- und Ausland')}
</p> </p>
<div className="flex flex-col sm:flex-row gap-4"> <div className="flex flex-col sm:flex-row gap-4">
<Button size="lg" className="bg-blue-600 hover:bg-blue-700 text-white"> <Button size="lg" className="bg-blue-600 hover:bg-blue-700 text-white">
Jetzt beraten lassen {t('hero.primaryCta', 'Jetzt beraten lassen')}
<ArrowRight className="ml-2 w-5 h-5" /> <ArrowRight className="ml-2 w-5 h-5" />
</Button> </Button>
<Button size="lg" variant="outline" className="bg-white/10 border-white text-white hover:bg-white/20"> <Button size="lg" variant="outline" className="bg-white/10 border-white text-white hover:bg-white/20">
Vergleich starten {t('hero.secondaryCta', 'Vergleich starten')}
</Button> </Button>
</div> </div>
</div> </div>
@ -76,10 +84,10 @@ const Gesundheitsvorsorge = () => {
<div className="max-w-6xl mx-auto"> <div className="max-w-6xl mx-auto">
<div className="text-center mb-12"> <div className="text-center mb-12">
<h2 className="text-3xl font-bold text-gray-900 mb-4"> <h2 className="text-3xl font-bold text-gray-900 mb-4">
Wählen Sie Ihren Versicherungsschutz {t('tiles.title', 'Wählen Sie Ihren Versicherungsschutz')}
</h2> </h2>
<p className="text-lg text-gray-600 max-w-3xl mx-auto"> <p className="text-lg text-gray-600 max-w-3xl mx-auto">
Wir bieten Ihnen maßgeschneiderte Lösungen für alle Bereiche der Gesundheitsvorsorge {t('tiles.subtitle', 'Wir bieten Ihnen maßgeschneiderte Lösungen für alle Bereiche der Gesundheitsvorsorge')}
</p> </p>
</div> </div>

View File

@ -9,12 +9,14 @@ import HeroSlider from '@/components/HeroSlider';
import Disclaimer from '@/components/Disclaimer'; import Disclaimer from '@/components/Disclaimer';
const Index = () => { const Index = () => {
const { t } = useTranslation('home'); const { t, i18n } = useTranslation('home');
const navigate = useNavigate(); const navigate = useNavigate();
const assetUrl = (fileName: string) => `${import.meta.env.BASE_URL}${encodeURI(fileName)}`; const assetUrl = (fileName: string) => `${import.meta.env.BASE_URL}${encodeURI(fileName)}`;
const [yearsOfExperience, setYearsOfExperience] = useState(new Date().getFullYear() - 1994); const [yearsOfExperience, setYearsOfExperience] = useState(new Date().getFullYear() - 1994);
const [focusTopics, setFocusTopics] = useState<Array<{ title: string; href: string; image: string }>>([]); const [focusTopics, setFocusTopics] = useState<
Array<{ id: string; title: string; description: string; cta: string; href: string; image: string }>
>([]);
// Berechne die Erfahrungsjahre seit 1994 // Berechne die Erfahrungsjahre seit 1994
useEffect(() => { useEffect(() => {
@ -24,32 +26,83 @@ const Index = () => {
}, []); }, []);
useEffect(() => { useEffect(() => {
const assetUrl = (fileName: string) => `${import.meta.env.BASE_URL}${encodeURI(fileName)}`;
const pool = [ const pool = [
{ title: 'KFZ-Fahrzeuge', href: '/kfz', image: import.meta.env.BASE_URL + encodeURI('Fotolia_8654128_XS.jpg') }, {
{ title: 'Privatkunden', href: '/privatkunden', image: import.meta.env.BASE_URL + encodeURI('Fotolia_11700075_XS.jpg') }, id: 'kfz',
{ title: 'Senioren', href: '/senioren', image: import.meta.env.BASE_URL + encodeURI('Fotolia_8218560_XS.jpg') }, title: t('topTopics.items.kfz.title', 'KFZ-Versicherung'),
{ title: 'Hausrat', href: '/hausrat', image: import.meta.env.BASE_URL + encodeURI('iStock-482694353.jpg') }, description: t('topTopics.items.kfz.description', 'Tarife vergleichen und schnell zum passenden Schutz.'),
{ title: 'Rechtsschutzversicherung', href: '/rechtsschutzversicherung', image: import.meta.env.BASE_URL + encodeURI('iStock-1067720324.jpg') }, cta: t('topTopics.items.kfz.cta', 'Jetzt informieren'),
{ title: 'Unfall Was jetzt?', href: '/unfall', image: import.meta.env.BASE_URL + encodeURI('iStock-523830845.jpg') }, href: '/kfz',
{ title: 'Familien & Kinder', href: '/familien-kinder', image: import.meta.env.BASE_URL + encodeURI('iStock-956005062.jpg') }, image: assetUrl('Fotolia_8654128_XS.jpg'),
{ title: 'Tier­ver­si­che­rungen', href: '/tierversicherung', image: import.meta.env.BASE_URL + encodeURI('Tiere/DSC_4029.JPG?v=1') }, },
{ title: 'Finanzen', href: '/finanzen', image: import.meta.env.BASE_URL + encodeURI('iStock-957363908.jpg') }, {
{ title: 'Private Krankenversicherung', href: '/private-krankenversicherung', image: import.meta.env.BASE_URL + encodeURI('head_kranken.jpg') }, id: 'privatkunden',
{ title: 'Zahnzusatzversicherung', href: '/zahnzusatzversicherung', image: import.meta.env.BASE_URL + encodeURI('Fotolia_45263348_S.jpg') }, title: t('topTopics.items.privatkunden.title', 'Privatkunden'),
{ title: 'Auslandsreisekrankenversicherung', href: '/auslandsreisekrankenversicherung', image: import.meta.env.BASE_URL + encodeURI('iStock-637584740.jpg') }, description: t('topTopics.items.privatkunden.description', 'Versicherungen für Alltag, Familie und Zuhause.'),
{ title: 'Gesundheitsvorsorge', href: '/gesundheitsvorsorge', image: import.meta.env.BASE_URL + encodeURI('iStock-819100588.jpg') }, cta: t('topTopics.items.privatkunden.cta', 'Jetzt informieren'),
{ title: 'Sterbegeldversicherung', href: '/senioren-sterbegeldversicherung', image: import.meta.env.BASE_URL + encodeURI('iStock-939772870.jpg') }, href: '/privatkunden',
image: assetUrl('Fotolia_11700075_XS.jpg'),
},
{
id: 'gesundheit',
title: t('topTopics.items.gesundheit.title', 'Gesundheitsvorsorge'),
description: t('topTopics.items.gesundheit.description', 'Optimal abgesichert privat und individuell.'),
cta: t('topTopics.items.gesundheit.cta', 'Mehr erfahren'),
href: '/gesundheitsvorsorge',
image: assetUrl('head_kranken.jpg'),
},
{
id: 'zahnzusatz',
title: t('topTopics.items.zahnzusatz.title', 'Zahnzusatzversicherung'),
description: t('topTopics.items.zahnzusatz.description', 'Zahnersatz und -erhalt nach Maß: Stellen Sie sich die Leistungen nach Ihren Wünschen zusammen.'),
cta: t('topTopics.items.zahnzusatz.cta', 'Jetzt informieren'),
href: '/zahnzusatzversicherung',
image: assetUrl('Fotolia_45263348_S.jpg'),
},
{
id: 'ausland',
title: t('topTopics.items.ausland.title', 'Auslandskrankenversicherung'),
description: t('topTopics.items.ausland.description', 'Auch im Urlaub bestens abgesichert: weltweiter Schutz für medizinische Versorgung.'),
cta: t('topTopics.items.ausland.cta', 'Jetzt informieren'),
href: '/auslandsreisekrankenversicherung',
image: assetUrl('iStock-637584740.jpg'),
},
{
id: 'sterbegeld',
title: t('topTopics.items.sterbegeld.title', 'Sterbegeldversicherung'),
description: t('topTopics.items.sterbegeld.description', 'Für Ihre Liebsten vorsorgen: finanzielle Sicherheit im Todesfall.'),
cta: t('topTopics.items.sterbegeld.cta', 'Jetzt informieren'),
href: '/senioren-sterbegeldversicherung',
image: assetUrl('iStock-939772870.jpg'),
},
{
id: 'rechtsschutz',
title: t('topTopics.items.rechtsschutz.title', 'Rechtsschutzversicherung'),
description: t('topTopics.items.rechtsschutz.description', 'Ihre Rechte schützen passende Bausteine finden.'),
cta: t('topTopics.items.rechtsschutz.cta', 'Mehr erfahren'),
href: '/rechtsschutzversicherung',
image: assetUrl('iStock-1067720324.jpg'),
},
{
id: 'senioren',
title: t('topTopics.items.senioren.title', 'Senioren'),
description: t('topTopics.items.senioren.description', 'Sicherheit und Komfort Lösungen für jede Lebensphase.'),
cta: t('topTopics.items.senioren.cta', 'Alle Themen'),
href: '/senioren',
image: assetUrl('Fotolia_8218560_XS.jpg'),
},
{
id: 'finanzen',
title: t('topTopics.items.finanzen.title', 'Finanzen'),
description: t('topTopics.items.finanzen.description', 'Vermögensaufbau, Altersvorsorge und Finanzierung.'),
cta: t('topTopics.items.finanzen.cta', 'Zur Übersicht'),
href: '/finanzen',
image: assetUrl('iStock-957363908.jpg'),
},
]; ];
setFocusTopics( setFocusTopics(pool);
[...pool].sort((a, b) => }, [i18n.language, t]);
a.title.localeCompare(b.title, 'de-DE', { sensitivity: 'base' })
)
);
}, []);
const benefits = [ const benefits = [
t('benefits.benefit1', { t('benefits.benefit1', {
@ -268,58 +321,155 @@ const Index = () => {
]} ]}
/> />
{(() => {
const extraTopicIds = new Set(['zahnzusatz', 'ausland', 'sterbegeld']);
const mainTopics = focusTopics.filter((x) => !extraTopicIds.has(x.id));
const extraTopics = focusTopics.filter((x) => extraTopicIds.has(x.id));
const getExtraMeta = (id: string) => {
const priceValue = t(`topTopicsExtra.items.${id}.priceValue`, '');
const priceUnit = t(`topTopicsExtra.items.${id}.priceUnit`, '');
const pricePrefix = t(`topTopicsExtra.items.${id}.pricePrefix`, 'z.B. ab');
const title = t(`topTopicsExtra.items.${id}.title`, '');
const description = t(`topTopicsExtra.items.${id}.description`, '');
const cta = t(`topTopicsExtra.items.${id}.cta`, 'Jetzt informieren');
return {
title: title || undefined,
description: description || undefined,
cta,
pricePrefix: priceValue ? pricePrefix : undefined,
priceValue: priceValue || undefined,
priceUnit: priceValue ? priceUnit : undefined,
};
};
return (
<>
{/* Tematy dla klientów prywatnych */} {/* Tematy dla klientów prywatnych */}
<section className="py-16 bg-gradient-to-br from-gray-50 to-blue-50"> <section className="py-16 bg-gradient-to-br from-gray-50 to-blue-50">
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">
<div className="text-center mb-12"> <div className="text-center mb-12">
<div className="text-xs uppercase tracking-widest text-gray-500 font-semibold mb-3">
{t('topTopics.kicker', 'Bestseller')}
</div>
<h2 className="text-4xl md:text-5xl font-bold text-gray-900 mb-4"> <h2 className="text-4xl md:text-5xl font-bold text-gray-900 mb-4">
{t('topics.title', 'Unsere Leistungen')} {t('topTopics.title', 'Die beliebtesten Themen')}
</h2> </h2>
<p className="text-xl text-gray-600 max-w-3xl mx-auto"> <p className="text-xl text-gray-600 max-w-3xl mx-auto">
{t('topics.subtitle', 'Die wichtigsten Lösungen für Ihre private Absicherung')} {t('topTopics.subtitle', 'Wählen Sie ein Thema und starten Sie mit wenigen Klicks.')}
</p> </p>
</div> </div>
<div className="grid sm:grid-cols-2 lg:grid-cols-3 gap-6 max-w-6xl mx-auto"> <div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6 max-w-6xl mx-auto">
{focusTopics.map((item) => ( {mainTopics.map((item) => (
<Link <Card key={item.id} className="overflow-hidden shadow-lg hover:shadow-2xl transition-shadow">
key={`${item.href}-${item.title}`} <div className="relative h-44">
to={item.href}
className="group block transform transition-all duration-300 hover:scale-105"
>
<div className="relative h-44 md:h-50 overflow-hidden rounded-xl shadow-lg group-hover:shadow-2xl transition-shadow duration-300">
<div <div
className="absolute inset-0 bg-cover bg-center transform transition-transform duration-500 group-hover:scale-110" className="absolute inset-0 bg-cover bg-center"
style={{ backgroundImage: `url(${item.image})` }} style={{ backgroundImage: `url(${item.image})` }}
/> />
<div className="absolute inset-0 bg-gradient-to-t from-black/70 via-black/20 to-transparent" /> <div className="absolute inset-0 bg-gradient-to-t from-black/50 via-black/10 to-transparent" />
{/* Overlay mit Titel und Beschreibung */}
<div className="absolute bottom-0 left-0 right-0 p-4 text-white">
<div className="text-xl font-black">{item.title.replace('Versicherung', '').trim()}</div>
<div className="text-sm text-white/90 mt-1">
{item.title === 'KFZ-Fahrzeuge' && t('topics.kfz.description', 'Autoversicherung & Kfz')}
{item.title === 'Privatkunden' && t('topics.privatkunden.description', 'Sicherheit & Vorsorge')}
{item.title === 'Senioren' && t('topics.senioren.description', 'Wohlbefinden im Alter')}
{item.title === 'Hausrat' && t('topics.hausrat.description', 'Schutz für Ihr Zuhause')}
{item.title === 'Rechtsschutzversicherung' && t('topics.rechtsschutz.description', 'Ihre Rechte schützen')}
{item.title === 'Unfall Was jetzt?' && t('topics.unfall.description', 'Schnelle Hilfe')}
{item.title === 'Familien & Kinder' && t('topics.familie.description', 'Für Ihre Familie')}
{item.title === 'Tier­ver­si­che­rungen' && t('topics.tiere.description', 'Schutz für Ihre Haustiere')}
{item.title === 'Finanzen' && t('topics.finanzen.description', 'Ihre finanzielle Zukunft')}
{item.title === 'Private Krankenversicherung' && t('topics.privateKrankenversicherung.description', 'Optimaler Gesundheitsschutz')}
{item.title === 'Zahnzusatzversicherung' && t('topics.zahnzusatzversicherung.description', 'Perfekter Zahnschutz')}
{item.title === 'Auslandsreisekrankenversicherung' && t('topics.auslandsreisekrankenversicherung.description', 'Sorgenfrei reisen')}
{item.title === 'Gesundheitsvorsorge' && t('topics.gesundheitsvorsorge.description', 'Vorsorge & Prävention')}
</div>
</div>
</div> </div>
<CardContent className="p-6">
<div className="text-lg font-bold text-gray-900 mb-2">{item.title}</div>
<div className="text-sm text-gray-600 mb-5">{item.description}</div>
<Button asChild className="w-full">
<Link to={item.href}>
{item.cta}
<ArrowRight className="ml-2 h-4 w-4" />
</Link> </Link>
</Button>
</CardContent>
</Card>
))} ))}
</div> </div>
<div className="max-w-6xl mx-auto mt-12">
<div className="text-center mb-8">
<div className="text-xs uppercase tracking-widest text-gray-500 font-semibold mb-3">
{t('topTopicsExtra.kicker', 'Weitere Themen')}
</div>
<h3 className="text-2xl md:text-3xl font-bold text-gray-900 mb-3">
{t('topTopicsExtra.title', 'Mehr Absicherung passend zu Ihrer Situation')}
</h3>
<p className="text-lg text-gray-600 max-w-3xl mx-auto">
{t('topTopicsExtra.subtitle', 'Beliebte Zusatzlösungen schnell erklärt und einfach anfragen.')}
</p>
</div>
<div className="grid md:grid-cols-3 gap-6">
{extraTopics.map((item) => {
const meta = getExtraMeta(item.id);
const title = meta.title ?? item.title;
const description = meta.description ?? item.description;
return (
<Card
key={item.id}
className="border border-gray-200 shadow-sm hover:shadow-md transition-shadow rounded-xl overflow-hidden flex flex-col"
>
<div className="relative h-32 rounded-t-xl overflow-hidden">
<div
className="absolute inset-0 bg-cover bg-center"
style={{ backgroundImage: `url(${item.image})` }}
/>
<div className="absolute inset-0 bg-gradient-to-t from-black/30 via-black/0 to-transparent" />
</div>
<CardContent className="p-6 flex-1 flex flex-col">
<div className="text-lg font-semibold text-gray-900 mb-3 leading-snug">{title}</div>
<div className="text-sm text-gray-600 mb-6">{description}</div>
<div className="mt-auto">
{meta.priceValue ? (
<div className="mb-6">
<div className="text-xs text-gray-500 font-semibold mb-2 whitespace-pre-line">
{meta.pricePrefix}
</div>
<div className="text-3xl font-extrabold text-gray-900 leading-none">
{meta.priceValue}
</div>
{meta.priceUnit ? (
<div className="mt-2 text-sm text-gray-600 whitespace-pre-line leading-relaxed">
{meta.priceUnit}
</div>
) : null}
</div>
) : null}
<Button
asChild
className="w-full rounded-full py-6 bg-[#7a0000] hover:bg-[#5f0000] text-white"
>
<Link to={item.href}>
{meta.cta}
<ArrowRight className="ml-2 h-4 w-4" />
</Link>
</Button>
</div>
</CardContent>
</Card>
);
})}
</div>
</div>
<div className="max-w-6xl mx-auto mt-10 flex justify-center">
<Button asChild variant="outline" className="px-8">
<Link to="/leistungen">
{t('topTopics.allTopics', 'Alle Themen anzeigen')}
<ArrowRight className="ml-2 h-4 w-4" />
</Link>
</Button>
</div>
</div> </div>
</section> </section>
</>
);
})()}
{/* Experience Section */} {/* Experience Section */}
<section className="py-12 bg-white"> <section className="py-12 bg-white">
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">

View File

@ -1,8 +1,10 @@
import { useLocation } from "react-router-dom"; import { useLocation } from "react-router-dom";
import { useEffect } from "react"; import { useEffect } from "react";
import { useTranslation } from "react-i18next";
const NotFound = () => { const NotFound = () => {
const location = useLocation(); const location = useLocation();
const { t } = useTranslation('common');
useEffect(() => { useEffect(() => {
console.error("404 Error: User attempted to access non-existent route:", location.pathname); console.error("404 Error: User attempted to access non-existent route:", location.pathname);
@ -12,9 +14,9 @@ const NotFound = () => {
<div className="flex min-h-screen items-center justify-center bg-muted"> <div className="flex min-h-screen items-center justify-center bg-muted">
<div className="text-center"> <div className="text-center">
<h1 className="mb-4 text-4xl font-bold">404</h1> <h1 className="mb-4 text-4xl font-bold">404</h1>
<p className="mb-4 text-xl text-muted-foreground">Oops! Page not found</p> <p className="mb-4 text-xl text-muted-foreground">{t('notFound.message', 'Seite nicht gefunden')}</p>
<a href="/" className="text-primary underline hover:text-primary/90"> <a href="/" className="text-primary underline hover:text-primary/90">
Return to Home {t('notFound.backHome', 'Zur Startseite')}
</a> </a>
</div> </div>
</div> </div>

View File

@ -7,26 +7,28 @@ import Layout from '@/components/Layout';
import HeroSlider from '@/components/HeroSlider'; import HeroSlider from '@/components/HeroSlider';
const Privatkunden = () => { const Privatkunden = () => {
const { t } = useTranslation('privatkunden'); const { t, i18n } = useTranslation('privatkunden');
const navigate = useNavigate(); const navigate = useNavigate();
const baseUrl = import.meta.env.BASE_URL; const baseUrl = import.meta.env.BASE_URL;
const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`; const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`;
const [focusTopics, setFocusTopics] = useState<Array<{ title: string; href: string; image: string }>>([]); const [focusTopics, setFocusTopics] = useState<
Array<{ id: string; title: string; href: string; image: string }>
>([]);
useEffect(() => { useEffect(() => {
const pool = [ const pool = [
{ title: t('topics.kfz', 'KFZ-Fahrzeuge'), href: '/kfz', image: assetUrl('Fotolia_8654128_XS.jpg') }, { id: 'kfz', title: t('topics.kfz', 'KFZ-Fahrzeuge'), href: '/kfz', image: assetUrl('Fotolia_8654128_XS.jpg') },
{ title: t('topics.sach', 'Sachversicherung'), href: '/sachversicherung', image: assetUrl('iStock-943842590.jpg') }, { id: 'sach', title: t('topics.sach', 'Sachversicherung'), href: '/sachversicherung', image: assetUrl('iStock-943842590.jpg') },
{ title: t('topics.gesundheit', 'Gesundheitsvorsorge'), href: '/gesundheitsvorsorge', image: assetUrl('iStock-819100588.jpg') }, { id: 'gesundheit', title: t('topics.gesundheit', 'Gesundheitsvorsorge'), href: '/gesundheitsvorsorge', image: assetUrl('iStock-819100588.jpg') },
{ title: t('topics.vermoegen', 'Vermögenssicherung'), href: '/vermoegenssicherung', image: assetUrl('iStock-495809266.jpg') }, { id: 'vermoegen', title: t('topics.vermoegen', 'Vermögenssicherung'), href: '/vermoegenssicherung', image: assetUrl('iStock-495809266.jpg') },
{ title: t('topics.risiko', 'Risikoschutz'), href: '/risikoschutz', image: assetUrl('iStock-970876204.jpg') }, { id: 'risiko', title: t('topics.risiko', 'Risikoschutz'), href: '/risikoschutz', image: assetUrl('iStock-970876204.jpg') },
{ title: t('topics.altersvorsorge', 'Altersvorsorge'), href: '/altersvorsorge', image: assetUrl('Fotolia_67327775_XS.jpg') }, { id: 'altersvorsorge', title: t('topics.altersvorsorge', 'Altersvorsorge'), href: '/altersvorsorge', image: assetUrl('Fotolia_67327775_XS.jpg') },
]; ];
setFocusTopics( setFocusTopics(
[...pool].sort((a, b) => a.title.localeCompare(b.title, 'de', { sensitivity: 'base' })) [...pool].sort((a, b) => a.title.localeCompare(b.title, i18n.language || 'de', { sensitivity: 'base' }))
); );
}, []); }, [i18n.language, t]);
const services = [ const services = [
{ {
@ -45,32 +47,54 @@ const Privatkunden = () => {
{ {
icon: Shield, icon: Shield,
title: t('services.sach.title', 'Sachversicherung'), title: t('services.sach.title', 'Sachversicherung'),
description: 'Ihr Hab und Gut bestens abgesichert', description: t('services.sach.description', 'Ihr Hab und Gut bestens abgesichert'),
features: ['Hausratversicherung', 'Unfallversicherung'] features: [
t('services.sach.features.hausrat', 'Hausratversicherung'),
t('services.sach.features.unfall', 'Unfallversicherung'),
]
}, },
{ {
icon: Shield, icon: Shield,
title: 'Gesundheitsvorsorge', title: t('services.gesundheit.title', 'Gesundheitsvorsorge'),
description: 'Optimale medizinische Versorgung für die ganze Familie', description: t('services.gesundheit.description', 'Optimale medizinische Versorgung für die ganze Familie'),
features: ['Private Krankenversicherung', 'Zahnzusatzversicherung', 'Auslandsreisekrankenversicherung', 'Krankentagegeldversicherung'] features: [
t('services.gesundheit.features.pkv', 'Private Krankenversicherung'),
t('services.gesundheit.features.zahn', 'Zahnzusatzversicherung'),
t('services.gesundheit.features.ausland', 'Auslandsreisekrankenversicherung'),
t('services.gesundheit.features.ktg', 'Krankentagegeldversicherung'),
]
}, },
{ {
icon: Shield, icon: Shield,
title: 'Vermögenssicherung', title: t('services.vermoegen.title', 'Vermögenssicherung'),
description: 'Schutz Ihres Lebenswerks und Ihrer Familie', description: t('services.vermoegen.description', 'Schutz Ihres Lebenswerks und Ihrer Familie'),
features: ['Lebensversicherung', 'Risikolebensversicherung', 'Wohngebäudeversicherung', 'Hausratversicherung'] features: [
t('services.vermoegen.features.lebensversicherung', 'Lebensversicherung'),
t('services.vermoegen.features.risikolebensversicherung', 'Risikolebensversicherung'),
t('services.vermoegen.features.wohngebaeudeversicherung', 'Wohngebäudeversicherung'),
t('services.vermoegen.features.hausratversicherung', 'Hausratversicherung'),
]
}, },
{ {
icon: Shield, icon: Shield,
title: 'Risikoschutz', title: t('services.risiko.title', 'Risikoschutz'),
description: 'Umfassender Schutz für alle Lebensbereiche', description: t('services.risiko.description', 'Umfassender Schutz für alle Lebensbereiche'),
features: ['Unfallversicherung', 'Haftpflichtversicherung', 'Rechtsschutzversicherung'] features: [
t('services.risiko.features.unfallversicherung', 'Unfallversicherung'),
t('services.risiko.features.haftpflichtversicherung', 'Haftpflichtversicherung'),
t('services.risiko.features.rechtsschutzversicherung', 'Rechtsschutzversicherung'),
]
}, },
{ {
icon: Users, icon: Users,
title: 'Altersvorsorge', title: t('services.altersvorsorge.title', 'Altersvorsorge'),
description: 'Sichere Rente und finanzielle Unabhängigkeit', description: t('services.altersvorsorge.description', 'Sichere Rente und finanzielle Unabhängigkeit'),
features: ['Private Rentenversicherung', 'Riester-Rente', 'Rürup-Rente', 'Betriebliche Altersvorsorge'] features: [
t('services.altersvorsorge.features.privateRente', 'Private Rentenversicherung'),
t('services.altersvorsorge.features.riesterRente', 'Riester-Rente'),
t('services.altersvorsorge.features.ruerupRente', 'Rürup-Rente'),
t('services.altersvorsorge.features.bav', 'Betriebliche Altersvorsorge'),
]
} }
]; ];
@ -136,17 +160,17 @@ const Privatkunden = () => {
{/* Links unter dem Bild */} {/* Links unter dem Bild */}
<div className="mt-4 p-4 bg-white rounded-lg shadow-md"> <div className="mt-4 p-4 bg-white rounded-lg shadow-md">
{item.title === 'KFZ-Fahrzeuge' && ( {item.id === 'kfz' && (
<div className="space-y-2"> <div className="space-y-2">
<div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">Details:</div> <div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">{t('details.label', 'Details:')}</div>
<div className="grid grid-cols-1 gap-2"> <div className="grid grid-cols-1 gap-2">
{[ {[
{ title: 'Autoversicherung', href: '/autoversicherung' }, { title: t('details.kfz.autoversicherung', 'Autoversicherung'), href: '/autoversicherung' },
{ title: 'Motorradversicherung', href: '/motorradversicherung' }, { title: t('details.kfz.motorradversicherung', 'Motorradversicherung'), href: '/motorradversicherung' },
{ title: 'Quadversicherung', href: '/quadversicherung' }, { title: t('details.kfz.quadversicherung', 'Quadversicherung'), href: '/quadversicherung' },
{ title: 'FairMobil', href: '/fairmobil' }, { title: t('details.kfz.fairmobil', 'FairMobil'), href: '/fairmobil' },
{ title: 'Drittfahrer-Schutz', href: '/drittfahrer-schutz' }, { title: t('details.kfz.drittfahrerSchutz', 'Drittfahrer-Schutz'), href: '/drittfahrer-schutz' },
{ title: 'Flottenversicherung', href: '/flottenversicherung' } { title: t('details.kfz.flottenversicherung', 'Flottenversicherung'), href: '/flottenversicherung' }
].map((link) => ( ].map((link) => (
<Link <Link
key={link.href} key={link.href}
@ -163,14 +187,14 @@ const Privatkunden = () => {
)} )}
{/* Zusätzliche Links unter dem Bild für Sachversicherung */} {/* Zusätzliche Links unter dem Bild für Sachversicherung */}
{item.title === 'Sachversicherung' && ( {item.id === 'sach' && (
<div className="space-y-2"> <div className="space-y-2">
<div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">Details:</div> <div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">{t('details.label', 'Details:')}</div>
<div className="grid grid-cols-1 gap-2"> <div className="grid grid-cols-1 gap-2">
{[ {[
{ title: 'Hausratversicherung', href: '/hausratversicherung' }, { title: t('details.sach.hausratversicherung', 'Hausratversicherung'), href: '/hausratversicherung' },
{ title: 'Wohngebäudeversicherung', href: '/hausrat' }, { title: t('details.sach.wohngebaeudeversicherung', 'Wohngebäudeversicherung'), href: '/hausrat' },
{ title: 'Unfallversicherung', href: '/unfall' } { title: t('details.sach.unfallversicherung', 'Unfallversicherung'), href: '/unfall' }
].map((link) => ( ].map((link) => (
<Link <Link
key={link.href} key={link.href}
@ -187,14 +211,14 @@ const Privatkunden = () => {
)} )}
{/* Zusätzliche Links unter dem Bild für Gesundheitsvorsorge */} {/* Zusätzliche Links unter dem Bild für Gesundheitsvorsorge */}
{item.title === 'Gesundheitsvorsorge' && ( {item.id === 'gesundheit' && (
<div className="space-y-2"> <div className="space-y-2">
<div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">Details:</div> <div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">{t('details.label', 'Details:')}</div>
<div className="grid grid-cols-1 gap-2"> <div className="grid grid-cols-1 gap-2">
{[ {[
{ title: 'Private Krankenversicherung', href: '/private-krankenversicherung' }, { title: t('details.gesundheit.privateKrankenversicherung', 'Private Krankenversicherung'), href: '/private-krankenversicherung' },
{ title: 'Zahnzusatzversicherung', href: '/zahnzusatzversicherung' }, { title: t('details.gesundheit.zahnzusatzversicherung', 'Zahnzusatzversicherung'), href: '/zahnzusatzversicherung' },
{ title: 'Auslandsreisekrankenversicherung', href: '/auslandsreisekrankenversicherung' } { title: t('details.gesundheit.auslandsreisekrankenversicherung', 'Auslandsreisekrankenversicherung'), href: '/auslandsreisekrankenversicherung' }
].map((link) => ( ].map((link) => (
<Link <Link
key={`${link.href}-${link.title}`} key={`${link.href}-${link.title}`}
@ -211,14 +235,14 @@ const Privatkunden = () => {
)} )}
{/* Zusätzliche Links unter dem Bild für Vermögenssicherung */} {/* Zusätzliche Links unter dem Bild für Vermögenssicherung */}
{item.title === 'Vermögenssicherung' && ( {item.id === 'vermoegen' && (
<div className="space-y-2"> <div className="space-y-2">
<div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">Details:</div> <div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">{t('details.label', 'Details:')}</div>
<div className="grid grid-cols-1 gap-2"> <div className="grid grid-cols-1 gap-2">
{[ {[
{ title: 'Lebensversicherung', href: '/finanzen' }, { title: t('details.vermoegen.lebensversicherung', 'Lebensversicherung'), href: '/finanzen' },
{ title: 'Risikolebensversicherung', href: '/finanzen' }, { title: t('details.vermoegen.risikolebensversicherung', 'Risikolebensversicherung'), href: '/finanzen' },
{ title: 'Wohngebäudeversicherung', href: '/hausrat' } { title: t('details.vermoegen.wohngebaeudeversicherung', 'Wohngebäudeversicherung'), href: '/hausrat' }
].map((link) => ( ].map((link) => (
<Link <Link
key={`${link.href}-${link.title}`} key={`${link.href}-${link.title}`}
@ -235,13 +259,13 @@ const Privatkunden = () => {
)} )}
{/* Zusätzliche Links unter dem Bild für Risikoschutz */} {/* Zusätzliche Links unter dem Bild für Risikoschutz */}
{item.title === 'Risikoschutz' && ( {item.id === 'risiko' && (
<div className="space-y-2"> <div className="space-y-2">
<div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">Details:</div> <div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">{t('details.label', 'Details:')}</div>
<div className="grid grid-cols-1 gap-2"> <div className="grid grid-cols-1 gap-2">
{[ {[
{ title: 'Unfallversicherung', href: '/unfall' }, { title: t('details.risiko.unfallversicherung', 'Unfallversicherung'), href: '/unfall' },
{ title: 'Rechtsschutzversicherung', href: '/service' } { title: t('details.risiko.rechtsschutzversicherung', 'Rechtsschutzversicherung'), href: '/service' }
].map((link) => ( ].map((link) => (
<Link <Link
key={`${link.href}-${link.title}`} key={`${link.href}-${link.title}`}
@ -258,15 +282,15 @@ const Privatkunden = () => {
)} )}
{/* Zusätzliche Links unter dem Bild für Altersvorsorge */} {/* Zusätzliche Links unter dem Bild für Altersvorsorge */}
{item.title === 'Altersvorsorge' && ( {item.id === 'altersvorsorge' && (
<div className="space-y-2"> <div className="space-y-2">
<div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">Details:</div> <div className="text-xs uppercase tracking-wide text-gray-500 font-semibold mb-3">{t('details.label', 'Details:')}</div>
<div className="grid grid-cols-1 gap-2"> <div className="grid grid-cols-1 gap-2">
{[ {[
{ title: 'Private Rentenversicherung', href: '/finanzen' }, { title: t('details.altersvorsorge.privateRentenversicherung', 'Private Rentenversicherung'), href: '/finanzen' },
{ title: 'Riester-Rente', href: '/finanzen' }, { title: t('details.altersvorsorge.riester', 'Riester-Rente'), href: '/finanzen' },
{ title: 'Rürup-Rente', href: '/finanzen' }, { title: t('details.altersvorsorge.ruerup', 'Rürup-Rente'), href: '/finanzen' },
{ title: 'Betriebliche Altersvorsorge', href: '/finanzen' } { title: t('details.altersvorsorge.bav', 'Betriebliche Altersvorsorge'), href: '/finanzen' }
].map((link) => ( ].map((link) => (
<Link <Link
key={`${link.href}-${link.title}`} key={`${link.href}-${link.title}`}
@ -296,22 +320,22 @@ const Privatkunden = () => {
<div className="mb-20"> <div className="mb-20">
<div className="text-center mb-12"> <div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-gray-900 mb-4"> <h2 className="text-3xl md:text-4xl font-bold text-gray-900 mb-4">
Ihre Vorteile als Privatkunde {t('benefits.title', 'Ihre Vorteile als Privatkunde')}
</h2> </h2>
<p className="text-lg text-gray-600 max-w-2xl mx-auto"> <p className="text-lg text-gray-600 max-w-2xl mx-auto">
Wir bieten Ihnen maßgeschneiderte Lösungen für Ihre persönliche Absicherung {t('benefits.subtitle', 'Wir bieten Ihnen maßgeschneiderte Lösungen für Ihre persönliche Absicherung')}
</p> </p>
</div> </div>
<div className="bg-gradient-to-r from-blue-50 to-indigo-50 rounded-2xl p-10 shadow-xl"> <div className="bg-gradient-to-r from-blue-50 to-indigo-50 rounded-2xl p-10 shadow-xl">
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8"> <div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{[ {[
{ icon: Shield, title: 'Umfassender Schutz', desc: 'Für alle Lebensbereiche' }, { icon: Shield, title: t('benefits.items.protection.title', 'Umfassender Schutz'), desc: t('benefits.items.protection.desc', 'Für alle Lebensbereiche') },
{ icon: Users, title: 'Familienfreundlich', desc: 'Optimale Lösungen für Familien' }, { icon: Users, title: t('benefits.items.family.title', 'Familienfreundlich'), desc: t('benefits.items.family.desc', 'Optimale Lösungen für Familien') },
{ icon: TrendingUp, title: 'Vertragsoptimierung', desc: 'Bestehende Verträge verbessern' }, { icon: TrendingUp, title: t('benefits.items.optimization.title', 'Vertragsoptimierung'), desc: t('benefits.items.optimization.desc', 'Bestehende Verträge verbessern') },
{ icon: Clock, title: 'Schnelle Hilfe', desc: 'Rasche Schadenabwicklung' }, { icon: Clock, title: t('benefits.items.fastHelp.title', 'Schnelle Hilfe'), desc: t('benefits.items.fastHelp.desc', 'Rasche Schadenabwicklung') },
{ icon: DollarSign, title: 'Transparente Kosten', desc: 'Keine versteckten Gebühren' }, { icon: DollarSign, title: t('benefits.items.transparentCosts.title', 'Transparente Kosten'), desc: t('benefits.items.transparentCosts.desc', 'Keine versteckten Gebühren') },
{ icon: MapPin, title: 'Persönliche Betreuung', desc: 'Vor Ort in Ihrer Nähe' } { icon: MapPin, title: t('benefits.items.localSupport.title', 'Persönliche Betreuung'), desc: t('benefits.items.localSupport.desc', 'Vor Ort in Ihrer Nähe') }
].map((benefit, index) => { ].map((benefit, index) => {
const Icon = benefit.icon; const Icon = benefit.icon;
return ( return (
@ -333,19 +357,19 @@ const Privatkunden = () => {
{/* Contact Section */} {/* Contact Section */}
<div className="bg-gradient-to-r from-blue-600 to-indigo-600 rounded-2xl p-10 text-center text-white shadow-2xl"> <div className="bg-gradient-to-r from-blue-600 to-indigo-600 rounded-2xl p-10 text-center text-white shadow-2xl">
<h2 className="text-3xl md:text-4xl font-bold mb-4"> <h2 className="text-3xl md:text-4xl font-bold mb-4">
Kontaktieren Sie uns {t('contactCta.title', 'Kontaktieren Sie uns')}
</h2> </h2>
<p className="text-lg text-blue-100 mb-8 max-w-2xl mx-auto"> <p className="text-lg text-blue-100 mb-8 max-w-2xl mx-auto">
Lassen Sie sich unverbindlich zu Ihren Privatkunden-Lösungen beraten. {t('contactCta.subtitle', 'Lassen Sie sich unverbindlich zu Ihren Privatkunden-Lösungen beraten.')}
</p> </p>
<div className="flex flex-col sm:flex-row gap-4 justify-center"> <div className="flex flex-col sm:flex-row gap-4 justify-center">
<Button className="bg-white text-blue-600 hover:bg-gray-100 px-8 py-3 text-lg font-semibold shadow-lg"> <Button className="bg-white text-blue-600 hover:bg-gray-100 px-8 py-3 text-lg font-semibold shadow-lg">
<Phone className="h-5 w-5 mr-2" /> <Phone className="h-5 w-5 mr-2" />
Jetzt anrufen {t('contactCta.call', 'Jetzt anrufen')}
</Button> </Button>
<Button variant="outline" className="border-white text-white hover:bg-white hover:text-blue-600 px-8 py-3 text-lg font-semibold"> <Button variant="outline" className="border-white text-white hover:bg-white hover:text-blue-600 px-8 py-3 text-lg font-semibold">
<Mail className="h-5 w-5 mr-2" /> <Mail className="h-5 w-5 mr-2" />
Angebot anfordern {t('contactCta.requestOffer', 'Angebot anfordern')}
</Button> </Button>
</div> </div>
</div> </div>

View File

@ -1,42 +1,44 @@
import React from 'react'; import React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Shield, Heart, Car, Home, Briefcase, Users } from 'lucide-react'; import { Shield, Heart, Car, Home, Briefcase, Users } from 'lucide-react';
import { useTranslation } from 'react-i18next';
import Layout from '@/components/Layout'; import Layout from '@/components/Layout';
import { Card } from '@/components/ui/card'; import { Card } from '@/components/ui/card';
import Disclaimer from '@/components/Disclaimer'; import Disclaimer from '@/components/Disclaimer';
const Risikoschutz = () => { const Risikoschutz = () => {
const { t } = useTranslation('risikoschutz');
const baseUrl = import.meta.env.BASE_URL; const baseUrl = import.meta.env.BASE_URL;
const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`; const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`;
const topics = [ const topics = [
{ {
title: 'Unfallversicherung', title: t('topics.unfall', 'Unfallversicherung'),
href: '/unfall', href: '/unfall',
image: assetUrl('iStock-970876204.jpg') image: assetUrl('iStock-970876204.jpg')
}, },
{ {
title: 'Berufsunfähigkeitsversicherung', title: t('topics.bu', 'Berufsunfähigkeitsversicherung'),
href: '/berufsunfaehigkeitsversicherung', href: '/berufsunfaehigkeitsversicherung',
image: assetUrl('iStock-957363908.jpg') image: assetUrl('iStock-957363908.jpg')
}, },
{ {
title: 'Haftpflichtversicherung', title: t('topics.haftpflicht', 'Haftpflichtversicherung'),
href: '/haftpflichtversicherung', href: '/haftpflichtversicherung',
image: assetUrl('iStock-943842590.jpg') image: assetUrl('iStock-943842590.jpg')
}, },
{ {
title: 'Rechtsschutzversicherung', title: t('topics.rechtsschutz', 'Rechtsschutzversicherung'),
href: '/rechtsschutzversicherung', href: '/rechtsschutzversicherung',
image: assetUrl('Fotolia_8654128_XS.jpg') image: assetUrl('Fotolia_8654128_XS.jpg')
}, },
{ {
title: 'Tierhalterhaftpflicht', title: t('topics.tierhalter', 'Tierhalterhaftpflicht'),
href: '/tierhalterhaftpflicht', href: '/tierhalterhaftpflicht',
image: assetUrl('iStock-495809266.jpg') image: assetUrl('iStock-495809266.jpg')
}, },
{ {
title: 'Dread-Disease Versicherung', title: t('topics.dread', 'Dread-Disease Versicherung'),
href: '/dread-disease-versicherung', href: '/dread-disease-versicherung',
image: assetUrl('Fotolia_67327775_XS.jpg') image: assetUrl('Fotolia_67327775_XS.jpg')
} }
@ -50,10 +52,10 @@ const Risikoschutz = () => {
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">
<div className="max-w-4xl mx-auto text-center"> <div className="max-w-4xl mx-auto text-center">
<h1 className="text-4xl font-bold text-gray-900 mb-6"> <h1 className="text-4xl font-bold text-gray-900 mb-6">
Risikoschutz {t('hero.title', 'Risikoschutz')}
</h1> </h1>
<p className="text-xl text-gray-600 mb-8"> <p className="text-xl text-gray-600 mb-8">
Umfassender Schutz für Sie und Ihre Familie bei unvorhergesehenen Ereignissen {t('hero.subtitle', 'Umfassender Schutz für Sie und Ihre Familie bei unvorhergesehenen Ereignissen')}
</p> </p>
</div> </div>
</div> </div>

View File

@ -1,41 +1,42 @@
import React from 'react'; import React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Home, Car, Fire, Zap, Shield, Phone } from 'lucide-react'; import { useTranslation } from 'react-i18next';
import Layout from '@/components/Layout'; import Layout from '@/components/Layout';
import { Card } from '@/components/ui/card'; import { Card } from '@/components/ui/card';
const Sachversicherung = () => { const Sachversicherung = () => {
const { t } = useTranslation('sachversicherung');
const baseUrl = import.meta.env.BASE_URL; const baseUrl = import.meta.env.BASE_URL;
const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`; const assetUrl = (fileName: string) => `${baseUrl}${encodeURI(fileName)}`;
const topics = [ const topics = [
{ {
title: 'Hausratversicherung', title: t('topics.hausrat', 'Hausratversicherung'),
href: '/hausratversicherung', href: '/hausratversicherung',
image: assetUrl('iStock-943842590.jpg') image: assetUrl('iStock-943842590.jpg')
}, },
{ {
title: 'Wohngebäudeversicherung', title: t('topics.wohngebaeude', 'Wohngebäudeversicherung'),
href: '/hausrat', href: '/hausrat',
image: assetUrl('iStock-495809266.jpg') image: assetUrl('iStock-495809266.jpg')
}, },
{ {
title: 'Haftpflichtversicherung', title: t('topics.haftpflicht', 'Haftpflichtversicherung'),
href: '/haftpflichtversicherung', href: '/haftpflichtversicherung',
image: assetUrl('Fotolia_67327775_XS.jpg') image: assetUrl('Fotolia_67327775_XS.jpg')
}, },
{ {
title: 'Tierversicherung', title: t('topics.tiere', 'Tierversicherung'),
href: '/tierversicherung', href: '/tierversicherung',
image: assetUrl('iStock-970876204.jpg') image: assetUrl('iStock-970876204.jpg')
}, },
{ {
title: 'Rechtsschutzversicherung', title: t('topics.rechtsschutz', 'Rechtsschutzversicherung'),
href: '/rechtsschutzversicherung', href: '/rechtsschutzversicherung',
image: assetUrl('iStock-957363908.jpg') image: assetUrl('iStock-957363908.jpg')
}, },
{ {
title: 'Elektrogeräteversicherung', title: t('topics.elektro', 'Elektrogeräteversicherung'),
href: '/elektrogeraeteversicherung', href: '/elektrogeraeteversicherung',
image: assetUrl('Fotolia_8654128_XS.jpg') image: assetUrl('Fotolia_8654128_XS.jpg')
} }
@ -49,10 +50,10 @@ const Sachversicherung = () => {
<div className="container mx-auto px-4"> <div className="container mx-auto px-4">
<div className="max-w-4xl mx-auto text-center"> <div className="max-w-4xl mx-auto text-center">
<h1 className="text-4xl font-bold text-gray-900 mb-6"> <h1 className="text-4xl font-bold text-gray-900 mb-6">
Sachversicherung {t('hero.title', 'Sachversicherung')}
</h1> </h1>
<p className="text-xl text-gray-600 mb-8"> <p className="text-xl text-gray-600 mb-8">
Schutz für Ihr Hab und Gut - von Hausrat bis Immobilie {t('hero.subtitle', 'Schutz für Ihr Hab und Gut - von Hausrat bis Immobilie')}
</p> </p>
</div> </div>
</div> </div>