File size: 1,758 Bytes
e2eff86 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import React, { createContext, useContext, useState, useEffect } from 'react';
const LanguageContext = createContext();
export const useLanguage = () => {
const context = useContext(LanguageContext);
if (!context) {
throw new Error('useLanguage must be used within a LanguageProvider');
}
return context;
};
export const LanguageProvider = ({ children }) => {
const [currentLanguage, setCurrentLanguage] = useState('en');
useEffect(() => {
// Load language preference from localStorage on initial load
const savedLanguage = localStorage.getItem('preferredLanguage') || 'en';
setCurrentLanguage(savedLanguage);
}, []);
const changeLanguage = (newLanguage) => {
if (newLanguage !== currentLanguage) {
setCurrentLanguage(newLanguage);
localStorage.setItem('preferredLanguage', newLanguage);
// Dispatch a custom event that other components can listen to
window.dispatchEvent(new CustomEvent('languageChange', {
detail: { newLanguage }
}));
}
};
const value = {
currentLanguage,
changeLanguage,
t: (key) => {
// Simple translation function - in a real app, this would use proper translation files
const translations = {
'en': {
'language.english': 'English',
'language.urdu': 'Urdu',
'toggle.language': 'Toggle Language'
},
'ur': {
'language.english': 'انگریزی',
'language.urdu': 'اردو',
'toggle.language': 'زبان تبدیل کریں'
}
};
return translations[currentLanguage]?.[key] || key;
}
};
return (
<LanguageContext.Provider value={value}>
{children}
</LanguageContext.Provider>
);
}; |