Galerie photo : - Ajout du layout photo avec slideshow plein écran - Navigation par catégories (portraits, paysages, nature, etc.) - Section "Fil Photo" avec posts illustrés (photoBlogPosts) - Lightbox pour les albums de catégories - Composants : Slideshow, CategoryNav, CategoryGrid, Lightbox, MasonryGallery Nettoyage : - Suppression du contenu démo du template (posts, images, about) - Consolidation src/collections/ dans src/data/ - Suppression du config.js dupliqué (garde config.ts) - Nettoyage des assets inutilisés (posts/, experiences/) Corrections : - Favicon récupéré du site actuel - Chemins favicon corrigés dans les layouts UI : - Page d'accueil mise à jour - Header/Footer simplifiés - Nouvelle page À propos
75 lines
No EOL
1.7 KiB
Text
75 lines
No EOL
1.7 KiB
Text
---
|
|
// Mapping des URLs entre langues
|
|
const translations: Record<string, Record<string, string>> = {
|
|
'/a-propos': {
|
|
fr: '/a-propos',
|
|
en: '/en/about',
|
|
ar: '/ar/نبذة-عني'
|
|
},
|
|
'/en/about': {
|
|
fr: '/a-propos',
|
|
en: '/en/about',
|
|
ar: '/ar/نبذة-عني'
|
|
},
|
|
'/ar/نبذة-عني': {
|
|
fr: '/a-propos',
|
|
en: '/en/about',
|
|
ar: '/ar/نبذة-عني'
|
|
},
|
|
// Page d'accueil
|
|
'/': {
|
|
fr: '/',
|
|
en: '/en',
|
|
ar: '/ar'
|
|
},
|
|
'/en': {
|
|
fr: '/',
|
|
en: '/en',
|
|
ar: '/ar'
|
|
},
|
|
'/ar': {
|
|
fr: '/',
|
|
en: '/en',
|
|
ar: '/ar'
|
|
}
|
|
};
|
|
|
|
// Détection de la langue courante
|
|
const pathname = Astro.url.pathname.replace(/\/$/, '') || '/';
|
|
const currentLang = pathname.startsWith('/en') ? 'en' : pathname.startsWith('/ar') ? 'ar' : 'fr';
|
|
|
|
// Récupération des liens traduits ou fallback vers les pages d'accueil
|
|
const links = translations[pathname] || {
|
|
fr: '/',
|
|
en: '/en',
|
|
ar: '/ar'
|
|
};
|
|
|
|
const languages = [
|
|
{ code: 'fr', label: 'FR', name: 'Français' },
|
|
{ code: 'en', label: 'EN', name: 'English' },
|
|
{ code: 'ar', label: 'ع', name: 'العربية' }
|
|
];
|
|
---
|
|
|
|
<div class="language-switcher flex items-center gap-1 text-sm">
|
|
{languages.map((lang, index) => (
|
|
<>
|
|
{index > 0 && <span class="text-gray-400 dark:text-neutral-600">·</span>}
|
|
{lang.code === currentLang ? (
|
|
<span class="font-semibold text-gray-800 dark:text-neutral-200" title={lang.name}>
|
|
{lang.label}
|
|
</span>
|
|
) : (
|
|
<a
|
|
href={links[lang.code]}
|
|
class="text-gray-500 dark:text-neutral-400 hover:text-gray-800 dark:hover:text-neutral-200 transition-colors"
|
|
title={lang.name}
|
|
hreflang={lang.code}
|
|
>
|
|
{lang.label}
|
|
</a>
|
|
)}
|
|
</>
|
|
))}
|
|
</div> |