Назад в Центр знаний
Идентичность

Часовой пояс, локаль и язык в API браузера

Разделите часовой пояс, локаль, согласование языка и настройки сайта; настройте поля и находите источник региональных расхождений.

BotBrowser Team

Документация

Нужна поддерживаемая продуктовая документация?

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

В контролируемом контексте браузера BotBrowser поддерживает настройку часового пояса, локали и языков, но не гарантирует, что каждый сайт выберет одинаковое содержимое, и не доказывает физическое местоположение. Браузер может форматировать дату с одной локалью, сообщать о других языковых предпочтениях, отправлять серверу третье предпочтение языка и использовать часовой пояс, не связанный с прокси. Практический подход - настраивать каждое поле на том уровне, который им владеет, а затем проверять значения JavaScript и HTTP-ответ, важные для конкретного сценария.

Полезно различать значение по умолчанию и явный выбор. Вызов Intl.DateTimeFormat() без аргументов использует локаль и часовой пояс среды выполнения по умолчанию. Передача явной локали или параметра timeZone запрашивает другой результат только для данного экземпляра форматтера; сама по себе она не меняет navigator.language, заголовок Accept-Language запроса, cookie сайта или настроенный часовой пояс браузера. Поэтому при региональной проверке следует называть конкретный измеряемый сигнал, а не считать слово «локаль» исчерпывающим диагнозом.

Кратко

  • Часовой пояс определяет представление момента времени как местной гражданской даты и времени; зона IANA - не то же самое, что фиксированное смещение UTC.
  • Локаль задаёт правила форматирования, например десятичные разделители и названия месяцев; сама по себе она не выбирает язык сайта.
  • navigator.language и navigator.languages описывают языковые предпочтения браузера. Accept-Language передаёт предпочтение серверу, который может согласовать представление или проигнорировать его.
  • Сайт может сохранить выбор языка в cookie или настройках учётной записи. Это состояние отличается и от предпочтений браузера, и от HTTP-согласования.
  • Для каждого поля BotBrowser явное значение CLI имеет приоритет над configs выбранного профиля; если конкретного значения нет, auto выбирает настройку автоматически на основе маршрута прокси. --bot-location - отдельный контроль геолокации.

Содержание

Смотреть видео

Видео на английском языке сопоставляет часовой пояс, локаль, языковые предпочтения и заголовок Accept-Language в демонстрации на контролируемой локальной странице. В нём используются заданные тестом значения; оно не представляет реального пользователя, маршрут прокси или результат геолокации.

Сначала определите сигнал

«Региональная идентичность» - удобное обобщение, но не отдельное свойство браузера. Страница проверки, сетевой запрос, документ, отрисованный сервером, и сайт после входа в учётную запись могут отражать разные решения. Если наблюдения расходятся, зафиксируйте, где именно получено каждое: в среде выполнения JavaScript, заголовках запроса или ответа, хранилище приложения либо API с запросом разрешения. Это помогает не менять флаг локали в попытке исправить содержимое, выбранное по cookie.

Эти понятия имеют узкое значение:

  • Часовой пояс - набор правил, преобразующий момент времени в местные дату и время. В JavaScript его можно прочитать через методы Intl.DateTimeFormat().resolvedOptions().timeZone и увидеть при форматировании дат по умолчанию.
  • Локаль - предпочтение языка и региона в формате BCP 47, используемое API интернационализации для форматирования или сравнения. Примеры: en-GB и de-DE; локаль не является городом или координатой.
  • Языковые предпочтения - упорядоченный список, доступный через navigator.languages; обычно navigator.language содержит основное предпочтение. Они влияют на согласование содержимого, но не обязывают сервер выбрать конкретный перевод.
  • Геолокация - результат API определения местоположения после запроса страницы и разрешения со стороны контекста браузера. Она не выводится из форматирования Intl, и её нельзя определять по строке часового пояса.
  • Язык сайта - язык интерфейса или содержимого, выбранный приложением. Решение может зависеть от запроса, URL, cookie, настроек учётной записи или политики сервера.

Например, страница может вызвать new Intl.NumberFormat('fr-FR'), хотя основным языком браузера остаётся en-US. Сервер может получить английское предпочтение Accept-Language, но вернуть французскую версию из-за URL /fr/. Затем сайт может сохранить французский язык в cookie и продолжать отвечать на нём в последующих запросах. Ни одно из этих наблюдений само по себе не доказывает, что другой уровень настроен неправильно.

Такое разделение помогает не делать чрезмерных географических выводов. Один часовой пояс используют разные места, а в одной стране может быть несколько часовых поясов. Локаль не кодирует точное местоположение. Язык может отражать рабочее предпочтение пользователя, а не страну прокси. Представление этих значений как строгой цепочки «страна к стране» создаёт ложные тревоги и ведёт к ненужным переопределениям.

Значения по умолчанию и явные параметры Intl

ECMAScript Internationalization API (Intl) предоставляет локаль-зависимое форматирование. Если создать форматтер без параметров локали, среда выполнения использует значение по умолчанию. Явная локаль задаёт предпочтение для конкретного форматтера. Разница видна в коде и важна для диагностики:

const defaultDate = new Intl.DateTimeFormat().format(new Date());
const britishDate = new Intl.DateTimeFormat('en-GB').format(new Date());
const defaultNumber = new Intl.NumberFormat().format(1234567.89);
const frenchNumber = new Intl.NumberFormat('fr-FR').format(1234567.89);

Пример намеренно не содержит фиксированного вывода. Отформатированные строки могут зависеть от локаль-зависимых данных среды выполнения, текущего момента и параметров форматтера. Для воспроизводимой проверки приложения следует зафиксировать исходный момент и изучить разрешённые параметры наряду с видимой строкой. Даже такая проверка описывает только данную среду и входные данные, а не каждый процесс или worker браузера.

Метод resolvedOptions() показывает настройки, выбранные для экземпляра форматтера. У форматтера по умолчанию поля locale и timeZone описывают разрешённые значения среды. У форматтера, созданного с 'en-GB', локаль отражает этот запрос после разрешения. Метод не возвращает navigator.language, настройки профиля или язык последующего HTTP-запроса.

const defaultFormatter = new Intl.DateTimeFormat();
const explicitFormatter = new Intl.DateTimeFormat('en-GB', {
  timeZone: 'Europe/London',
  dateStyle: 'medium',
});

console.log(defaultFormatter.resolvedOptions());
console.log(explicitFormatter.resolvedOptions());

Показана форма для иллюстрации: этот фрагмент здесь не запускался, а точные свойства и отформатированные значения следует читать в целевой среде. Важнее не совпадение с ожидаемым снимком экрана, а то, использует ли приложение форматтер по умолчанию или явно передаёт locales и параметры. Если приложение задаёт собственную локаль, изменение браузерного значения по умолчанию может не повлиять на этот вызов.

Это же правило действует для форматирования дат в приложении. Библиотека может вызвать Intl.DateTimeFormat() без аргумента локали, передать фиксированную локаль или прочитать предпочтение из состояния приложения перед созданием форматтера. Перед изменением настроек браузера изучите код приложения или точку вызова. В руководстве по форматированию даты и переносимости часовых поясов рассматриваются политика часовых поясов на уровне приложения и переносимые запасные варианты в отличие от браузерных значений по умолчанию.

Сопоставление локалей также не означает автоматический перевод произвольного текста. Intl форматирует поддерживаемые данные, сравнивает строки или выбирает локаль из запрошенного списка и доступных данных. API не переводит страницу, не меняет URL и не отменяет политику языка, заданную продуктом сайта. Если текст страницы английский, а форматтер чисел использует немецкие правила, это может быть результатом именно той настройки, которую предусмотрели разработчики.

Часовой пояс - не смещение

Момент времени - точка на временной шкале UTC. Часовой пояс - именованный набор правил, который преобразует моменты в местные поля гражданского времени и смещение. В America/New_York смещение может меняться в разные даты согласно действующим данным часовых поясов. Строка вроде UTC-5 выражает фиксированное смещение, а не тот же набор исторических и будущих правил. Поэтому сравнивайте имя IANA, когда требование относится к региональным правилам, и смещение - когда оно относится к конкретному моменту.

Date.prototype.getTimezoneOffset() возвращает числовое смещение для представленной даты в минутах, используя соглашение о знаке JavaScript. Это не стабильный идентификатор региона. У двух именованных зон может совпадать смещение в один момент и различаться в другой. Не считайте единичное значение смещения доказательством конкретного часового пояса или совпадения сезонных переходов.

const instant = new Date('2026-01-15T12:00:00Z');
const zone = new Intl.DateTimeFormat().resolvedOptions().timeZone;
const offsetMinutes = instant.getTimezoneOffset();

console.log({ zone, offsetMinutes });

Это иллюстративный запрос, а не запись результата BotBrowser. Смещение вычисляется для выбранной даты в часовом поясе среды по умолчанию. Для сравнения двух дат создайте моменты до и после соответствующего перехода и проверьте оба; не предполагайте дату или результат конкретного перехода DST без проверки актуальных правил целевого региона. База часовых поясов и законодательные правила могут меняться независимо от кода приложения.

Локаль и часовой пояс можно настраивать независимо. Форматирование en-GB при времени America/New_York может быть осознанным решением: пользователь с британскими языковыми предпочтениями просматривает расписание, привязанное к офису в Нью-Йорке. И наоборот, сайту может потребоваться показывать события в часовом поясе места проведения, а окружающий текст - на языке браузера. Связь определяется смыслом приложения, а не универсальным требованием «одна страна».

Значения только с датой требуют отдельного внимания. Строка 2026-10-18 может интерпретироваться библиотеками и API иначе, чем момент 2026-10-18T09:00:00Z. Преобразование бизнес-даты без времени в момент может сдвинуть отображаемый календарный день в другом часовом поясе. Если требование звучит как «встреча начинается в этот момент», сохраняйте момент и форматируйте его для выбранной зоны. Если требуется «офис закрыт в эту местную дату», сохраняйте календарную дату и не добавляйте преобразование, меняющее её смысл.

Языковые предпочтения и HTTP-согласование

navigator.language и navigator.languages - свойства среды выполнения, описывающие предпочтительные языки. Первое содержит основное предпочтение; второе, когда доступно, - упорядоченный список. Браузер также может отправлять заголовок Accept-Language, часто с весами качества. Заголовок служит входом для согласования на сервере, но не гарантирует, что ответ будет на первом указанном языке или хотя бы на одном из перечисленных.

HTTP-сервер может использовать Accept-Language для выбора представления, однако результат также зависит от структуры URL, настроек приложения по умолчанию, доступных переводов, состояния аутентификации или явных правил продукта. Заголовок ответа Content-Language может служить полезным свидетельством о представлении, но не обязательно описывает каждую строку сложной страницы. Проверяйте фактический запрос и ответ для нужного маршрута.

GET /account/ HTTP/1.1
Accept-Language: fr-CA,fr;q=0.9,en;q=0.8

Только иллюстративный запрос: сетевой запрос для этой статьи не выполнялся. Список предпочтений может помочь серверу выбрать французское представление, если оно поддерживается. Сервер также может перенаправить запрос, использовать локаль из URL, потребовать явный выбор пользователя или применить другую политику. В справочнике MDN по Accept-Language описаны заголовок запроса и его роль в согласовании.

Не смешивайте язык браузера, форматирование по локали и язык HTTP. Локаль de-DE может задавать немецкие правила для десятичных чисел и дат, даже если список языков - en-US,en. Запрос может передавать английское предпочтение, а страница - явно создать Intl.NumberFormat('de-DE'). Каждое значение отвечает на отдельный вопрос: как форматируется значение, что предпочитает браузер и какое предпочтение запрос предлагает серверу.

Решение сервера может различаться для разных ресурсов. Маршрут документа может согласовывать HTML, а конечная точка API - возвращать JSON без привязки к языку. Запросы скриптов и изображений могут использовать другую логику выбора языка. Сравнивайте однотипные запросы: метод, URL, перенаправления, заголовки запроса и ответа, а также состояние аутентификации должны совпадать, прежде чем связывать разницу с языковым списком браузера.

В документации по прокси и геолокации описаны региональные значения, получаемые через прокси, и переопределения отдельных параметров. Полезная проверка для веб-платформы прослеживает языковое предпочтение от свойств браузера до исходящего запроса, а затем сопоставляет его с представлением, выбранным сервером. Сетевой маршрут может влиять на автоматические настройки, но не отменяет самостоятельное решение сервера о согласовании.

Сайт может хранить выбранный язык в cookie, localStorage, профиле учётной записи или URL. После сохранения такого состояния страница может продолжать использовать выбранный язык, даже если браузер отправляет другое значение Accept-Language. Переключатель языка часто задаёт явное предпочтение приложения, которое может иметь разумный приоритет над автоматическим согласованием. Очистка предпочтений браузера или изменение --bot-languages не является надёжным способом сбросить серверную настройку учётной записи.

Для диагностики сравнивайте чистый сеанс с существующим только тогда, когда это допустимо в рамках сценария. Запишите, содержит ли маршрут языковой префикс вроде /fr/, выполняется ли перенаправление, присутствует ли cookie языка и сохранена ли локаль в учётной записи. Не удаляйте посторонние cookie и данные хранилища: это может уничтожить свидетельства, нужные для определения уровня выбора, а также изменить состояние аутентификации или согласия.

Если страница остаётся на «неправильном» языке, проверьте следующее:

  1. Уточните запрошенный URL и языковой префикс, если он есть.
  2. Изучите значение Accept-Language в запросе.
  3. Проверьте перенаправления и языковые заголовки итогового ответа.
  4. Проверьте переключатель языка сайта, cookie и настройку учётной записи.
  5. Если разрешено, сравните чистый контекст с исходным, изменяя за раз только один входной параметр.

Это диагностическая последовательность, а не обещание, что каждый сайт раскрывает своё решение. Приложение может показывать содержимое на нескольких языках, не указывать Content-Language или хранить предпочтения на сервере. Если свидетельств недостаточно, отмечайте уровень как неизвестный, а не выводите его по одной видимой надписи.

Приоритет полей в BotBrowser

Настройки часового пояса, локали и языков в BotBrowser - отдельные поля. Им соответствуют флаги командной строки --bot-timezone, --bot-locale и --bot-languages. Для каждого поля документированный порядок конкретных значений таков: сначала значение CLI, затем поле configs выбранного профиля, после чего автоматический выбор. Переопределение одного поля не требует менять остальные.

ПолеФлаг CLIПоле configs профиляАвтоматический выборПервое полезное наблюдение
Часовой пояс--bot-timezonetimezoneautoIntl.DateTimeFormat().resolvedOptions().timeZone
Локаль--bot-localelocaleautoIntl.NumberFormat().resolvedOptions().locale
Языки--bot-languageslanguagesautonavigator.language, navigator.languages, заголовок запроса

Приоритет применяется отдельно к каждому полю. Например, явный --bot-locale=en-GB может сочетаться с часовым поясом из профиля и автоматически выбранным языком. Это может быть намеренная комбинация, но зафиксируйте, почему локаль закреплена: так изменение профиля или маршрута не будет выглядеть необъяснимым. Если поле должно следовать за маршрутом, удалите устаревшие явные значения и на уровне запуска, и в профиле, а не добавляйте ещё одно переопределение.

auto означает «передать это поле автоматическому выбору»; это не локаль, имя часового пояса или языковой тег. В документации указано, что конкретное значение CLI имеет приоритет над конфигурацией профиля, а auto обозначает автоматический выбор. Конфликт, при котором CLI явно задаёт auto, а профиль содержит конкретное значение, не определён. Считайте такую комбинацию неразрешённой, пока поведение соответствующей версии не подтверждено; не выводите победивший источник из написания флага.

Геолокация связана с региональными параметрами, но управляется отдельно. --bot-location настраивает результат для страниц, которые запрашивают геолокацию при соответствующих разрешениях контекста. Координаты не следуют автоматически из часового пояса, и часовой пояс не доказывает координаты. В документации по прокси и геолокации описаны входные данные IP прокси и границы поиска; не утверждайте точность до города или координат, если источник не подтверждает её для конкретной конфигурации. Совпадение пары координат с IP выхода не гарантируется.

В руководстве по согласованности прокси рассматривается совместная проверка маршрутизации прокси и сетевых сигналов идентичности. Здесь эта связь служит контекстом, а не строгим тестом на равенство: маршрут может влиять на auto, тогда как явные настройки отдельных полей и политика приложения создают допустимые исключения.

Схема: флаги CLI, настройки профиля, автоматический выбор, значения Intl по умолчанию, HTTP-согласование языка и состояние сайта показаны как отдельные уровни.
Настройки отдельных полей ведут к значениям среды выполнения; параметры форматтера Intl, HTTP-согласование и предпочтения сайта остаются разными уровнями.

Таблица выбора конфигурации

Выбирайте минимальный набор явных значений, необходимый приложению. Таблица помогает принять решение; примеры не являются рекомендациями для любого развёртывания.

ТребованиеЧасовой поясЛокальЯзыкиСледующая проверка
Передать региональные значения маршрутуОставить автоматический выборОставить автоматический выборОставить автоматический выборПрочитать выбранные значения и назначенный этому контексту маршрут
Сохранить форматирование чисел при смене маршрутовОставить автоматический выбор, если не требуется иноеЗадать --bot-locale или locale в профилеОставить автоматический выбор, если не закреплён язык содержимогоСравнить явный вызов Intl.NumberFormat с вызовом по умолчанию
Сохранить предпочтение интерфейса при смене маршрутаОставить автоматический выбор, если не требуется иноеЗадать только если форматирование тоже должно быть постояннымЗадать --bot-languages или languages в профилеОтдельно проверить предпочтения среды, заголовок запроса и выбор сайта
Показывать событие по местному времени места проведенияЗадать зону IANA на отвечающем за неё уровнеВыбирать независимо для окружающего форматированияВыбирать независимо для согласования содержимогоФорматировать один и тот же момент с явным timeZone
Разобраться с сохранённым языком сайтаНе менять без свидетельствНе считать локаль выбором текста страницыСравнить список браузера с запросомПроверить URL, перенаправления, cookie и настройки учётной записи

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

Ведите краткую запись конфигурации с отдельной строкой для каждого поля: выбранное значение, источник (CLI, профиль или автоматический выбор), ответственный и причина. Не записывайте туда учётные данные. Такая запись показывает приоритет и помогает отличить значение из профиля от выбранного маршрутом. Когда переопределение больше не нужно, удалите его, а не храните дублирующее значение «на всякий случай».

Копируемый диагностический запрос

Следующий запрос для браузера собирает компактный снимок значений, полезных для диагностики. Он отдельно читает значения по умолчанию и явное форматирование; страница не загружается и запрос разрешения геолокации не вызывается. Запускайте его только в контексте, который разрешено проверять. Результат обозначен как иллюстративный и not_run; это не запись наблюдения.

function inspectRegionalDefaults() {
  const defaultDate = new Intl.DateTimeFormat();
  const explicitDate = new Intl.DateTimeFormat('en-GB', {
    timeZone: 'Europe/London',
    dateStyle: 'medium',
  });

  return {
    navigatorLanguage: navigator.language,
    navigatorLanguages: [...navigator.languages],
    defaultDateOptions: defaultDate.resolvedOptions(),
    explicitDateOptions: explicitDate.resolvedOptions(),
    defaultNumberLocale: new Intl.NumberFormat().resolvedOptions().locale,
    explicitNumberLocale: new Intl.NumberFormat('de-DE').resolvedOptions().locale,
    note: 'illustrative query; not_run',
  };
}

console.log(inspectRegionalDefaults());

Значения явных форматтеров намеренно отличаются от значений по умолчанию. Разница демонстрирует параметры конкретного вызова, а не ошибку конфигурации браузера. Чтобы проверить Accept-Language, изучите запрос в авторизованном тестовом приложении или воспользуйтесь сетевыми инструментами: общего JavaScript API для чтения исходящих заголовков браузера нет. Не помещайте учётные данные прокси или закрытые данные учётной записи в публичные диагностические материалы.

При сравнении поведения сервера записывайте только минимально необходимые метаданные: URL запроса, цепочку перенаправлений, Accept-Language, статус ответа и языковые заголовки ответа. Значения cookie следует скрывать. Если сайт позволяет переключать язык, отметьте действие и сохраняется ли выбор в новом контексте. Эти сведения полезнее снимка экрана с целой страницей, открытой после входа.

Диагностика по наблюдаемому уровню

НаблюдениеВероятный уровень проверкиСледующая различающая проверка
Формат даты по умолчанию отличается, а явный форматтер совпадаетЗначение среды по умолчанию или вызов форматтера в приложенииСравнить resolvedOptions() с явными параметрами форматтера
resolvedOptions().timeZone отличается от нужной зоныCLI, профиль или автоматический выбор часового поясаПроверить --bot-timezone, timezone профиля, затем назначение маршрута
navigator.languages ожидаемый, но страница сервера - нетHTTP-согласование или состояние сайтаПроверить заголовок запроса, перенаправление, локаль URL, cookie и настройки учётной записи
Разделители чисел отличаются, а язык текста правильныйФорматирование по локали, не согласование языкаПроверить аргументы конкретного вызова Intl.NumberFormat
Контексты различаютсяПрофиль, флаги, маршрут или состояние приложения для каждого контекстаСравнить контексты по полям и после изменения создать новый
Координаты не совпадают с городом, выведенным из часового поясаНастройки геолокации или разрешения приложенияПроверить, запрашивалась ли геолокация и какое значение --bot-location действует

Меняйте за раз один источник. Если явно задано поле CLI, изменение профиля не докажет, что профиль был действующим источником. Если используется автоматический выбор, изменение cookie языка не докажет, что изменился маршрут прокси. Перед изменением запишите текущий источник каждого поля, затем повторите то же действие приложения в новом контексте, чтобы прежнее состояние страницы не скрыло результат.

Не используйте одну тестовую страницу как универсальный источник истины. Минимальная страница показывает значения среды выполнения, но не точные заголовки каждого запроса. Сетевой захват показывает отдельный запрос, но не последующее состояние приложения. Отрисованная страница показывает результат для пользователя, но не источник выбора. Объединяйте только те наблюдения, которые отвечают на вопрос сценария, и не включайте посторонние сигналы в отчёт.

Ограничения интерпретации

Публичная документация BotBrowser описывает приоритет настроек и доступные параметры браузера. Решение целевого сайта остаётся самостоятельным. Сервер может игнорировать языковые предпочтения, приложение JavaScript - передавать явные параметры Intl, а сайт - запоминать выбор пользователя. Чтение одной страницы не доказывает одинаковое поведение всех маршрутов, worker-процессов, фреймов или будущих запросов.

Поведение часового пояса зависит от данных именованной зоны и форматируемой даты. Не обещайте правильный результат для всех переходов на летнее время или всех версий системных данных на основании одной проверки текущей даты. Для региональных правил используйте зону IANA, проверяйте репрезентативные даты нужного приложения и указывайте среду выполнения и изученную дату. Здесь нет записи запуска BotBrowser; приведены документированные границы конфигурации, а не результаты измерения совместимости.

Автоматическая геолокация зависит от настроенных входных данных и доступного механизма поиска; один часовой пояс не позволяет определить широту и долготу. Точность до города и совпадение с базой IP-адресов не гарантируются; сайт может вообще не запрашивать геолокацию или не использовать её. Разрешения и обработка результата приложением - отдельные условия.

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

Вопросы и ответы

Меняет ли локаль Intl значение navigator.language?

Нет. Передача локали конкретному конструктору Intl меняет разрешение локали этого форматтера. Сама по себе она не переписывает языковые свойства браузера или заголовки сетевых запросов. Если приложение передаёт явные параметры форматтера, изучите их до изменения настроек языка браузера.

Заставляет ли Accept-Language сайт показывать соответствующий язык?

Нет. Это предпочтение запроса, которое сервер может использовать при согласовании содержимого. Приложение может отдавать приоритет локали URL, сохранённой cookie, настройке учётной записи или продукту по умолчанию. Отдельно проверяйте запрос и состояние сайта; не считайте заголовок окончательным решением о языке.

Должны ли часовой пояс и локаль всегда указывать на одну страну?

Нет. Они выполняют разные задачи и намеренно могут различаться. Пользователь может предпочитать одну локаль для форматирования, просматривая расписание, привязанное к часовому поясу другого региона. Выбирайте значения исходя из требований приложения, затем проверяйте результат отображения и сетевого взаимодействия.

Какое значение выигрывает при конфликте настроек CLI и профиля?

Для каждого поля конкретное значение CLI имеет приоритет над configs выбранного профиля, после чего следует автоматический выбор. В документации не определено, перекрывает ли явно заданное в CLI auto конкретное значение профиля. Независимо разрешайте часовой пояс, локаль и языки; не считайте один флаг переопределением всей группы.

Достаточно ли часового пояса, чтобы вывести координаты геолокации?

Нет. Часовой пояс - набор правил, общий для разных мест, а не координата. Геолокация - отдельный результат API браузера, зависящий от настроек и разрешений. Если координаты важны для сценария, используйте документированный параметр местоположения и проверяйте результат разрешённого приложения.

Источники

Итог

Считайте часовой пояс, локаль форматирования, языковые предпочтения браузера, HTTP-согласование и сохранённый язык сайта отдельными входными данными. Сначала определите ошибочное наблюдение, затем проследите поле до его источника: явное значение CLI, конфигурация профиля, автоматический выбор, код приложения или состояние сайта. Оставляйте только нужные сценарию переопределения, повторяйте одну и ту же разрешённую проверку в новом контексте и не распространяйте результат на все worker-процессы, даты перехода времени, маршруты или координаты.

#Timezone#Locale#Language#Identity#Geolocation

Эта статья входит в руководство: Поверхности идентичности браузера: обзор согласованности

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.