Skip to content

Glossary

navigator.languages

The same list travels in a header with every request you make. A list that does not fit the country your address comes out of gives you away faster than any single hardware value.

navigator.languages is the ordered list of languages a browser reports, from the one it prefers down to its fallbacks.

Where the list is read

Two routes lead to the same answer, and a site is free to take both and compare them.

  1. 1

    A header on every request

    The list goes out in order, with a falling weight on each entry after the first.

  2. 2

    The list in script

    One line of code returns the whole list, and another returns the first entry on its own.

  3. 3

    Formatting

    Dates, numbers and currency come out in the first language, so a page can read it without asking.

Your languages right now

These are read in your browser on this page, and the clock beside them is read the same way.

A site reads the pair together, because a language and a clock from different countries do not happen by accident.

Your machine, right now

Languages
measuring on your machine
Primary language
measuring on your machine
Time zone
measuring on your machine
Hours from UTC
measuring on your machine

Read in your browser and shown here. Nothing is sent anywhere.

Why the list follows the address

Where your traffic comes out decides the list and the clock together, out of one answer.

The country is measured through the proxy itself over an encrypted connection, and several providers are asked in turn so that one refusal cannot decide who a profile is.

  • The country decides the stack

    A Ukrainian exit gets the Ukrainian stack and a German exit the German one, with the fallbacks a real browser there carries.

  • The clock comes from the same answer

    The time zone is drawn from that same country, so the two can never name different places.

  • A silent provider invents nothing

    When nobody names the country, the profile keeps the country it was born with instead of getting a guessed one.

The whole list not the first entry

Real Chrome answers with the whole stack, so a single entry standing next to a foreign address is a mark in itself.

The browser is launched with the profile's list and with the setting that shortens it turned off, and the self-test compares the entire list rather than the first entry.

What is comparedWhat the shipping run answered
Primary languageuk-UA, for a Ukrainian exit
The whole listuk-UA, uk, ru, en
Time zoneEurope/Kyiv, from that same country

Often confused with

  • The request header

    The same list sent to the server with weights, while the script value is what the page itself sees.

  • The primary language

    One value, the first entry of the list, and it is read far more often than the list is.

  • The language of the app

    The interface you read the manager in belongs to you, and it never reaches a profile.

How to check your own

The panel above shows the list your current browser answers with, and nothing leaves the page.

Inside a profile, the self-test compares the whole list and the clock against the profile, so a shortened list shows up red instead of passing quietly.

What this does not do

  • It does not translate anything. The list states a preference, and what a site shows you after reading it is still the site's decision.
  • It does not let a language and a clock drift apart. A language picked by hand moves the clock to that country and a zone picked by hand moves the language, and only setting both by hand leaves both exactly as you set them.
  • It does not follow the address in the middle of a session. The list is settled when the profile starts, so moving to another country takes effect on the next start.
  • It does not make the rest of the machine fit. Fonts, cards and behaviour are read separately, and a perfect language stack does not move any of them.

Check it

Everything above comes from a file you can open.

Where the exit country is measured
apps/desktop/src/lib/exitGeo.js · apps/desktop/test/exit-geo.js
Country, clock and list come from one draw
packages/shared/src/index.js
A language picked by hand pulls the clock along
apps/desktop/test/fingerprint-consistency.js
The measured run of the shipping engine
engine/приёмка-отчёт.json

Questions

Why does the order matter?
Because the order is half the answer. A browser that puts English first and German second is a different reader from one that does the reverse, and both orders reach the server.
Is one language enough?
No. Real Chrome carries the base language and usually English behind the regional one, so a list with a single entry stands out on its own.
Does a VPN change my languages?
No. A VPN changes the address your traffic comes out of, and the list stays whatever the browser was told to say, which is exactly the mismatch sites look for.
Where does the list come from with no proxy?
From a country drawn out of the profile's own seed, together with the clock. The pair still agrees with itself, and that agreement is what a check reads.
Can I pick the list by hand?
Yes, from the stacks the editor offers, and the clock moves to that country with it. Set both by hand when you want a combination of your own.

See the list your own profile answers with

The self-test runs inside a profile and shows all 29 measurements, green and red alike.