Если выбранный язык сайта не сохраняется, пользователь переключается на нужную локаль, но после обновления, авторизации или перехода снова видит язык по умолчанию. Причина может находиться в cookie, серверной сессии, URL-структуре, кеше или повторном автоопределении по браузеру.

Исправление должно задать понятный приоритет источников языка. Явный выбор пользователя важнее Accept-Language и геолокации, иначе сайт будет постоянно отменять принятое решение.

Найдите момент сброса локали

Проверьте сценарий пошагово и отметьте первый запрос, после которого язык меняется обратно.

  • Язык сбрасывается сразу после перезагрузки.
  • Выбор работает только до входа в личный кабинет.
  • На одном поддомене язык сохраняется, на другом нет.
  • HTML имеет нужный язык, но AJAX-данные приходят на другом.

Почему возникает проблема

Обычно несколько механизмов локализации конкурируют и перезаписывают одно значение.

  • Cookie записана с неверным Domain, Path, Secure или SameSite.
  • Сессия не сохраняется между frontend и API.
  • Middleware каждый запрос заново выбирает Accept-Language.
  • CDN кеширует HTML без учета локали.
  • URL-префикс и сохраненный профиль пользователя расходятся.

Пошаговая диагностика

Проверяйте cookie, запросы и серверный выбор локали одновременно.

  1. Переключите язык и изучите Set-Cookie и сохраненное значение.
  2. Обновите страницу и проверьте, отправляется ли cookie обратно.
  3. Сравните host, path, HTTPS и переходы между поддоменами.
  4. Добавьте временный лог источника выбранной локали на backend.
  5. Проверьте ключ кеша и заголовки для разных языков.

Установите приоритет источников языка

Система должна однозначно понимать, какой сигнал применять при конфликте.

  • Явный URL языка определяет контент текущей страницы.
  • Сохраненный выбор пользователя применяется при следующем входе.
  • Профиль авторизованного пользователя синхронизируется осознанно.
  • Язык браузера используется только при первом визите без выбора.

Как исправить проблему

Исправляйте хранение и middleware вместе, чтобы локаль не менялась после следующего запроса.

  1. Настройте cookie для нужного домена, пути и HTTPS.
  2. Прекратите безусловно перезаписывать выбор по Accept-Language.
  3. Синхронизируйте локаль frontend, API и профиля пользователя.
  4. Разделите CDN-кеш по языковому URL или корректному ключу.
  5. Сохраните безопасный return URL при переключении языка.

Как проверить результат

  • Язык сохраняется после обновления и нового открытия браузера.
  • Авторизация и выход не меняют локаль неожиданно.
  • API, письма и интерфейс используют согласованный язык.
  • Поисковые URL разных языков остаются отдельными и стабильными.

Типичные ошибки

  • Определять язык по IP на каждом запросе.
  • Сохранять локаль только в JavaScript-памяти.
  • Использовать одну кешированную HTML-страницу для всех языков.
  • Редиректить пользователя без учета его явного выбора.

Как предотвратить повторение

  • Опишите приоритет локали в архитектуре проекта.
  • Добавьте тесты переходов, авторизации и поддоменов.
  • Проверяйте cache key для каждой языковой версии.
  • Мониторьте циклические языковые редиректы.

Когда нужна помощь

Если язык сайта сбрасывается, я проверю cookie, сессию, middleware, языковые URL и кеш, найду конфликт источников локали и настрою стабильное сохранение выбора пользователя.