- Introduced LanguageProvider to manage language state and translations. - Updated components (Header, Hero, About, Skills, Projects, Education, Contact) to utilize translations. - Added language toggle button in the header for switching between French and English. - Enhanced styling for language toggle button in the header.
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { useState, useEffect } from 'react';
|
|
import { LanguageProvider } from './contexts/LanguageContext';
|
|
import Header from './components/Header';
|
|
import Hero from './components/Hero';
|
|
import About from './components/About';
|
|
import Skills from './components/Skills';
|
|
import Projects from './components/Projects';
|
|
import Education from './components/Education';
|
|
import Contact from './components/Contact';
|
|
import './styles/main.scss';
|
|
|
|
function App() {
|
|
const [darkMode, setDarkMode] = useState(false);
|
|
|
|
useEffect(() => {
|
|
const savedTheme = localStorage.getItem('darkMode');
|
|
if (savedTheme) {
|
|
setDarkMode(JSON.parse(savedTheme));
|
|
} else {
|
|
// Détection automatique du thème préféré de l'utilisateur
|
|
setDarkMode(window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
localStorage.setItem('darkMode', JSON.stringify(darkMode));
|
|
document.documentElement.setAttribute('data-theme', darkMode ? 'dark' : 'light');
|
|
}, [darkMode]);
|
|
|
|
const toggleDarkMode = () => {
|
|
setDarkMode(!darkMode);
|
|
};
|
|
|
|
return (
|
|
<LanguageProvider>
|
|
<div className={`app ${darkMode ? 'dark' : 'light'}`}>
|
|
<Header darkMode={darkMode} toggleDarkMode={toggleDarkMode} />
|
|
<main>
|
|
<Hero />
|
|
<About />
|
|
<Skills />
|
|
<Projects />
|
|
<Education />
|
|
<Contact />
|
|
</main>
|
|
</div>
|
|
</LanguageProvider>
|
|
);
|
|
}
|
|
|
|
export default App;
|