Navigator: languages property
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.
Thelanguages read-only property of theNavigator interfacereturns an array of strings representing the user's preferredlanguages. The language is described using aBCP 47 language tag. In the returnedarray they are ordered by preference with the most preferred language first.
The value ofnavigator.language is thefirst element of the returned array.
When its value changes, as the user's preferred languages are changed alanguagechange event is fired on theWindow object.
TheAccept-Language HTTP header in every HTTP request from the user's browser generally lists the same locales as thenavigator.languages property, with decreasingq values (quality values). Some browsers (Chrome and Safari) add language-only fallback tags inAccept-Language—for example,en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7 whennavigator.languages is["en-US", "zh-CN"]. For privacy purposes (reducingfingerprinting), bothAccept-Language andnavigator.languages may not include the full list of user preferences, such as in Safari (always) and Chrome's incognito mode, where only one language is listed.
In this article
Value
An array of strings.
Examples
>Listing the contents of navigator.language and navigator.languages
navigator.language; // "en-US"navigator.languages; // ["en-US", "zh-CN", "ja-JP"]Using Intl constructors to do language-specific formatting, with fallback
The array of language identifiers contained innavigator.languages can be passed directly to theIntl constructors to implement preference-based fallback selection of locales, where the first entry in the list that matches a locale supported byIntl is used:
const date = new Date("2012-05-24");const formattedDate = new Intl.DateTimeFormat(navigator.languages).format(date);Specifications
| Specification |
|---|
| HTML> # dom-navigator-languages-dev> |