fix: Restore all files lost during destructive rebase

A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.

This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).

Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-02-09 09:51:32 +01:00
parent f7487ee240
commit bfdaf63ba9
2009 changed files with 749983 additions and 1731 deletions

399
studio-v2/lib/i18n.ts Normal file
View File

@@ -0,0 +1,399 @@
/**
* BreakPilot Studio v2 - i18n Module
*
* 7 Sprachen: de, en, tr, ar, ru, uk, pl
* localStorage-Persistenz mit Key 'bp_language'
* RTL-Support fuer Arabisch
*/
export type Language = 'de' | 'en' | 'tr' | 'ar' | 'ru' | 'uk' | 'pl'
export const availableLanguages: Record<Language, { name: string; flag: string; rtl?: boolean }> = {
de: { name: 'Deutsch', flag: '🇩🇪' },
en: { name: 'English', flag: '🇬🇧' },
tr: { name: 'Türkçe', flag: '🇹🇷' },
ar: { name: 'العربية', flag: '🇸🇦', rtl: true },
ru: { name: 'Русский', flag: '🇷🇺' },
uk: { name: 'Українська', flag: '🇺🇦' },
pl: { name: 'Polski', flag: '🇵🇱' },
}
export const defaultLanguage: Language = 'de'
// Uebersetzungen fuer Studio v2 UI
export const translations: Record<Language, Record<string, string>> = {
de: {
// Kopfleiste
dashboard: 'Dashboard',
dashboard_subtitle: 'Willkommen zurück! Hier ist Ihr Überblick.',
search_placeholder: 'Suchen...',
// Sidebar Navigation
nav_dashboard: 'Dashboard',
nav_dokumente: 'Dokumente',
nav_klausuren: 'Klausuren',
nav_analytics: 'Analysen',
nav_vokabeln: 'Vokabeln',
nav_worksheet_editor: 'Arbeitsblätter',
nav_worksheet_cleanup: 'Bereinigung',
nav_korrektur: 'Korrekturen',
nav_compliance_pipeline: 'Compliance Pipeline',
nav_meet: 'Meet',
nav_alerts: 'Alerts',
nav_alerts_b2b: 'B2B Alerts',
nav_messages: 'Nachrichten',
nav_settings: 'Einstellungen',
// Stats Kacheln
stat_open_corrections: 'Offene Korrekturen',
stat_completed_week: 'Erledigt (Woche)',
stat_average: 'Durchschnitt',
stat_time_saved: 'Zeitersparnis',
// Klausuren
recent_klausuren: 'Aktuelle Klausuren',
show_all: 'Alle anzeigen',
students: 'Schüler',
status_in_progress: 'In Bearbeitung',
status_completed: 'Abgeschlossen',
// Quick Actions
quick_actions: 'Schnellaktionen',
create_klausur: 'Neue Klausur erstellen',
upload_work: 'Arbeiten hochladen',
magic_help: 'Magic Help',
fairness_check: 'Fairness-Check',
// AI Tipp
ai_tip: 'KI-Tipp',
ai_tip_text: '3 Klausuren warten auf Fairness-Check. Möchten Sie diese jetzt prüfen?',
// Footer / Common
imprint: 'Impressum',
privacy: 'Datenschutz',
contact: 'Kontakt',
legal: 'AGB',
cookie_settings: 'Cookie-Einstellungen',
copyright: '© 2025 BreakPilot. Alle Rechte vorbehalten.',
back_to_selection: 'Zurück zur Design-Auswahl',
language: 'Sprache',
// Theme
theme_light: 'Hell',
theme_dark: 'Dunkel',
// User Menu
logout: 'Abmelden',
},
en: {
dashboard: 'Dashboard',
dashboard_subtitle: 'Welcome back! Here is your overview.',
search_placeholder: 'Search...',
nav_dashboard: 'Dashboard',
nav_dokumente: 'Documents',
nav_klausuren: 'Exams',
nav_analytics: 'Analytics',
nav_vokabeln: 'Vocabulary',
nav_worksheet_editor: 'Worksheets',
nav_worksheet_cleanup: 'Cleanup',
nav_korrektur: 'Corrections',
nav_compliance_pipeline: 'Compliance Pipeline',
nav_meet: 'Meet',
nav_alerts: 'Alerts',
nav_alerts_b2b: 'B2B Alerts',
nav_messages: 'Messages',
nav_settings: 'Settings',
stat_open_corrections: 'Open Corrections',
stat_completed_week: 'Completed (Week)',
stat_average: 'Average',
stat_time_saved: 'Time Saved',
recent_klausuren: 'Recent Exams',
show_all: 'Show all',
students: 'Students',
status_in_progress: 'In Progress',
status_completed: 'Completed',
quick_actions: 'Quick Actions',
create_klausur: 'Create New Exam',
upload_work: 'Upload Papers',
magic_help: 'Magic Help',
fairness_check: 'Fairness Check',
ai_tip: 'AI Tip',
ai_tip_text: '3 exams are waiting for fairness check. Would you like to review them now?',
imprint: 'Imprint',
privacy: 'Privacy',
contact: 'Contact',
legal: 'Terms',
cookie_settings: 'Cookie Settings',
copyright: '© 2025 BreakPilot. All rights reserved.',
back_to_selection: 'Back to Design Selection',
language: 'Language',
theme_light: 'Light',
theme_dark: 'Dark',
logout: 'Log out',
},
tr: {
dashboard: 'Kontrol Paneli',
dashboard_subtitle: 'Tekrar hoş geldiniz! İşte genel bakışınız.',
search_placeholder: 'Ara...',
nav_dashboard: 'Kontrol Paneli',
nav_dokumente: 'Belgeler',
nav_klausuren: 'Sınavlar',
nav_analytics: 'Analizler',
nav_vokabeln: 'Kelimeler',
nav_worksheet_editor: 'Çalışma Sayfaları',
nav_worksheet_cleanup: 'Temizleme',
nav_korrektur: 'Düzeltmeler',
nav_compliance_pipeline: 'Uyum Boru Hattı',
nav_meet: 'Meet',
nav_alerts: 'Uyarılar',
nav_alerts_b2b: 'B2B Uyarılar',
nav_messages: 'Mesajlar',
nav_settings: 'Ayarlar',
stat_open_corrections: 'Açık Düzeltmeler',
stat_completed_week: 'Tamamlanan (Hafta)',
stat_average: 'Ortalama',
stat_time_saved: 'Kazanılan Zaman',
recent_klausuren: 'Son Sınavlar',
show_all: 'Tümünü göster',
students: 'Öğrenciler',
status_in_progress: 'Devam Ediyor',
status_completed: 'Tamamlandı',
quick_actions: 'Hızlı İşlemler',
create_klausur: 'Yeni Sınav Oluştur',
upload_work: 'Kağıt Yükle',
magic_help: 'Magic Help',
fairness_check: 'Adillik Kontrolü',
ai_tip: 'Yapay Zeka İpucu',
ai_tip_text: '3 sınav adillik kontrolü bekliyor. Şimdi incelemek ister misiniz?',
imprint: 'Künye',
privacy: 'Gizlilik',
contact: 'İletişim',
legal: 'Kullanım Koşulları',
cookie_settings: 'Çerez Ayarları',
copyright: '© 2025 BreakPilot. Tüm hakları saklıdır.',
back_to_selection: 'Tasarım Seçimine Dön',
language: 'Dil',
theme_light: 'Açık',
theme_dark: 'Koyu',
logout: ıkış yap',
},
ar: {
dashboard: 'لوحة التحكم',
dashboard_subtitle: 'مرحباً بعودتك! إليك نظرة عامة.',
search_placeholder: 'بحث...',
nav_dashboard: 'لوحة التحكم',
nav_dokumente: 'المستندات',
nav_klausuren: 'الامتحانات',
nav_analytics: 'التحليلات',
nav_vokabeln: 'المفردات',
nav_worksheet_editor: 'أوراق العمل',
nav_worksheet_cleanup: 'تنظيف',
nav_korrektur: 'التصحيحات',
nav_compliance_pipeline: 'خط أنابيب الامتثال',
nav_meet: 'اجتماع',
nav_alerts: 'تنبيهات',
nav_alerts_b2b: 'تنبيهات الشركات',
nav_messages: 'الرسائل',
nav_settings: 'الإعدادات',
stat_open_corrections: 'التصحيحات المفتوحة',
stat_completed_week: 'المكتمل (أسبوع)',
stat_average: 'المتوسط',
stat_time_saved: 'الوقت الموفر',
recent_klausuren: 'الامتحانات الأخيرة',
show_all: 'عرض الكل',
students: 'الطلاب',
status_in_progress: 'قيد التنفيذ',
status_completed: 'مكتمل',
quick_actions: 'إجراءات سريعة',
create_klausur: 'إنشاء امتحان جديد',
upload_work: 'تحميل الأوراق',
magic_help: 'المساعدة السحرية',
fairness_check: 'فحص العدالة',
ai_tip: 'نصيحة الذكاء الاصطناعي',
ai_tip_text: '3 امتحانات تنتظر فحص العدالة. هل تريد مراجعتها الآن؟',
imprint: 'البصمة',
privacy: 'الخصوصية',
contact: 'اتصل بنا',
legal: 'الشروط والأحكام',
cookie_settings: 'إعدادات ملفات تعريف الارتباط',
copyright: '© 2025 BreakPilot. جميع الحقوق محفوظة.',
back_to_selection: 'العودة لاختيار التصميم',
language: 'اللغة',
theme_light: 'فاتح',
theme_dark: 'داكن',
logout: 'تسجيل الخروج',
},
ru: {
dashboard: 'Панель управления',
dashboard_subtitle: 'С возвращением! Вот ваш обзор.',
search_placeholder: 'Поиск...',
nav_dashboard: 'Панель управления',
nav_dokumente: 'Документы',
nav_klausuren: 'Экзамены',
nav_analytics: 'Аналитика',
nav_vokabeln: 'Словарь',
nav_worksheet_editor: 'Рабочие листы',
nav_worksheet_cleanup: 'Очистка',
nav_korrektur: 'Проверки',
nav_compliance_pipeline: 'Пайплайн соответствия',
nav_meet: 'Встреча',
nav_alerts: 'Оповещения',
nav_alerts_b2b: 'B2B оповещения',
nav_messages: 'Сообщения',
nav_settings: 'Настройки',
stat_open_corrections: 'Открытые проверки',
stat_completed_week: 'Завершено (неделя)',
stat_average: 'Средний балл',
stat_time_saved: 'Сэкономлено времени',
recent_klausuren: 'Последние экзамены',
show_all: 'Показать все',
students: 'Студенты',
status_in_progress: 'В работе',
status_completed: 'Завершено',
quick_actions: 'Быстрые действия',
create_klausur: 'Создать экзамен',
upload_work: 'Загрузить работы',
magic_help: 'Magic Help',
fairness_check: 'Проверка справедливости',
ai_tip: 'Совет ИИ',
ai_tip_text: '3 экзамена ждут проверки справедливости. Хотите проверить сейчас?',
imprint: 'Импрессум',
privacy: 'Конфиденциальность',
contact: 'Контакт',
legal: 'Условия использования',
cookie_settings: 'Настройки cookie',
copyright: '© 2025 BreakPilot. Все права защищены.',
back_to_selection: 'Вернуться к выбору дизайна',
language: 'Язык',
theme_light: 'Светлая',
theme_dark: 'Тёмная',
logout: 'Выйти',
},
uk: {
dashboard: 'Панель керування',
dashboard_subtitle: 'З поверненням! Ось ваш огляд.',
search_placeholder: 'Пошук...',
nav_dashboard: 'Панель керування',
nav_dokumente: 'Документи',
nav_klausuren: 'Іспити',
nav_analytics: 'Аналітика',
nav_vokabeln: 'Словник',
nav_worksheet_editor: 'Робочі аркуші',
nav_worksheet_cleanup: 'Очищення',
nav_korrektur: 'Перевірки',
nav_compliance_pipeline: 'Пайплайн відповідності',
nav_meet: 'Зустріч',
nav_alerts: 'Сповіщення',
nav_alerts_b2b: 'B2B сповіщення',
nav_messages: 'Повідомлення',
nav_settings: 'Налаштування',
stat_open_corrections: 'Відкриті перевірки',
stat_completed_week: 'Завершено (тиждень)',
stat_average: 'Середній бал',
stat_time_saved: 'Збережено часу',
recent_klausuren: 'Останні іспити',
show_all: 'Показати все',
students: 'Студенти',
status_in_progress: 'В роботі',
status_completed: 'Завершено',
quick_actions: 'Швидкі дії',
create_klausur: 'Створити іспит',
upload_work: 'Завантажити роботи',
magic_help: 'Magic Help',
fairness_check: 'Перевірка справедливості',
ai_tip: 'Порада ШІ',
ai_tip_text: '3 іспити чекають перевірки справедливості. Бажаєте перевірити зараз?',
imprint: 'Імпресум',
privacy: 'Конфіденційність',
contact: 'Контакт',
legal: 'Умови використання',
cookie_settings: 'Налаштування cookie',
copyright: '© 2025 BreakPilot. Всі права захищені.',
back_to_selection: 'Повернутися до вибору дизайну',
language: 'Мова',
theme_light: 'Світла',
theme_dark: 'Темна',
logout: 'Вийти',
},
pl: {
dashboard: 'Panel główny',
dashboard_subtitle: 'Witaj ponownie! Oto twój przegląd.',
search_placeholder: 'Szukaj...',
nav_dashboard: 'Panel główny',
nav_dokumente: 'Dokumenty',
nav_klausuren: 'Egzaminy',
nav_analytics: 'Analizy',
nav_vokabeln: 'Słownictwo',
nav_worksheet_editor: 'Arkusze robocze',
nav_worksheet_cleanup: 'Czyszczenie',
nav_korrektur: 'Korekty',
nav_compliance_pipeline: 'Pipeline zgodności',
nav_meet: 'Spotkanie',
nav_alerts: 'Powiadomienia',
nav_alerts_b2b: 'Powiadomienia B2B',
nav_messages: 'Wiadomości',
nav_settings: 'Ustawienia',
stat_open_corrections: 'Otwarte korekty',
stat_completed_week: 'Ukończone (tydzień)',
stat_average: 'Średnia',
stat_time_saved: 'Zaoszczędzony czas',
recent_klausuren: 'Ostatnie egzaminy',
show_all: 'Pokaż wszystkie',
students: 'Uczniowie',
status_in_progress: 'W trakcie',
status_completed: 'Ukończone',
quick_actions: 'Szybkie akcje',
create_klausur: 'Utwórz egzamin',
upload_work: 'Prześlij prace',
magic_help: 'Magic Help',
fairness_check: 'Kontrola sprawiedliwości',
ai_tip: 'Wskazówka AI',
ai_tip_text: '3 egzaminy czekają na kontrolę sprawiedliwości. Chcesz je teraz sprawdzić?',
imprint: 'Impressum',
privacy: 'Prywatność',
contact: 'Kontakt',
legal: 'Regulamin',
cookie_settings: 'Ustawienia plików cookie',
copyright: '© 2025 BreakPilot. Wszelkie prawa zastrzeżone.',
back_to_selection: 'Powrót do wyboru projektu',
language: 'Język',
theme_light: 'Jasny',
theme_dark: 'Ciemny',
logout: 'Wyloguj się',
},
}
// LocalStorage Key
const STORAGE_KEY = 'bp_language'
// Aktuelle Sprache aus localStorage oder default
export function getStoredLanguage(): Language {
if (typeof window === 'undefined') return defaultLanguage
const stored = localStorage.getItem(STORAGE_KEY)
if (stored && stored in availableLanguages) {
return stored as Language
}
return defaultLanguage
}
// Sprache speichern
export function setStoredLanguage(lang: Language): void {
if (typeof window === 'undefined') return
localStorage.setItem(STORAGE_KEY, lang)
}
// Uebersetzung abrufen
export function t(key: string, lang: Language): string {
return translations[lang][key] || translations[defaultLanguage][key] || key
}
// Ist die Sprache RTL?
export function isRTL(lang: Language): boolean {
return availableLanguages[lang]?.rtl === true
}