Round 25: Substitute Teacher, School Newsletter, Career Guidance, Styling

- Substitute Teacher Management View: pool, absences, assignments, statistics, weekly schedule
- School Newsletter View: editor, templates, distribution, analytics, open/click tracking
- Student Career & Guidance View: career exploration, interest quiz, portfolio, goals, appointments
- 6 new Prisma models: SubstituteTeacher, TeacherAbsence, SubstitutionAssignment, CareerProfile, CareerGoal, CareerAppointment
- Enhanced Newsletter model with content, scheduling, and analytics fields
- Enhanced settings-view with gradient header, glassmorphism cards, danger zone
- Enhanced student-portal-view with animated welcome banner, quick action cards
- 16+ new API route files
- 300+ i18n keys added
- All views verified working in browser
This commit is contained in:
Mustafa Cetin committed 2026-07-30 06:36:34 +00:00
1 parent a159ed7fe6
commit 3d0d518bb9
57 files changed
+8370 -48

No files matched your search

+676
View File
@@ -5982,6 +5982,344 @@ const de: TranslationDict = {
'se.type_concert': 'Konzert',
'se.type_graduation': 'Abschlussfeier',
'se.type_fair': 'Schulfest',
// Substitute Teacher Management
'nav.substitute-teacher': 'Vertretungsplan',
'sub.title': 'Vertretungsplanung',
'sub.subtitle': 'Vertretungslehrer, Abwesenheiten & Einsatzplanung verwalten',
'sub.pool': 'Vertretungspool',
'sub.absences': 'Abwesenheiten',
'sub.schedule': 'Vertretungsplan',
'sub.statistics': 'Statistiken',
'sub.add_substitute': 'Vertretungslehrer hinzufügen',
'sub.edit_substitute': 'Vertretungslehrer bearbeiten',
'sub.delete_substitute': 'Vertretungslehrer entfernen',
'sub.first_name': 'Vorname',
'sub.last_name': 'Nachname',
'sub.email': 'E-Mail',
'sub.phone': 'Telefon',
'sub.qualifications': 'Qualifikationen',
'sub.subjects': 'Fächer',
'sub.grade_levels': 'Jahrgangsstufen',
'sub.availability': 'Verfügbarkeit',
'sub.max_days': 'Max. Tage/Woche',
'sub.rating': 'Bewertung',
'sub.total_assignments': 'Gesamteinsätze',
'sub.notes': 'Notizen',
'sub.active': 'Aktiv',
'sub.inactive': 'Inaktiv',
'sub.search_substitute': 'Vertretungslehrer suchen...',
'sub.filter_active': 'Nur aktive',
'sub.filter_all': 'Alle',
'sub.no_substitutes': 'Keine Vertretungslehrer gefunden',
'sub.add_from_teachers': 'Aus Lehrerpool übernehmen',
'sub.report_absence': 'Abwesenheit melden',
'sub.edit_absence': 'Abwesenheit bearbeiten',
'sub.delete_absence': 'Abwesenheit löschen',
'sub.teacher': 'Lehrkraft',
'sub.absence_type': 'Abwesenheitsart',
'sub.type_sick': 'Krankheit',
'sub.type_personal': 'Persönlich',
'sub.type_training': 'Fortbildung',
'sub.type_other': 'Sonstiges',
'sub.start_date': 'Beginn',
'sub.end_date': 'Ende',
'sub.reason': 'Grund',
'sub.status': 'Status',
'sub.status_reported': 'Gemeldet',
'sub.status_covered': 'Abgedeckt',
'sub.status_cancelled': 'Storniert',
'sub.bulk_absence': 'Mehrtägige Abwesenheit',
'sub.no_absences': 'Keine Abwesenheiten gefunden',
'sub.create_assignment': 'Vertretung zuweisen',
'sub.edit_assignment': 'Vertretungseinsatz bearbeiten',
'sub.substitute': 'Vertretungslehrer',
'sub.class': 'Klasse',
'sub.subject': 'Fach',
'sub.date': 'Datum',
'sub.period': 'Stunde',
'sub.room': 'Raum',
'sub.assignment_status': 'Einsatzstatus',
'sub.status_pending': 'Ausstehend',
'sub.status_confirmed': 'Bestätigt',
'sub.status_completed': 'Abgeschlossen',
'sub.assignment_cancelled': 'Storniert',
'sub.no_assignments': 'Keine Vertretungseinsätze gefunden',
'sub.weekly_view': 'Wochenansicht',
'sub.print_plan': 'Plan drucken',
'sub.notify_teachers': 'Lehrkräfte benachrichtigen',
'sub.suggest_substitute': 'Vertretung vorschlagen',
'sub.auto_assign': 'Automatisch zuweisen',
'sub.coverage_rate': 'Abdeckungsrate',
'sub.absence_frequency': 'Abwesenheitshäufigkeit',
'sub.substitute_utilization': 'Vertretungsauslastung',
'sub.cost_tracking': 'Kostenverfolgung',
'sub.monthly_trends': 'Monatliche Trends',
'sub.absences_per_month': 'Abwesenheiten pro Monat',
'sub.assignments_per_status': 'Einsätze nach Status',
'sub.top_absent_teachers': 'Häufigste Abwesenheiten',
'sub.total_absences': 'Gesamt Abwesenheiten',
'sub.total_substitutes': 'Gesamt Vertretungen',
'sub.total_assignments_count': 'Gesamteinsätze',
'sub.avg_rating': 'Durchschnittsbewertung',
'sub.this_week': 'Diese Woche',
'sub.uncovered': 'Nicht abgedeckt',
'sub.cost_per_day': 'Kosten pro Tag',
'sub.total_cost': 'Gesamtkosten',
'sub.monday': 'Montag',
'sub.tuesday': 'Dienstag',
'sub.wednesday': 'Mittwoch',
'sub.thursday': 'Donnerstag',
'sub.friday': 'Freitag',
'sub.saturday': 'Samstag',
'sub.confirm_delete_substitute': 'Möchten Sie diesen Vertretungslehrer wirklich entfernen?',
'sub.confirm_delete_absence': 'Möchten Sie diese Abwesenheit wirklich löschen?',
'sub.confirm_cancel_assignment': 'Möchten Sie diesen Vertretungseinsatz wirklich stornieren?',
'sub.save_success': 'Erfolgreich gespeichert',
'sub.delete_success': 'Erfolgreich gelöscht',
'sub.error_save': 'Fehler beim Speichern',
'sub.error_delete': 'Fehler beim Löschen',
'sub.error_load': 'Fehler beim Laden',
'sub.no_teacher_selected': 'Bitte Lehrkraft auswählen',
'sub.quick_add': 'Schnell hinzufügen',
'sub.per_day': 'pro Tag',
'sub.rate_substitute': 'Vertretung bewerten',
'sub.daily_rate': 'Tagessatz',
'sub.hours': 'Stunden',
'sub.lessons': 'Unterrichtsstunden',
// Career Guidance
'nav.student-career': 'Berufsorientierung',
'career.title': 'Berufsorientierung',
'career.subtitle': 'Berufsweg erkunden und planen',
'career.exploration': 'Berufserkundung',
'career.quiz': 'Interessenstest',
'career.profiles': 'Berufsprofile',
'career.clusters': 'Berufsfelder',
'career.portfolio': 'Karriereportfolio',
'career.planning': 'Berufsplanung',
'career.appointments': 'Beratungsgespräche',
'career.goals': 'Berufsziele',
'career.statistics': 'Statistiken',
'career.cluster_technology': 'Technologie',
'career.cluster_health': 'Gesundheit',
'career.cluster_business': 'Wirtschaft',
'career.cluster_arts': 'Kunst & Kultur',
'career.cluster_science': 'Naturwissenschaften',
'career.cluster_social': 'Soziales',
'career.path_hauptschule': 'Hauptschule',
'career.path_realschule': 'Realschule',
'career.path_gymnasium': 'Gymnasium',
'career.path_berufsschule': 'Berufsschule',
'career.interest_creativity': 'Kreativität',
'career.interest_analytical': 'Analytisches Denken',
'career.interest_social_skill': 'Soziale Kompetenz',
'career.interest_technical': 'Technisches Verständnis',
'career.interest_leadership': 'Führung',
'career.interest_nature': 'Natur & Umwelt',
'career.interest_communication': 'Kommunikation',
'career.interest_organization': 'Organisation',
'career.quiz_title': 'Berufsinteressentest',
'career.quiz_subtitle': 'Entdecke deine Interessen und Stärken',
'career.quiz_question': 'Wie sehr interessierst du dich für...',
'career.quiz_start': 'Test starten',
'career.quiz_retake': 'Test wiederholen',
'career.quiz_result': 'Dein Ergebnis',
'career.quiz_result_desc': 'Basierend auf deinen Antworten',
'career.quiz_not_taken': 'Du hast den Interessenstest noch nicht gemacht',
'career.quiz_not_taken_desc': 'Starte den Test, um deine Berufsinteressen zu entdecken',
'career.profile_title': 'Dein Berufsprofil',
'career.profile_subtitle': 'Interessen, Stärken und Berufsweg',
'career.interests': 'Interessen',
'career.strengths': 'Stärken',
'career.desired_career': 'Wunschberuf',
'career.education_path': 'Bildungsweg',
'career.career_cluster': 'Beruffeld',
'career.work_experience': 'Arbeitserfahrung',
'career.volunteer_experience': 'Ehrenamtliche Tätigkeit',
'career.certifications': 'Zertifikate & Qualifikationen',
'career.documents': 'Dokumente',
'career.add_work_exp': 'Arbeitserfahrung hinzufügen',
'career.add_volunteer': 'Ehrenamt hinzufügen',
'career.add_certification': 'Zertifikat hinzufügen',
'career.add_document': 'Dokument hinzufügen',
'career.company': 'Unternehmen',
'career.role': 'Rolle/Position',
'career.start_date': 'Beginn',
'career.end_date': 'Ende',
'career.organization': 'Organisation',
'career.name': 'Name',
'career.issuer': 'Aussteller',
'career.date': 'Datum',
'career.type': 'Typ',
'career.appointment_title': 'Beratungsgespräch',
'career.appointment_subtitle': 'Termin mit Berufsberater/in',
'career.schedule_appointment': 'Gespräch vereinbaren',
'career.counselor': 'Berater/in',
'career.duration': 'Dauer',
'career.appointment_type_guidance': 'Berufsberatung',
'career.appointment_type_career': 'Karriereberatung',
'career.appointment_type_academic': 'Akademische Beratung',
'career.appointment_type_college': 'Studienberatung',
'career.upcoming_appointments': 'Anstehende Gespräche',
'career.past_appointments': 'Vergangene Gespräche',
'career.no_appointments': 'Keine Gespräche vorhanden',
'career.no_appointments_desc': 'Vereinbare dein erstes Beratungsgespräch',
'career.action_items': 'Aktionspunkte',
'career.appointment_notes': 'Gesprächsnotizen',
'career.complete_appointment': 'Gespräch abschließen',
'career.cancel_appointment': 'Gespräch absagen',
'career.goal_title': 'Berufsziele',
'career.goal_subtitle': 'Setze und verfolge deine Ziele',
'career.add_goal': 'Ziel hinzufügen',
'career.goal_short_term': 'Kurzfristiges Ziel',
'career.goal_long_term': 'Langfristiges Ziel',
'career.goal_academic': 'Akademisches Ziel',
'career.goal_professional': 'Berufliches Ziel',
'career.target_date': 'Zieldatum',
'career.progress': 'Fortschritt',
'career.milestones': 'Meilensteine',
'career.add_milestone': 'Meilenstein hinzufügen',
'career.milestone_completed': 'Abgeschlossen',
'career.milestone_pending': 'Ausstehend',
'career.status_active': 'Aktiv',
'career.status_completed': 'Abgeschlossen',
'career.status_abandoned': 'Aufgegeben',
'career.scholarship_finder': 'Stipendiensuche',
'career.application_tracker': 'Bewerbungstracker',
'career.important_dates': 'Wichtige Termine',
'career.no_goals': 'Keine Ziele vorhanden',
'career.no_goals_desc': 'Erstelle dein erstes Berufsziel',
'career.career_profile_card': 'Beruf: {name}',
'career.salary_range': 'Gehaltsspanne',
'career.requirements': 'Voraussetzungen',
'career.subject_recommendations': 'Fachempfehlungen',
'career.skills_needed': 'Erforderliche Fähigkeiten',
'career.save_profile': 'Profil speichern',
'career.edit_profile': 'Profil bearbeiten',
'career.create_profile': 'Profil erstellen',
'career.no_profile': 'Kein Berufsprofil vorhanden',
'career.no_profile_desc': 'Erstelle dein Berufsprofil, um deinen Weg zu planen',
'career.school_overview': 'Schulübersicht',
'career.students_with_profiles': 'Schüler mit Profil',
'career.total_goals': 'Gesamtziele',
'career.avg_progress': 'Durchschn. Fortschritt',
'career.appointments_this_month': 'Gespräche diesen Monat',
'career.cluster_distribution': 'Beruffeld-Verteilung',
'career.path_distribution': 'Bildungsweg-Verteilung',
'career.minutes': 'Minuten',
'career.no_career_cluster': 'Nicht zugewiesen',
// ─── School Newsletter ────────────────────────────────────────────
'nav.school-newsletter': 'Schulnewsletter',
'newsletter.title': 'Schulnewsletter',
'newsletter.subtitle': 'Erstellen, verwalten und versenden Sie Schulnewsletter an Ihre Schulgemeinschaft.',
'newsletter.subtitle_readonly': 'Newsletter und Mitteilungen der Schule.',
'newsletter.tab_newsletters': 'Newsletter',
'newsletter.tab_analytics': 'Analyse',
'newsletter.create_new': 'Neuer Newsletter',
'newsletter.create_first': 'Ersten Newsletter erstellen',
'newsletter.search_placeholder': 'Newsletter durchsuchen...',
'newsletter.filter_status': 'Status',
'newsletter.filter_category': 'Kategorie',
'newsletter.filter_all': 'Alle',
'newsletter.no_newsletters': 'Keine Newsletter vorhanden',
'newsletter.no_newsletters_desc': 'Erstellen Sie Ihren ersten Schulnewsletter.',
'newsletter.duplicate': 'Duplizieren',
'newsletter.archive': 'Archivieren',
'newsletter.send': 'Versenden',
'newsletter.total_newsletters': 'Gesamt',
'newsletter.status_draft': 'Entwurf',
'newsletter.status_scheduled': 'Geplant',
'newsletter.status_sent': 'Gesendet',
'newsletter.status_archived': 'Archiviert',
'newsletter.open_rate': 'Öffnungsrate',
'newsletter.click_rate': 'Klickrate',
'newsletter.bounce_rate': 'Bouncerate',
'newsletter.template_monthly': 'Monatlicher Update',
'newsletter.template_event': 'Veranstaltungs-Rückblick',
'newsletter.template_parent': 'Elternnewsletter',
'newsletter.template_emergency': 'Notfall-Mitteilung',
'newsletter.template_monthly_title': 'Monatlicher Schul-Update',
'newsletter.template_event_title': 'Veranstaltungs-Rückblick',
'newsletter.template_parent_title': 'Elternnewsletter',
'newsletter.template_emergency_title': 'Wichtige Mitteilung',
'newsletter.category_general': 'Allgemein',
'newsletter.category_academic': 'Akademisch',
'newsletter.category_sports': 'Sport',
'newsletter.category_arts': 'Kunst',
'newsletter.category_events': 'Veranstaltungen',
'newsletter.category_community': 'Gemeinschaft',
'newsletter.audience_all': 'Alle',
'newsletter.audience_teachers': 'Lehrkräfte',
'newsletter.audience_parents': 'Eltern',
'newsletter.audience_classes': 'Bestimmte Klassen',
'newsletter.audience_roles': 'Bestimmte Rollen',
'newsletter.edit_newsletter': 'Newsletter bearbeiten',
'newsletter.title_label': 'Titel',
'newsletter.title_placeholder': 'Newsletter-Titel eingeben...',
'newsletter.subject_label': 'Betreffzeile',
'newsletter.subject_placeholder': 'E-Mail-Betreff eingeben...',
'newsletter.banner_url_label': 'Banner-Bild-URL',
'newsletter.banner_url_placeholder': 'https://beispiel.de/banner.jpg',
'newsletter.summary_label': 'Zusammenfassung',
'newsletter.summary_placeholder': 'Kurze Zusammenfassung des Newsletters...',
'newsletter.content_label': 'Inhalt',
'newsletter.heading': 'Überschrift',
'newsletter.heading2': 'Überschrift 2',
'newsletter.heading3': 'Überschrift 3',
'newsletter.paragraph': 'Absatz',
'newsletter.enter_url': 'URL eingeben:',
'newsletter.enter_image_url': 'Bild-URL eingeben:',
'newsletter.edit_mode': 'Bearbeiten',
'newsletter.preview_mode': 'Vorschau',
'newsletter.desktop': 'Desktop',
'newsletter.mobile': 'Mobil',
'newsletter.save_draft': 'Als Entwurf speichern',
'newsletter.untitled': 'Unbenannter Newsletter',
'newsletter.template_section': 'Vorlage',
'newsletter.template_type': 'Vorlagentyp',
'newsletter.category_label': 'Kategorie',
'newsletter.audience_section': 'Zielgruppe',
'newsletter.tags_section': 'Schlagwörter',
'newsletter.tags_placeholder': 'Schlagwort1, Schlagwort2, ...',
'newsletter.tags_hint': 'Durch Komma getrennt',
'newsletter.quick_templates': 'Schnellvorlagen',
'newsletter.send_newsletter': 'Newsletter versenden',
'newsletter.send_description': 'Wählen Sie die Zielgruppe und den Versandzeitpunkt.',
'newsletter.target_audience': 'Zielgruppe',
'newsletter.schedule_send': 'Versand planen (optional)',
'newsletter.schedule_hint': 'Leer lassen für sofortigen Versand.',
'newsletter.schedule': 'Planen',
'newsletter.send_now': 'Jetzt versenden',
'newsletter.section_header': 'Kopfzeile',
'newsletter.section_highlights': 'Highlights',
'newsletter.section_upcoming': 'Kommende Termine',
'newsletter.section_announcements': 'Mitteilungen',
'newsletter.section_details': 'Details',
'newsletter.section_registration': 'Anmeldung',
'newsletter.section_important': 'Wichtig',
'newsletter.section_dates': 'Wichtige Termine',
'newsletter.section_actions': 'Maßnahmen',
'newsletter.template_placeholder': 'Inhalt hier eingeben...',
'newsletter.template_monthly_header': 'Hier ist Ihr monatlicher Schul-Update mit den wichtigsten Neuigkeiten und Terminen.',
'newsletter.template_event_header': 'Lesen Sie alles über unsere bevorstehende Veranstaltung.',
'newsletter.template_parent_header': 'Liebe Eltern, hier sind die wichtigsten Informationen für Sie.',
'newsletter.template_emergency_header': 'WICHTIG: Bitte lesen Sie diese Mitteilung aufmerksam durch.',
'newsletter.no_analytics': 'Noch keine Analysedaten verfügbar.',
'newsletter.no_data': 'Keine Daten verfügbar',
'newsletter.total_sent': 'Gesendet',
'newsletter.opens': 'Öffnungen',
'newsletter.clicks': 'Klicks',
'newsletter.bounces': 'Bounces',
'newsletter.recipients': 'Empfänger',
'newsletter.subscribers': 'Abonnenten',
'newsletter.best_send_time': 'Beste Sendezeit',
'newsletter.best_send_time_desc': 'Die höchste Öffnungsrate wird um {0} Uhr erreicht ({1} Öffnungsrate).',
'newsletter.engagement_trend': 'Engagement-Trend',
'newsletter.template_performance': 'Vorlagen-Performance',
'newsletter.engagement_distribution': 'Engagement-Verteilung',
'newsletter.recent_performance': 'Aktuelle Performance',
'newsletter.subscriber_growth': 'Abonnenten-Wachstum',
};
const en: TranslationDict = {
@@ -11962,6 +12300,344 @@ const en: TranslationDict = {
'se.type_concert': 'Concert',
'se.type_graduation': 'Graduation',
'se.type_fair': 'School Fair',
// Substitute Teacher Management
'nav.substitute-teacher': 'Substitute Management',
'sub.title': 'Substitute Management',
'sub.subtitle': 'Manage substitute teachers, absences & lesson coverage',
'sub.pool': 'Substitute Pool',
'sub.absences': 'Absences',
'sub.schedule': 'Schedule',
'sub.statistics': 'Statistics',
'sub.add_substitute': 'Add Substitute',
'sub.edit_substitute': 'Edit Substitute',
'sub.delete_substitute': 'Remove Substitute',
'sub.first_name': 'First Name',
'sub.last_name': 'Last Name',
'sub.email': 'Email',
'sub.phone': 'Phone',
'sub.qualifications': 'Qualifications',
'sub.subjects': 'Subjects',
'sub.grade_levels': 'Grade Levels',
'sub.availability': 'Availability',
'sub.max_days': 'Max Days/Week',
'sub.rating': 'Rating',
'sub.total_assignments': 'Total Assignments',
'sub.notes': 'Notes',
'sub.active': 'Active',
'sub.inactive': 'Inactive',
'sub.search_substitute': 'Search substitutes...',
'sub.filter_active': 'Active only',
'sub.filter_all': 'All',
'sub.no_substitutes': 'No substitutes found',
'sub.add_from_teachers': 'Add from teacher pool',
'sub.report_absence': 'Report Absence',
'sub.edit_absence': 'Edit Absence',
'sub.delete_absence': 'Delete Absence',
'sub.teacher': 'Teacher',
'sub.absence_type': 'Absence Type',
'sub.type_sick': 'Sick',
'sub.type_personal': 'Personal',
'sub.type_training': 'Training',
'sub.type_other': 'Other',
'sub.start_date': 'Start Date',
'sub.end_date': 'End Date',
'sub.reason': 'Reason',
'sub.status': 'Status',
'sub.status_reported': 'Reported',
'sub.status_covered': 'Covered',
'sub.status_cancelled': 'Cancelled',
'sub.bulk_absence': 'Multi-day absence',
'sub.no_absences': 'No absences found',
'sub.create_assignment': 'Assign Substitute',
'sub.edit_assignment': 'Edit Assignment',
'sub.substitute': 'Substitute',
'sub.class': 'Class',
'sub.subject': 'Subject',
'sub.date': 'Date',
'sub.period': 'Period',
'sub.room': 'Room',
'sub.assignment_status': 'Assignment Status',
'sub.status_pending': 'Pending',
'sub.status_confirmed': 'Confirmed',
'sub.status_completed': 'Completed',
'sub.assignment_cancelled': 'Cancelled',
'sub.no_assignments': 'No assignments found',
'sub.weekly_view': 'Weekly View',
'sub.print_plan': 'Print Plan',
'sub.notify_teachers': 'Notify Teachers',
'sub.suggest_substitute': 'Suggest Substitute',
'sub.auto_assign': 'Auto-assign',
'sub.coverage_rate': 'Coverage Rate',
'sub.absence_frequency': 'Absence Frequency',
'sub.substitute_utilization': 'Substitute Utilization',
'sub.cost_tracking': 'Cost Tracking',
'sub.monthly_trends': 'Monthly Trends',
'sub.absences_per_month': 'Absences per Month',
'sub.assignments_per_status': 'Assignments by Status',
'sub.top_absent_teachers': 'Most Absent Teachers',
'sub.total_absences': 'Total Absences',
'sub.total_substitutes': 'Total Substitutes',
'sub.total_assignments_count': 'Total Assignments',
'sub.avg_rating': 'Average Rating',
'sub.this_week': 'This Week',
'sub.uncovered': 'Uncovered',
'sub.cost_per_day': 'Cost per Day',
'sub.total_cost': 'Total Cost',
'sub.monday': 'Monday',
'sub.tuesday': 'Tuesday',
'sub.wednesday': 'Wednesday',
'sub.thursday': 'Thursday',
'sub.friday': 'Friday',
'sub.saturday': 'Saturday',
'sub.confirm_delete_substitute': 'Are you sure you want to remove this substitute?',
'sub.confirm_delete_absence': 'Are you sure you want to delete this absence?',
'sub.confirm_cancel_assignment': 'Are you sure you want to cancel this assignment?',
'sub.save_success': 'Saved successfully',
'sub.delete_success': 'Deleted successfully',
'sub.error_save': 'Error saving',
'sub.error_delete': 'Error deleting',
'sub.error_load': 'Error loading',
'sub.no_teacher_selected': 'Please select a teacher',
'sub.quick_add': 'Quick Add',
'sub.per_day': 'per day',
'sub.rate_substitute': 'Rate Substitute',
'sub.daily_rate': 'Daily Rate',
'sub.hours': 'Hours',
'sub.lessons': 'Lessons',
// Career Guidance
'nav.student-career': 'Career Guidance',
'career.title': 'Career Guidance',
'career.subtitle': 'Explore and plan your career path',
'career.exploration': 'Career Exploration',
'career.quiz': 'Interest Quiz',
'career.profiles': 'Career Profiles',
'career.clusters': 'Career Clusters',
'career.portfolio': 'Career Portfolio',
'career.planning': 'Career Planning',
'career.appointments': 'Guidance Appointments',
'career.goals': 'Career Goals',
'career.statistics': 'Statistics',
'career.cluster_technology': 'Technology',
'career.cluster_health': 'Health',
'career.cluster_business': 'Business',
'career.cluster_arts': 'Arts & Culture',
'career.cluster_science': 'Science',
'career.cluster_social': 'Social',
'career.path_hauptschule': 'Hauptschule',
'career.path_realschule': 'Realschule',
'career.path_gymnasium': 'Gymnasium',
'career.path_berufsschule': 'Vocational School',
'career.interest_creativity': 'Creativity',
'career.interest_analytical': 'Analytical Thinking',
'career.interest_social_skill': 'Social Skills',
'career.interest_technical': 'Technical Aptitude',
'career.interest_leadership': 'Leadership',
'career.interest_nature': 'Nature & Environment',
'career.interest_communication': 'Communication',
'career.interest_organization': 'Organization',
'career.quiz_title': 'Career Interest Quiz',
'career.quiz_subtitle': 'Discover your interests and strengths',
'career.quiz_question': 'How interested are you in...',
'career.quiz_start': 'Start Quiz',
'career.quiz_retake': 'Retake Quiz',
'career.quiz_result': 'Your Result',
'career.quiz_result_desc': 'Based on your answers',
'career.quiz_not_taken': 'You haven\'t taken the interest quiz yet',
'career.quiz_not_taken_desc': 'Start the quiz to discover your career interests',
'career.profile_title': 'Your Career Profile',
'career.profile_subtitle': 'Interests, strengths, and career path',
'career.interests': 'Interests',
'career.strengths': 'Strengths',
'career.desired_career': 'Desired Career',
'career.education_path': 'Education Path',
'career.career_cluster': 'Career Cluster',
'career.work_experience': 'Work Experience',
'career.volunteer_experience': 'Volunteer Experience',
'career.certifications': 'Certifications & Qualifications',
'career.documents': 'Documents',
'career.add_work_exp': 'Add Work Experience',
'career.add_volunteer': 'Add Volunteer Experience',
'career.add_certification': 'Add Certification',
'career.add_document': 'Add Document',
'career.company': 'Company',
'career.role': 'Role/Position',
'career.start_date': 'Start Date',
'career.end_date': 'End Date',
'career.organization': 'Organization',
'career.name': 'Name',
'career.issuer': 'Issuer',
'career.date': 'Date',
'career.type': 'Type',
'career.appointment_title': 'Guidance Appointment',
'career.appointment_subtitle': 'Schedule a meeting with a career counselor',
'career.schedule_appointment': 'Schedule Appointment',
'career.counselor': 'Counselor',
'career.duration': 'Duration',
'career.appointment_type_guidance': 'Guidance',
'career.appointment_type_career': 'Career Counseling',
'career.appointment_type_academic': 'Academic Advisory',
'career.appointment_type_college': 'College Advisory',
'career.upcoming_appointments': 'Upcoming Appointments',
'career.past_appointments': 'Past Appointments',
'career.no_appointments': 'No appointments yet',
'career.no_appointments_desc': 'Schedule your first guidance appointment',
'career.action_items': 'Action Items',
'career.appointment_notes': 'Appointment Notes',
'career.complete_appointment': 'Complete Appointment',
'career.cancel_appointment': 'Cancel Appointment',
'career.goal_title': 'Career Goals',
'career.goal_subtitle': 'Set and track your goals',
'career.add_goal': 'Add Goal',
'career.goal_short_term': 'Short-term Goal',
'career.goal_long_term': 'Long-term Goal',
'career.goal_academic': 'Academic Goal',
'career.goal_professional': 'Professional Goal',
'career.target_date': 'Target Date',
'career.progress': 'Progress',
'career.milestones': 'Milestones',
'career.add_milestone': 'Add Milestone',
'career.milestone_completed': 'Completed',
'career.milestone_pending': 'Pending',
'career.status_active': 'Active',
'career.status_completed': 'Completed',
'career.status_abandoned': 'Abandoned',
'career.scholarship_finder': 'Scholarship Finder',
'career.application_tracker': 'Application Tracker',
'career.important_dates': 'Important Dates',
'career.no_goals': 'No goals yet',
'career.no_goals_desc': 'Create your first career goal',
'career.career_profile_card': 'Career: {name}',
'career.salary_range': 'Salary Range',
'career.requirements': 'Requirements',
'career.subject_recommendations': 'Subject Recommendations',
'career.skills_needed': 'Skills Needed',
'career.save_profile': 'Save Profile',
'career.edit_profile': 'Edit Profile',
'career.create_profile': 'Create Profile',
'career.no_profile': 'No career profile yet',
'career.no_profile_desc': 'Create your career profile to plan your path',
'career.school_overview': 'School Overview',
'career.students_with_profiles': 'Students with Profiles',
'career.total_goals': 'Total Goals',
'career.avg_progress': 'Avg Progress',
'career.appointments_this_month': 'Appointments This Month',
'career.cluster_distribution': 'Cluster Distribution',
'career.path_distribution': 'Education Path Distribution',
'career.minutes': 'minutes',
'career.no_career_cluster': 'Unassigned',
// ─── School Newsletter ────────────────────────────────────────────
'nav.school-newsletter': 'School Newsletter',
'newsletter.title': 'School Newsletter',
'newsletter.subtitle': 'Create, manage, and distribute school newsletters to your community.',
'newsletter.subtitle_readonly': 'School newsletters and communications.',
'newsletter.tab_newsletters': 'Newsletters',
'newsletter.tab_analytics': 'Analytics',
'newsletter.create_new': 'New Newsletter',
'newsletter.create_first': 'Create Your First Newsletter',
'newsletter.search_placeholder': 'Search newsletters...',
'newsletter.filter_status': 'Status',
'newsletter.filter_category': 'Category',
'newsletter.filter_all': 'All',
'newsletter.no_newsletters': 'No newsletters yet',
'newsletter.no_newsletters_desc': 'Create your first school newsletter.',
'newsletter.duplicate': 'Duplicate',
'newsletter.archive': 'Archive',
'newsletter.send': 'Send',
'newsletter.total_newsletters': 'Total',
'newsletter.status_draft': 'Draft',
'newsletter.status_scheduled': 'Scheduled',
'newsletter.status_sent': 'Sent',
'newsletter.status_archived': 'Archived',
'newsletter.open_rate': 'Open Rate',
'newsletter.click_rate': 'Click Rate',
'newsletter.bounce_rate': 'Bounce Rate',
'newsletter.template_monthly': 'Monthly Update',
'newsletter.template_event': 'Event Recap',
'newsletter.template_parent': 'Parent Newsletter',
'newsletter.template_emergency': 'Emergency Alert',
'newsletter.template_monthly_title': 'Monthly School Update',
'newsletter.template_event_title': 'Event Recap',
'newsletter.template_parent_title': 'Parent Newsletter',
'newsletter.template_emergency_title': 'Important Notice',
'newsletter.category_general': 'General',
'newsletter.category_academic': 'Academic',
'newsletter.category_sports': 'Sports',
'newsletter.category_arts': 'Arts',
'newsletter.category_events': 'Events',
'newsletter.category_community': 'Community',
'newsletter.audience_all': 'Everyone',
'newsletter.audience_teachers': 'Teachers',
'newsletter.audience_parents': 'Parents',
'newsletter.audience_classes': 'Specific Classes',
'newsletter.audience_roles': 'Specific Roles',
'newsletter.edit_newsletter': 'Edit Newsletter',
'newsletter.title_label': 'Title',
'newsletter.title_placeholder': 'Enter newsletter title...',
'newsletter.subject_label': 'Subject Line',
'newsletter.subject_placeholder': 'Enter email subject...',
'newsletter.banner_url_label': 'Banner Image URL',
'newsletter.banner_url_placeholder': 'https://example.com/banner.jpg',
'newsletter.summary_label': 'Summary',
'newsletter.summary_placeholder': 'Brief summary of the newsletter...',
'newsletter.content_label': 'Content',
'newsletter.heading': 'Heading',
'newsletter.heading2': 'Heading 2',
'newsletter.heading3': 'Heading 3',
'newsletter.paragraph': 'Paragraph',
'newsletter.enter_url': 'Enter URL:',
'newsletter.enter_image_url': 'Enter image URL:',
'newsletter.edit_mode': 'Edit',
'newsletter.preview_mode': 'Preview',
'newsletter.desktop': 'Desktop',
'newsletter.mobile': 'Mobile',
'newsletter.save_draft': 'Save Draft',
'newsletter.untitled': 'Untitled Newsletter',
'newsletter.template_section': 'Template',
'newsletter.template_type': 'Template Type',
'newsletter.category_label': 'Category',
'newsletter.audience_section': 'Audience',
'newsletter.tags_section': 'Tags',
'newsletter.tags_placeholder': 'tag1, tag2, ...',
'newsletter.tags_hint': 'Separate with commas',
'newsletter.quick_templates': 'Quick Templates',
'newsletter.send_newsletter': 'Send Newsletter',
'newsletter.send_description': 'Choose the target audience and sending schedule.',
'newsletter.target_audience': 'Target Audience',
'newsletter.schedule_send': 'Schedule Send (optional)',
'newsletter.schedule_hint': 'Leave empty to send immediately.',
'newsletter.schedule': 'Schedule',
'newsletter.send_now': 'Send Now',
'newsletter.section_header': 'Header',
'newsletter.section_highlights': 'Highlights',
'newsletter.section_upcoming': 'Upcoming Events',
'newsletter.section_announcements': 'Announcements',
'newsletter.section_details': 'Details',
'newsletter.section_registration': 'Registration',
'newsletter.section_important': 'Important',
'newsletter.section_dates': 'Key Dates',
'newsletter.section_actions': 'Actions',
'newsletter.template_placeholder': 'Enter content here...',
'newsletter.template_monthly_header': 'Here is your monthly school update with the latest news and upcoming events.',
'newsletter.template_event_header': 'Read all about our upcoming event.',
'newsletter.template_parent_header': 'Dear parents, here is the most important information for you.',
'newsletter.template_emergency_header': 'IMPORTANT: Please read this notice carefully.',
'newsletter.no_analytics': 'No analytics data available yet.',
'newsletter.no_data': 'No data available',
'newsletter.total_sent': 'Total Sent',
'newsletter.opens': 'Opens',
'newsletter.clicks': 'Clicks',
'newsletter.bounces': 'Bounces',
'newsletter.recipients': 'Recipients',
'newsletter.subscribers': 'Subscribers',
'newsletter.best_send_time': 'Best Sending Time',
'newsletter.best_send_time_desc': 'The highest open rate is achieved at {0}:00 ({1} open rate).',
'newsletter.engagement_trend': 'Engagement Trend',
'newsletter.template_performance': 'Template Performance',
'newsletter.engagement_distribution': 'Engagement Distribution',
'newsletter.recent_performance': 'Recent Performance',
'newsletter.subscriber_growth': 'Subscriber Growth',
};
const translations: Record<string, TranslationDict> = { de, en };
+4 -1
View File
@@ -50,7 +50,10 @@ export type ViewName =
| 'report-cards'
| 'data-import-export'
| 'student-wellness'
| 'school-events';
| 'school-events'
| 'substitute-teacher'
| 'student-career'
| 'school-newsletter';
export interface CurrentUser {
id: string;