i18n: Fix 19 more hardcoded English strings in admin pages and components

Fixed:
- compliance-overview: Compliance Monitoring Dashboard, Onboarding Status, Data Retention Policies, Active Policies, Consultation Log
- exam-proctoring: Exam Proctoring, Active Sessions, Total Sessions
- signage: Emergency Signage, Normal option
- compliance-wizard: Data Retention Periods, Consultation Checklist, Compliance Setup Complete
- dashboard-customizer: Add Widget
- data-import-export: Data Management Best Practices, Export data regularly
- district-management: Access Denied
- exam-session-monitor: Exam Mode Active
- professional-calendar: Fixed 'Create Neues Ereignis' typo
- sidebar: Toggle Sidebar

All admin pages and shared components now fully German.
This commit is contained in:
Z User committed 2026-08-11 09:46:05 +00:00
1 parent 491bdd18a5
commit 91d6980c21
10 files changed
+19 -19

No files matched your search

+5 -5
View File
@@ -56,7 +56,7 @@ export default function ComplianceDashboard() {
return ( return (
<div className="space-y-8 p-8"> <div className="space-y-8 p-8">
<div> <div>
<h1 className="text-3xl font-bold text-slate-900">Compliance Monitoring Dashboard</h1> <h1 className="text-3xl font-bold text-slate-900">Compliance-Monitoring-Dashboard</h1>
<p className="text-slate-600 mt-2"> <p className="text-slate-600 mt-2">
Track your school&apos;s data protection compliance status and document management Track your school&apos;s data protection compliance status and document management
</p> </p>
@@ -73,7 +73,7 @@ export default function ComplianceDashboard() {
<AlertCircle className="w-8 h-8 text-yellow-600" /> <AlertCircle className="w-8 h-8 text-yellow-600" />
)} )}
<div> <div>
<p className="text-sm text-slate-600">Onboarding Status</p> <p className="text-sm text-slate-600">Onboarding-Status</p>
<p className="font-semibold text-slate-900"> <p className="font-semibold text-slate-900">
{data.status?.onboardingCompleted ? "Complete" : "Pending"} {data.status?.onboardingCompleted ? "Complete" : "Pending"}
</p> </p>
@@ -87,7 +87,7 @@ export default function ComplianceDashboard() {
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<FileText className="w-8 h-8 text-blue-600" /> <FileText className="w-8 h-8 text-blue-600" />
<div> <div>
<p className="text-sm text-slate-600">Data Retention Policies</p> <p className="text-sm text-slate-600">Datenaufbewahrungsrichtlinien</p>
<p className="font-semibold text-slate-900"> <p className="font-semibold text-slate-900">
{data.policiesConfigured} / {data.policiesReviewed} reviewed {data.policiesConfigured} / {data.policiesReviewed} reviewed
</p> </p>
@@ -124,7 +124,7 @@ export default function ComplianceDashboard() {
{/* Data Retention Policies */} {/* Data Retention Policies */}
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle>Active Data Retention Policies</CardTitle> <CardTitle>Aktive Datenaufbewahrungsrichtlinien</CardTitle>
<CardDescription> <CardDescription>
Configured retention periods for each data category Configured retention periods for each data category
</CardDescription> </CardDescription>
@@ -170,7 +170,7 @@ export default function ComplianceDashboard() {
{data.consultations.length > 0 && ( {data.consultations.length > 0 && (
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle>Consultation Log</CardTitle> <CardTitle>Beratungsprotokoll</CardTitle>
<CardDescription> <CardDescription>
Staff and parent body consultations per module Staff and parent body consultations per module
</CardDescription> </CardDescription>
+3 -3
View File
@@ -111,7 +111,7 @@ export default function ExamProctoringPage() {
<div className="space-y-6"> <div className="space-y-6">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h1 className="text-3xl font-bold text-gray-900">Exam Proctoring</h1> <h1 className="text-3xl font-bold text-gray-900">Prüfungsüberwachung</h1>
<p className="text-gray-600 mt-1">Monitor active exam sessions and suspicious activity</p> <p className="text-gray-600 mt-1">Monitor active exam sessions and suspicious activity</p>
</div> </div>
</div> </div>
@@ -121,7 +121,7 @@ export default function ExamProctoringPage() {
<div className="bg-white rounded-lg border border-gray-200 p-4"> <div className="bg-white rounded-lg border border-gray-200 p-4">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<p className="text-gray-600 text-sm font-medium">Active Sessions</p> <p className="text-gray-600 text-sm font-medium">Aktive Sitzungen</p>
<p className="text-2xl font-bold text-gray-900 mt-1">{activeCount}</p> <p className="text-2xl font-bold text-gray-900 mt-1">{activeCount}</p>
</div> </div>
<Clock className="w-8 h-8 text-blue-500" /> <Clock className="w-8 h-8 text-blue-500" />
@@ -141,7 +141,7 @@ export default function ExamProctoringPage() {
<div className="bg-white rounded-lg border border-gray-200 p-4"> <div className="bg-white rounded-lg border border-gray-200 p-4">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<p className="text-gray-600 text-sm font-medium">Total Sessions</p> <p className="text-gray-600 text-sm font-medium">Sitzungen gesamt</p>
<p className="text-2xl font-bold text-gray-900 mt-1">{sessions.length}</p> <p className="text-2xl font-bold text-gray-900 mt-1">{sessions.length}</p>
</div> </div>
<Eye className="w-8 h-8 text-purple-500" /> <Eye className="w-8 h-8 text-purple-500" />
+1 -1
View File
@@ -80,7 +80,7 @@ export default function SignageAdminPage() {
<div className="space-y-6"> <div className="space-y-6">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div> <div>
<h1 className="text-3xl font-bold text-gray-900">Emergency Signage</h1> <h1 className="text-3xl font-bold text-gray-900">Notfall-Digital-Schild</h1>
<p className="text-gray-600 mt-1">Manage displays, messages, and emergency alerts</p> <p className="text-gray-600 mt-1">Manage displays, messages, and emergency alerts</p>
</div> </div>
<Button onClick={() => setShowNewMessage(true)} size="lg" className="gap-2"> <Button onClick={() => setShowNewMessage(true)} size="lg" className="gap-2">
+3 -3
View File
@@ -330,7 +330,7 @@ export function ComplianceWizard({ schoolId, onComplete }: ComplianceWizardProps
{state.step === 2 && ( {state.step === 2 && (
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle>Data Retention Periods</CardTitle> <CardTitle>Aufbewahrungsfristen</CardTitle>
<CardDescription> <CardDescription>
Configure retention periods for each data category (state-specific defaults provided) Configure retention periods for each data category (state-specific defaults provided)
</CardDescription> </CardDescription>
@@ -358,7 +358,7 @@ export function ComplianceWizard({ schoolId, onComplete }: ComplianceWizardProps
{state.step === 3 && ( {state.step === 3 && (
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle>Consultation Checklist</CardTitle> <CardTitle>Beratungs-Checkliste</CardTitle>
<CardDescription> <CardDescription>
Log consultations with staff and parent bodies per module Log consultations with staff and parent bodies per module
</CardDescription> </CardDescription>
@@ -502,7 +502,7 @@ export function ComplianceWizard({ schoolId, onComplete }: ComplianceWizardProps
{state.step === 5 && ( {state.step === 5 && (
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle>Compliance Setup Complete</CardTitle> <CardTitle>Compliance-Einrichtung abgeschlossen</CardTitle>
<CardDescription> <CardDescription>
Review your configuration before finalizing Review your configuration before finalizing
</CardDescription> </CardDescription>
+1 -1
View File
@@ -65,7 +65,7 @@ export function DashboardCustomizer({
<Dialog open={showWidgetGallery} onOpenChange={setShowWidgetGallery}> <Dialog open={showWidgetGallery} onOpenChange={setShowWidgetGallery}>
<DialogContent> <DialogContent>
<DialogHeader> <DialogHeader>
<DialogTitle>Add Widget</DialogTitle> <DialogTitle>Widget hinzufügen</DialogTitle>
</DialogHeader> </DialogHeader>
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
{availableWidgets.map((type) => ( {availableWidgets.map((type) => (
+2 -2
View File
@@ -1465,13 +1465,13 @@ export default function DataImportExportView() {
<div className="flex items-start gap-3 p-4 rounded-xl bg-emerald-50 dark:bg-emerald-950/30 border border-emerald-200 dark:border-emerald-800"> <div className="flex items-start gap-3 p-4 rounded-xl bg-emerald-50 dark:bg-emerald-950/30 border border-emerald-200 dark:border-emerald-800">
<Info className="h-5 w-5 text-emerald-600 mt-0.5 shrink-0" /> <Info className="h-5 w-5 text-emerald-600 mt-0.5 shrink-0" />
<div className="text-sm text-emerald-800 dark:text-emerald-200"> <div className="text-sm text-emerald-800 dark:text-emerald-200">
<p className="font-medium mb-1">Data Management Best Practices</p> <p className="font-medium mb-1">Best Practices für Datenverwaltung</p>
<ul className="list-disc list-inside space-y-1 text-xs"> <ul className="list-disc list-inside space-y-1 text-xs">
<li>Always create a backup before performing bulk operations</li> <li>Always create a backup before performing bulk operations</li>
<li>Review the data preview before importing to catch errors early</li> <li>Review the data preview before importing to catch errors early</li>
<li>Use column mapping to ensure correct field alignment</li> <li>Use column mapping to ensure correct field alignment</li>
<li>Run cleanup periodically to remove orphaned records</li> <li>Run cleanup periodically to remove orphaned records</li>
<li>Export data regularly for archival purposes</li> <li>Exportieren Sie regelmäßig Daten zur Archivierung</li>
</ul> </ul>
</div> </div>
</div> </div>
+1 -1
View File
@@ -470,7 +470,7 @@ export default function DistrictManagementView() {
<div className="flex items-center justify-center h-96"> <div className="flex items-center justify-center h-96">
<div className="text-center space-y-3"> <div className="text-center space-y-3">
<AlertTriangle className="h-12 w-12 text-amber-500 mx-auto" /> <AlertTriangle className="h-12 w-12 text-amber-500 mx-auto" />
<p className="text-lg font-semibold text-gray-700 dark:text-gray-300">Access Denied</p> <p className="text-lg font-semibold text-gray-700 dark:text-gray-300">Zugriff verweigert</p>
<p className="text-sm text-gray-500 dark:text-gray-400">You need admin privileges to access this view.</p> <p className="text-sm text-gray-500 dark:text-gray-400">You need admin privileges to access this view.</p>
</div> </div>
</div> </div>
+1 -1
View File
@@ -99,7 +99,7 @@ export function ExamSessionMonitor({
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<div className="flex items-center gap-2 text-sm"> <div className="flex items-center gap-2 text-sm">
<Eye className="w-4 h-4 text-gray-500" /> <Eye className="w-4 h-4 text-gray-500" />
<span className="text-gray-600">Exam Mode Active</span> <span className="text-gray-600">Prüfungsmodus aktiv</span>
</div> </div>
{securityMetrics.riskScore > 0 && ( {securityMetrics.riskScore > 0 && (
+1 -1
View File
@@ -603,7 +603,7 @@ function EventCreatorDialog({
<Dialog open onOpenChange={onClose}> <Dialog open onOpenChange={onClose}>
<DialogContent> <DialogContent>
<DialogHeader> <DialogHeader>
<DialogTitle>Create Neues Ereignis</DialogTitle> <DialogTitle>Neues Ereignis erstellen</DialogTitle>
</DialogHeader> </DialogHeader>
<div className="space-y-4"> <div className="space-y-4">
+1 -1
View File
@@ -274,7 +274,7 @@ function SidebarTrigger({
{...props} {...props}
> >
<PanelLeftIcon /> <PanelLeftIcon />
<span className="sr-only">Toggle Sidebar</span> <span className="sr-only">Seitenleiste umschalten</span>
</Button> </Button>
) )
} }