diff --git a/components/layout/page-hero.tsx b/components/layout/page-hero.tsx index e9602cd..23f6238 100644 --- a/components/layout/page-hero.tsx +++ b/components/layout/page-hero.tsx @@ -10,11 +10,26 @@ type PageHeroProps = { }; function getDefaultLines(title: string): HeroTitleLineValue[] { - return title.split("\n").filter(Boolean).map((line, index) => ({ - text: line, - tone: index === 0 ? "soft" : "accent", - align: "center", - })); + return title.split("\n").filter(Boolean).map((line) => { + const words = line.trim().split(/\s+/).filter(Boolean); + + if (words.length <= 1) { + return { + text: line, + tone: "soft", + align: "center", + }; + } + + return { + text: line, + align: "center", + segments: words.map((word, index) => ({ + text: index === words.length - 1 ? word : `${word} `, + tone: index % 2 === 0 ? "soft" : "accent", + })), + }; + }); } export function PageHero({ badge, title, description, lines, locale }: PageHeroProps) { diff --git a/messages/de.json b/messages/de.json index 25eb333..46b4eb6 100644 --- a/messages/de.json +++ b/messages/de.json @@ -6,8 +6,8 @@ "about": "Über mich", "contact": "Kontakt", "root": "Root", - "openMenu": "Menue oeffnen", - "closeMenu": "Menue schliessen", + "openMenu": "Menü öffnen", + "closeMenu": "Menü schliessen", "themeToggle": "Theme wechseln", "soundMute": "Sounds stummschalten", "soundUnmute": "Sounds aktivieren" @@ -19,21 +19,21 @@ "badge": "Coming Soon", "kicker": "Hi, ich bin Moh", "titleLineOne": "Eine klarere", - "titleLineTwo": "naechste Version", + "titleLineTwo": "nächste Version", "titleLineThree": "ist unterwegs.", - "description": "Die neue Version entsteht gerade mit staerkerer Identitaet, klarerem Inhalt und einer fokussierteren Erfahrung von Anfang bis Ende.", - "note": "Wenn du schon ein Projekt im Kopf hast, kannst du dich jetzt melden und wir starten frueh ins Gespraech.", + "description": "Die neue Version entsteht gerade mit stärkerer Identität, klarerem Inhalt und einer fokussierteren Erfahrung von Anfang bis Ende.", + "note": "Wenn du schon ein Projekt im Kopf hast, kannst du dich jetzt melden und wir starten früh ins Gespräch.", "primaryCta": "Kontakt aufnehmen", "secondaryCta": "Zur Startseite" }, "homepage": { "heroKicker": "Hi, ich bin Moh", "heroTitle": "frontend\ndeveloper\n& designer", - "heroText": "Ich entwickle digitale Loesungen fuer echte Probleme,\ndie gut aussehen und sauber funktionieren.", + "heroText": "Ich entwickle digitale Lösungen für echte Probleme,\ndie gut aussehen und sauber funktionieren.", "servicesEyebrow": "Leistungen", - "servicesTitle": "Digitale Arbeit, die sich an deinem Geschaeft orientiert und nicht an Vorlagen.", - "servicesText": "Von Markenaufbau und Websites bis zu Shops, SEO, Tracking, WordPress Plugins und internen Systemen geht es immer um dasselbe: mehr Klarheit, bessere Wirkung und eine saubere Grundlage fuer Wachstum.", - "servicesPrimaryCta": "Erzaehl mir von deinem Projekt", + "servicesTitle": "Digitale Arbeit, die sich an deinem Geschäft orientiert und nicht an Vorlagen.", + "servicesText": "Von Markenaufbau und Websites bis zu Shops, SEO, Tracking, WordPress Plugins und internen Systemen geht es immer um dasselbe: mehr Klarheit, bessere Wirkung und eine saubere Grundlage für Wachstum.", + "servicesPrimaryCta": "Erzähl mir von deinem Projekt", "servicesSecondaryCta": "Meine Arbeiten ansehen", "serviceBrand": "Markenaufbau mit klarer Richtung.", "serviceWebsite": "Websites mit sauberer Struktur.", @@ -41,35 +41,35 @@ "serviceWordPress": "Eigene WordPress Plugins.", "serviceSeo": "Mehr Sichtbarkeit in Suchmaschinen.", "serviceTracking": "Tracking und bessere Auswertung.", - "serviceSystem": "Interne Systeme fuer Teams und Firmen.", + "serviceSystem": "Interne Systeme für Teams und Firmen.", "toPortfolio": "Portfolio ansehen", "toProducts": "Produkte ansehen", "toContact": "Kontakt aufnehmen" }, "portfolioPage": { "title": "Portfolio", - "heroBadge": "Ausgewaehlte Arbeiten", - "heroTitle": "Ausgewaehlte Projekte", + "heroBadge": "Ausgewählte Arbeiten", + "heroTitle": "Portfolio", "intro": "Eine Auswahl von Projekten mit Fokus auf Klarheit und Ergebnis.", - "open": "Projekt oeffnen", + "open": "Projekt öffnen", "all": "Alle Kategorien", - "empty": "Fuer diesen Filter sind noch keine veroeffentlichten Projekte vorhanden." + "empty": "Für diesen Filter sind noch keine veröffentlichten Projekte vorhanden." }, "productsPage": { "title": "Produkte", - "heroBadge": "Pakete und Loesungen", + "heroBadge": "Pakete und Lösungen", "heroTitle": "Klare Angebote", - "intro": "Pakete fuer Teams von Start bis Skalierung.", - "open": "Produkt oeffnen" + "intro": "Pakete für Teams von Start bis Skalierung.", + "open": "Produkt öffnen" }, "aboutPage": { - "title": "Ueber mich", - "heroBadge": "Mehr ueber mich", - "heroTitle": "Ueber mich", - "intro": "Ich baue klare digitale Erlebnisse fuer Marken, Produkte und Teams.", + "title": "Über mich", + "heroBadge": "Mehr über mich", + "heroTitle": "Über mich", + "intro": "Ich baue klare digitale Erlebnisse für Marken, Produkte und Teams.", "valuesTitle": "Wie ich arbeite", "valueA": "Strategie zuerst", - "valueAText": "Jedes Projekt startet mit Zielbild, Scope und Prioritaeten.", + "valueAText": "Jedes Projekt startet mit Zielbild, Scope und Prioritäten.", "valueB": "Saubere Systeme", "valueBText": "Ich setze auf wartbare Komponenten und klare Strukturen.", "valueC": "Enge Zusammenarbeit", @@ -89,30 +89,30 @@ "phone": "Telefon", "company": "Firma", "message": "Nachricht", - "note": "Teile kurz Kontext, Ziel und Deadline mit, damit die Antwort praeziser ausfallen kann.", + "note": "Teile kurz Kontext, Ziel und Deadline mit, damit die Antwort präziser ausfallen kann.", "submit": "Senden", "preview": "Success Seite ansehen", "city": "Berlin, Deutschland" }, "successPage": { - "title": "Danke fuer deine Nachricht", + "title": "Danke für deine Nachricht", "text": "Ich habe deine Anfrage erhalten und melde mich zeitnah.", "home": "Zur Startseite", "contact": "Zur Kontaktseite" }, "portfolioDetail": { - "back": "Zurueck zum Portfolio", - "preview": "Vorschau oeffnen", - "openLink": "Link oeffnen", + "back": "Zurück zum Portfolio", + "preview": "Vorschau öffnen", + "openLink": "Link öffnen", "gallery": "Projektgalerie", - "download": "Dokument oeffnen" + "download": "Dokument öffnen" }, "productDetail": { - "back": "Zurueck zu Produkten", + "back": "Zurück zu Produkten", "included": "Inklusive", "stepOne": "Kickoff und Scope Klarheit", "stepTwo": "Setup von Design und Komponenten", - "stepThree": "Implementierung und Uebergabe", - "action": "Kontakt fuer Angebot" + "stepThree": "Implementierung und Übergabe", + "action": "Kontakt für Angebot" } } diff --git a/messages/en.json b/messages/en.json index 05d727c..2c89917 100644 --- a/messages/en.json +++ b/messages/en.json @@ -49,7 +49,7 @@ "portfolioPage": { "title": "Portfolio", "heroBadge": "Selected work", - "heroTitle": "Selected work", + "heroTitle": "Portfolio", "intro": "Selected projects with a focus on clarity and outcomes.", "open": "Open project", "all": "All categories",