Übersetzung Teil 1

This commit is contained in:
Ashikagi
2026-03-23 23:02:51 +01:00
parent cd77f88d96
commit 46d468575a
21 changed files with 1605 additions and 333 deletions

View File

@@ -1,5 +1,6 @@
import React from 'react'
import { calculateTotal, getAchievement, getPatTypeColor } from '../utils/patCalculations'
import { useTranslation } from '../i18n/LanguageContext'
const formatDate = (value) => {
if (!value) return '—'
@@ -28,6 +29,8 @@ const ValueRow = ({ label, values = [] }) => (
)
export default function SharedAssessmentView({ assessment }) {
const t = useTranslation()
if (!assessment) return null
const totalPoints = calculateTotal(assessment.exercises || [])
@@ -39,12 +42,12 @@ export default function SharedAssessmentView({ assessment }) {
<div className="bg-white dark:bg-gray-900 rounded-lg shadow-lg p-6 border border-gray-200 dark:border-gray-800">
<div className="flex justify-between items-start gap-4 mb-6 flex-wrap">
<div>
<p className="text-xs uppercase tracking-[0.2em] text-sky-700 dark:text-sky-300">Geteilter Test</p>
<p className="text-xs uppercase tracking-[0.2em] text-sky-700 dark:text-sky-300">{t('shared.title')}</p>
<h1 className="text-3xl font-bold text-gray-800 dark:text-gray-100 mt-2">
{assessment.name || 'PAT Test'}
{assessment.name || t('shared.default_name')}
</h1>
<p className="text-sm text-gray-600 dark:text-gray-300 mt-2">
Dieser Link zeigt nur diesen einen Test im Nur-Lesen-Modus.
{t('shared.hint')}
</p>
</div>
@@ -57,17 +60,17 @@ export default function SharedAssessmentView({ assessment }) {
<div className="grid md:grid-cols-3 gap-3 mb-6 bg-gray-50 dark:bg-gray-800 p-4 rounded-lg">
<div>
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">Datum</p>
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">{t('shared.date')}</p>
<p className="mt-1 text-lg font-semibold">{formatDate(assessment.datum)}</p>
</div>
<div>
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">Gesamtpunkte</p>
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">{t('shared.total_points')}</p>
<p className="mt-1 text-lg font-semibold text-green-600 dark:text-green-300">
{totalPoints.toFixed(0)}
</p>
</div>
<div>
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">Bewertung</p>
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">{t('shared.rating')}</p>
<p className="mt-1 text-lg font-semibold">{achievement.name}</p>
</div>
</div>
@@ -78,11 +81,11 @@ export default function SharedAssessmentView({ assessment }) {
<div>
<h2 className="font-bold text-lg text-gray-700 dark:text-gray-200">{exercise.name}</h2>
<p className="text-sm text-gray-500 dark:text-gray-400">
Soll {exercise.soll} · Faktor {exercise.faktor}
{t('shared.target_factor', { soll: exercise.soll, faktor: exercise.faktor })}
</p>
</div>
<div className="rounded-lg bg-green-50 dark:bg-green-900/30 px-4 py-2">
<p className="text-xs uppercase tracking-wide text-green-700 dark:text-green-300">Points</p>
<p className="text-xs uppercase tracking-wide text-green-700 dark:text-green-300">{t('shared.col_points')}</p>
<p className="text-xl font-bold text-green-700 dark:text-green-200">
{(exercise.points || 0).toFixed(0)}
</p>
@@ -96,23 +99,23 @@ export default function SharedAssessmentView({ assessment }) {
<ValueRow label={exercise.subLabels?.[1] || 'b)'} values={exercise.subB} />
</>
) : (
<ValueRow label="Werte" values={exercise.values || []} />
<ValueRow label={t('shared.col_values')} values={exercise.values || []} />
)}
</div>
<div className="grid md:grid-cols-3 gap-3 mt-4">
<div className="rounded-lg bg-blue-50 dark:bg-blue-900/30 px-4 py-3">
<p className="text-xs uppercase tracking-wide text-blue-700 dark:text-blue-300">Durchschnitt</p>
<p className="text-xs uppercase tracking-wide text-blue-700 dark:text-blue-300">{t('shared.col_avg')}</p>
<p className="text-lg font-semibold text-blue-700 dark:text-blue-200">
{(exercise.durchschnitt || 0).toFixed(2)}
</p>
</div>
<div className="rounded-lg bg-gray-50 dark:bg-gray-800 px-4 py-3">
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">Soll</p>
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">{t('shared.col_target')}</p>
<p className="text-lg font-semibold">{exercise.soll}</p>
</div>
<div className="rounded-lg bg-gray-50 dark:bg-gray-800 px-4 py-3">
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">Faktor</p>
<p className="text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400">{t('shared.col_factor')}</p>
<p className="text-lg font-semibold">{exercise.faktor}</p>
</div>
</div>
@@ -121,7 +124,7 @@ export default function SharedAssessmentView({ assessment }) {
<div className="mt-6 bg-gradient-to-r from-green-100 to-blue-100 dark:from-gray-800 dark:to-gray-700 p-6 rounded-lg">
<div className="flex justify-between items-center gap-4 flex-wrap mb-4">
<span className="text-2xl font-bold text-gray-800 dark:text-gray-100">Ergebnis</span>
<span className="text-2xl font-bold text-gray-800 dark:text-gray-100">{t('shared.col_result')}</span>
<span className="text-4xl font-bold text-green-600 dark:text-green-300">{totalPoints.toFixed(0)}</span>
</div>