Files
PinchChat/src/hooks/useLocale.ts
Nicolas Varrot 9b3aed4adc feat: add runtime language selector in header (EN/FR toggle)
- Add LanguageSelector component with globe icon + cycle button
- Refactor i18n to support reactive locale switching via useSyncExternalStore
- Locale priority: localStorage > VITE_LOCALE > navigator.language > 'en'
- All components now use useT() hook for reactive re-rendering on locale change
- Persists choice to localStorage (key: pinchchat-locale)
- No page reload needed — instant switch
2026-02-11 16:18:22 +00:00

17 lines
557 B
TypeScript

import { useSyncExternalStore } from 'react';
import { getLocale, onLocaleChange, t as rawT, type TranslationKey } from '../lib/i18n';
/** Re-renders component when locale changes. Returns the current locale string. */
export function useLocale(): string {
return useSyncExternalStore(onLocaleChange, getLocale, getLocale);
}
/**
* Reactive translation hook.
* Components using this will automatically re-render when locale changes.
*/
export function useT(): (key: TranslationKey) => string {
useLocale(); // subscribe to changes
return rawT;
}