feat: add language context and translation support

- 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.
This commit is contained in:
Dayron
2025-11-12 18:36:51 +01:00
parent a4b4423ff4
commit e8722cf25d
10 changed files with 468 additions and 130 deletions

View File

@@ -1,12 +1,15 @@
import { motion } from 'framer-motion';
import { User, Heart, Target, Coffee } from 'lucide-react';
import { useLanguage } from '../contexts/LanguageContext';
const About = () => {
const { t } = useLanguage();
const stats = [
{ icon: <User size={24} />, value: "3ème", label: "Année d'études" },
{ icon: <Heart size={24} />, value: "100%", label: "Passion" },
{ icon: <Target size={24} />, value: "∞", label: "Objectifs" },
{ icon: <Coffee size={24} />, value: "☕", label: "Fuel quotidien" }
{ icon: <User size={24} />, value: t('about.stats.year'), label: t('about.stats.yearLabel') },
{ icon: <Heart size={24} />, value: t('about.stats.passion'), label: t('about.stats.passionLabel') },
{ icon: <Target size={24} />, value: t('about.stats.goals'), label: t('about.stats.goalsLabel') },
{ icon: <Coffee size={24} />, value: t('about.stats.fuel'), label: t('about.stats.fuelLabel') }
];
const containerVariants = {
@@ -42,9 +45,9 @@ const About = () => {
transition={{ duration: 0.8 }}
viewport={{ once: true }}
>
<h2 className="section-title">À propos de moi</h2>
<h2 className="section-title">{t('about.title')}</h2>
<p className="section-subtitle">
Découvrez qui je suis et ce qui me passionne
{t('about.subtitle')}
</p>
</motion.div>
@@ -57,32 +60,23 @@ const About = () => {
viewport={{ once: true }}
>
<motion.div className="about-card" variants={itemVariants}>
<h3>Mon parcours</h3>
<h3>{t('about.journey.title')}</h3>
<p>
Actuellement en 3ème année de <strong>Technologies de l'Informatique</strong> à la
HELHa de Tournai, je me passionne pour le développement d'applications et les
nouvelles technologies. Mon parcours m'a permis d'acquérir une solide base
technique et une approche méthodique du développement.
{t('about.journey.content')}
</p>
</motion.div>
<motion.div className="about-card" variants={itemVariants}>
<h3>Ma passion</h3>
<h3>{t('about.passion.title')}</h3>
<p>
Ce qui m'anime le plus, c'est la création de solutions innovantes qui résolvent
des problèmes réels. J'aime particulièrement le développement mobile avec
<strong> Flutter</strong> et le développement web moderne avec
<strong> React</strong> et <strong> TypeScript</strong>.
{t('about.passion.content')}
</p>
</motion.div>
<motion.div className="about-card" variants={itemVariants}>
<h3>Mes objectifs</h3>
<h3>{t('about.goals.title')}</h3>
<p>
Je cherche constamment à améliorer mes compétences et à rester à jour avec
les dernières tendances technologiques. Mon objectif est de devenir un
développeur full-stack polyvalent et de contribuer à des projets qui ont
un impact positif.
{t('about.goals.content')}
</p>
</motion.div>
</motion.div>
@@ -123,13 +117,11 @@ const About = () => {
viewport={{ once: true }}
>
<div className="highlight-content">
<h3>En quelques mots</h3>
<h3>{t('about.quote.title')}</h3>
<p>
"La technologie n'est rien. Ce qui est important, c'est d'avoir la foi en les gens,
qu'ils soient fondamentalement bons et intelligents, et si vous leur donnez des outils,
ils feront des choses merveilleuses avec."
"{t('about.quote.content')}"
</p>
<cite>- Steve Jobs</cite>
<cite>- {t('about.quote.author')}</cite>
</div>
</motion.div>
</div>