Remove Companion module entirely from admin-v2. Rebuild in studio-v2 as a focused lesson timer (no dashboard mode). Direct flow: start → active → ended. Fix timer bug where lastTickRef reset prevented countdown. Add companion link to Sidebar and i18n translations. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
400 lines
15 KiB
TypeScript
400 lines
15 KiB
TypeScript
/**
|
||
* 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_companion: 'Companion', 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_companion: 'Companion', 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_companion: 'Companion', 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_companion: 'المرافق', 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_companion: 'Компаньон', 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_companion: 'Компаньйон', 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_companion: 'Companion', 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
|
||
}
|