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>
  );
};