feat: add localized footer section
All checks were successful
Deploy Portfolio to VPS / deploy (push) Successful in 28s
All checks were successful
Deploy Portfolio to VPS / deploy (push) Successful in 28s
This commit is contained in:
parent
2a9ee6c667
commit
a1cf111ff3
3 changed files with 21 additions and 5 deletions
|
|
@ -1,18 +1,24 @@
|
||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
import AnalyticsWidget from "./AnalyticsWidget";
|
import AnalyticsWidget from "./AnalyticsWidget";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Page footer with copyright notice, live analytics widget, and legal links
|
* Page footer with copyright notice, live analytics widget, and legal links
|
||||||
*/
|
*/
|
||||||
export default function Footer() {
|
export default function Footer() {
|
||||||
|
const tCommon = useTranslations("Common");
|
||||||
|
const tFooter = useTranslations("Footer");
|
||||||
|
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<footer className="w-full bg-slate-950/50 text-xs text-slate-500 px-4 py-4 border-t border-slate-900/40">
|
<footer className="w-full bg-slate-950/50 text-xs text-slate-500 px-4 py-4 border-t border-slate-900/40">
|
||||||
<div className="max-w-5xl mx-auto flex flex-col md:flex-row justify-between items-center gap-4">
|
<div className="max-w-5xl mx-auto flex flex-col md:flex-row justify-between items-center gap-4">
|
||||||
{/* Left: Copyright Notice */}
|
{/* Left: Copyright Notice */}
|
||||||
<p className="order-1 md:order-1">
|
<p className="order-1 md:order-1">
|
||||||
© {new Date().getFullYear()} André Kempf. All rights reserved.
|
© {currentYear} André Kempf. {tFooter("rights")}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{/* Center: Live System Metrics Badge */}
|
{/* Center: Live System Metrics Badge */}
|
||||||
|
|
@ -26,14 +32,14 @@ export default function Footer() {
|
||||||
href="/imprint"
|
href="/imprint"
|
||||||
className="hover:text-slate-300 transition-colors"
|
className="hover:text-slate-300 transition-colors"
|
||||||
>
|
>
|
||||||
Legal Notice
|
{tCommon("imprint")}
|
||||||
</Link>
|
</Link>
|
||||||
<span className="text-slate-800">|</span>
|
<span className="text-slate-800">|</span>
|
||||||
<Link
|
<Link
|
||||||
href="/privacy"
|
href="/privacy"
|
||||||
className="hover:text-slate-300 transition-colors"
|
className="hover:text-slate-300 transition-colors"
|
||||||
>
|
>
|
||||||
Privacy Policy
|
{tCommon("privacy")}
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,9 @@
|
||||||
"about": "Über mich",
|
"about": "Über mich",
|
||||||
"skills": "Fähigkeiten",
|
"skills": "Fähigkeiten",
|
||||||
"portfolio": "Portfolio",
|
"portfolio": "Portfolio",
|
||||||
"contact": "Kontakt"
|
"contact": "Kontakt",
|
||||||
|
"imprint": "Impressum",
|
||||||
|
"privacy": "Datenschutz"
|
||||||
},
|
},
|
||||||
"Header": {
|
"Header": {
|
||||||
"search": "Suchen"
|
"search": "Suchen"
|
||||||
|
|
@ -64,5 +66,8 @@
|
||||||
"errorMessage": "Ein Fehler ist aufgetreten. Bitte versuche es später erneut.",
|
"errorMessage": "Ein Fehler ist aufgetreten. Bitte versuche es später erneut.",
|
||||||
"submitting": "Wird gesendet...",
|
"submitting": "Wird gesendet...",
|
||||||
"submit": "Nachricht senden"
|
"submit": "Nachricht senden"
|
||||||
|
},
|
||||||
|
"Footer": {
|
||||||
|
"rights": "Alle Rechte vorbehalten."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,9 @@
|
||||||
"about": "About me",
|
"about": "About me",
|
||||||
"skills": "My Skills",
|
"skills": "My Skills",
|
||||||
"portfolio": "Portfolio",
|
"portfolio": "Portfolio",
|
||||||
"contact": "Contact me"
|
"contact": "Contact me",
|
||||||
|
"imprint": "Legal Notice",
|
||||||
|
"privacy": "Privacy Policy"
|
||||||
},
|
},
|
||||||
"Header": {
|
"Header": {
|
||||||
"search": "Search"
|
"search": "Search"
|
||||||
|
|
@ -64,5 +66,8 @@
|
||||||
"errorMessage": "An error occurred. Please try again later.",
|
"errorMessage": "An error occurred. Please try again later.",
|
||||||
"submitting": "Sending...",
|
"submitting": "Sending...",
|
||||||
"submit": "Send Message"
|
"submit": "Send Message"
|
||||||
|
},
|
||||||
|
"Footer": {
|
||||||
|
"rights": "All rights reserved."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue