import React from 'react'; import { translations, Language } from '../utils/translations'; interface LanguageContextType { language: Language; setLanguage: (lang: Language) => void; t: (key: keyof typeof translations['zh'], ...args: any[]) => string; } const LanguageContext = React.createContext(undefined); export const LanguageProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [language, setLanguage] = React.useState(() => { const saved = localStorage.getItem('userLanguage'); return (saved as Language) || 'en'; }); const handleSetLanguage = (lang: Language) => { setLanguage(lang); localStorage.setItem('userLanguage', lang); }; const t = (key: keyof typeof translations['zh'], ...args: any[]) => { let str = translations[language][key] || key; if (args.length > 0) { args.forEach((arg, i) => { str = str.replace(new RegExp(`\\$${i + 1}`, 'g'), String(arg)); }); } return str; }; return React.createElement( LanguageContext.Provider, { value: { language, setLanguage: handleSetLanguage, t } }, children ); }; export const useLanguage = () => { const context = React.useContext(LanguageContext); if (!context) { throw new Error('useLanguage must be used within a LanguageProvider'); } return context; };