Как мне доработать код, чтобы изменить язык сайта в адресной строке?

Здравствуйте! У меня есть код для Google Translate, который я модифицировал так, чтобы при входе на сайт отображался последний выбранный пользователем язык в адресной строке. Однако возникает проблема: при переходе между страницами в адресной строке появляется ?lang=. Можете помочь мне доработать код так, чтобы при навигации по страницам к параметру ?lang добавлялся язык, выбранный пользователем в прошлый раз? 

Если в коде <br/> <pre><code class="javascript">const googleTranslateConfig = {
    lang: "", // Оригинальный язык
    langFirstVisit: 'ru', // Язык, на который переводим при первом посещении
};</code></pre> <br/> установить ru, то язык будет меняться на русский, независимо от выбора пользователя. 

Заранее спасибо! Вот сам код: <br/> <pre><code class="javascript">const googleTranslateConfig = {
    lang: "", // Оригинальный язык
    langFirstVisit: 'ru', // Язык, на который переводим при первом посещении
};

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

    // Устанавливаем язык по умолчанию, если параметр отсутствует и куки не установлены
    if (!langFromURL &amp;&amp; !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-goo
  • 5 марта 2025 г. 0:04
Ответы на вопрос 1
Чтобы доработать ваш код так, чтобы при переходах между страницами к параметру `?lang=` добавлялся язык, выбранный пользователем, нужно сначала сохранить выбор пользователя и обновить URL при навигации. Я предложу обновления, которые нужно внести в ваш код, чтобы это работало.

Вот обновленный код на основе вашего исходного кода:

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

function updateURL(lang) {
    const urlParams = new URLSearchParams(window.location.search);
    urlParams.set('lang', lang);
    const newUrl = window.location.pathname + '?' + urlParams.toString();
    window.history.replaceState({}, '', newUrl);
}

function TranslateCookieHandler(lang) {
    // Это ваш существующий код для обработки куки
    // Не забудьте реализовать логику, которая устанавливает куку с выбранным языком
}

function TranslateGetCode() {
    // Это ваш существующий код для получения кода языка
}

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}"]`);

    // Добавить событие для переключения языка
    const languageButtons = document.querySelectorAll('.language-button'); // Замените на ваш селектор для кнопок языка
    languageButtons.forEach(button => {
        button.addEventListener('click', function () {
            const selectedLang = this.dataset.lang; // Предположим, что языковые кнопки имеют атрибут data-lang
            TranslateCookieHandler("/auto/" + selectedLang);
            updateURL(selectedLang); // Обновляем URL с выбранным языком
            console.log("Язык изменён на:", selectedLang);
        });
    });
}

// Вызов функции инициализации при загрузке страницы
TranslateInit();
```

### Объяснение изменений:
1. **Функция `updateURL(lang)`**: Она обновляет адресную строку, добавляя или изменяя параметр `lang` в URL.
2. **Сохранение выбора языка**: Теперь после того, как пользователь выбирает язык, соответствующий параметр автоматически обновляется в адресной строке.
3. **Обработчик событий для кнопок языка**: Добавлена логика для того, чтобы обработать нажатия на кнопки для переключения языка. Убедитесь, что кнопки языка имеют атрибут `data-lang` с их соответствующими значениями.

### Как это использовать:
- Не забудьте адаптировать селектор `'.language-button'` к вашим кнопкам выбора языка, а также убедитесь, что они имеют атрибут `data-lang` с правильными значениями языков.
- Код автоматически будет устанавливать язык из URL или куков при загрузке страницы, и обновлять URL при переключении языка пользователем.
Похожие вопросы