| import { createContext, useContext, useState, useMemo } from 'react'; | |
| import { translations, Language, TranslationKey } from './i18n'; | |
| interface LanguageContextType { | |
| language: Language; | |
| setLanguage: (language: Language) => void; | |
| t: (key: TranslationKey) => string; | |
| } | |
| const LanguageContext = createContext<LanguageContextType | undefined>(undefined); | |
| export function LanguageProvider({ children }: { children: React.ReactNode }) { | |
| const [language, setLanguage] = useState<Language>('zh'); | |
| const t = useMemo( | |
| () => (key: TranslationKey) => { | |
| return translations[language][key] || key; | |
| }, | |
| [language] | |
| ); | |
| const value = { | |
| language, | |
| setLanguage, | |
| t, | |
| }; | |
| return <LanguageContext.Provider value={value}>{children}</LanguageContext.Provider>; | |
| } | |
| export function useLanguage() { | |
| const context = useContext(LanguageContext); | |
| if (context === undefined) { | |
| throw new Error('useLanguage must be used within a LanguageProvider'); | |
| } | |
| return context; | |
| } | |