feat: update common translations and add imprint page localizations
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
3ad5aae40b
commit
5b525acf62
5 changed files with 79 additions and 43 deletions
|
|
@ -1,20 +1,27 @@
|
||||||
import Link from "next/link";
|
"use client";
|
||||||
|
|
||||||
|
import { useTranslations } from "next-intl";
|
||||||
|
import { Link } from "@/i18n/navigation";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Legal notice page pursuant to German telemedia law (§ 5 DDG & § 18 MStV)
|
* Legal notice page pursuant to German telemedia law (§ 5 DDG & § 18 MStV)
|
||||||
*/
|
*/
|
||||||
export default function ImprintPage() {
|
export default function ImprintPage() {
|
||||||
|
const tCommon = useTranslations("Common");
|
||||||
|
const tImprint = useTranslations("Imprint");
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="relative pt-18 py-6 px-4 md:px-6 md:pt-24 max-w-5xl mx-auto">
|
<section className="relative pt-18 py-6 px-4 md:px-6 md:pt-24 max-w-5xl mx-auto">
|
||||||
{/* Page Heading & Back Navigation */}
|
{/* Page Heading & Back Navigation */}
|
||||||
<h1 className="text-3xl font-bold text-white mb-2 tracking-tight">
|
<h1 className="text-3xl font-bold text-white mb-2 tracking-tight">
|
||||||
Legal Notice<span className="text-blue-500">.</span>
|
{tCommon("imprint")}
|
||||||
|
<span className="text-blue-500">.</span>
|
||||||
</h1>
|
</h1>
|
||||||
<Link
|
<Link
|
||||||
href="/"
|
href="/"
|
||||||
className="text-sm font-mono text-blue-400 hover:underline mb-8 inline-flex items-center gap-2 transition-colors"
|
className="text-sm font-mono text-blue-400 hover:underline mb-8 inline-flex items-center gap-2 transition-colors"
|
||||||
>
|
>
|
||||||
← Back to Homepage
|
← {tCommon("backHome")}
|
||||||
</Link>
|
</Link>
|
||||||
|
|
||||||
<div className="space-y-8 text-slate-300 leading-relaxed text-sm">
|
<div className="space-y-8 text-slate-300 leading-relaxed text-sm">
|
||||||
|
|
@ -23,16 +30,18 @@ export default function ImprintPage() {
|
||||||
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl pointer-events-none" />
|
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl pointer-events-none" />
|
||||||
<h2 className="text-lg font-semibold text-white mb-2 flex items-center gap-2">
|
<h2 className="text-lg font-semibold text-white mb-2 flex items-center gap-2">
|
||||||
<span className="text-blue-500 font-mono text-sm">//</span>{" "}
|
<span className="text-blue-500 font-mono text-sm">//</span>{" "}
|
||||||
Information Pursuant to § 5 DDG
|
{tImprint("section1Title")}
|
||||||
</h2>
|
</h2>
|
||||||
<div className=" font-mono text-xs space-y-1 bg-slate-950/60 p-4 rounded-xl border border-slate-800/80">
|
<div className=" font-mono text-xs space-y-1 bg-slate-950/60 p-4 rounded-xl border border-slate-800/80">
|
||||||
<p className="font-semibold text-slate-100 text-sm">André Kempf</p>
|
<p className="font-semibold text-slate-100 text-sm">André Kempf</p>
|
||||||
<p className="text-blue-400">Full-Stack Web Developer</p>
|
<p className="text-blue-400">
|
||||||
|
{tCommon("rolePrefix")} {tCommon("roleSuffix")}
|
||||||
|
</p>
|
||||||
<p>Großschneidersweg 2a</p>
|
<p>Großschneidersweg 2a</p>
|
||||||
<p>76149 Karlsruhe, Germany</p>
|
<p>76149 Karlsruhe, Germany</p>
|
||||||
</div>
|
</div>
|
||||||
<p className="text-slate-300 text-xs pt-1">
|
<p className="text-slate-300 text-xs pt-1">
|
||||||
Also responsible for content pursuant to § 18 Abs. 2 MStV.
|
{tImprint("section1Sub")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -40,11 +49,12 @@ export default function ImprintPage() {
|
||||||
<div className="group relative rounded-2xl border border-slate-700/60 bg-slate-900/95 p-6 shadow-2xl shadow-black/60 border-t-slate-600/50 space-y-3 overflow-hidden">
|
<div className="group relative rounded-2xl border border-slate-700/60 bg-slate-900/95 p-6 shadow-2xl shadow-black/60 border-t-slate-600/50 space-y-3 overflow-hidden">
|
||||||
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl pointer-events-none" />
|
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl pointer-events-none" />
|
||||||
<h2 className="text-lg font-semibold text-white flex items-center gap-2">
|
<h2 className="text-lg font-semibold text-white flex items-center gap-2">
|
||||||
<span className="text-blue-500 font-mono text-sm">//</span> Contact
|
<span className="text-blue-500 font-mono text-sm">//</span>{" "}
|
||||||
|
{tImprint("section2Title")}
|
||||||
</h2>
|
</h2>
|
||||||
<div className="p-4 rounded-xl bg-slate-950/60 border border-slate-800/80 font-mono text-xs">
|
<div className="p-4 rounded-xl bg-slate-950/60 border border-slate-800/80 font-mono text-xs">
|
||||||
<p className="text-slate-300">
|
<p className="text-slate-300">
|
||||||
<span className="text-slate-500">Email:</span>{" "}
|
<span className="text-slate-500">{tCommon("emailLabel")}:</span>{" "}
|
||||||
<span className="text-blue-400 hover:underline cursor-pointer">
|
<span className="text-blue-400 hover:underline cursor-pointer">
|
||||||
dev@andre-kempf.com
|
dev@andre-kempf.com
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -57,38 +67,31 @@ export default function ImprintPage() {
|
||||||
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl pointer-events-none" />
|
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl pointer-events-none" />
|
||||||
<h2 className="text-lg font-semibold text-white flex items-center gap-2">
|
<h2 className="text-lg font-semibold text-white flex items-center gap-2">
|
||||||
<span className="text-blue-500 font-mono text-sm">//</span>{" "}
|
<span className="text-blue-500 font-mono text-sm">//</span>{" "}
|
||||||
Disclaimer & Legal Notes
|
{tImprint("section3Title")}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div className="space-y-1">
|
<div className="space-y-1">
|
||||||
<h3 className="font-semibold">Liability for Content</h3>
|
<h3 className="font-semibold">
|
||||||
|
{tImprint("liabilityContentTitle")}
|
||||||
|
</h3>
|
||||||
<p className="text-slate-300 text-xs leading-relaxed">
|
<p className="text-slate-300 text-xs leading-relaxed">
|
||||||
As a service provider, I am responsible for my own content on
|
{tImprint("liabilityContentText")}
|
||||||
these pages according to general laws pursuant to § 7 Abs. 1 DDG.
|
|
||||||
However, according to §§ 8 to 10 DDG, I am not obligated to
|
|
||||||
monitor transmitted or stored third-party information or to
|
|
||||||
investigate circumstances that indicate illegal activity.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="space-y-1 pt-2 border-t border-slate-800/60">
|
<div className="space-y-1 pt-2 border-t border-slate-800/60">
|
||||||
<h3 className="font-semibold">Liability for Links</h3>
|
<h3 className="font-semibold">{tImprint("liabilityLinksTitle")}</h3>
|
||||||
<p className="text-slate-300 text-xs leading-relaxed">
|
<p className="text-slate-300 text-xs leading-relaxed">
|
||||||
My website contains links to external third-party websites over
|
{tImprint("liabilityLinksText")}
|
||||||
whose content I have no control. Therefore, I cannot accept any
|
|
||||||
liability for these external contents. The respective provider or
|
|
||||||
operator of the pages is always responsible for the content of the
|
|
||||||
linked pages.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="space-y-1 pt-2 border-t border-slate-800/60">
|
<div className="space-y-1 pt-2 border-t border-slate-800/60">
|
||||||
<h3 className="font-semibold text-slate-200">Copyright</h3>
|
<h3 className="font-semibold text-slate-200">
|
||||||
|
{tImprint("copyrightTitle")}
|
||||||
|
</h3>
|
||||||
<p className="text-slate-300 text-xs leading-relaxed">
|
<p className="text-slate-300 text-xs leading-relaxed">
|
||||||
The content and works created on these pages are subject to German
|
{tImprint("copyrightText")}
|
||||||
copyright law. Duplication, processing, distribution, or any form
|
|
||||||
of commercialization beyond the scope of copyright law require the
|
|
||||||
prior written consent of the author or creator.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -97,12 +100,11 @@ export default function ImprintPage() {
|
||||||
<div className="group relative rounded-2xl border border-slate-700/60 bg-slate-900/95 p-6 shadow-2xl shadow-black/60 border-t-slate-600/50 space-y-3 overflow-hidden">
|
<div className="group relative rounded-2xl border border-slate-700/60 bg-slate-900/95 p-6 shadow-2xl shadow-black/60 border-t-slate-600/50 space-y-3 overflow-hidden">
|
||||||
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl pointer-events-none" />
|
<div className="absolute -top-12 -right-12 w-24 h-24 bg-blue-500/10 rounded-full blur-xl pointer-events-none" />
|
||||||
<h2 className="text-lg font-semibold text-white flex items-center gap-2">
|
<h2 className="text-lg font-semibold text-white flex items-center gap-2">
|
||||||
<span className="text-blue-500 font-mono text-sm">//</span> Dispute
|
<span className="text-blue-500 font-mono text-sm">//</span>{" "}
|
||||||
Resolution
|
{tImprint("section4Title")}
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-xs text-slate-400 leading-relaxed">
|
<p className="text-xs text-slate-400 leading-relaxed">
|
||||||
The European Commission provides a platform for online dispute
|
{tImprint("disputeText1")}{" "}
|
||||||
resolution (OS):{" "}
|
|
||||||
<a
|
<a
|
||||||
href="https://ec.europa.eu/consumers/odr/"
|
href="https://ec.europa.eu/consumers/odr/"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
|
@ -111,8 +113,8 @@ export default function ImprintPage() {
|
||||||
>
|
>
|
||||||
https://ec.europa.eu/consumers/odr/
|
https://ec.europa.eu/consumers/odr/
|
||||||
</a>
|
</a>
|
||||||
.<br />I am neither willing nor obligated to participate in dispute
|
.<br />
|
||||||
resolution proceedings before a consumer arbitration board.
|
{tImprint("disputeText2")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -198,7 +198,7 @@ export default function Contact() {
|
||||||
{/* Email Input */}
|
{/* Email Input */}
|
||||||
<div>
|
<div>
|
||||||
<label className="block text-xs mb-1.5" htmlFor="email">
|
<label className="block text-xs mb-1.5" htmlFor="email">
|
||||||
{tContact("formEmail")}
|
{tCommon("emailLabel")}
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="email"
|
type="email"
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@ export default function Hero() {
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<h2 className="text-3xl sm:text-4xl lg:text-5xl font-semibold text-slate-400 tracking-tight">
|
<h2 className="text-3xl sm:text-4xl lg:text-5xl font-semibold text-slate-400 tracking-tight">
|
||||||
{tHero("rolePrefix")}{" "}
|
{tCommon("rolePrefix")}{" "}
|
||||||
<span className="text-blue-400/80 font-medium">
|
<span className="text-blue-400/80 font-medium">
|
||||||
{tHero("roleSuffix")}
|
{tCommon("roleSuffix")}
|
||||||
</span>
|
</span>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,17 @@
|
||||||
"portfolio": "Portfolio",
|
"portfolio": "Portfolio",
|
||||||
"contact": "Kontakt",
|
"contact": "Kontakt",
|
||||||
"imprint": "Impressum",
|
"imprint": "Impressum",
|
||||||
"privacy": "Datenschutz"
|
"privacy": "Datenschutz",
|
||||||
|
"rolePrefix": "Full-Stack",
|
||||||
|
"roleSuffix": "Entwickler",
|
||||||
|
"emailLabel": "E-Mail",
|
||||||
|
"backHome": "Zurück zur Startseite"
|
||||||
},
|
},
|
||||||
"Header": {
|
"Header": {
|
||||||
"search": "Suchen"
|
"search": "Suchen"
|
||||||
},
|
},
|
||||||
"Hero": {
|
"Hero": {
|
||||||
"greeting": "Hi, mein Name ist",
|
"greeting": "Hi, mein Name ist",
|
||||||
"rolePrefix": "Full-Stack",
|
|
||||||
"roleSuffix": "Entwickler",
|
|
||||||
"description": "Ich konzipiere und entwickle moderne Web-Anwendungen. Mit einem klaren Auge fürs Detail und einem Fokus auf sauberen Code erwecke ich digitale Ideen zum Leben.",
|
"description": "Ich konzipiere und entwickle moderne Web-Anwendungen. Mit einem klaren Auge fürs Detail und einem Fokus auf sauberen Code erwecke ich digitale Ideen zum Leben.",
|
||||||
"downloadCv": "Lebenslauf"
|
"downloadCv": "Lebenslauf"
|
||||||
},
|
},
|
||||||
|
|
@ -60,7 +62,6 @@
|
||||||
"successTitle": "Vielen Dank!",
|
"successTitle": "Vielen Dank!",
|
||||||
"successText": "Deine Nachricht wurde erfolgreich gesendet. Ich melde mich schnellstmöglich bei dir!",
|
"successText": "Deine Nachricht wurde erfolgreich gesendet. Ich melde mich schnellstmöglich bei dir!",
|
||||||
"formName": "Name",
|
"formName": "Name",
|
||||||
"formEmail": "E-Mail",
|
|
||||||
"formMessage": "Nachricht",
|
"formMessage": "Nachricht",
|
||||||
"formMessagePlaceholder": "Hi André, ich würde gerne ein potenzielles Projekt besprechen...",
|
"formMessagePlaceholder": "Hi André, ich würde gerne ein potenzielles Projekt besprechen...",
|
||||||
"errorMessage": "Ein Fehler ist aufgetreten. Bitte versuche es später erneut.",
|
"errorMessage": "Ein Fehler ist aufgetreten. Bitte versuche es später erneut.",
|
||||||
|
|
@ -69,5 +70,21 @@
|
||||||
},
|
},
|
||||||
"Footer": {
|
"Footer": {
|
||||||
"rights": "Alle Rechte vorbehalten."
|
"rights": "Alle Rechte vorbehalten."
|
||||||
|
},
|
||||||
|
"Imprint": {
|
||||||
|
"backHome": "Zurück zur Startseite",
|
||||||
|
"section1Title": "Angaben gemäß § 5 DDG",
|
||||||
|
"section1Sub": "Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV.",
|
||||||
|
"section2Title": "Kontakt",
|
||||||
|
"section3Title": "Haftungsausschluss",
|
||||||
|
"liabilityContentTitle": "Haftung für Inhalte",
|
||||||
|
"liabilityContentText": "Als Diensteanbieter bin ich gemäß § 7 Abs.1 DDG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 DDG bin ich als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.",
|
||||||
|
"liabilityLinksTitle": "Haftung für Links",
|
||||||
|
"liabilityLinksText": "Mein Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte ich keinen Einfluss habe. Deshalb kann ich für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich.",
|
||||||
|
"copyrightTitle": "Urheberrecht",
|
||||||
|
"copyrightText": "Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers.",
|
||||||
|
"section4Title": "Streitschlichtung",
|
||||||
|
"disputeText1": "Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit:",
|
||||||
|
"disputeText2": "Ich bin nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,18 @@
|
||||||
"portfolio": "Portfolio",
|
"portfolio": "Portfolio",
|
||||||
"contact": "Contact me",
|
"contact": "Contact me",
|
||||||
"imprint": "Legal Notice",
|
"imprint": "Legal Notice",
|
||||||
"privacy": "Privacy Policy"
|
"privacy": "Privacy Policy",
|
||||||
|
"rolePrefix": "Full-Stack",
|
||||||
|
"roleSuffix": "Developer",
|
||||||
|
"emailLabel": "Email",
|
||||||
|
"backHome": "Back to Homepage"
|
||||||
},
|
},
|
||||||
"Header": {
|
"Header": {
|
||||||
"search": "Search"
|
"search": "Search"
|
||||||
},
|
},
|
||||||
"Hero": {
|
"Hero": {
|
||||||
"greeting": "Hi, my name is",
|
"greeting": "Hi, my name is",
|
||||||
"rolePrefix": "Full-Stack",
|
|
||||||
"roleSuffix": "Developer",
|
|
||||||
"description": "I conceptualize and develop modern web applications. With a sharp eye for detail and a focus on clean code, I bring digital ideas to life.",
|
"description": "I conceptualize and develop modern web applications. With a sharp eye for detail and a focus on clean code, I bring digital ideas to life.",
|
||||||
"downloadCv": "Download CV"
|
"downloadCv": "Download CV"
|
||||||
},
|
},
|
||||||
|
|
@ -60,7 +63,6 @@
|
||||||
"successTitle": "Thank you!",
|
"successTitle": "Thank you!",
|
||||||
"successText": "Your message has been sent successfully. I'll get back to you as soon as possible!",
|
"successText": "Your message has been sent successfully. I'll get back to you as soon as possible!",
|
||||||
"formName": "Name",
|
"formName": "Name",
|
||||||
"formEmail": "Email",
|
|
||||||
"formMessage": "Message",
|
"formMessage": "Message",
|
||||||
"formMessagePlaceholder": "Hi André, I would like to discuss a potential project...",
|
"formMessagePlaceholder": "Hi André, I would like to discuss a potential project...",
|
||||||
"errorMessage": "An error occurred. Please try again later.",
|
"errorMessage": "An error occurred. Please try again later.",
|
||||||
|
|
@ -69,5 +71,20 @@
|
||||||
},
|
},
|
||||||
"Footer": {
|
"Footer": {
|
||||||
"rights": "All rights reserved."
|
"rights": "All rights reserved."
|
||||||
|
},
|
||||||
|
"Imprint": {
|
||||||
|
"section1Title": "Information Pursuant to § 5 DDG",
|
||||||
|
"section1Sub": "Also responsible for content pursuant to § 18 Abs. 2 MStV.",
|
||||||
|
"section2Title": "Contact",
|
||||||
|
"section3Title": "Disclaimer & Legal Notes",
|
||||||
|
"liabilityContentTitle": "Liability for Content",
|
||||||
|
"liabilityContentText": "As a service provider, I am responsible for my own content on these pages according to general laws pursuant to § 7 Abs. 1 DDG. However, according to §§ 8 to 10 DDG, I am not obligated to monitor transmitted or stored third-party information or to investigate circumstances that indicate illegal activity.",
|
||||||
|
"liabilityLinksTitle": "Liability for Links",
|
||||||
|
"liabilityLinksText": "My website contains links to external third-party websites over whose content I have no control. Therefore, I cannot accept any liability for these external contents. The respective provider or operator of the pages is always responsible for the content of the linked pages.",
|
||||||
|
"copyrightTitle": "Copyright",
|
||||||
|
"copyrightText": "The content and works created on these pages are subject to German copyright law. Duplication, processing, distribution, or any form of commercialization beyond the scope of copyright law require the prior written consent of the author or creator.",
|
||||||
|
"section4Title": "Dispute Resolution",
|
||||||
|
"disputeText1": "The European Commission provides a platform for online dispute resolution (OS):",
|
||||||
|
"disputeText2": "I am neither willing nor obligated to participate in dispute resolution proceedings before a consumer arbitration board."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue