deepsite / src /components /LanguageSelector.astro
archjayte's picture
Upload 35 files
afa9e42 verified
raw
history blame
2.6 kB
---
import { languages, getLangFromUrl } from '../i18n/ui';
import { Globe } from 'lucide-astro';
const lang = getLangFromUrl(Astro.url);
const currentPath = Astro.url.pathname;
---
<div class="relative" data-language-selector>
<button class="flex items-center space-x-2 rtl:space-x-reverse text-white hover:text-blueprint-accent transition-colors duration-300 p-2 rounded-lg hover:bg-white/10" data-language-button>
<Globe class="w-5 h-5" />
<span class="text-sm font-medium hidden sm:block">{languages[lang]}</span>
</button>
<div class="absolute top-full right-0 mt-2 w-32 bg-white dark:bg-blueprint-primary rounded-lg shadow-xl border border-blueprint-accent/20 hidden z-50" data-language-dropdown>
<div class="py-2">
{Object.entries(languages).map(([code, name]) => {
return (
<button
class={`block w-full text-left px-4 py-2 text-sm transition-colors duration-200 ${
code === lang
? 'bg-blueprint-accent text-white'
: 'text-blueprint-dark dark:text-white hover:bg-blueprint-light dark:hover:bg-blueprint-accent/20'
}`}
data-lang={code}
>
{name}
</button>
);
})}
</div>
</div>
</div>
<script>
// Language selector dropdown
const languageSelector = document.querySelector('[data-language-selector]');
const languageButton = document.querySelector('[data-language-button]');
const languageDropdown = document.querySelector('[data-language-dropdown]');
languageButton?.addEventListener('click', (e) => {
e.stopPropagation();
languageDropdown?.classList.toggle('hidden');
});
document.addEventListener('click', (e) => {
if (!languageSelector?.contains(e.target as Node)) {
languageDropdown?.classList.add('hidden');
}
});
// Handle language selection
languageDropdown?.addEventListener('click', (e) => {
const target = e.target as HTMLElement;
const selectedLang = target.getAttribute('data-lang');
if (selectedLang) {
const currentPath = window.location.pathname;
let newPath;
if (selectedLang === 'ar') {
// Going to Arabic (default) - remove /en prefix
newPath = currentPath === '/en' || currentPath === '/en/' ? '/' : currentPath.replace('/en', '') || '/';
} else {
// Going to English - add /en prefix
newPath = currentPath === '/' ? '/en' : `/en${currentPath}`;
}
window.location.href = newPath;
}
languageDropdown.classList.add('hidden');
});
</script>