'use client' import { useLocale } from 'next-intl' import { usePathname, useRouter } from '@/i18n/navigation' import { routing } from '@/i18n/routing' import { useState, useRef, useEffect } from 'react' import { useClickOutside } from '@/app/hooks/useClickOutside'; export default function LanguageSwitcher() { const locale = useLocale(); const router = useRouter(); const pathname = usePathname(); const [isOpen, setIsOpen] = useState(false); const dropdownRef = useRef(null); const switchLanguage = (newLocale: string) => { const currentLang = document.documentElement.getAttribute('lang') || 'ru'; router.replace(pathname, { locale: newLocale }); setIsOpen(false); const observer = new MutationObserver((mutations) => { const newLang = document.documentElement.getAttribute('lang') if (newLang && newLang !== currentLang) { observer.disconnect(); if (window.location.protocol === 'http:' && process.env.NODE_ENV !== 'development') { setTimeout(() => window.location.reload(), 100) } } }) if (window.location.protocol === 'http:' && process.env.NODE_ENV !== 'development') { observer.observe(document.documentElement, { attributes: true, attributeFilter: ['lang', 'dir'] }) } router.replace(pathname, { locale: newLocale }) setTimeout(() => { observer.disconnect(); }, 3000) } useClickOutside( dropdownRef, () => { setIsOpen(false); }, isOpen ); useEffect(() => { const handleEscape = (event: KeyboardEvent) => { if (event.key === 'Escape') setIsOpen(false) } document.addEventListener('keydown', handleEscape) return () => document.removeEventListener('keydown', handleEscape) }, []); return (
{isOpen && (
    {routing.locales.map((lang) => (
  • ))}
)}
) }