Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2025, 02:34
Аспирант
Отправить личное сообщение для Feex Посмотреть профиль Найти все сообщения от Feex
 
Регистрация: 30.12.2015
Сообщений: 94

Нужна помощь с куками
Как сделать чтение куки с помощью JS?
Есть такая страница - перевод без перезагрузки страницы. Всё работает, кроме одного момента: если человек выбрал EN, то при перезагрузке страницы EN не запоминается.
А нужно чтобы при смене языка и обновлении страницы сохранялся выбранный язык. Есть решение на PHP, но это не подходит, ибо всё это должно размещаться на HTML странице. Я без понятия как это сделать. В таком виде можно, конечно, оставить, но не комильфо... Будьте так любезны, решите эту проблему, если, конечно, это вообще возможно)

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">

  <!-- Заголовок в зависимости от языка -->
  <title>ПРИВЕТ</title>

  <meta name="title-ru" content="ПРИВЕТ" id="title-ru">
  <meta name="title-en" content="HELLO" id="title-en">

  <style>
      /* Скрываем "не тот" язык */
    .en .ru,
    .ru .en {
      display: none;
    }

      /* Переключалки языка */
    .lang-switcher {
      border-bottom: 1px dashed;
      cursor: pointer;
    }
    .lang-switcher:hover {
      color: #b33;
    }
      /* Выделяем активную переключалку тоже с помощью классов родителя */
    .en .lang-switcher--en,
    .ru .lang-switcher--ru {
      color: #000;
      border-bottom: none;
      font-weight: bold;
      cursor: default;
    }

      /* Оформление страницы */
    body {
      font-family: Verdana, Arial, sans-serif;
      font-size: 13px;
      line-height: 16px;
    }

    A.back {
      text-decoration: none;
    }

    A.back U {
      text-decoration: underline;
    }

    A:link {
      color: #0c4f72;
    }

    A:hover {
      color: #b33;
    }

    .text {
      max-width: 45em;
    }
  </style>
</head>

<body class="ru">

<p>Смените язык и обновите страницу, язык будет сохранён:</p>

<div>
  <span class="lang-switcher lang-switcher--ru" id="switcher-ru">RU</span>
  <span class="lang-switcher lang-switcher--en" id="switcher-en">EN</span>
</div>

<br>

<div class="text">
  <div class="ru" lang="ru">
    <h1>ПРИВЕТ</h1>
    текст на русском языке
  </div>

  <div class="en" lang="en">
    <h1>HELLO</h1>
    text in English
  </div>
</div>

<script>
  (function(){
    var body = document.getElementsByTagName('body')[0];

    var switcherRU = document.getElementById('switcher-ru');
    var switcherEN = document.getElementById('switcher-en');

    // Заранее считаем срок хранения кук
    var expires = new Date();
    expires.setDate(expires.getDate() + 366);
    expires.toUTCString();

    // Русский и английский заголовки
    var titleRU = document.getElementById('title-ru');
    var titleEN = document.getElementById('title-en');
    var title = {
      ru: titleRU.getAttribute('content'),
      en: titleEN.getAttribute('content')
    }

    var switchLang = function() {
      var lang = this.id
      lang = lang.replace('switcher-', '');

      // Меняем класс для BODY
      body.className = lang;

      // Записываем куки
      document.cookie = [
        'aplang=' + lang
        ,'; expires=' + expires // используем expires, max-age не поддерживается в ИЕ
        ,'; path=/'
        ,'; domain=' + document.location.host
      ].join('');
      document.title = title[lang];
    }

    switcherRU.onclick = switchLang;
    switcherEN.onclick = switchLang;
  })();
</script> 

</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2025, 11:30
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,762

А почему именно куки?
Через localStorage можно делать

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">

  <!-- Заголовок в зависимости от языка -->
  <title>ПРИВЕТ</title>

  <meta name="title-ru" content="ПРИВЕТ" id="title-ru">
  <meta name="title-en" content="HELLO" id="title-en">

  <style>
      /* Скрываем "не тот" язык */
    .en .ru,
    .ru .en {
      display: none;
    }

      /* Переключалки языка */
    .lang-switcher {
      border-bottom: 1px dashed;
      cursor: pointer;
    }
    .lang-switcher:hover {
      color: #b33;
    }
      /* Выделяем активную переключалку тоже с помощью классов родителя */
    .en .lang-switcher--en,
    .ru .lang-switcher--ru {
      color: #000;
      border-bottom: none;
      font-weight: bold;
      cursor: default;
    }

      /* Оформление страницы */
    body {
      font-family: Verdana, Arial, sans-serif;
      font-size: 13px;
      line-height: 16px;
    }

    A.back {
      text-decoration: none;
    }

    A.back U {
      text-decoration: underline;
    }

    A:link {
      color: #0c4f72;
    }

    A:hover {
      color: #b33;
    }

    .text {
      max-width: 45em;
    }
  </style>
</head>

<body class="ru">

<p>Смените язык и обновите страницу, язык будет сохранён:</p>

<div>
  <span class="lang-switcher lang-switcher--ru" id="switcher-ru">RU</span>
  <span class="lang-switcher lang-switcher--en" id="switcher-en">EN</span>
</div>

<br>

<div class="text">
  <div class="ru" lang="ru">
    <h1>ПРИВЕТ</h1>
    текст на русском языке
  </div>

  <div class="en" lang="en">
    <h1>HELLO</h1>
    text in English
  </div>
</div>

<script>
  (function(){
    var body = document.getElementsByTagName('body')[0];

    var switcherRU = document.getElementById('switcher-ru');
    var switcherEN = document.getElementById('switcher-en');

    // Заранее считаем срок хранения кук
    //var expires = new Date();
    //expires.setDate(expires.getDate() + 366);
    //expires.toUTCString();
    var curentlang = localStorage.getItem('lang') ?? 'ru';
    localStorage.setItem('lang', curentlang);
    body.className = curentlang;

    // Русский и английский заголовки
    var titleRU = document.getElementById('title-ru');
    var titleEN = document.getElementById('title-en');
    var title = {
      ru: titleRU.getAttribute('content'),
      en: titleEN.getAttribute('content')
    }

    var switchLang = function() {
      var lang = this.id
      lang = lang.replace('switcher-', '');
	  localStorage.setItem('lang', lang);
      // Меняем класс для BODY
      body.className = lang;

      // Записываем куки
      //document.cookie = [
      //  'aplang=' + lang
      //  ,'; expires=' + expires // используем expires, max-age не поддерживается в ИЕ
      //  ,'; path=/'
      //  ,'; domain=' + document.location.host
      //].join('');
      document.title = title[lang];
    }

    switcherRU.onclick = switchLang;
    switcherEN.onclick = switchLang;
  })();
</script> 

</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2025, 11:42
Аспирант
Отправить личное сообщение для Feex Посмотреть профиль Найти все сообщения от Feex
 
Регистрация: 30.12.2015
Сообщений: 94

Работает!! Гениально)
Просто нашел вариант с куками на php, но он не подходил, поэтому и возникла необходимосnь сделать тоже самое, но без php, а как именно - без разницы))
Спасибо Вам огромное, премного благодарен
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2025, 16:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,249

Сообщение от Feex
Как сделать чтение куки с помощью JS?
В здешнем учебнике все описано...
https://learn.javascript.ru/cookie
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь! surin.89 jQuery 72 23.12.2020 16:03
React нужна помощь dewembas Библиотеки/Тулкиты/Фреймворки 19 14.12.2020 01:44
Нужна помощь по javascript darklend Общие вопросы Javascript 0 12.01.2014 23:33
Нужна помощь по слайдеру seoguru Работа 3 28.01.2013 22:02
нужна помощь dominosoko Серверные языки и технологии 4 14.03.2010 02:17