Spaces:
Sleeping
Sleeping
| 'use client'; | |
| import React, { createContext, useContext, useState, useEffect } from 'react'; | |
| import { Language, translations } from '@/lib/translations'; | |
| export type AIEngine = 'primary' | 'fallback' | 'advanced'; | |
| interface LanguageContextType { | |
| lang: Language; | |
| setLang: (lang: Language) => void; | |
| aiEngine: AIEngine; | |
| setAiEngine: (engine: AIEngine) => void; | |
| t: typeof translations.ar; | |
| } | |
| const LanguageContext = createContext<LanguageContextType | undefined>(undefined); | |
| export const LanguageProvider = ({ children }: { children: React.ReactNode }) => { | |
| const [lang, setLangState] = useState<Language>('ar'); | |
| const [aiEngine, setAiEngineState] = useState<AIEngine>('primary'); | |
| useEffect(() => { | |
| const savedLang = localStorage.getItem('proto-lang') as Language; | |
| if (savedLang) setLangState(savedLang); | |
| const savedEngine = localStorage.getItem('proto-ai-engine') as AIEngine; | |
| if (savedEngine) setAiEngineState(savedEngine); | |
| // ضبط اتجاه النص | |
| document.documentElement.dir = (savedLang || 'ar') === 'ar' ? 'rtl' : 'ltr'; | |
| document.documentElement.lang = (savedLang || 'ar'); | |
| }, []); | |
| const setLang = (newLang: Language) => { | |
| setLangState(newLang); | |
| localStorage.setItem('proto-lang', newLang); | |
| document.documentElement.dir = newLang === 'ar' ? 'rtl' : 'ltr'; | |
| document.documentElement.lang = newLang; | |
| }; | |
| const setAiEngine = (newEngine: AIEngine) => { | |
| setAiEngineState(newEngine); | |
| localStorage.setItem('proto-ai-engine', newEngine); | |
| console.log(`[SETTINGS]: AI Engine switched to: ${newEngine}`); | |
| }; | |
| const t = translations[lang]; | |
| return ( | |
| <LanguageContext.Provider value={{ lang, setLang, aiEngine, setAiEngine, t }}> | |
| {children} | |
| </LanguageContext.Provider> | |
| ); | |
| }; | |
| export const useLanguage = () => { | |
| const context = useContext(LanguageContext); | |
| if (!context) throw new Error('useLanguage must be used within LanguageProvider'); | |
| return context; | |
| }; | |