This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import { notFound } from 'next/navigation';
|
import { notFound } from 'next/navigation';
|
||||||
import { MDXRemote } from 'next-mdx-remote/rsc';
|
import { MDXRemote } from 'next-mdx-remote/rsc';
|
||||||
import { Section, Container, Heading, Badge } from '@/components/ui';
|
import { Section, Container, Heading, Badge } from '@/components/ui';
|
||||||
|
import { getTranslations } from 'next-intl/server';
|
||||||
|
|
||||||
interface PageProps {
|
interface PageProps {
|
||||||
params: {
|
params: {
|
||||||
@@ -12,6 +13,7 @@ interface PageProps {
|
|||||||
export default async function StandardPage({ params: { locale, slug } }: PageProps) {
|
export default async function StandardPage({ params: { locale, slug } }: PageProps) {
|
||||||
const { getPageBySlug } = await import('@/lib/pages');
|
const { getPageBySlug } = await import('@/lib/pages');
|
||||||
const pageData = await getPageBySlug(slug, locale);
|
const pageData = await getPageBySlug(slug, locale);
|
||||||
|
const t = await getTranslations('StandardPage');
|
||||||
|
|
||||||
if (!pageData) {
|
if (!pageData) {
|
||||||
notFound();
|
notFound();
|
||||||
@@ -26,7 +28,7 @@ export default async function StandardPage({ params: { locale, slug } }: PagePro
|
|||||||
</div>
|
</div>
|
||||||
<Container className="relative z-10">
|
<Container className="relative z-10">
|
||||||
<div className="max-w-4xl animate-slide-up">
|
<div className="max-w-4xl animate-slide-up">
|
||||||
<Badge variant="accent" className="mb-4 md:mb-6">Information</Badge>
|
<Badge variant="accent" className="mb-4 md:mb-6">{t('badge')}</Badge>
|
||||||
<Heading level={1} className="text-3xl md:text-6xl lg:text-7xl xl:text-8xl text-white mb-0">
|
<Heading level={1} className="text-3xl md:text-6xl lg:text-7xl xl:text-8xl text-white mb-0">
|
||||||
<span className="text-white">{pageData.frontmatter.title}</span>
|
<span className="text-white">{pageData.frontmatter.title}</span>
|
||||||
</Heading>
|
</Heading>
|
||||||
@@ -42,29 +44,29 @@ export default async function StandardPage({ params: { locale, slug } }: PagePro
|
|||||||
<div className="lg:sticky lg:top-32 space-y-4 md:space-y-8">
|
<div className="lg:sticky lg:top-32 space-y-4 md:space-y-8">
|
||||||
{/* Mobile-only chip/stepper feel */}
|
{/* Mobile-only chip/stepper feel */}
|
||||||
<div className="flex lg:hidden overflow-x-auto pb-4 gap-3 no-scrollbar -mx-4 px-4">
|
<div className="flex lg:hidden overflow-x-auto pb-4 gap-3 no-scrollbar -mx-4 px-4">
|
||||||
<Badge variant="primary" className="whitespace-nowrap px-4 py-2 rounded-full shadow-sm">Overview</Badge>
|
<Badge variant="primary" className="whitespace-nowrap px-4 py-2 rounded-full shadow-sm">{t('overview')}</Badge>
|
||||||
<Badge variant="neutral" className="whitespace-nowrap px-4 py-2 rounded-full shadow-sm opacity-60">Details</Badge>
|
<Badge variant="neutral" className="whitespace-nowrap px-4 py-2 rounded-full shadow-sm opacity-60">{t('details')}</Badge>
|
||||||
<Badge variant="neutral" className="whitespace-nowrap px-4 py-2 rounded-full shadow-sm opacity-60">Support</Badge>
|
<Badge variant="neutral" className="whitespace-nowrap px-4 py-2 rounded-full shadow-sm opacity-60">{t('support')}</Badge>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="p-6 md:p-8 bg-neutral-light rounded-2xl md:rounded-3xl border border-neutral-medium shadow-sm">
|
<div className="p-6 md:p-8 bg-neutral-light rounded-2xl md:rounded-3xl border border-neutral-medium shadow-sm">
|
||||||
<h3 className="text-lg md:text-xl font-bold text-primary mb-3 md:mb-4 flex items-center gap-2">
|
<h3 className="text-lg md:text-xl font-bold text-primary mb-3 md:mb-4 flex items-center gap-2">
|
||||||
<span className="w-1.5 h-6 bg-accent rounded-full" />
|
<span className="w-1.5 h-6 bg-accent rounded-full" />
|
||||||
Quick Navigation
|
{t('quickNavigation')}
|
||||||
</h3>
|
</h3>
|
||||||
<nav className="space-y-3 md:space-y-4">
|
<nav className="space-y-3 md:space-y-4">
|
||||||
<p className="text-sm md:text-base text-text-secondary leading-relaxed">
|
<p className="text-sm md:text-base text-text-secondary leading-relaxed">
|
||||||
Explore the details of {pageData.frontmatter.title}. KLZ provides comprehensive information on all our services and corporate policies.
|
{t('exploreDetails', { title: pageData.frontmatter.title })}
|
||||||
</p>
|
</p>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="p-6 md:p-8 bg-primary-dark rounded-2xl md:rounded-3xl text-white shadow-xl relative overflow-hidden group">
|
<div className="p-6 md:p-8 bg-primary-dark rounded-2xl md:rounded-3xl text-white shadow-xl relative overflow-hidden group">
|
||||||
<div className="absolute top-0 right-0 w-24 h-full bg-accent/5 -skew-x-12 translate-x-1/2 transition-transform group-hover:translate-x-1/3" />
|
<div className="absolute top-0 right-0 w-24 h-full bg-accent/5 -skew-x-12 translate-x-1/2 transition-transform group-hover:translate-x-1/3" />
|
||||||
<h3 className="text-lg md:text-xl font-bold mb-3 md:mb-4 relative z-10">Need Help?</h3>
|
<h3 className="text-lg md:text-xl font-bold mb-3 md:mb-4 relative z-10">{t('needHelp')}</h3>
|
||||||
<p className="text-sm md:text-base text-white/70 mb-4 md:mb-6 relative z-10">Our support team is available for any questions regarding this topic.</p>
|
<p className="text-sm md:text-base text-white/70 mb-4 md:mb-6 relative z-10">{t('supportTeamAvailable')}</p>
|
||||||
<a href={`/${locale}/contact`} className="inline-flex items-center text-accent font-bold hover:underline touch-target relative z-10 group/link">
|
<a href={`/${locale}/contact`} className="inline-flex items-center text-accent font-bold hover:underline touch-target relative z-10 group/link">
|
||||||
Contact Us
|
{t('contactUs')}
|
||||||
<span className="ml-2 transition-transform group-hover/link:translate-x-1">→</span>
|
<span className="ml-2 transition-transform group-hover/link:translate-x-1">→</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import Link from 'next/link';
|
|||||||
import { getAllPosts } from '@/lib/blog';
|
import { getAllPosts } from '@/lib/blog';
|
||||||
import { Section, Container, Heading, Card, Badge, Button } from '@/components/ui';
|
import { Section, Container, Heading, Card, Badge, Button } from '@/components/ui';
|
||||||
import Reveal from '@/components/Reveal';
|
import Reveal from '@/components/Reveal';
|
||||||
|
import { getTranslations } from 'next-intl/server';
|
||||||
|
|
||||||
interface BlogIndexProps {
|
interface BlogIndexProps {
|
||||||
params: {
|
params: {
|
||||||
@@ -10,15 +11,15 @@ interface BlogIndexProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function generateMetadata({ params: { locale } }: BlogIndexProps) {
|
export async function generateMetadata({ params: { locale } }: BlogIndexProps) {
|
||||||
|
const t = await getTranslations({ locale, namespace: 'Blog.meta' });
|
||||||
return {
|
return {
|
||||||
title: locale === 'de' ? 'Neuigkeiten zu Kabeln und Energielösungen' : 'News on Cables and Energy Solutions',
|
title: t('title'),
|
||||||
description: locale === 'de'
|
description: t('description'),
|
||||||
? 'Bleiben Sie auf dem Laufenden! Lesen Sie aktuelle Themen und Insights zu Kabeltechnologie, Energielösungen und branchenspezifischen Innovationen.'
|
|
||||||
: 'Stay up to date! Read current topics and insights on cable technology, energy solutions and industry-specific innovations.',
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function BlogIndex({ params: { locale } }: BlogIndexProps) {
|
export default async function BlogIndex({ params: { locale } }: BlogIndexProps) {
|
||||||
|
const t = await getTranslations('Blog');
|
||||||
const posts = await getAllPosts(locale);
|
const posts = await getAllPosts(locale);
|
||||||
|
|
||||||
// Sort posts by date descending
|
// Sort posts by date descending
|
||||||
@@ -46,7 +47,7 @@ export default async function BlogIndex({ params: { locale } }: BlogIndexProps)
|
|||||||
|
|
||||||
<Container className="relative z-10">
|
<Container className="relative z-10">
|
||||||
<div className="max-w-4xl animate-slide-up">
|
<div className="max-w-4xl animate-slide-up">
|
||||||
<Badge variant="accent" className="mb-4 md:mb-6">Featured Post</Badge>
|
<Badge variant="accent" className="mb-4 md:mb-6">{t('featuredPost')}</Badge>
|
||||||
{featuredPost && (
|
{featuredPost && (
|
||||||
<>
|
<>
|
||||||
<h1 className="text-3xl md:text-7xl font-extrabold text-white mb-4 md:mb-8 leading-[1.1] line-clamp-3 md:line-clamp-none">
|
<h1 className="text-3xl md:text-7xl font-extrabold text-white mb-4 md:mb-8 leading-[1.1] line-clamp-3 md:line-clamp-none">
|
||||||
@@ -56,7 +57,7 @@ export default async function BlogIndex({ params: { locale } }: BlogIndexProps)
|
|||||||
{featuredPost.frontmatter.excerpt}
|
{featuredPost.frontmatter.excerpt}
|
||||||
</p>
|
</p>
|
||||||
<Button href={`/${locale}/blog/${featuredPost.slug}`} variant="accent" size="lg" className="group w-full md:w-auto md:h-16 md:px-10 md:text-xl">
|
<Button href={`/${locale}/blog/${featuredPost.slug}`} variant="accent" size="lg" className="group w-full md:w-auto md:h-16 md:px-10 md:text-xl">
|
||||||
{locale === 'de' ? 'Vollständigen Artikel lesen' : 'Read Full Article'}
|
{t('readFullArticle')}
|
||||||
<span className="ml-3 transition-transform group-hover:translate-x-2">→</span>
|
<span className="ml-3 transition-transform group-hover:translate-x-2">→</span>
|
||||||
</Button>
|
</Button>
|
||||||
</>
|
</>
|
||||||
@@ -69,15 +70,15 @@ export default async function BlogIndex({ params: { locale } }: BlogIndexProps)
|
|||||||
<Container>
|
<Container>
|
||||||
<Reveal>
|
<Reveal>
|
||||||
<div className="flex flex-col md:flex-row items-start md:items-end justify-between mb-8 md:mb-16 gap-4 md:gap-6">
|
<div className="flex flex-col md:flex-row items-start md:items-end justify-between mb-8 md:mb-16 gap-4 md:gap-6">
|
||||||
<Heading level={2} subtitle="Latest News" className="mb-0">
|
<Heading level={2} subtitle={t('latestNews')} className="mb-0">
|
||||||
{locale === 'de' ? 'Alle Beiträge' : 'All Articles'}
|
{t('allArticles')}
|
||||||
</Heading>
|
</Heading>
|
||||||
<div className="flex flex-wrap gap-2 md:gap-4">
|
<div className="flex flex-wrap gap-2 md:gap-4">
|
||||||
{/* Category filters could go here */}
|
{/* Category filters could go here */}
|
||||||
<Badge variant="primary" className="cursor-pointer hover:bg-primary hover:text-white transition-colors touch-target px-3 md:px-4">All</Badge>
|
<Badge variant="primary" className="cursor-pointer hover:bg-primary hover:text-white transition-colors touch-target px-3 md:px-4">{t('categories.all')}</Badge>
|
||||||
<Badge variant="neutral" className="cursor-pointer hover:bg-primary hover:text-white transition-colors touch-target px-3 md:px-4">Industry</Badge>
|
<Badge variant="neutral" className="cursor-pointer hover:bg-primary hover:text-white transition-colors touch-target px-3 md:px-4">{t('categories.industry')}</Badge>
|
||||||
<Badge variant="neutral" className="cursor-pointer hover:bg-primary hover:text-white transition-colors touch-target px-3 md:px-4">Technical</Badge>
|
<Badge variant="neutral" className="cursor-pointer hover:bg-primary hover:text-white transition-colors touch-target px-3 md:px-4">{t('categories.technical')}</Badge>
|
||||||
<Badge variant="neutral" className="cursor-pointer hover:bg-primary hover:text-white transition-colors touch-target px-3 md:px-4">Sustainability</Badge>
|
<Badge variant="neutral" className="cursor-pointer hover:bg-primary hover:text-white transition-colors touch-target px-3 md:px-4">{t('categories.sustainability')}</Badge>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Reveal>
|
</Reveal>
|
||||||
@@ -119,7 +120,7 @@ export default async function BlogIndex({ params: { locale } }: BlogIndexProps)
|
|||||||
</p>
|
</p>
|
||||||
<div className="mt-auto pt-4 md:pt-8 border-t border-neutral-medium flex items-center justify-between">
|
<div className="mt-auto pt-4 md:pt-8 border-t border-neutral-medium flex items-center justify-between">
|
||||||
<span className="text-primary text-sm md:text-base font-extrabold group-hover:text-accent-dark transition-colors">
|
<span className="text-primary text-sm md:text-base font-extrabold group-hover:text-accent-dark transition-colors">
|
||||||
{locale === 'de' ? 'Weiterlesen' : 'Read more'}
|
{t('readMore')}
|
||||||
</span>
|
</span>
|
||||||
<div className="w-8 h-8 md:w-10 md:h-10 rounded-full bg-primary-light flex items-center justify-center text-primary group-hover:bg-accent group-hover:text-primary-dark transition-all duration-300">
|
<div className="w-8 h-8 md:w-10 md:h-10 rounded-full bg-primary-light flex items-center justify-center text-primary group-hover:bg-accent group-hover:text-primary-dark transition-all duration-300">
|
||||||
<svg className="w-4 h-4 md:w-5 md:h-5 transition-transform group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-4 h-4 md:w-5 md:h-5 transition-transform group-hover:translate-x-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
@@ -136,10 +137,10 @@ export default async function BlogIndex({ params: { locale } }: BlogIndexProps)
|
|||||||
|
|
||||||
{/* Pagination Placeholder */}
|
{/* Pagination Placeholder */}
|
||||||
<div className="mt-12 md:mt-24 flex justify-center gap-2 md:gap-4">
|
<div className="mt-12 md:mt-24 flex justify-center gap-2 md:gap-4">
|
||||||
<Button variant="outline" size="sm" className="md:h-11 md:px-6 md:text-base" disabled>Prev</Button>
|
<Button variant="outline" size="sm" className="md:h-11 md:px-6 md:text-base" disabled>{t('prev')}</Button>
|
||||||
<Button variant="primary" size="sm" className="md:h-11 md:px-6 md:text-base">1</Button>
|
<Button variant="primary" size="sm" className="md:h-11 md:px-6 md:text-base">1</Button>
|
||||||
<Button variant="outline" size="sm" className="md:h-11 md:px-6 md:text-base">2</Button>
|
<Button variant="outline" size="sm" className="md:h-11 md:px-6 md:text-base">2</Button>
|
||||||
<Button variant="outline" size="sm" className="md:h-11 md:px-6 md:text-base">Next</Button>
|
<Button variant="outline" size="sm" className="md:h-11 md:px-6 md:text-base">{t('next')}</Button>
|
||||||
</div>
|
</div>
|
||||||
</Container>
|
</Container>
|
||||||
</Section>
|
</Section>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export default function ContactPage() {
|
|||||||
</div>
|
</div>
|
||||||
<Container className="relative z-10">
|
<Container className="relative z-10">
|
||||||
<div className="max-w-4xl animate-slide-up">
|
<div className="max-w-4xl animate-slide-up">
|
||||||
<Heading level={1} subtitle="Get in Touch" className="text-white mb-4 md:mb-6">
|
<Heading level={1} subtitle={t('heroSubtitle')} className="text-white mb-4 md:mb-6">
|
||||||
<span className="text-white">{t('title')}</span>
|
<span className="text-white">{t('title')}</span>
|
||||||
</Heading>
|
</Heading>
|
||||||
<p className="text-lg md:text-2xl text-white/70 leading-relaxed max-w-2xl">
|
<p className="text-lg md:text-2xl text-white/70 leading-relaxed max-w-2xl">
|
||||||
@@ -29,8 +29,8 @@ export default function ContactPage() {
|
|||||||
{/* Contact Info */}
|
{/* Contact Info */}
|
||||||
<div className="lg:col-span-5 space-y-6 md:space-y-12">
|
<div className="lg:col-span-5 space-y-6 md:space-y-12">
|
||||||
<div className="animate-fade-in">
|
<div className="animate-fade-in">
|
||||||
<Heading level={3} subtitle="Contact Details" className="mb-6 md:mb-8">
|
<Heading level={3} subtitle={t('info.subtitle')} className="mb-6 md:mb-8">
|
||||||
How to Reach Us
|
{t('info.howToReachUs')}
|
||||||
</Heading>
|
</Heading>
|
||||||
<div className="space-y-4 md:space-y-8">
|
<div className="space-y-4 md:space-y-8">
|
||||||
<div className="flex items-start gap-4 md:gap-6 group">
|
<div className="flex items-start gap-4 md:gap-6 group">
|
||||||
@@ -41,7 +41,7 @@ export default function ContactPage() {
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 className="text-base md:text-xl font-bold text-primary mb-1 md:mb-2">Our Office</h4>
|
<h4 className="text-base md:text-xl font-bold text-primary mb-1 md:mb-2">{t('info.office')}</h4>
|
||||||
<p className="text-sm md:text-lg text-text-secondary leading-relaxed whitespace-pre-line">
|
<p className="text-sm md:text-lg text-text-secondary leading-relaxed whitespace-pre-line">
|
||||||
{t('info.address')}
|
{t('info.address')}
|
||||||
</p>
|
</p>
|
||||||
@@ -55,7 +55,7 @@ export default function ContactPage() {
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 className="text-base md:text-xl font-bold text-primary mb-1 md:mb-2">Phone</h4>
|
<h4 className="text-base md:text-xl font-bold text-primary mb-1 md:mb-2">{t('info.phone')}</h4>
|
||||||
<a href="tel:+4988192537298" className="text-sm md:text-lg text-text-secondary hover:text-primary transition-colors font-medium touch-target">+49 881 92537298</a>
|
<a href="tel:+4988192537298" className="text-sm md:text-lg text-text-secondary hover:text-primary transition-colors font-medium touch-target">+49 881 92537298</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -67,7 +67,7 @@ export default function ContactPage() {
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h4 className="text-base md:text-xl font-bold text-primary mb-1 md:mb-2">Email</h4>
|
<h4 className="text-base md:text-xl font-bold text-primary mb-1 md:mb-2">{t('info.email')}</h4>
|
||||||
<a href="mailto:info@klz-vertriebs-gmbh.com" className="text-sm md:text-lg text-text-secondary hover:text-primary transition-colors font-medium touch-target">info@klz-vertriebs-gmbh.com</a>
|
<a href="mailto:info@klz-vertriebs-gmbh.com" className="text-sm md:text-lg text-text-secondary hover:text-primary transition-colors font-medium touch-target">info@klz-vertriebs-gmbh.com</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -92,7 +92,7 @@ export default function ContactPage() {
|
|||||||
{/* Contact Form */}
|
{/* Contact Form */}
|
||||||
<div className="lg:col-span-7">
|
<div className="lg:col-span-7">
|
||||||
<Card className="p-6 md:p-12 rounded-2xl md:rounded-[40px] border-none shadow-2xl animate-slide-up">
|
<Card className="p-6 md:p-12 rounded-2xl md:rounded-[40px] border-none shadow-2xl animate-slide-up">
|
||||||
<Heading level={3} subtitle="Send a Message" className="mb-6 md:mb-10">
|
<Heading level={3} subtitle={t('form.subtitle')} className="mb-6 md:mb-10">
|
||||||
{t('form.title')}
|
{t('form.title')}
|
||||||
</Heading>
|
</Heading>
|
||||||
<form className="grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-8">
|
<form className="grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-8">
|
||||||
@@ -105,7 +105,7 @@ export default function ContactPage() {
|
|||||||
autoComplete="name"
|
autoComplete="name"
|
||||||
enterKeyHint="next"
|
enterKeyHint="next"
|
||||||
className="w-full px-4 md:px-6 py-2.5 md:py-4 bg-neutral rounded-xl md:rounded-2xl border-2 border-transparent focus:border-primary focus:bg-white transition-all outline-none text-sm md:text-lg"
|
className="w-full px-4 md:px-6 py-2.5 md:py-4 bg-neutral rounded-xl md:rounded-2xl border-2 border-transparent focus:border-primary focus:bg-white transition-all outline-none text-sm md:text-lg"
|
||||||
placeholder="Your Name"
|
placeholder={t('form.namePlaceholder')}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -119,7 +119,7 @@ export default function ContactPage() {
|
|||||||
inputMode="email"
|
inputMode="email"
|
||||||
enterKeyHint="next"
|
enterKeyHint="next"
|
||||||
className="w-full px-4 md:px-6 py-2.5 md:py-4 bg-neutral rounded-xl md:rounded-2xl border-2 border-transparent focus:border-primary focus:bg-white transition-all outline-none text-sm md:text-lg"
|
className="w-full px-4 md:px-6 py-2.5 md:py-4 bg-neutral rounded-xl md:rounded-2xl border-2 border-transparent focus:border-primary focus:bg-white transition-all outline-none text-sm md:text-lg"
|
||||||
placeholder="your@email.com"
|
placeholder={t('form.emailPlaceholder')}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -131,7 +131,7 @@ export default function ContactPage() {
|
|||||||
rows={4}
|
rows={4}
|
||||||
enterKeyHint="send"
|
enterKeyHint="send"
|
||||||
className="w-full px-4 md:px-6 py-2.5 md:py-4 bg-neutral rounded-xl md:rounded-2xl border-2 border-transparent focus:border-primary focus:bg-white transition-all outline-none text-sm md:text-lg resize-none"
|
className="w-full px-4 md:px-6 py-2.5 md:py-4 bg-neutral rounded-xl md:rounded-2xl border-2 border-transparent focus:border-primary focus:bg-white transition-all outline-none text-sm md:text-lg resize-none"
|
||||||
placeholder="How can we help you?"
|
placeholder={t('form.messagePlaceholder')}
|
||||||
required
|
required
|
||||||
></textarea>
|
></textarea>
|
||||||
</div>
|
</div>
|
||||||
@@ -156,7 +156,7 @@ export default function ContactPage() {
|
|||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" />
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<p className="font-bold text-primary text-xl">Interactive Map Coming Soon</p>
|
<p className="font-bold text-primary text-xl">{t('map.comingSoon')}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
import {NextIntlClientProvider} from 'next-intl';
|
import {NextIntlClientProvider} from 'next-intl';
|
||||||
import {getMessages} from 'next-intl/server';
|
import {getMessages, getTranslations} from 'next-intl/server';
|
||||||
import '../../styles/globals.css';
|
import '../../styles/globals.css';
|
||||||
import Header from '@/components/Header';
|
import Header from '@/components/Header';
|
||||||
import Footer from '@/components/Footer';
|
import Footer from '@/components/Footer';
|
||||||
import { Metadata, Viewport } from 'next';
|
import { Metadata, Viewport } from 'next';
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export async function generateMetadata({params: {locale}}: {params: {locale: string}}): Promise<Metadata> {
|
||||||
title: 'KLZ Cables',
|
const t = await getTranslations({locale, namespace: 'Index.meta'});
|
||||||
description: 'Premium Cable Solutions',
|
|
||||||
};
|
return {
|
||||||
|
title: t('title'),
|
||||||
|
description: t('description')
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export const viewport: Viewport = {
|
export const viewport: Viewport = {
|
||||||
width: 'device-width',
|
width: 'device-width',
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export default function TeamPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Container className="relative z-10 text-center text-white max-w-5xl animate-slide-up">
|
<Container className="relative z-10 text-center text-white max-w-5xl animate-slide-up">
|
||||||
<Badge variant="accent" className="mb-4 md:mb-8 shadow-lg">Our People</Badge>
|
<Badge variant="accent" className="mb-4 md:mb-8 shadow-lg">{t('hero.badge')}</Badge>
|
||||||
<h1 className="text-3xl md:text-7xl lg:text-8xl font-extrabold tracking-tight leading-[1.1] mb-4 md:mb-8">
|
<h1 className="text-3xl md:text-7xl lg:text-8xl font-extrabold tracking-tight leading-[1.1] mb-4 md:mb-8">
|
||||||
{t('hero.subtitle')}
|
{t('hero.subtitle')}
|
||||||
</h1>
|
</h1>
|
||||||
@@ -38,7 +38,7 @@ export default function TeamPage() {
|
|||||||
<Reveal className="w-full lg:w-1/2 p-6 md:p-24 lg:p-32 flex flex-col justify-center bg-primary-dark text-white relative order-2 lg:order-1">
|
<Reveal className="w-full lg:w-1/2 p-6 md:p-24 lg:p-32 flex flex-col justify-center bg-primary-dark text-white relative order-2 lg:order-1">
|
||||||
<div className="absolute top-0 right-0 w-32 h-full bg-accent/5 -skew-x-12 translate-x-1/2" />
|
<div className="absolute top-0 right-0 w-32 h-full bg-accent/5 -skew-x-12 translate-x-1/2" />
|
||||||
<div className="relative z-10">
|
<div className="relative z-10">
|
||||||
<Badge variant="accent" className="mb-4 md:mb-8">Managing Director</Badge>
|
<Badge variant="accent" className="mb-4 md:mb-8">{t('michael.role')}</Badge>
|
||||||
<Heading level={2} className="text-white mb-6 md:mb-10 text-3xl md:text-6xl">
|
<Heading level={2} className="text-white mb-6 md:mb-10 text-3xl md:text-6xl">
|
||||||
<span className="text-white">{t('michael.name')}</span>
|
<span className="text-white">{t('michael.name')}</span>
|
||||||
</Heading>
|
</Heading>
|
||||||
@@ -80,7 +80,7 @@ export default function TeamPage() {
|
|||||||
<div className="absolute inset-0 z-0">
|
<div className="absolute inset-0 z-0">
|
||||||
<Image
|
<Image
|
||||||
src="/uploads/2024/12/1694273920124-copy.webp"
|
src="/uploads/2024/12/1694273920124-copy.webp"
|
||||||
alt="Legacy"
|
alt={t('legacy.subtitle')}
|
||||||
fill
|
fill
|
||||||
className="object-cover opacity-20 md:opacity-30 scale-110 animate-slow-zoom"
|
className="object-cover opacity-20 md:opacity-30 scale-110 animate-slow-zoom"
|
||||||
sizes="100vw"
|
sizes="100vw"
|
||||||
@@ -90,7 +90,7 @@ export default function TeamPage() {
|
|||||||
<Container className="relative z-10">
|
<Container className="relative z-10">
|
||||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-8 md:gap-16 items-center">
|
<div className="grid grid-cols-1 lg:grid-cols-12 gap-8 md:gap-16 items-center">
|
||||||
<div className="lg:col-span-6">
|
<div className="lg:col-span-6">
|
||||||
<Heading level={2} subtitle="Our Heritage" className="text-white mb-6 md:mb-10">
|
<Heading level={2} subtitle={t('legacy.subtitle')} className="text-white mb-6 md:mb-10">
|
||||||
<span className="text-white">{t('legacy.title')}</span>
|
<span className="text-white">{t('legacy.title')}</span>
|
||||||
</Heading>
|
</Heading>
|
||||||
<div className="space-y-4 md:space-y-8 text-base md:text-2xl text-white/80 leading-relaxed font-medium">
|
<div className="space-y-4 md:space-y-8 text-base md:text-2xl text-white/80 leading-relaxed font-medium">
|
||||||
@@ -104,12 +104,12 @@ export default function TeamPage() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="lg:col-span-6 grid grid-cols-2 md:grid-cols-2 gap-3 md:gap-6">
|
<div className="lg:col-span-6 grid grid-cols-2 md:grid-cols-2 gap-3 md:gap-6">
|
||||||
<div className="p-4 md:p-8 bg-white/5 backdrop-blur-md border border-white/10 rounded-2xl md:rounded-[32px] hover:bg-white/10 transition-colors">
|
<div className="p-4 md:p-8 bg-white/5 backdrop-blur-md border border-white/10 rounded-2xl md:rounded-[32px] hover:bg-white/10 transition-colors">
|
||||||
<div className="text-xl md:text-4xl font-extrabold text-accent mb-1 md:mb-2">Expertise</div>
|
<div className="text-xl md:text-4xl font-extrabold text-accent mb-1 md:mb-2">{t('legacy.expertise')}</div>
|
||||||
<div className="text-[10px] md:text-sm font-bold uppercase tracking-widest text-white/50">Decades of Knowledge</div>
|
<div className="text-[10px] md:text-sm font-bold uppercase tracking-widest text-white/50">{t('legacy.expertiseDesc')}</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="p-4 md:p-8 bg-white/5 backdrop-blur-md border border-white/10 rounded-2xl md:rounded-[32px] hover:bg-white/10 transition-colors">
|
<div className="p-4 md:p-8 bg-white/5 backdrop-blur-md border border-white/10 rounded-2xl md:rounded-[32px] hover:bg-white/10 transition-colors">
|
||||||
<div className="text-xl md:text-4xl font-extrabold text-accent mb-1 md:mb-2">Network</div>
|
<div className="text-xl md:text-4xl font-extrabold text-accent mb-1 md:mb-2">{t('legacy.network')}</div>
|
||||||
<div className="text-[10px] md:text-sm font-bold uppercase tracking-widest text-white/50">Global Partnerships</div>
|
<div className="text-[10px] md:text-sm font-bold uppercase tracking-widest text-white/50">{t('legacy.networkDesc')}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -132,7 +132,7 @@ export default function TeamPage() {
|
|||||||
<Reveal className="w-full lg:w-1/2 p-6 md:p-24 lg:p-32 flex flex-col justify-center bg-neutral-light text-primary relative order-2">
|
<Reveal className="w-full lg:w-1/2 p-6 md:p-24 lg:p-32 flex flex-col justify-center bg-neutral-light text-primary relative order-2">
|
||||||
<div className="absolute top-0 left-0 w-32 h-full bg-primary/5 skew-x-12 -translate-x-1/2" />
|
<div className="absolute top-0 left-0 w-32 h-full bg-primary/5 skew-x-12 -translate-x-1/2" />
|
||||||
<div className="relative z-10">
|
<div className="relative z-10">
|
||||||
<Badge variant="primary" className="mb-4 md:mb-8">Founder & Visionary</Badge>
|
<Badge variant="primary" className="mb-4 md:mb-8">{t('klaus.role')}</Badge>
|
||||||
<Heading level={2} className="text-primary mb-6 md:mb-10 text-3xl md:text-6xl">
|
<Heading level={2} className="text-primary mb-6 md:mb-10 text-3xl md:text-6xl">
|
||||||
{t('klaus.name')}
|
{t('klaus.name')}
|
||||||
</Heading>
|
</Heading>
|
||||||
@@ -165,11 +165,11 @@ export default function TeamPage() {
|
|||||||
<div className="sticky-narrative-container">
|
<div className="sticky-narrative-container">
|
||||||
<div className="sticky-narrative-sidebar mb-8 lg:mb-0">
|
<div className="sticky-narrative-sidebar mb-8 lg:mb-0">
|
||||||
<div className="lg:sticky lg:top-32">
|
<div className="lg:sticky lg:top-32">
|
||||||
<Heading level={2} subtitle="Our Values" className="mb-4 md:mb-8">
|
<Heading level={2} subtitle={t('manifesto.subtitle')} className="mb-4 md:mb-8">
|
||||||
{t('manifesto.title')}
|
{t('manifesto.title')}
|
||||||
</Heading>
|
</Heading>
|
||||||
<p className="text-base md:text-xl text-text-secondary leading-relaxed">
|
<p className="text-base md:text-xl text-text-secondary leading-relaxed">
|
||||||
Our core principles guide every decision we make and every cable we deliver.
|
{t('manifesto.tagline')}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{/* Mobile-only progress indicator */}
|
{/* Mobile-only progress indicator */}
|
||||||
@@ -200,8 +200,8 @@ export default function TeamPage() {
|
|||||||
{/* Gallery Section - Premium Treatment */}
|
{/* Gallery Section - Premium Treatment */}
|
||||||
<Section className="bg-primary-dark py-16 md:py-32">
|
<Section className="bg-primary-dark py-16 md:py-32">
|
||||||
<Container>
|
<Container>
|
||||||
<Heading level={2} subtitle="Behind the Scenes" align="center" className="text-white mb-12 md:mb-20">
|
<Heading level={2} subtitle={t('gallery.subtitle')} align="center" className="text-white mb-12 md:mb-20">
|
||||||
<span className="text-white">Life at KLZ</span>
|
<span className="text-white">{t('gallery.title')}</span>
|
||||||
</Heading>
|
</Heading>
|
||||||
<div className="grid grid-cols-2 md:grid-cols-5 gap-3 md:gap-6">
|
<div className="grid grid-cols-2 md:grid-cols-5 gap-3 md:gap-6">
|
||||||
{[
|
{[
|
||||||
@@ -212,7 +212,7 @@ export default function TeamPage() {
|
|||||||
'/uploads/2024/12/DSC07387-Large-600x400.webp'
|
'/uploads/2024/12/DSC07387-Large-600x400.webp'
|
||||||
].map((src, idx) => (
|
].map((src, idx) => (
|
||||||
<div key={idx} className="relative aspect-[3/4] rounded-2xl md:rounded-[32px] overflow-hidden group shadow-2xl">
|
<div key={idx} className="relative aspect-[3/4] rounded-2xl md:rounded-[32px] overflow-hidden group shadow-2xl">
|
||||||
<Image src={src} alt="Team Gallery" fill className="object-cover transition-transform duration-1000 group-hover:scale-110" />
|
<Image src={src} alt={t('gallery.title')} fill className="object-cover transition-transform duration-1000 group-hover:scale-110" />
|
||||||
<div className="absolute inset-0 bg-primary-dark/40 group-hover:bg-transparent transition-all duration-500" />
|
<div className="absolute inset-0 bg-primary-dark/40 group-hover:bg-transparent transition-all duration-500" />
|
||||||
<div className="absolute inset-0 border-0 group-hover:border-[8px] md:group-hover:border-[12px] border-white/10 transition-all duration-500 pointer-events-none" />
|
<div className="absolute inset-0 border-0 group-hover:border-[8px] md:group-hover:border-[12px] border-white/10 transition-all duration-500 pointer-events-none" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { Container, Heading } from './ui';
|
|||||||
|
|
||||||
export default function Footer() {
|
export default function Footer() {
|
||||||
const t = useTranslations('Footer');
|
const t = useTranslations('Footer');
|
||||||
|
const navT = useTranslations('Navigation');
|
||||||
const locale = useLocale();
|
const locale = useLocale();
|
||||||
const currentYear = new Date().getFullYear();
|
const currentYear = new Date().getFullYear();
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ export default function Footer() {
|
|||||||
<Link href={`/${locale}`} className="inline-block group">
|
<Link href={`/${locale}`} className="inline-block group">
|
||||||
<Image
|
<Image
|
||||||
src="/logo-white.svg"
|
src="/logo-white.svg"
|
||||||
alt="KLZ Cables"
|
alt={t('products')}
|
||||||
width={150}
|
width={150}
|
||||||
height={40}
|
height={40}
|
||||||
className="h-10 w-auto transition-transform duration-500 group-hover:scale-110"
|
className="h-10 w-auto transition-transform duration-500 group-hover:scale-110"
|
||||||
@@ -27,7 +28,7 @@ export default function Footer() {
|
|||||||
/>
|
/>
|
||||||
</Link>
|
</Link>
|
||||||
<p className="text-white/60 text-lg leading-relaxed max-w-sm">
|
<p className="text-white/60 text-lg leading-relaxed max-w-sm">
|
||||||
Leading the way in cable infrastructure and sustainable energy solutions. Quality, innovation, and reliability since 1998.
|
{t('tagline')}
|
||||||
</p>
|
</p>
|
||||||
<div className="flex gap-4">
|
<div className="flex gap-4">
|
||||||
<a href="https://www.linkedin.com/company/klz-vertriebs-gmbh/" target="_blank" rel="noopener noreferrer" className="w-12 h-12 rounded-full bg-white/5 flex items-center justify-center hover:bg-accent hover:text-primary-dark transition-all duration-300 border border-white/10">
|
<a href="https://www.linkedin.com/company/klz-vertriebs-gmbh/" target="_blank" rel="noopener noreferrer" className="w-12 h-12 rounded-full bg-white/5 flex items-center justify-center hover:bg-accent hover:text-primary-dark transition-all duration-300 border border-white/10">
|
||||||
@@ -50,12 +51,12 @@ export default function Footer() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="lg:col-span-2">
|
<div className="lg:col-span-2">
|
||||||
<h4 className="text-accent font-bold uppercase tracking-widest text-sm mb-8">Company</h4>
|
<h4 className="text-accent font-bold uppercase tracking-widest text-sm mb-8">{t('company')}</h4>
|
||||||
<ul className="space-y-4 text-white/70">
|
<ul className="space-y-4 text-white/70">
|
||||||
<li><Link href={`/${locale}/team`} className="hover:text-white transition-colors">Our Team</Link></li>
|
<li><Link href={`/${locale}/team`} className="hover:text-white transition-colors">{navT('team')}</Link></li>
|
||||||
<li><Link href={`/${locale}/products`} className="hover:text-white transition-colors">Products</Link></li>
|
<li><Link href={`/${locale}/products`} className="hover:text-white transition-colors">{navT('products')}</Link></li>
|
||||||
<li><Link href={`/${locale}/blog`} className="hover:text-white transition-colors">Blog</Link></li>
|
<li><Link href={`/${locale}/blog`} className="hover:text-white transition-colors">{navT('blog')}</Link></li>
|
||||||
<li><Link href={`/${locale}/contact`} className="hover:text-white transition-colors">Contact</Link></li>
|
<li><Link href={`/${locale}/contact`} className="hover:text-white transition-colors">{navT('contact')}</Link></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -72,7 +73,7 @@ export default function Footer() {
|
|||||||
<p className="text-white/80 font-bold group-hover:text-accent transition-colors leading-snug mb-2">
|
<p className="text-white/80 font-bold group-hover:text-accent transition-colors leading-snug mb-2">
|
||||||
{post}
|
{post}
|
||||||
</p>
|
</p>
|
||||||
<span className="text-xs text-white/40 uppercase tracking-widest">Read Article →</span>
|
<span className="text-xs text-white/40 uppercase tracking-widest">{t('readArticle')} →</span>
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
@@ -81,7 +82,7 @@ export default function Footer() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="pt-12 border-t border-white/10 flex flex-col md:flex-row justify-between items-center gap-8 text-white/40 text-sm font-medium">
|
<div className="pt-12 border-t border-white/10 flex flex-col md:flex-row justify-between items-center gap-8 text-white/40 text-sm font-medium">
|
||||||
<p>Copyright © {currentYear} KLZ Vertriebs GmbH. All rights reserved.</p>
|
<p>{t('copyright', { year: currentYear })}</p>
|
||||||
<div className="flex gap-8">
|
<div className="flex gap-8">
|
||||||
<Link href="/en" className="hover:text-white transition-colors">English</Link>
|
<Link href="/en" className="hover:text-white transition-colors">English</Link>
|
||||||
<Link href="/de" className="hover:text-white transition-colors">Deutsch</Link>
|
<Link href="/de" className="hover:text-white transition-colors">Deutsch</Link>
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ export default function Header() {
|
|||||||
<Link href={`/${currentLocale}`} className="flex-shrink-0 group touch-target">
|
<Link href={`/${currentLocale}`} className="flex-shrink-0 group touch-target">
|
||||||
<Image
|
<Image
|
||||||
src={logoSrc}
|
src={logoSrc}
|
||||||
alt="KLZ Cables"
|
alt={t('home')}
|
||||||
width={120}
|
width={120}
|
||||||
height={120}
|
height={120}
|
||||||
className="h-10 md:h-14 w-auto transition-all duration-500 group-hover:scale-110"
|
className="h-10 md:h-14 w-auto transition-all duration-500 group-hover:scale-110"
|
||||||
@@ -132,7 +132,7 @@ export default function Header() {
|
|||||||
<button
|
<button
|
||||||
onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}
|
onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}
|
||||||
className={cn("lg:hidden touch-target p-2 rounded-xl bg-white/10 backdrop-blur-md border border-white/20 z-50", textColorClass)}
|
className={cn("lg:hidden touch-target p-2 rounded-xl bg-white/10 backdrop-blur-md border border-white/20 z-50", textColorClass)}
|
||||||
aria-label="Toggle Menu"
|
aria-label={t('toggleMenu')}
|
||||||
>
|
>
|
||||||
<svg className="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
{isMobileMenuOpen ? (
|
{isMobileMenuOpen ? (
|
||||||
@@ -198,7 +198,7 @@ export default function Header() {
|
|||||||
|
|
||||||
{/* Bottom Branding */}
|
{/* Bottom Branding */}
|
||||||
<div className="p-12 flex justify-center opacity-20">
|
<div className="p-12 flex justify-center opacity-20">
|
||||||
<Image src="/logo-white.svg" alt="KLZ" width={80} height={80} unoptimized />
|
<Image src="/logo-white.svg" alt={t('home')} width={80} height={80} unoptimized />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ export default function CTA() {
|
|||||||
<Container className="relative z-10">
|
<Container className="relative z-10">
|
||||||
<div className="flex flex-col lg:flex-row items-center justify-between gap-16">
|
<div className="flex flex-col lg:flex-row items-center justify-between gap-16">
|
||||||
<div className="max-w-3xl text-center lg:text-left">
|
<div className="max-w-3xl text-center lg:text-left">
|
||||||
<Heading level={2} subtitle="Get Started" className="text-white mb-6">
|
<Heading level={2} subtitle={t('subtitle')} className="text-white mb-6">
|
||||||
<span className="text-white">{t('title')}</span>
|
<span className="text-white">{t('title')}</span>
|
||||||
</Heading>
|
</Heading>
|
||||||
<p className="text-xl text-white/70 leading-relaxed">
|
<p className="text-xl text-white/70 leading-relaxed">
|
||||||
Partner with KLZ for reliable, high-performance cable solutions tailored to your project's unique requirements.
|
{t('description')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex-shrink-0">
|
<div className="flex-shrink-0">
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export default function Experience() {
|
|||||||
<div className="absolute inset-0 z-0">
|
<div className="absolute inset-0 z-0">
|
||||||
<Image
|
<Image
|
||||||
src="/uploads/2024/12/1694273920124-copy-2.webp"
|
src="/uploads/2024/12/1694273920124-copy-2.webp"
|
||||||
alt="Experience Background"
|
alt={t('subtitle')}
|
||||||
fill
|
fill
|
||||||
className="object-cover object-center scale-105 animate-slow-zoom"
|
className="object-cover object-center scale-105 animate-slow-zoom"
|
||||||
unoptimized
|
unoptimized
|
||||||
@@ -22,7 +22,7 @@ export default function Experience() {
|
|||||||
|
|
||||||
<Container className="relative z-10">
|
<Container className="relative z-10">
|
||||||
<div className="max-w-3xl">
|
<div className="max-w-3xl">
|
||||||
<Heading level={2} subtitle="Our Legacy" className="text-white">
|
<Heading level={2} subtitle={t('subtitle')} className="text-white">
|
||||||
<span className="text-white">{t('title')}</span>
|
<span className="text-white">{t('title')}</span>
|
||||||
</Heading>
|
</Heading>
|
||||||
<div className="space-y-8 text-xl text-white/90 leading-relaxed font-medium">
|
<div className="space-y-8 text-xl text-white/90 leading-relaxed font-medium">
|
||||||
@@ -36,12 +36,12 @@ export default function Experience() {
|
|||||||
|
|
||||||
<div className="mt-16 grid grid-cols-1 md:grid-cols-2 gap-12">
|
<div className="mt-16 grid grid-cols-1 md:grid-cols-2 gap-12">
|
||||||
<div className="animate-fade-in">
|
<div className="animate-fade-in">
|
||||||
<div className="text-4xl font-extrabold text-accent mb-4">Certified Quality</div>
|
<div className="text-4xl font-extrabold text-accent mb-4">{t('certifiedQuality')}</div>
|
||||||
<div className="text-lg font-bold uppercase tracking-widest text-white/60">VDE Approved & Trusted by Major Energy Suppliers</div>
|
<div className="text-lg font-bold uppercase tracking-widest text-white/60">{t('vdeApproved')}</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="animate-fade-in" style={{ animationDelay: '100ms' }}>
|
<div className="animate-fade-in" style={{ animationDelay: '100ms' }}>
|
||||||
<div className="text-4xl font-extrabold text-accent mb-4">Full Spectrum</div>
|
<div className="text-4xl font-extrabold text-accent mb-4">{t('fullSpectrum')}</div>
|
||||||
<div className="text-lg font-bold uppercase tracking-widest text-white/60">From 1kV to 220kV Solutions</div>
|
<div className="text-lg font-bold uppercase tracking-widest text-white/60">{t('solutionsRange')}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default function GallerySection() {
|
|||||||
return (
|
return (
|
||||||
<Section className="bg-white text-neutral-dark py-32">
|
<Section className="bg-white text-neutral-dark py-32">
|
||||||
<Container>
|
<Container>
|
||||||
<Heading level={2} subtitle="Visual Journey" align="center">
|
<Heading level={2} subtitle={t('subtitle')} align="center">
|
||||||
{t('title')}
|
{t('title')}
|
||||||
</Heading>
|
</Heading>
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { Section, Container, Button, Heading } from '../../components/ui';
|
|||||||
|
|
||||||
export default function MeetTheTeam() {
|
export default function MeetTheTeam() {
|
||||||
const t = useTranslations('Home.meetTheTeam');
|
const t = useTranslations('Home.meetTheTeam');
|
||||||
|
const teamT = useTranslations('Team');
|
||||||
const locale = useLocale();
|
const locale = useLocale();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -12,7 +13,7 @@ export default function MeetTheTeam() {
|
|||||||
<div className="absolute inset-0 z-0">
|
<div className="absolute inset-0 z-0">
|
||||||
<Image
|
<Image
|
||||||
src="/uploads/2024/12/DSC08036-Large.webp"
|
src="/uploads/2024/12/DSC08036-Large.webp"
|
||||||
alt="KLZ Team"
|
alt={t('subtitle')}
|
||||||
fill
|
fill
|
||||||
className="object-cover scale-105 animate-slow-zoom"
|
className="object-cover scale-105 animate-slow-zoom"
|
||||||
unoptimized
|
unoptimized
|
||||||
@@ -23,7 +24,7 @@ export default function MeetTheTeam() {
|
|||||||
|
|
||||||
<Container className="relative z-10">
|
<Container className="relative z-10">
|
||||||
<div className="max-w-3xl text-white animate-slide-up">
|
<div className="max-w-3xl text-white animate-slide-up">
|
||||||
<Heading level={2} subtitle="The People Behind KLZ" className="text-white mb-8">
|
<Heading level={2} subtitle={t('subtitle')} className="text-white mb-8">
|
||||||
<span className="text-white">{t('title')}</span>
|
<span className="text-white">{t('title')}</span>
|
||||||
</Heading>
|
</Heading>
|
||||||
|
|
||||||
@@ -43,10 +44,10 @@ export default function MeetTheTeam() {
|
|||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<div className="flex -space-x-4">
|
<div className="flex -space-x-4">
|
||||||
<div className="w-14 h-14 rounded-full border-4 border-primary-dark overflow-hidden relative">
|
<div className="w-14 h-14 rounded-full border-4 border-primary-dark overflow-hidden relative">
|
||||||
<Image src="/uploads/2024/12/DSC07768-Large.webp" alt="Michael Bodemer" fill className="object-cover" />
|
<Image src="/uploads/2024/12/DSC07768-Large.webp" alt={teamT('michael.name')} fill className="object-cover" />
|
||||||
</div>
|
</div>
|
||||||
<div className="w-14 h-14 rounded-full border-4 border-primary-dark overflow-hidden relative">
|
<div className="w-14 h-14 rounded-full border-4 border-primary-dark overflow-hidden relative">
|
||||||
<Image src="/uploads/2024/12/DSC07963-Large.webp" alt="Klaus Mintel" fill className="object-cover" />
|
<Image src="/uploads/2024/12/DSC07963-Large.webp" alt={teamT('klaus.name')} fill className="object-cover" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span className="text-white/60 font-bold text-sm uppercase tracking-widest">
|
<span className="text-white/60 font-bold text-sm uppercase tracking-widest">
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ interface RecentPostsProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default async function RecentPosts({ locale }: RecentPostsProps) {
|
export default async function RecentPosts({ locale }: RecentPostsProps) {
|
||||||
|
const t = await getTranslations('Blog');
|
||||||
const posts = await getAllPosts(locale);
|
const posts = await getAllPosts(locale);
|
||||||
const recentPosts = posts.slice(0, 3);
|
const recentPosts = posts.slice(0, 3);
|
||||||
|
|
||||||
@@ -18,11 +19,11 @@ export default async function RecentPosts({ locale }: RecentPostsProps) {
|
|||||||
<Section className="bg-neutral py-16 md:py-24">
|
<Section className="bg-neutral py-16 md:py-24">
|
||||||
<Container>
|
<Container>
|
||||||
<div className="flex flex-col md:flex-row items-start md:items-end justify-between mb-12 md:mb-16 gap-6">
|
<div className="flex flex-col md:flex-row items-start md:items-end justify-between mb-12 md:mb-16 gap-6">
|
||||||
<Heading level={2} subtitle="Insights" className="mb-0">
|
<Heading level={2} subtitle={t('latestNews')} className="mb-0">
|
||||||
{locale === 'de' ? 'Aktuelle Blogbeiträge' : 'Recent Blog Posts'}
|
{t('allArticles')}
|
||||||
</Heading>
|
</Heading>
|
||||||
<Link href={`/${locale}/blog`} className="group flex items-center text-primary font-bold text-lg touch-target">
|
<Link href={`/${locale}/blog`} className="group flex items-center text-primary font-bold text-lg touch-target">
|
||||||
{locale === 'de' ? 'Alle Beiträge ansehen' : 'View all posts'}
|
{t('allArticles')}
|
||||||
<span className="ml-2 transition-transform group-hover:translate-x-2">→</span>
|
<span className="ml-2 transition-transform group-hover:translate-x-2">→</span>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
@@ -59,7 +60,7 @@ export default async function RecentPosts({ locale }: RecentPostsProps) {
|
|||||||
{post.frontmatter.title}
|
{post.frontmatter.title}
|
||||||
</h3>
|
</h3>
|
||||||
<div className="mt-auto flex items-center text-primary font-bold group-hover:underline decoration-2 underline-offset-4">
|
<div className="mt-auto flex items-center text-primary font-bold group-hover:underline decoration-2 underline-offset-4">
|
||||||
{locale === 'de' ? 'Weiterlesen' : 'Read more'}
|
{t('readMore')}
|
||||||
<svg className="ml-2 w-5 h-5 transition-transform group-hover:translate-x-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="ml-2 w-5 h-5 transition-transform group-hover:translate-x-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 8l4 4m0 0l-4 4m4-4H3" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 8l4 4m0 0l-4 4m4-4H3" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export default function WhatWeDo() {
|
|||||||
<div className="sticky-narrative-container">
|
<div className="sticky-narrative-container">
|
||||||
<div className="sticky-narrative-sidebar">
|
<div className="sticky-narrative-sidebar">
|
||||||
<div className="lg:sticky lg:top-32">
|
<div className="lg:sticky lg:top-32">
|
||||||
<Heading level={2} subtitle="Our Expertise">
|
<Heading level={2} subtitle={t('expertise')}>
|
||||||
{t('title')}
|
{t('title')}
|
||||||
</Heading>
|
</Heading>
|
||||||
<p className="text-lg md:text-xl text-text-secondary leading-relaxed">
|
<p className="text-lg md:text-xl text-text-secondary leading-relaxed">
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export default function WhyChooseUs() {
|
|||||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-16 lg:gap-24">
|
<div className="grid grid-cols-1 lg:grid-cols-12 gap-16 lg:gap-24">
|
||||||
<div className="lg:col-span-4 order-1 lg:order-2">
|
<div className="lg:col-span-4 order-1 lg:order-2">
|
||||||
<div className="sticky top-32">
|
<div className="sticky top-32">
|
||||||
<Heading level={2} subtitle="Why KLZ">
|
<Heading level={2} subtitle={t('whyKlz')}>
|
||||||
{t('title')}
|
{t('title')}
|
||||||
</Heading>
|
</Heading>
|
||||||
<p className="text-xl text-text-secondary leading-relaxed">
|
<p className="text-xl text-text-secondary leading-relaxed">
|
||||||
@@ -19,19 +19,14 @@ export default function WhyChooseUs() {
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div className="mt-12 space-y-6">
|
<div className="mt-12 space-y-6">
|
||||||
{[
|
{[0, 1, 2, 3].map((i) => (
|
||||||
'Certified Quality Standards',
|
|
||||||
'Sustainable Supply Chain',
|
|
||||||
'Expert Technical Support',
|
|
||||||
'Fast Global Delivery'
|
|
||||||
].map((item, i) => (
|
|
||||||
<div key={i} className="flex items-center gap-4">
|
<div key={i} className="flex items-center gap-4">
|
||||||
<div className="flex-shrink-0 w-6 h-6 rounded-full bg-accent flex items-center justify-center">
|
<div className="flex-shrink-0 w-6 h-6 rounded-full bg-accent flex items-center justify-center">
|
||||||
<svg className="w-4 h-4 text-primary-dark" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-4 h-4 text-primary-dark" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={3} d="M5 13l4 4L19 7" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={3} d="M5 13l4 4L19 7" />
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<span className="font-bold text-primary">{item}</span>
|
<span className="font-bold text-primary">{t(`features.${i}`)}</span>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
106
messages/de.json
106
messages/de.json
@@ -1,14 +1,19 @@
|
|||||||
{
|
{
|
||||||
"Index": {
|
"Index": {
|
||||||
"title": "KLZ Cables - Hochwertige Kabel",
|
"title": "KLZ Cables - Hochwertige Kabel",
|
||||||
"description": "Ihr Partner für hochwertige Kabel."
|
"description": "Ihr Partner für hochwertige Kabel.",
|
||||||
|
"meta": {
|
||||||
|
"title": "KLZ Cables",
|
||||||
|
"description": "Premium-Kabellösungen"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"Navigation": {
|
"Navigation": {
|
||||||
"home": "Start",
|
"home": "Start",
|
||||||
"team": "Team",
|
"team": "Team",
|
||||||
"products": "Produkte",
|
"products": "Produkte",
|
||||||
"blog": "Blog",
|
"blog": "Blog",
|
||||||
"contact": "Kontakt"
|
"contact": "Kontakt",
|
||||||
|
"toggleMenu": "Menü umschalten"
|
||||||
},
|
},
|
||||||
"Footer": {
|
"Footer": {
|
||||||
"legal": "Rechtliches",
|
"legal": "Rechtliches",
|
||||||
@@ -27,32 +32,46 @@
|
|||||||
"languages": "Sprachen",
|
"languages": "Sprachen",
|
||||||
"archives": "Archiv",
|
"archives": "Archiv",
|
||||||
"categories": "Kategorien",
|
"categories": "Kategorien",
|
||||||
"recentPosts": "Neueste Artikel"
|
"recentPosts": "Neueste Artikel",
|
||||||
|
"company": "Unternehmen",
|
||||||
|
"readArticle": "Artikel lesen",
|
||||||
|
"copyright": "Copyright © {year} KLZ Vertriebs GmbH. Alle Rechte vorbehalten.",
|
||||||
|
"tagline": "Wegweisend in der Kabelinfrastruktur und bei nachhaltigen Energielösungen. Qualität, Innovation und Zuverlässigkeit seit 1998."
|
||||||
},
|
},
|
||||||
"Team": {
|
"Team": {
|
||||||
"hero": {
|
"hero": {
|
||||||
"title": "Die Köpfe, die Energie zum Laufen bringen",
|
"title": "Die Köpfe, die Energie zum Laufen bringen",
|
||||||
"subtitle": "Wir verbinden Energie, Know-how und Innovation, um eine nachhaltigere Zukunft zu gestalten."
|
"subtitle": "Wir verbinden Energie, Know-how und Innovation, um eine nachhaltigere Zukunft zu gestalten.",
|
||||||
|
"badge": "Unser Team"
|
||||||
},
|
},
|
||||||
"michael": {
|
"michael": {
|
||||||
"name": "Michael Bodemer",
|
"name": "Michael Bodemer",
|
||||||
"quote": "„Herausforderungen sind da, um gelöst zu werden – nicht, um über ihre Komplexität zu diskutieren.“",
|
"quote": "„Herausforderungen sind da, um gelöst zu werden – nicht, um über ihre Komplexität zu diskutieren.“",
|
||||||
"description": "Michael Bodemer ist unser Mann, wenn es kompliziert wird – und das ist bei Kabelnetzen oft der Fall. Mit seinem scharfen Blick und einem Händchen für praktikable Lösungen ist er eine unserer zentralen Säulen. Michael denkt nicht nur an Details, er treibt Projekte voran – sei es in der Planung, im Kundengespräch oder bei der Auswahl der besten Kabel für jedes Vorhaben.",
|
"description": "Michael Bodemer ist unser Mann, wenn es kompliziert wird – und das ist bei Kabelnetzen oft der Fall. Mit seinem scharfen Blick und einem Händchen für praktikable Lösungen ist er eine unserer zentralen Säulen. Michael denkt nicht nur an Details, er treibt Projekte voran – sei es in der Planung, im Kundengespräch oder bei der Auswahl der besten Kabel für jedes Vorhaben.",
|
||||||
"linkedin": "Michael's LinkedIn"
|
"linkedin": "Michael's LinkedIn",
|
||||||
|
"role": "Geschäftsführer"
|
||||||
},
|
},
|
||||||
"legacy": {
|
"legacy": {
|
||||||
"title": "Verbindungen, die Geschichte schreiben",
|
"title": "Verbindungen, die Geschichte schreiben",
|
||||||
|
"subtitle": "Unser Erbe",
|
||||||
"p1": "Bei KLZ vereinen wir Tradition und Innovation zu zuverlässigen Energielösungen. Unsere Wurzeln reichen tief in die Geschichte der Kabeltechnologie zurück – mit jeder Menge praktischer Erfahrung und einem Blick für zukunftsweisende Entwicklungen.",
|
"p1": "Bei KLZ vereinen wir Tradition und Innovation zu zuverlässigen Energielösungen. Unsere Wurzeln reichen tief in die Geschichte der Kabeltechnologie zurück – mit jeder Menge praktischer Erfahrung und einem Blick für zukunftsweisende Entwicklungen.",
|
||||||
"p2": "In jedem Projekt steckt nicht nur technisches Know-how, sondern auch das Bewusstsein für das Handwerk, das die Welt seit Generationen verbindet. Historische Illustrationen aus den frühen Tagen der Energiebranche erinnern uns daran, wie weit wir gekommen sind – und dass echte Exzellenz immer mit Sorgfalt beginnt."
|
"p2": "In jedem Projekt steckt nicht nur technisches Know-how, sondern auch das Bewusstsein für das Handwerk, das die Welt seit Generationen verbindet. Historische Illustrationen aus den frühen Tagen der Energiebranche erinnern uns daran, wie weit wir gekommen sind – und dass echte Exzellenz immer mit Sorgfalt beginnt.",
|
||||||
|
"expertise": "Expertise",
|
||||||
|
"expertiseDesc": "Jahrzehntelanges Wissen",
|
||||||
|
"network": "Netzwerk",
|
||||||
|
"networkDesc": "Globale Partnerschaften"
|
||||||
},
|
},
|
||||||
"klaus": {
|
"klaus": {
|
||||||
"name": "Klaus Mintel",
|
"name": "Klaus Mintel",
|
||||||
"quote": "„Manchmal braucht es nur einen klaren Kopf und das richtige Kabel, um die Welt ein Stück besser zu machen.“",
|
"quote": "„Manchmal braucht es nur einen klaren Kopf und das richtige Kabel, um die Welt ein Stück besser zu machen.“",
|
||||||
"description": "Klaus ist der Fels in der Brandung – selbst wenn das Kabelchaos überhandnimmt. Mit jahrzehntelanger Erfahrung und einem stabilen Netzwerk sorgt er dafür, dass alles glatt läuft. Er denkt nicht nur in Lösungen, sondern bringt auch Humor und den nötigen Weitblick mit, um selbst komplexe Themen locker auf den Punkt zu bringen.",
|
"description": "Klaus ist der Fels in der Brandung – selbst wenn das Kabelchaos überhandnimmt. Mit jahrzehntelanger Erfahrung und einem stabilen Netzwerk sorgt er dafür, dass alles glatt läuft. Er denkt nicht nur in Lösungen, sondern bringt auch Humor und den nötigen Weitblick mit, um selbst komplexe Themen locker auf den Punkt zu bringen.",
|
||||||
"linkedin": "Klaus' LinkedIn"
|
"linkedin": "Klaus' LinkedIn",
|
||||||
|
"role": "Gründer & Visionär"
|
||||||
},
|
},
|
||||||
"manifesto": {
|
"manifesto": {
|
||||||
"title": "Unser Manifest",
|
"title": "Unser Manifest",
|
||||||
|
"subtitle": "Unsere Werte",
|
||||||
|
"tagline": "Unsere Grundprinzipien leiten jede Entscheidung, die wir treffen, und jedes Kabel, das wir liefern.",
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"title": "Kompetenz",
|
"title": "Kompetenz",
|
||||||
@@ -79,14 +98,24 @@
|
|||||||
"description": "Wir halten, was wir versprechen – jedes Mal und ohne Ausnahme."
|
"description": "Wir halten, was wir versprechen – jedes Mal und ohne Ausnahme."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"gallery": {
|
||||||
|
"title": "Leben bei KLZ",
|
||||||
|
"subtitle": "Hinter den Kulissen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Contact": {
|
"Contact": {
|
||||||
"title": "Kontaktieren Sie uns",
|
"title": "Kontaktieren Sie uns",
|
||||||
"subtitle": "Haben Sie Fragen zu unseren Produkten oder benötigen Sie eine maßgeschneiderte Lösung? Wir sind für Sie da.",
|
"subtitle": "Haben Sie Fragen zu unseren Produkten oder benötigen Sie eine maßgeschneiderte Lösung? Wir sind für Sie da.",
|
||||||
|
"heroSubtitle": "Kontakt aufnehmen",
|
||||||
"info": {
|
"info": {
|
||||||
"title": "Kontaktinformationen",
|
"title": "Kontaktinformationen",
|
||||||
"address": "Raiffeisenstraße 22\n73630 Remshalden\nDeutschland"
|
"subtitle": "Kontaktdetails",
|
||||||
|
"howToReachUs": "So erreichen Sie uns",
|
||||||
|
"address": "Raiffeisenstraße 22\n73630 Remshalden\nDeutschland",
|
||||||
|
"office": "Unser Büro",
|
||||||
|
"phone": "Telefon",
|
||||||
|
"email": "E-Mail"
|
||||||
},
|
},
|
||||||
"hours": {
|
"hours": {
|
||||||
"title": "Geschäftszeiten",
|
"title": "Geschäftszeiten",
|
||||||
@@ -97,10 +126,17 @@
|
|||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"title": "Schreiben Sie uns eine Nachricht",
|
"title": "Schreiben Sie uns eine Nachricht",
|
||||||
|
"subtitle": "Nachricht senden",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Ihr Name",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
|
"emailPlaceholder": "ihre@email.de",
|
||||||
"message": "Nachricht",
|
"message": "Nachricht",
|
||||||
|
"messagePlaceholder": "Wie können wir Ihnen helfen?",
|
||||||
"submit": "Nachricht senden"
|
"submit": "Nachricht senden"
|
||||||
|
},
|
||||||
|
"map": {
|
||||||
|
"comingSoon": "Interaktive Karte demnächst verfügbar"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Products": {
|
"Products": {
|
||||||
@@ -157,11 +193,13 @@
|
|||||||
"hero": {
|
"hero": {
|
||||||
"title": "Wir helfen beim Ausbau der Energiekabelnetze für eine <green>grüne</green> Zukunft",
|
"title": "Wir helfen beim Ausbau der Energiekabelnetze für eine <green>grüne</green> Zukunft",
|
||||||
"cta": "Lassen Sie uns reden",
|
"cta": "Lassen Sie uns reden",
|
||||||
"exploreProducts": "Produkte entdecken"
|
"exploreProducts": "Produkte entdecken",
|
||||||
|
"subtitle": "Wegweisend in der Kabelinfrastruktur"
|
||||||
},
|
},
|
||||||
"whatWeDo": {
|
"whatWeDo": {
|
||||||
"title": "Was wir tun",
|
"title": "Was wir tun",
|
||||||
"subtitle": "Wir sorgen dafür, dass der Strom fließt – mit qualitätsgeprüften Kabeln. Von der Niederspannung bis zur Hochspannung.",
|
"subtitle": "Wir sorgen dafür, dass der Strom fließt – mit qualitätsgeprüften Kabeln. Von der Niederspannung bis zur Hochspannung.",
|
||||||
|
"expertise": "Unsere Expertise",
|
||||||
"quote": "Wir liefern nicht nur Kabel; wir liefern die Infrastruktur für eine nachhaltige Zukunft.",
|
"quote": "Wir liefern nicht nur Kabel; wir liefern die Infrastruktur für eine nachhaltige Zukunft.",
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
@@ -185,6 +223,13 @@
|
|||||||
"whyChooseUs": {
|
"whyChooseUs": {
|
||||||
"title": "Warum wir",
|
"title": "Warum wir",
|
||||||
"subtitle": "Erfahrung verhindert viele Fehler, aber wir lernen jeden Tag dazu",
|
"subtitle": "Erfahrung verhindert viele Fehler, aber wir lernen jeden Tag dazu",
|
||||||
|
"whyKlz": "Warum KLZ",
|
||||||
|
"features": [
|
||||||
|
"Zertifizierte Qualitätsstandards",
|
||||||
|
"Nachhaltige Lieferkette",
|
||||||
|
"Experten-Support",
|
||||||
|
"Schnelle weltweite Lieferung"
|
||||||
|
],
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"title": "Expertise mit Tiefgang",
|
"title": "Expertise mit Tiefgang",
|
||||||
@@ -206,17 +251,24 @@
|
|||||||
},
|
},
|
||||||
"experience": {
|
"experience": {
|
||||||
"title": "Jahrzehntelange Erfahrung, verwurzelt in der Kabelgeschichte",
|
"title": "Jahrzehntelange Erfahrung, verwurzelt in der Kabelgeschichte",
|
||||||
"p1": "Bei KLZ fließt Kabel durch unsere Adern. Klaus begann seine Reise bei der renommierten Firma Felten & Guilleaume und trat damit in die Fußstapfen seiner Eltern, die ihr Leben demselben ikonischen Unternehmen widmeten. Für Klaus ist das nicht nur Arbeit – es ist ein Vermächtnis, das auf Handwerkskunst, Innovation und Stolz basiert.",
|
"subtitle": "Unser Erbe",
|
||||||
"p2": "Wir ehren diese Geschichte mit Original-Illustrationen aus der Ära von Felten & Guilleaume, die einst als Postkarten verwendet wurden. Diese Bilder erinnern uns an die Generationen, die die Welt miteinander vernetzt haben – eine Tradition, die wir heute stolz fortsetzen."
|
"p1": "At KLZ, cables run in our veins. Klaus began his journey at the renowned Felten & Guilleaume, following in the footsteps of his parents, who dedicated their lives to the same iconic company. For Klaus, this isn’t just work – it’s a legacy built on craftsmanship, innovation, and pride.",
|
||||||
|
"p2": "Wir ehren diese Geschichte mit Original-Illustrationen aus der Ära von Felten & Guilleaume, die einst als Postkarten verwendet wurden. Diese Bilder erinnern uns an die Generationen, die die Welt miteinander vernetzt haben – eine Tradition, die wir heute stolz fortsetzen.",
|
||||||
|
"certifiedQuality": "Zertifizierte Qualität",
|
||||||
|
"vdeApproved": "VDE-geprüft & Vertrauen von großen Energieversorgern",
|
||||||
|
"fullSpectrum": "Volles Spektrum",
|
||||||
|
"solutionsRange": "Lösungen von 1kV bis 220kV"
|
||||||
},
|
},
|
||||||
"meetTheTeam": {
|
"meetTheTeam": {
|
||||||
"title": "Lernen Sie das Team hinter KLZ kennen",
|
"title": "Lernen Sie das Team hinter KLZ kennen",
|
||||||
|
"subtitle": "Die Köpfe hinter KLZ",
|
||||||
"description": "Bei KLZ ist unser Team die Kraft hinter den Kabeln. Von erfahrenen Experten wie Michael und Klaus bis hin zu einer engagierten Gruppe von Planern, Logistikspezialisten und Kundendienstmitarbeitern spielt jedes Mitglied eine entscheidende Rolle. Gemeinsam verbinden wir jahrzehntelange Erfahrung, innovatives Denken und das gemeinsame Engagement für die Bereitstellung zuverlässiger Energielösungen.",
|
"description": "Bei KLZ ist unser Team die Kraft hinter den Kabeln. Von erfahrenen Experten wie Michael und Klaus bis hin zu einer engagierten Gruppe von Planern, Logistikspezialisten und Kundendienstmitarbeitern spielt jedes Mitglied eine entscheidende Rolle. Gemeinsam verbinden wir jahrzehntelange Erfahrung, innovatives Denken und das gemeinsame Engagement für die Bereitstellung zuverlässiger Energielösungen.",
|
||||||
"cta": "Unser Team ansehen",
|
"cta": "Unser Team ansehen",
|
||||||
"andNetwork": "& Unser Experten-Netzwerk"
|
"andNetwork": "& Unser Experten-Netzwerk"
|
||||||
},
|
},
|
||||||
"gallery": {
|
"gallery": {
|
||||||
"title": "Starke Verbindungen für eine nachhaltige Welt.",
|
"title": "Starke Verbindungen für eine nachhaltige Welt.",
|
||||||
|
"subtitle": "Visuelle Reise",
|
||||||
"alt": "Galeriebild"
|
"alt": "Galeriebild"
|
||||||
},
|
},
|
||||||
"video": {
|
"video": {
|
||||||
@@ -224,7 +276,39 @@
|
|||||||
},
|
},
|
||||||
"cta": {
|
"cta": {
|
||||||
"title": "Genug Informationen, lassen Sie uns gemeinsam etwas aufbauen!",
|
"title": "Genug Informationen, lassen Sie uns gemeinsam etwas aufbauen!",
|
||||||
|
"subtitle": "Loslegen",
|
||||||
|
"description": "Partnern Sie mit KLZ für zuverlässige, leistungsstarke Kabellösungen, die auf die einzigartigen Anforderungen Ihres Projekts zugeschnitten sind.",
|
||||||
"button": "Jetzt Kontakt aufnehmen"
|
"button": "Jetzt Kontakt aufnehmen"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"Blog": {
|
||||||
|
"meta": {
|
||||||
|
"title": "Neuigkeiten zu Kabeln und Energielösungen",
|
||||||
|
"description": "Bleiben Sie auf dem Laufenden! Lesen Sie aktuelle Themen und Insights zu Kabeltechnologie, Energielösungen und branchenspezifischen Innovationen."
|
||||||
|
},
|
||||||
|
"featuredPost": "Hervorgehobener Beitrag",
|
||||||
|
"readFullArticle": "Vollständigen Artikel lesen",
|
||||||
|
"latestNews": "Aktuelle Neuigkeiten",
|
||||||
|
"allArticles": "Alle Artikel",
|
||||||
|
"readMore": "Weiterlesen",
|
||||||
|
"prev": "Zurück",
|
||||||
|
"next": "Weiter",
|
||||||
|
"categories": {
|
||||||
|
"all": "Alle",
|
||||||
|
"industry": "Industrie",
|
||||||
|
"technical": "Technisch",
|
||||||
|
"sustainability": "Nachhaltigkeit"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"StandardPage": {
|
||||||
|
"badge": "Information",
|
||||||
|
"overview": "Übersicht",
|
||||||
|
"details": "Details",
|
||||||
|
"support": "Support",
|
||||||
|
"quickNavigation": "Schnellnavigation",
|
||||||
|
"exploreDetails": "Entdecken Sie die Details von {title}. KLZ bietet umfassende Informationen zu all unseren Dienstleistungen und Unternehmensrichtlinien.",
|
||||||
|
"needHelp": "Brauchen Sie Hilfe?",
|
||||||
|
"supportTeamAvailable": "Unser Support-Team steht Ihnen bei Fragen zu diesem Thema gerne zur Verfügung.",
|
||||||
|
"contactUs": "Kontaktieren Sie uns"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
104
messages/en.json
104
messages/en.json
@@ -1,14 +1,19 @@
|
|||||||
{
|
{
|
||||||
"Index": {
|
"Index": {
|
||||||
"title": "KLZ Cables - High Quality Cables",
|
"title": "KLZ Cables - High Quality Cables",
|
||||||
"description": "Your partner for high quality cables."
|
"description": "Your partner for high quality cables.",
|
||||||
|
"meta": {
|
||||||
|
"title": "KLZ Cables",
|
||||||
|
"description": "Premium Cable Solutions"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"Navigation": {
|
"Navigation": {
|
||||||
"home": "Home",
|
"home": "Home",
|
||||||
"team": "Team",
|
"team": "Team",
|
||||||
"products": "Products",
|
"products": "Products",
|
||||||
"blog": "Blog",
|
"blog": "Blog",
|
||||||
"contact": "Contact"
|
"contact": "Contact",
|
||||||
|
"toggleMenu": "Toggle Menu"
|
||||||
},
|
},
|
||||||
"Footer": {
|
"Footer": {
|
||||||
"legal": "Legal",
|
"legal": "Legal",
|
||||||
@@ -27,32 +32,46 @@
|
|||||||
"languages": "Languages",
|
"languages": "Languages",
|
||||||
"archives": "Archives",
|
"archives": "Archives",
|
||||||
"categories": "Categories",
|
"categories": "Categories",
|
||||||
"recentPosts": "Recent Posts"
|
"recentPosts": "Recent Posts",
|
||||||
|
"company": "Company",
|
||||||
|
"readArticle": "Read Article",
|
||||||
|
"copyright": "Copyright © {year} KLZ Vertriebs GmbH. All rights reserved.",
|
||||||
|
"tagline": "Leading the way in cable infrastructure and sustainable energy solutions. Quality, innovation, and reliability since 1998."
|
||||||
},
|
},
|
||||||
"Team": {
|
"Team": {
|
||||||
"hero": {
|
"hero": {
|
||||||
"title": "The bright sparks behind the power",
|
"title": "The bright sparks behind the power",
|
||||||
"subtitle": "We connect energy, expertise, and innovation to power a greener future."
|
"subtitle": "We connect energy, expertise, and innovation to power a greener future.",
|
||||||
|
"badge": "Our People"
|
||||||
},
|
},
|
||||||
"michael": {
|
"michael": {
|
||||||
"name": "Michael Bodemer",
|
"name": "Michael Bodemer",
|
||||||
"quote": "\"Challenges exist to be solved, not to debate how complicated they are.\"",
|
"quote": "\"Challenges exist to be solved, not to debate how complicated they are.\"",
|
||||||
"description": "Michael Bodemer is the go-to guy when things get complicated—and let’s face it, that’s often the case with cable networks. With sharp insight and a knack for practical solutions, Michael is one of our key players. He’s not just detail-oriented; he’s a driving force—whether it’s in planning, customer interactions, or securing the best cables for every project.",
|
"description": "Michael Bodemer is the go-to guy when things get complicated—and let’s face it, that’s often the case with cable networks. With sharp insight and a knack for practical solutions, Michael is one of our key players. He’s not just detail-oriented; he’s a driving force—whether it’s in planning, customer interactions, or securing the best cables for every project.",
|
||||||
"linkedin": "Check Michael's LinkedIn"
|
"linkedin": "Check Michael's LinkedIn",
|
||||||
|
"role": "Managing Director"
|
||||||
},
|
},
|
||||||
"legacy": {
|
"legacy": {
|
||||||
"title": "A Legacy of Excellence in Every Connection",
|
"title": "A Legacy of Excellence in Every Connection",
|
||||||
|
"subtitle": "Our Heritage",
|
||||||
"p1": "At KLZ, our expertise is built on generations of dedication to the energy industry. With decades of hands-on experience, we’ve grown alongside the evolution of cable technology, combining traditional craftsmanship with modern innovation. Each project we take on reflects a deep understanding of what it takes to create lasting, reliable energy solutions.",
|
"p1": "At KLZ, our expertise is built on generations of dedication to the energy industry. With decades of hands-on experience, we’ve grown alongside the evolution of cable technology, combining traditional craftsmanship with modern innovation. Each project we take on reflects a deep understanding of what it takes to create lasting, reliable energy solutions.",
|
||||||
"p2": "Paired with historic illustrations from the industry’s early days, our story is a reminder of how far cables have come – and how much care has always gone into connecting the world."
|
"p2": "Paired with historic illustrations from the industry’s early days, our story is a reminder of how far cables have come – and how much care has always gone into connecting the world.",
|
||||||
|
"expertise": "Expertise",
|
||||||
|
"expertiseDesc": "Decades of Knowledge",
|
||||||
|
"network": "Network",
|
||||||
|
"networkDesc": "Global Partnerships"
|
||||||
},
|
},
|
||||||
"klaus": {
|
"klaus": {
|
||||||
"name": "Klaus Mintel",
|
"name": "Klaus Mintel",
|
||||||
"quote": "\"Sometimes all it takes is a clear head and a good cable to make the world a little better.\"",
|
"quote": "\"Sometimes all it takes is a clear head and a good cable to make the world a little better.\"",
|
||||||
"description": "Klaus is the man with the experience, bringing perspective and calm to the table—even when cable chaos threatens to take over. With impressive industry knowledge and a network as solid as our cables, he ensures everything runs smoothly. Klaus isn’t just a problem solver; he’s a strategic thinker who knows how to get to the point with a touch of humor.",
|
"description": "Klaus is the man with the experience, bringing perspective and calm to the table—even when cable chaos threatens to take over. With impressive industry knowledge and a network as solid as our cables, he ensures everything runs smoothly. Klaus isn’t just a problem solver; he’s a strategic thinker who knows how to get to the point with a touch of humor.",
|
||||||
"linkedin": "Check Klaus' LinkedIn"
|
"linkedin": "Check Klaus' LinkedIn",
|
||||||
|
"role": "Founder & Visionary"
|
||||||
},
|
},
|
||||||
"manifesto": {
|
"manifesto": {
|
||||||
"title": "Our manifesto",
|
"title": "Our manifesto",
|
||||||
|
"subtitle": "Our Values",
|
||||||
|
"tagline": "Our core principles guide every decision we make and every cable we deliver.",
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"title": "Competence",
|
"title": "Competence",
|
||||||
@@ -79,14 +98,24 @@
|
|||||||
"description": "We deliver what we promise – every time, without fail."
|
"description": "We deliver what we promise – every time, without fail."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"gallery": {
|
||||||
|
"title": "Life at KLZ",
|
||||||
|
"subtitle": "Behind the Scenes"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Contact": {
|
"Contact": {
|
||||||
"title": "Get in Touch",
|
"title": "Get in Touch",
|
||||||
"subtitle": "Have questions about our products or need a custom solution? We're here to help.",
|
"subtitle": "Have questions about our products or need a custom solution? We're here to help.",
|
||||||
|
"heroSubtitle": "Get in Touch",
|
||||||
"info": {
|
"info": {
|
||||||
"title": "Contact Information",
|
"title": "Contact Information",
|
||||||
"address": "Raiffeisenstraße 22\n73630 Remshalden\nGermany"
|
"subtitle": "Contact Details",
|
||||||
|
"howToReachUs": "How to Reach Us",
|
||||||
|
"address": "Raiffeisenstraße 22\n73630 Remshalden\nGermany",
|
||||||
|
"office": "Our Office",
|
||||||
|
"phone": "Phone",
|
||||||
|
"email": "Email"
|
||||||
},
|
},
|
||||||
"hours": {
|
"hours": {
|
||||||
"title": "Business Hours",
|
"title": "Business Hours",
|
||||||
@@ -97,10 +126,17 @@
|
|||||||
},
|
},
|
||||||
"form": {
|
"form": {
|
||||||
"title": "Send us a message",
|
"title": "Send us a message",
|
||||||
|
"subtitle": "Send a Message",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
|
"namePlaceholder": "Your Name",
|
||||||
"email": "Email",
|
"email": "Email",
|
||||||
|
"emailPlaceholder": "your@email.com",
|
||||||
"message": "Message",
|
"message": "Message",
|
||||||
|
"messagePlaceholder": "How can we help you?",
|
||||||
"submit": "Send Message"
|
"submit": "Send Message"
|
||||||
|
},
|
||||||
|
"map": {
|
||||||
|
"comingSoon": "Interactive Map Coming Soon"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Products": {
|
"Products": {
|
||||||
@@ -157,11 +193,13 @@
|
|||||||
"hero": {
|
"hero": {
|
||||||
"title": "We are helping to expand the energy cable networks for a <green>green</green> future",
|
"title": "We are helping to expand the energy cable networks for a <green>green</green> future",
|
||||||
"cta": "Let's talk",
|
"cta": "Let's talk",
|
||||||
"exploreProducts": "Explore Products"
|
"exploreProducts": "Explore Products",
|
||||||
|
"subtitle": "Leading the way in cable infrastructure"
|
||||||
},
|
},
|
||||||
"whatWeDo": {
|
"whatWeDo": {
|
||||||
"title": "What we do",
|
"title": "What we do",
|
||||||
"subtitle": "We ensure that the electricity flows – with quality-tested cables. From low voltage up to high voltage.",
|
"subtitle": "We ensure that the electricity flows – with quality-tested cables. From low voltage up to high voltage.",
|
||||||
|
"expertise": "Our Expertise",
|
||||||
"quote": "We don't just deliver cables; we deliver the infrastructure for a sustainable future.",
|
"quote": "We don't just deliver cables; we deliver the infrastructure for a sustainable future.",
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
@@ -185,6 +223,13 @@
|
|||||||
"whyChooseUs": {
|
"whyChooseUs": {
|
||||||
"title": "Why choose us",
|
"title": "Why choose us",
|
||||||
"subtitle": "Experience prevents many mistakes, but we learn something new every day",
|
"subtitle": "Experience prevents many mistakes, but we learn something new every day",
|
||||||
|
"whyKlz": "Why KLZ",
|
||||||
|
"features": [
|
||||||
|
"Certified Quality Standards",
|
||||||
|
"Sustainable Supply Chain",
|
||||||
|
"Expert Technical Support",
|
||||||
|
"Fast Global Delivery"
|
||||||
|
],
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"title": "Expertise with depth",
|
"title": "Expertise with depth",
|
||||||
@@ -206,17 +251,24 @@
|
|||||||
},
|
},
|
||||||
"experience": {
|
"experience": {
|
||||||
"title": "Decades of experience rooted in cable history",
|
"title": "Decades of experience rooted in cable history",
|
||||||
|
"subtitle": "Our Legacy",
|
||||||
"p1": "At KLZ, cables run in our veins. Klaus began his journey at the renowned Felten & Guilleaume, following in the footsteps of his parents, who dedicated their lives to the same iconic company. For Klaus, this isn’t just work – it’s a legacy built on craftsmanship, innovation, and pride.",
|
"p1": "At KLZ, cables run in our veins. Klaus began his journey at the renowned Felten & Guilleaume, following in the footsteps of his parents, who dedicated their lives to the same iconic company. For Klaus, this isn’t just work – it’s a legacy built on craftsmanship, innovation, and pride.",
|
||||||
"p2": "We honor this history with original illustrations from Felten & Guilleaume’s era, once used as postcards. These images remind us of the generations who wired the world together – a tradition we proudly continue today."
|
"p2": "We honor this history with original illustrations from Felten & Guilleaume’s era, once used as postcards. These images remind us of the generations who wired the world together – a tradition we proudly continue today.",
|
||||||
|
"certifiedQuality": "Certified Quality",
|
||||||
|
"vdeApproved": "VDE Approved & Trusted by Major Energy Suppliers",
|
||||||
|
"fullSpectrum": "Full Spectrum",
|
||||||
|
"solutionsRange": "From 1kV to 220kV Solutions"
|
||||||
},
|
},
|
||||||
"meetTheTeam": {
|
"meetTheTeam": {
|
||||||
"title": "Meet the team behind KLZ",
|
"title": "Meet the team behind KLZ",
|
||||||
|
"subtitle": "The People Behind KLZ",
|
||||||
"description": "At KLZ, our team is the power behind the cables. From seasoned experts like Michael and Klaus to a dedicated group of planners, logistics specialists, and customer support professionals, every member plays a vital role. Together, we combine decades of experience, innovative thinking, and a shared commitment to delivering reliable energy solutions.",
|
"description": "At KLZ, our team is the power behind the cables. From seasoned experts like Michael and Klaus to a dedicated group of planners, logistics specialists, and customer support professionals, every member plays a vital role. Together, we combine decades of experience, innovative thinking, and a shared commitment to delivering reliable energy solutions.",
|
||||||
"cta": "Checkout our team",
|
"cta": "Checkout our team",
|
||||||
"andNetwork": "& Our Expert Network"
|
"andNetwork": "& Our Expert Network"
|
||||||
},
|
},
|
||||||
"gallery": {
|
"gallery": {
|
||||||
"title": "Strong Connections for a Sustainable World.",
|
"title": "Strong Connections for a Sustainable World.",
|
||||||
|
"subtitle": "Visual Journey",
|
||||||
"alt": "Gallery image"
|
"alt": "Gallery image"
|
||||||
},
|
},
|
||||||
"video": {
|
"video": {
|
||||||
@@ -224,7 +276,39 @@
|
|||||||
},
|
},
|
||||||
"cta": {
|
"cta": {
|
||||||
"title": "Enough information, let's build something together!",
|
"title": "Enough information, let's build something together!",
|
||||||
|
"subtitle": "Get Started",
|
||||||
|
"description": "Partner with KLZ for reliable, high-performance cable solutions tailored to your project's unique requirements.",
|
||||||
"button": "Reach out now"
|
"button": "Reach out now"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"Blog": {
|
||||||
|
"meta": {
|
||||||
|
"title": "News on Cables and Energy Solutions",
|
||||||
|
"description": "Stay up to date! Read current topics and insights on cable technology, energy solutions and industry-specific innovations."
|
||||||
|
},
|
||||||
|
"featuredPost": "Featured Post",
|
||||||
|
"readFullArticle": "Read Full Article",
|
||||||
|
"latestNews": "Latest News",
|
||||||
|
"allArticles": "All Articles",
|
||||||
|
"readMore": "Read more",
|
||||||
|
"prev": "Prev",
|
||||||
|
"next": "Next",
|
||||||
|
"categories": {
|
||||||
|
"all": "All",
|
||||||
|
"industry": "Industry",
|
||||||
|
"technical": "Technical",
|
||||||
|
"sustainability": "Sustainability"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"StandardPage": {
|
||||||
|
"badge": "Information",
|
||||||
|
"overview": "Overview",
|
||||||
|
"details": "Details",
|
||||||
|
"support": "Support",
|
||||||
|
"quickNavigation": "Quick Navigation",
|
||||||
|
"exploreDetails": "Explore the details of {title}. KLZ provides comprehensive information on all our services and corporate policies.",
|
||||||
|
"needHelp": "Need Help?",
|
||||||
|
"supportTeamAvailable": "Our support team is available for any questions regarding this topic.",
|
||||||
|
"contactUs": "Contact Us"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user