All hooks / Page, device, and user
usePreferredLanguages
The user's preferred languages from the browser, most preferred first (navigator.languages), updated when the user changes them.
Renders serverValue on the server and during hydration, then switches to the browser's list with no hydration mismatch.
Import
import { usePreferredLanguages } from '@vincent.ri/react-tils'
// or only this hook
import { usePreferredLanguages } from '@vincent.ri/react-tils/usePreferredLanguages'Usage
const [language] = usePreferredLanguages()
const price = new Intl.NumberFormat(language, { style: 'currency', currency: 'EUR' }).format(9.99)Live demo
From your browser's language settings.
When to use it
Picking a default locale, suggesting a translation, or formatting with Intl in the user's language.
When not to
The server must render the right language on the first response; read the Accept-Language header on the server instead, and pass it as serverValue so the client agrees. Don't override a language the user chose explicitly in your app.
API
function usePreferredLanguages(serverValue?: readonly string[]): readonly string[]| Parameter | Description |
|---|---|
serverValue | Languages on the server and during hydration. Default ['en']. Pass the parsed Accept-Language header if you have it, as a constant or memoized array. |
Browser support
| Uses | Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS |
|---|---|---|---|---|---|---|
| navigator.languagesWidely available | 37+ | 16+ | 32+ | 10.1+ | 37+ | 10.3+ |
First version with support, from MDN's compatibility data (web-features 3.42.0, @mdn/browser-compat-data 8.1.5).