i18next-browser-languageDetector
Detects a visitor's language from cookies, storage, the URL, or the browser itself and wires it straight into i18next.
Repository Health
Technical Analysis
i18next-browser-languagedetector is the official i18next plugin for figuring out what language a browser visitor speaks, without you writing that logic yourself. It checks, in a configurable order, the query string, cookies, localStorage, sessionStorage, the navigator object, the <html lang> attribute, the URL path, subdomain, and URL hash, then hands the first (or best) match to i18next.
Register it once with i18next.use(LanguageDetector).init(...) and every subsequent page load or client-side navigation automatically resolves and caches the visitor’s language, with no server round-trip needed. Custom detection strategies can be added through the same addDetector interface the nine built-in detectors use.
What You Get
- Nine built-in browser-language detectors (cookie, querystring, localStorage, sessionStorage, navigator, htmlTag, path, subdomain, hash), each independently configurable and orderable
- Automatic caching of the resolved language back to cookies and/or localStorage so repeat visits skip re-detection
- A tiny
addDetector({name, lookup, cacheUserLanguage})interface for plugging in fully custom detection sources - Dual CJS/ESM builds with hand-maintained TypeScript declarations (
index.d.ts/index.d.mts) and ani18nextmodule augmentation for typeddetectionoptions - A built-in
hasXSSfilter that strips obviously malicious strings out of detected language values before they reach i18next
Common Use Cases
- Auto-selecting a locale on first visit to a client-rendered SPA based on the browser’s
navigator.language - Persisting a user’s manually-chosen language across sessions via cookie or localStorage caching
- Reading the language segment out of the URL path or subdomain for locale-prefixed routing (e.g.
/fr/pricingorfr.example.com) - Letting
?lng=dequery-string overrides win during QA/testing or shareable localized links
Under The Hood
Architecture The package exports a single Browser class (aliased LanguageDetector) implementing i18next’s LanguageDetectorModule interface (type: 'languageDetector'). On construction/init (src/index.js), it merges user options over sane defaults via a small utils.defaults helper, then registers nine built-in detector objects — cookie, querystring, localStorage, sessionStorage, navigator, htmlTag, path, subdomain, hash (each a standalone module in src/browserLookups/) — into a this.detectors map keyed by name. detect() walks the configured order array, calls each active detector’s lookup(options), flattens/dedupes results, filters out anything matching a small hasXSS regex blocklist, and applies an optional convertDetectedLanguage transform before returning the array to i18next (or a single string for i18next’s legacy synchronous API). cacheUserLanguage() mirrors this by fanning out to each cache-listed detector’s own cacheUserLanguage() method. Each detector module is self-contained with its own lookup/cacheUserLanguage pair, so adding a custom detector is just pushing another object with that shape via addDetector().
Tech Stack Plain ES module source with zero runtime dependencies beyond @babel/runtime (used only for helper injection during the build). Built via Rollup into CJS (dist/cjs) and ESM (dist/esm) targets, with a dual exports map in package.json wired for both require and import consumers, plus hand-written index.d.ts/index.d.mts declarations (the library is JS + Babel, not authored in TypeScript). Dev tooling is Mocha/expect.js for behavior tests and tsd for asserting the shipped .d.ts type-checks; ESLint (airbnb config) enforces style. i18next itself is a devDependency only, used to build a real i18next instance in tests.
Code Quality test/languageDetector.test.js (225 lines) exercises each detector individually against a real i18next instance, mocking global.document/global.window per test group — cookie, path, querystring, subdomain, storage, navigator, htmlTag, hash, cacheUserLanguage, and custom-detector registration. There’s no dedicated test for the hasXSS filter and no coverage reporting wired despite coveralls being a devDependency. Source style is consistent and each browserLookups/*.js file has a single clear responsibility; document.cookie access is guarded with try/catch at load time to survive non-browser environments, but individual lookups otherwise assume well-formed browser globals.
API Design The public surface is a single default-exported class matching i18next’s plugin contract exactly, so setup for anyone already on i18next is one line: i18next.use(LanguageDetector).init({...}). Options are a flat, well-documented object with sensible defaults, so most consumers never touch them. The addDetector interface for custom detectors mirrors the shape of the built-ins, making the extension model easy to learn from the source itself. A couple of legacy aliased options exist for backwards compatibility (e.g. lookupFromUrlIndex silently mapping to lookupFromPathIndex), adding minor cognitive overhead, but the README documents every option with inline defaults and a full custom-detector example.
Used by 53 apps in this directory
ntfy
Developer Tools · Marketing
Send push notifications to your phone or desktop from any script or service using a single HTTP PUT or POST—no sign-up required.
OneUptime
Monitoring
The complete open-source observability platform that replaces PagerDuty, Datadog, Sentry, and StatusPage with a single self-hostable system.
open-notebook
AI Assistants · Note Taking
A privacy-first, self-hosted AI research notebook with 18+ model providers, multi-speaker podcast generation, and full REST API—your open-source alternative to Google Notebook LM.
Open WebUI
AI Agents · AI Assistants
The extensible, privacy-first AI platform that runs Ollama, OpenAI, and any LLM backend behind a polished, feature-packed web interface.
opencloud
File Storage
Open source file management and collaboration platform that keeps your data under your control, no database required.
OpenHands
AI Code Assistants · AI Development
The self-hosted developer control center for running AI coding agents — locally, in Docker, on VMs, or across cloud backends — with automation workflows for GitHub, Slack, and more.
OpenPanel
Devops · Hosting Control Panel
Docker-powered web hosting control panel that gives every user a fully isolated environment with dedicated web server, database, and networking — VPS-grade security on shared hardware.
OpenReplay
Analytics
Self-hosted session replay and product analytics suite that lets you see exactly what users do on your web app — without sending data to third parties.
OpenSign
Digital Signiture
Self-host a full-featured DocuSign alternative with unlimited e-signatures, multi-signer workflows, and cryptographic PDF signing.