Produkt Page erstellt
This commit is contained in:
@@ -2,15 +2,21 @@ import Header from './Header';
|
|||||||
import Footer from './Footer';
|
import Footer from './Footer';
|
||||||
import { getLanguage, translations } from '../i18n';
|
import { getLanguage, translations } from '../i18n';
|
||||||
|
|
||||||
|
interface Feature {
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
}
|
||||||
|
|
||||||
interface ProductPageProps {
|
interface ProductPageProps {
|
||||||
title: string;
|
title: string;
|
||||||
description: string;
|
description: string;
|
||||||
icon: string;
|
icon: string;
|
||||||
trademark?: string;
|
trademark?: string;
|
||||||
|
features?: Feature[];
|
||||||
children?: React.ReactNode;
|
children?: React.ReactNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ProductPage({ title, description, icon, trademark, children }: ProductPageProps) {
|
function ProductPage({ title, description, icon, trademark, features, children }: ProductPageProps) {
|
||||||
const lang = getLanguage();
|
const lang = getLanguage();
|
||||||
const t = translations[lang].common;
|
const t = translations[lang].common;
|
||||||
|
|
||||||
@@ -28,10 +34,31 @@ function ProductPage({ title, description, icon, trademark, children }: ProductP
|
|||||||
|
|
||||||
<section className="section">
|
<section className="section">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
|
{features ? (
|
||||||
|
<div style={{ marginBottom: '4rem' }}>
|
||||||
|
<h2 style={{ display: 'block', marginBottom: '4rem' }}>{t.detailsTitle}</h2>
|
||||||
|
<div className="about-grid">
|
||||||
|
{features.map((f, i) => (
|
||||||
|
<div key={i} className="feature-card" style={{
|
||||||
|
padding: '3rem 2rem',
|
||||||
|
borderRadius: '12px',
|
||||||
|
border: '1px solid var(--border-color)',
|
||||||
|
backgroundColor: 'var(--bg-white)',
|
||||||
|
textAlign: 'left',
|
||||||
|
boxShadow: '0 4px 12px rgba(0,0,0,0.05)',
|
||||||
|
flex: '1 1 350px'
|
||||||
|
}}>
|
||||||
|
<h3 style={{ color: 'var(--primary-color)', marginBottom: '1.5rem', fontSize: '1.5rem', textAlign: 'left' }}>{f.title}</h3>
|
||||||
|
<p style={{ fontSize: '1.1rem', lineHeight: '1.7', color: 'var(--text-secondary)', textAlign: 'left' }}>{f.description}</p>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
<div className="product-details-grid">
|
<div className="product-details-grid">
|
||||||
<div>
|
<div>
|
||||||
<h2>{t.detailsTitle}</h2>
|
<h2>{t.detailsTitle}</h2>
|
||||||
<p>{t.detailsText}</p>
|
<p style={{ textAlign: 'left' }}>{t.detailsText}</p>
|
||||||
<ul style={{ listStyle: 'none', marginTop: '2rem' }}>
|
<ul style={{ listStyle: 'none', marginTop: '2rem' }}>
|
||||||
<li style={{ display: 'flex', alignItems: 'center', gap: '1rem', marginBottom: '1rem' }}>
|
<li style={{ display: 'flex', alignItems: 'center', gap: '1rem', marginBottom: '1rem' }}>
|
||||||
<span className="material-icons" style={{ color: 'var(--accent-color)' }}>check_circle</span>
|
<span className="material-icons" style={{ color: 'var(--accent-color)' }}>check_circle</span>
|
||||||
@@ -46,11 +73,6 @@ function ProductPage({ title, description, icon, trademark, children }: ProductP
|
|||||||
{t.featureSupport}
|
{t.featureSupport}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
{trademark && (
|
|
||||||
<p style={{ fontSize: '0.8rem', fontStyle: 'italic', marginTop: '2rem', opacity: 0.7 }}>
|
|
||||||
{trademark}
|
|
||||||
</p>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
<div style={{
|
<div style={{
|
||||||
backgroundColor: 'var(--bg-light)',
|
backgroundColor: 'var(--bg-light)',
|
||||||
@@ -67,7 +89,15 @@ function ProductPage({ title, description, icon, trademark, children }: ProductP
|
|||||||
<p>{t.screenshotPlaceholder}</p>
|
<p>{t.screenshotPlaceholder}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
{children}
|
{children}
|
||||||
|
|
||||||
|
{trademark && (
|
||||||
|
<p style={{ fontSize: '0.8rem', fontStyle: 'italic', marginTop: '6rem', opacity: 0.7, textAlign: 'left' }}>
|
||||||
|
{trademark}
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
60
src/i18n.ts
60
src/i18n.ts
@@ -55,6 +55,36 @@ export const translations = {
|
|||||||
title: 'Boss4J',
|
title: 'Boss4J',
|
||||||
text: 'Die erstklassige Orchestrierungs-Suite für JBoss® und WildFly® Anwendungsserver. Vereinfachen Sie die Verwaltung komplexer Cluster und automatisieren Sie Deployments.',
|
text: 'Die erstklassige Orchestrierungs-Suite für JBoss® und WildFly® Anwendungsserver. Vereinfachen Sie die Verwaltung komplexer Cluster und automatisieren Sie Deployments.',
|
||||||
trademark: 'JBoss® und WildFly® sind eingetragene Marken von Red Hat, Inc.',
|
trademark: 'JBoss® und WildFly® sind eingetragene Marken von Red Hat, Inc.',
|
||||||
|
features: [
|
||||||
|
{
|
||||||
|
title: 'Instanz- & JVM-Lifecycle',
|
||||||
|
description: 'Zentrale Steuerung Ihrer Anwendungsserver. Starten, Stoppen und Neustarten von Instanzen direkt über die Weboberfläche mit tiefer JVM-Einsicht.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Konfigurations-Management',
|
||||||
|
description: 'Direktes Editieren von XML- und Properties-Dateien mit Dry-Run-Modus, visuellen Diffs und automatischer Versionierung für sichere Rollbacks.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Deployment-Orchestrierung',
|
||||||
|
description: 'Automatisierte WAR-Deployments mit Prüfung von Marker-Files, Checksummen-Verifizierung und Unterstützung für Deployment-Queues.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Health-Monitoring',
|
||||||
|
description: 'Echtzeit-Dashboards, historische Status-Heatmaps und detailliertes Heap-Speicher-Monitoring via jstat für maximale Verfügbarkeit.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Log-Management',
|
||||||
|
description: 'Fortschrittlicher Log-Viewer mit Suche und Tailing. Automatische Wartung durch Gzip-Kompression alter Log-Dateien zur Speicherplatzoptimierung.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Infrastruktur-Visualisierung',
|
||||||
|
description: 'Automatische Topologie-Erkennung von Apache VHosts und Nginx Upstreams zur grafischen Darstellung Ihrer gesamten Systemlandschaft.'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
support: {
|
||||||
|
title: '24/7 Enterprise Support Paket',
|
||||||
|
description: 'Maximale Sicherheit für Ihren geschäftskritischen Betrieb. Unser Expertenteam steht Ihnen rund um die Uhr zur Verfügung.'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
cert: {
|
cert: {
|
||||||
title: 'Zertifikatsverwaltung',
|
title: 'Zertifikatsverwaltung',
|
||||||
@@ -191,6 +221,36 @@ export const translations = {
|
|||||||
title: 'Boss4J',
|
title: 'Boss4J',
|
||||||
text: 'The premier orchestration suite for JBoss® and WildFly® application servers. Simplify management of complex clusters and automate deployments.',
|
text: 'The premier orchestration suite for JBoss® and WildFly® application servers. Simplify management of complex clusters and automate deployments.',
|
||||||
trademark: 'JBoss® and WildFly® are registered trademarks of Red Hat, Inc.',
|
trademark: 'JBoss® and WildFly® are registered trademarks of Red Hat, Inc.',
|
||||||
|
features: [
|
||||||
|
{
|
||||||
|
title: 'Instance & JVM Lifecycle',
|
||||||
|
description: 'Centralized control of your application servers. Start, stop, and restart instances directly from the web interface with deep JVM insights.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Configuration Management',
|
||||||
|
description: 'Direct editing of XML and Properties files with dry-run mode, visual diffs, and automatic versioning for safe rollbacks.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Deployment Orchestration',
|
||||||
|
description: 'Automated WAR deployments with marker file tracking, checksum verification, and support for deployment queues.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Health Monitoring',
|
||||||
|
description: 'Real-time dashboards, historical status heatmaps, and detailed heap memory monitoring via jstat for maximum availability.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Log Management',
|
||||||
|
description: 'Advanced log viewer with search and tailing. Automatic maintenance through Gzip compression of old log files to optimize disk space.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Infrastructure Visualization',
|
||||||
|
description: 'Automatic topology discovery of Apache VHosts and Nginx upstreams to graphically represent your entire system landscape.'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
support: {
|
||||||
|
title: '24/7 Enterprise Support Package',
|
||||||
|
description: 'Maximum security for your operations. Our expert team is at your service around the clock.'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
cert: {
|
cert: {
|
||||||
title: 'Certificate Management',
|
title: 'Certificate Management',
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { getLanguage, translations } from '../../i18n'
|
|||||||
const Page = () => {
|
const Page = () => {
|
||||||
const lang = getLanguage();
|
const lang = getLanguage();
|
||||||
const t = translations[lang].products.boss4j;
|
const t = translations[lang].products.boss4j;
|
||||||
|
const common = translations[lang].common;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ProductPage
|
<ProductPage
|
||||||
@@ -14,7 +15,63 @@ const Page = () => {
|
|||||||
description={t.text}
|
description={t.text}
|
||||||
icon="layers"
|
icon="layers"
|
||||||
trademark={t.trademark}
|
trademark={t.trademark}
|
||||||
/>
|
features={t.features}
|
||||||
|
>
|
||||||
|
<div style={{ marginTop: '6rem' }}>
|
||||||
|
<h2 style={{ marginBottom: '3rem', display: 'block' }}>{lang === 'de' ? 'Warum Boss4J?' : 'Why Boss4J?'}</h2>
|
||||||
|
<div style={{
|
||||||
|
display: 'grid',
|
||||||
|
gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))',
|
||||||
|
gap: '2.5rem',
|
||||||
|
textAlign: 'left'
|
||||||
|
}}>
|
||||||
|
<div style={{ padding: '2rem', borderLeft: '5px solid var(--accent-color)', backgroundColor: 'var(--bg-light)', borderRadius: '0 8px 8px 0' }}>
|
||||||
|
<h4 style={{ color: 'var(--primary-color)', marginBottom: '1rem', fontSize: '1.3rem' }}>{lang === 'de' ? 'Direkte Kontrolle' : 'Direct Control'}</h4>
|
||||||
|
<p style={{ textAlign: 'left', fontSize: '1.05rem', lineHeight: '1.6' }}>
|
||||||
|
{lang === 'de'
|
||||||
|
? 'Verwalten Sie Ihre Server ohne Umwege über komplexe Management-Konsolen oder eingeschränkte CLIs.'
|
||||||
|
: 'Manage your servers directly without detours through complex management consoles or restricted CLIs.'}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div style={{ padding: '2rem', borderLeft: '5px solid var(--accent-color)', backgroundColor: 'var(--bg-light)', borderRadius: '0 8px 8px 0' }}>
|
||||||
|
<h4 style={{ color: 'var(--primary-color)', marginBottom: '1rem', fontSize: '1.3rem' }}>{lang === 'de' ? 'Operative Sicherheit' : 'Operational Safety'}</h4>
|
||||||
|
<p style={{ textAlign: 'left', fontSize: '1.05rem', lineHeight: '1.6' }}>
|
||||||
|
{lang === 'de'
|
||||||
|
? 'Minimieren Sie Fehlkonfigurationen durch Dry-Runs und die Gewissheit, jederzeit auf alte Versionen zurückgreifen zu können.'
|
||||||
|
: 'Minimize misconfigurations with dry-runs and the certainty of being able to revert to old versions at any time.'}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div style={{ padding: '2rem', borderLeft: '5px solid var(--accent-color)', backgroundColor: 'var(--bg-light)', borderRadius: '0 8px 8px 0' }}>
|
||||||
|
<h4 style={{ color: 'var(--primary-color)', marginBottom: '1rem', fontSize: '1.3rem' }}>{lang === 'de' ? 'Volle Transparenz' : 'Full Transparency'}</h4>
|
||||||
|
<p style={{ textAlign: 'left', fontSize: '1.05rem', lineHeight: '1.6' }}>
|
||||||
|
{lang === 'de'
|
||||||
|
? 'Behalten Sie den Überblick über Ihre gesamte Infrastruktur-Topologie und den aktuellen Gesundheitszustand jeder Instanz.'
|
||||||
|
: 'Keep track of your entire infrastructure topology and the current health status of every instance.'}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style={{
|
||||||
|
marginTop: '6rem',
|
||||||
|
padding: '2rem',
|
||||||
|
backgroundColor: 'var(--bg-light)',
|
||||||
|
borderRadius: '0px',
|
||||||
|
textAlign: 'center',
|
||||||
|
border: '1px solid var(--border-color)',
|
||||||
|
}}>
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '1rem', marginBottom: '1rem' }}>
|
||||||
|
<span className="material-icons" style={{ color: 'var(--accent-color)' }}>support_agent</span>
|
||||||
|
<h3 style={{ margin: 0, fontSize: '1.25rem', color: 'var(--primary-color)' }}>{t.support.title}</h3>
|
||||||
|
</div>
|
||||||
|
<p style={{ color: 'var(--text-secondary)', fontSize: '1rem', maxWidth: '700px', margin: '0 auto 1.5rem' }}>
|
||||||
|
{t.support.description}
|
||||||
|
</p>
|
||||||
|
<div style={{ fontSize: '0.85rem', color: 'var(--primary-color)', fontWeight: 'bold', textTransform: 'uppercase', letterSpacing: '1px' }}>
|
||||||
|
{lang === 'de' ? 'Support durch das Euastra Expertenteam' : 'Direct Support by the Euastra Expert Team'}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ProductPage>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user