Задать вопрос
@liviaeridan

Язык сайта в адресной строке, как доработать код?

Здравствуйте. Есть код от Google Translate. Я его немного доработал, чтобы при входе был последний выбранный пользователем язык, который отображается в адресной строке, но когда переходить по страницам сайта, в адресной строке получается такая строчка: ?lang=. Помогите, пожалуйста, доработать код, чтобы при переходе по страницами ?lang=(выбранный пользователем язык при последнем посещении). Если же в коде
const googleTranslateConfig = {
    lang: "", // Оригинальный язык
    langFirstVisit: 'ru', // Язык, на который переводим при первом посещении
};

поставить ru, то при переходе язык будет меняться на русский вне зависимости от выбранного пользователем языка.
Спасибо! Сам код:
const googleTranslateConfig = {
    lang: "", // Оригинальный язык
    langFirstVisit: 'ru', // Язык, на который переводим при первом посещении
};

function TranslateInit() {
    const urlParams = new URLSearchParams(window.location.search);
    const langFromURL = urlParams.get('lang');

    // Устанавливаем язык по умолчанию, если параметр отсутствует и куки не установлены
    if (!langFromURL && !Cookies.get('googtrans')) {
        TranslateCookieHandler("/auto/" + googleTranslateConfig.langFirstVisit);
        updateURL(googleTranslateConfig.langFirstVisit);
        console.log("Установлен язык по умолчанию:", googleTranslateConfig.langFirstVisit);
    } else if (langFromURL) {
        TranslateCookieHandler("/auto/" + langFromURL);
        console.log("Язык установлен из URL:", langFromURL);
    }

    let code = TranslateGetCode();
    const langElement = document.querySelector(`[data-google-lang="${code}"]`);
    if (langElement) {
        langElement.classList.add('language__img_active');
    }

    new google.translate.TranslateElement({
        pageLanguage: googleTranslateConfig.lang,
    });

    // Обработчик нажатий по кнопкам выбора языка
    TranslateEventHandler('click', '[data-google-lang]', function (e) {
        const selectedLang = e.getAttribute("data-google-lang");
        TranslateCookieHandler("/" + googleTranslateConfig.lang + "/" + selectedLang);
        updateURL(selectedLang);
        console.log("Выбран язык:", selectedLang);
        window.location.reload(); // Перезагружаем страницу для применения изменений
    });
}

function TranslateGetCode() {
    // Получаем код языка из куки или используем оригинальный язык
    let lang = Cookies.get('googtrans') || googleTranslateConfig.lang;
    return lang.match(/(?!^\/)[^\/]*$/gm)[0];
}

function TranslateCookieHandler(val) {
    Cookies.set('googtrans', val); // Устанавливаем куки
    console.log("Куки установлены:", val);
}

function TranslateEventHandler(event, selector, handler) {
    document.addEventListener(event, function (e) {
        let el = e.target.closest(selector);
        if (el) handler(el); // Если элемент найден, вызываем обработчик
    });
}

// Функция для обновления URL
function updateURL(lang) {
    const currentURL = new URL(window.location);
    currentURL.searchParams.set('lang', lang); // Устанавливаем параметр lang
    window.history.replaceState({}, '', currentURL); // Обновляем адресную строку без перезагрузки
    console.log("URL обновлен:", currentURL.toString());
}

// Обновляем URL при загрузке страницы
window.addEventListener('load', function() {
    const lang = getUrlParameter('lang') || googleTranslateConfig.lang;
    updateURL(lang);
});

// Функция для получения параметра из URL
function getUrlParameter(name) {
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(location.search);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}

// Функция для перехода на другую страницу
function navigateToPage(page) {
    const selectedLang = TranslateGetCode(); // Проверяем текущий язык
    var newUrl = page + "?lang=" + selectedLang; // Добавляем параметр lang
    window.location.href = newUrl; // Переходим по новому URL
}

// Вызов функции инициализации перевода
TranslateInit();
  • Вопрос задан
  • 25 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы