Здравствуйте. Есть код от 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();