Spaces:
Sleeping
Sleeping
| import { createContext, useContext, useState, ReactNode, useEffect } from 'react'; | |
| type Language = 'en' | 'ar'; | |
| interface LanguageContextType { | |
| language: Language; | |
| setLanguage: (lang: Language) => void; | |
| isRTL: boolean; | |
| } | |
| const LanguageContext = createContext<LanguageContextType | undefined>(undefined); | |
| export function LanguageProvider({ children }: { children: ReactNode }) { | |
| const [language, setLanguageState] = useState<Language>(() => { | |
| const saved = localStorage.getItem('appLanguage'); | |
| return (saved === 'ar' || saved === 'en') ? saved : 'en'; | |
| }); | |
| const setLanguage = (lang: Language) => { | |
| setLanguageState(lang); | |
| localStorage.setItem('appLanguage', lang); | |
| }; | |
| useEffect(() => { | |
| // Update document direction and lang attribute | |
| document.documentElement.dir = language === 'ar' ? 'rtl' : 'ltr'; | |
| document.documentElement.lang = language; | |
| }, [language]); | |
| const isRTL = language === 'ar'; | |
| return ( | |
| <LanguageContext.Provider value={{ language, setLanguage, isRTL }}> | |
| {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; | |
| } | |