i18next-browser-languageDetector

Detects a visitor's language from cookies, storage, the URL, or the browser itself and wires it straight into i18next.

Library
npm
v8.2.2
972 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
63 /100 Good
Development Activity 76
Maintenance 28
Community 60
Maturity 60
Momentum 28

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
77 /100 Good
Architecture 82
Code Quality 68
Innovation 80
Learning Curve 78

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 an i18next module augmentation for typed detection options
  • A built-in hasXSS filter 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/pricing or fr.example.com)
  • Letting ?lng=de query-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

Python
73%
AGPL 3.0

OpenViking

AI Development · AI Memory · Databases

40,705

An open-source context database that gives AI agents a unified filesystem for memory, resources, and skills with hierarchical tiered retrieval.

View details
85
Repo Health
75
Technical
64
Dependency
Built with
Python 73%
TypeScript 12%
Rust 11%
Updated 6 days ago
TypeScript
51%
ZLIB

Portainer

Devops

38,707

A lightweight, open-source web UI that puts Docker, Kubernetes, and Podman management within reach of any team—no CLI expertise required.

View details
93
Repo Health
79
Technical
65
Dependency
Built with
TypeScript 51%
Go 38%
Updated 1 weeks ago
TypeScript
81%
AGPL 3.0

Postiz

Automation · Social Media

37,683

The agentic social media scheduler — AI-powered content creation, 33-platform posting, and team workflows, all self-hosted.

View details
92
Repo Health
70
Technical
63
Dependency
Built with
TypeScript 81%
JavaScript 11%
Updated 1 weeks ago
Rust
63%
MIT

Readur

Bookmarks Archiving · File Storage · Knowledge Management

804

A self-hosted document management system that OCRs, indexes, and makes every PDF, scan, and Office file instantly searchable.

View details
83
Repo Health
78
Technical
67
Dependency
Built with
Rust 63%
TypeScript 32%
Updated 6 days ago
TypeScript
96%
Other

Refly

AI Development · Automation · No Code Platforms

7,537

Build deterministic, versioned agent skills from natural language—run them anywhere from Claude Code to Slack.

View details
68
Repo Health
76
Technical
63
Dependency
Built with
TypeScript 96%
Updated 1 weeks ago
TypeScript
50%
Other

SigNoz

Analytics · Monitoring

32,429

Self-host your entire observability stack — logs, metrics, traces, and LLM monitoring — in one OpenTelemetry-native platform, without the Datadog bill.

View details
92
Repo Health
83
Technical
64
Dependency
Built with
TypeScript 50%
Go 38%
Updated 1 weeks ago
TypeScript
96%
MIT

SplitPro

Invoicing Finance

1,474

Self-hosted, open source expense splitting with multi-currency, recurring bills, and bank imports — a complete Splitwise replacement you control.

View details
86
Repo Health
77
Technical
69
Dependency
Built with
TypeScript 96%
Updated 1 weeks ago
TypeScript
47%
Other

Stirling PDF

Digital Signiture · Productivity

94,824

The open-source PDF platform you can run anywhere — edit, convert, sign, and automate PDFs without sending files to external servers.

View details
92
Repo Health
86
Technical
68
Dependency
Built with
TypeScript 47%
Java 44%
Updated 6 days ago
TypeScript
92%
MIT

SuperSplat

AI Design Tools · Design Tools

10,450

The free, browser-based 3D Gaussian Splat editor — inspect, edit, crop, optimize and publish splat scenes without installing anything.

View details
91
Repo Health
73
Technical
0
Dependency
Built with
TypeScript 92%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers