Files
breakpilot-lehrer/studio-v2/lib/NativeLanguageContext.tsx
Benjamin Admin ef821831a4 Fix: Fallback to English (not German) for unsupported languages
When a language like PT, FR, IT is selected but has no translation
in exerciseTranslations.ts, the system now falls back to English
instead of German. English is more universally understood.

Applies to: exercise explanations, button labels, instructions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-28 13:37:19 +02:00

62 lines
1.9 KiB
TypeScript

'use client'
import React, { createContext, useContext, useState, useEffect, useCallback } from 'react'
import { exerciseT, type ExerciseKey } from './exerciseTranslations'
const STORAGE_KEY = 'bp_native_language'
interface NativeLanguageState {
nativeLang: string
setNativeLang: (lang: string) => void
isThirdLanguage: boolean
t: (key: ExerciseKey) => string
wordInNative: (translations?: Record<string, any>) => string
}
const NativeLanguageContext = createContext<NativeLanguageState>({
nativeLang: 'de',
setNativeLang: () => {},
isThirdLanguage: false,
t: (key) => key,
wordInNative: () => '',
})
export function NativeLanguageProvider({ children }: { children: React.ReactNode }) {
const [nativeLang, setNativeLangState] = useState('de')
useEffect(() => {
const stored = localStorage.getItem(STORAGE_KEY)
if (stored) setNativeLangState(stored)
}, [])
const setNativeLang = useCallback((lang: string) => {
setNativeLangState(lang)
localStorage.setItem(STORAGE_KEY, lang)
}, [])
const isThirdLanguage = nativeLang !== 'de' && nativeLang !== 'en'
const t = useCallback((key: ExerciseKey): string => {
const entry = exerciseT[key]
if (!entry) return key
return (entry as Record<string, string>)[nativeLang] || entry.en || entry.de || key
}, [nativeLang])
const wordInNative = useCallback((translations?: Record<string, any>): string => {
if (!translations || !isThirdLanguage) return ''
const entry = translations[nativeLang]
if (!entry) return ''
return typeof entry === 'string' ? entry : entry.text || ''
}, [nativeLang, isThirdLanguage])
return (
<NativeLanguageContext.Provider value={{ nativeLang, setNativeLang, isThirdLanguage, t, wordInNative }}>
{children}
</NativeLanguageContext.Provider>
)
}
export function useNativeLanguage() {
return useContext(NativeLanguageContext)
}