i18n
Detection
Browser language detection and localStorage persistence.
Import from @workspace/i18n/detection.
Detection Flow
detectPreferredLanguage follows this priority order:
localStorage ("preferred-language")
↓ not found or not in allowedCodes
navigator.language (base code, e.g. "en" from "en-US")
↓ not found or not in allowedCodes
fallback parameterdetectPreferredLanguage
Detects the user's preferred language by checking localStorage first, then the browser's navigator.language. Returns a language guaranteed to be in the allowedCodes array.
import { detectPreferredLanguage } from '@workspace/i18n/detection';
import { ALL_LANGUAGE_CODES } from '@workspace/i18n/constants';
// For apps/web (all languages)
const preferred = detectPreferredLanguage(ALL_LANGUAGE_CODES, 'fr');
// For apps/app (subset)
const appPreferred = detectPreferredLanguage(['fr', 'en'] as const, 'fr');| Parameter | Type | Description |
|---|---|---|
allowedCodes | readonly T[] | The languages supported by the app |
fallback | T | The fallback language if detection fails |
saveLanguagePreference
Saves the user's language preference to localStorage. Call this when the user explicitly chooses a language (e.g., from a dropdown or the "stay" button on a language banner).
import { saveLanguagePreference } from '@workspace/i18n/detection';
saveLanguagePreference('en');
// localStorage.setItem("preferred-language", "en")Silently handles environments where localStorage is unavailable (SSR, private browsing).
clearLanguagePreference
Removes the stored language preference from localStorage. Useful for testing or resetting user preferences.
import { clearLanguagePreference } from '@workspace/i18n/detection';
clearLanguagePreference();
// localStorage.removeItem("preferred-language")