// ========================================================= // ИНИЦИАЛИЗАЦИЯ И УПРАВЛЕНИЕ ЯЗЫКОМ // ========================================================= // Флаг готовности let isReady = false; let pendingLang = null; // Функция применения языка после всех загрузок function applyLanguageAfterLoad(lang) { if (isReady) { setLang(lang); return; } pendingLang = lang; } // Функция, которая вызывается когда всё загружено function onAllLoaded() { isReady = true; if (pendingLang) { setLang(pendingLang); } else { const savedLang = localStorage.getItem('lang') || 'ru'; setLang(savedLang); } } // Восстанавливаем язык из localStorage const savedLang = localStorage.getItem('lang') || 'ru'; // Устанавливаем язык после загрузки applyLanguageAfterLoad(savedLang); // Синхронизируем селекты const langSelect = document.getElementById('langSelect'); const langSelectSide = document.getElementById('langSelectSide'); if (langSelect) { langSelect.value = savedLang; } if (langSelectSide) { langSelectSide.value = savedLang; } // Функция обновления всего при смене языка или версии function refreshAll() { if (typeof renderLoadOrder === 'function') { renderLoadOrder(); } if (typeof renderAllChangelogs === 'function') { renderAllChangelogs(); } // Принудительно очищаем маркеры перед перезагрузкой const scrollBar = document.getElementById('loadOrderScrollBar'); const scrollBarFixed = document.getElementById('loadOrderScrollBarFixed'); if (scrollBar) { const oldMarkers = scrollBar.querySelectorAll('.scroll-markers'); oldMarkers.forEach(m => m.remove()); } if (scrollBarFixed) { const oldMarkers = scrollBarFixed.querySelectorAll('.scroll-markers'); oldMarkers.forEach(m => m.remove()); } setTimeout(() => { if (typeof initCustomScrollbar === 'function') { initCustomScrollbar(); } setTimeout(() => { if (typeof initScrollbar === 'function') { initScrollbar(); } if (typeof loadScrollMarkers === 'function') { loadScrollMarkers(); } }, 200); }, 100); } // Обработчики смены языка if (langSelect) { langSelect.addEventListener('change', (e) => { const lang = e.target.value; localStorage.setItem('lang', lang); if (isReady) { setLang(lang); refreshAll(); } else { pendingLang = lang; } if (langSelectSide) { langSelectSide.value = lang; } }); } if (langSelectSide) { langSelectSide.addEventListener('change', (e) => { const lang = e.target.value; localStorage.setItem('lang', lang); if (isReady) { setLang(lang); refreshAll(); } else { pendingLang = lang; } if (langSelect) { langSelect.value = lang; } }); } // Рендерим версии для профилей if (typeof renderVersionButtons === 'function') { renderVersionButtons(); } if (typeof renderVersionList === 'function') { renderVersionList(); } // Проверка загрузки function checkAllLoaded() { const hasMods = modsData && modsData.length > 0; if (hasMods) { onAllLoaded(); setTimeout(() => { if (typeof makeChangelogItemsClickable === 'function') { makeChangelogItemsClickable(); } }, 100); return true; } return false; } // Проверяем каждые 500ms let loadCheckInterval = setInterval(() => { if (checkAllLoaded()) { clearInterval(loadCheckInterval); } }, 500); // Если через 10 секунд всё равно не загрузилось - применяем язык принудительно setTimeout(() => { clearInterval(loadCheckInterval); if (!isReady) { const lang = localStorage.getItem('lang') || 'ru'; if (typeof setLang === 'function') { setLang(lang); } isReady = true; } }, 10000); localStorage.setItem('lastPage', window.location.href); // ========================================================= // ИНИЦИАЛИЗАЦИЯ ЗАГРУЗКИ МОДОВ // ========================================================= document.addEventListener('DOMContentLoaded', function () { // Показываем лоадеры const loadOrderContainer = document.getElementById('loadOrderList'); const changelogContainer = document.getElementById('changelogVersions'); if (loadOrderContainer) { loadOrderContainer.innerHTML = '