All hooks / Page, device, and user

usePreferredLanguages

159 B minified and brotliedSourceMarkdown✓ Works in all modern browsers

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.

en

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[]
ParameterDescription
serverValueLanguages 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

UsesChromeEdgeFirefoxSafariChrome AndroidSafari iOS
navigator.languagesWidely available37+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).