Если выбранный язык сайта не сохраняется, пользователь переключается на нужную локаль, но после обновления, авторизации или перехода снова видит язык по умолчанию. Причина может находиться в cookie, серверной сессии, URL-структуре, кеше или повторном автоопределении по браузеру.
Исправление должно задать понятный приоритет источников языка. Явный выбор пользователя важнее Accept-Language и геолокации, иначе сайт будет постоянно отменять принятое решение.
Найдите момент сброса локали
Проверьте сценарий пошагово и отметьте первый запрос, после которого язык меняется обратно.
- Язык сбрасывается сразу после перезагрузки.
- Выбор работает только до входа в личный кабинет.
- На одном поддомене язык сохраняется, на другом нет.
- HTML имеет нужный язык, но AJAX-данные приходят на другом.
Почему возникает проблема
Обычно несколько механизмов локализации конкурируют и перезаписывают одно значение.
- Cookie записана с неверным Domain, Path, Secure или SameSite.
- Сессия не сохраняется между frontend и API.
- Middleware каждый запрос заново выбирает Accept-Language.
- CDN кеширует HTML без учета локали.
- URL-префикс и сохраненный профиль пользователя расходятся.
Пошаговая диагностика
Проверяйте cookie, запросы и серверный выбор локали одновременно.
- Переключите язык и изучите Set-Cookie и сохраненное значение.
- Обновите страницу и проверьте, отправляется ли cookie обратно.
- Сравните host, path, HTTPS и переходы между поддоменами.
- Добавьте временный лог источника выбранной локали на backend.
- Проверьте ключ кеша и заголовки для разных языков.
Установите приоритет источников языка
Система должна однозначно понимать, какой сигнал применять при конфликте.
- Явный URL языка определяет контент текущей страницы.
- Сохраненный выбор пользователя применяется при следующем входе.
- Профиль авторизованного пользователя синхронизируется осознанно.
- Язык браузера используется только при первом визите без выбора.
Как исправить проблему
Исправляйте хранение и middleware вместе, чтобы локаль не менялась после следующего запроса.
- Настройте cookie для нужного домена, пути и HTTPS.
- Прекратите безусловно перезаписывать выбор по Accept-Language.
- Синхронизируйте локаль frontend, API и профиля пользователя.
- Разделите CDN-кеш по языковому URL или корректному ключу.
- Сохраните безопасный return URL при переключении языка.
Как проверить результат
- Язык сохраняется после обновления и нового открытия браузера.
- Авторизация и выход не меняют локаль неожиданно.
- API, письма и интерфейс используют согласованный язык.
- Поисковые URL разных языков остаются отдельными и стабильными.
Типичные ошибки
- Определять язык по IP на каждом запросе.
- Сохранять локаль только в JavaScript-памяти.
- Использовать одну кешированную HTML-страницу для всех языков.
- Редиректить пользователя без учета его явного выбора.
Как предотвратить повторение
- Опишите приоритет локали в архитектуре проекта.
- Добавьте тесты переходов, авторизации и поддоменов.
- Проверяйте cache key для каждой языковой версии.
- Мониторьте циклические языковые редиректы.
Когда нужна помощь
Если язык сайта сбрасывается, я проверю cookie, сессию, middleware, языковые URL и кеш, найду конфликт источников локали и настрою стабильное сохранение выбора пользователя.