From 3c0fea3eb0f5c727d71651bdf254b19e42e67162 Mon Sep 17 00:00:00 2001 From: smanylov Date: Thu, 8 Jan 2026 15:53:12 +0700 Subject: [PATCH] fix language switch for http protocol --- src/app/components/LanguageSwitcher.tsx | 38 +++++++++++++++++++++---- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/src/app/components/LanguageSwitcher.tsx b/src/app/components/LanguageSwitcher.tsx index d11ecdf..ad54b73 100644 --- a/src/app/components/LanguageSwitcher.tsx +++ b/src/app/components/LanguageSwitcher.tsx @@ -7,15 +7,41 @@ 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 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 }) - setIsOpen(false) + + setTimeout(() => { + observer.disconnect(); + }, 3000) } useClickOutside(dropdownRef, () => {