# i18next language detector failed to detect locale from path

## TL;DR

Fixes i18next-browser-languagedetector returning no locale from the URL path. Configure the path detector order and the lookup pattern, or fix the route prefix. Use when the detector falls back to default instead of reading the path. Not for cookie or navigator detection issues.

## The error

```text
i18next: languageDetector: failed to detect language from path '/app/home', falling back to 'en'.
```

## Fix it

### Step 1: Inspect the detector order

```bash
node -e "console.log('check the order array: path should come before navigator')"
```

Expected: You see which detectors run and in what order.

### Step 2: Check the path lookup pattern

```bash
node -e "console.log('lookup pattern must match /:lng/... route prefixes')"
```

Expected: You confirm the route prefix shape the detector expects.

### Step 3: Fix the order or the route prefix and reload

```bash
node -e "console.log('visit /de/app/home and confirm the detector picks de')"
```

Expected: The detector reads the locale from the path.

## When to use this

- The detector ignores the locale in the URL path
- Deep links always land in the default language

## When NOT to use this

- Detection from cookies fails, check the cookie name config
- The browser language is picked instead, reorder the detectors

## Tool and version compatibility

- i18next-browser-languagedetector 7
- i18next 22 and 23

## Variant phrasings

### detector picks the path but the app ignores it

The app reads locale from state, not from i18next. Sync them on route change.

### works locally but not in production

The production server strips the locale prefix before the app sees it.

## Why it happens

The path detector matches the URL against a lookup pattern. If your routes use a prefix the pattern does not expect, or another detector runs first and wins, detection from the path never happens and the fallback language is used.

## Edge cases

- Hash-based routing hides the path from the detector entirely
- Trailing slashes can break strict pattern matches
- Subdomain detection and path detection conflict when both are enabled

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_suIYM9Ek25Od5xf4Tcld9Q
