"use client"; import { useEffect, useState } from 'react'; import { NextIntlClientProvider } from 'next-intl'; import { useLocaleStore } from '@/stores/locale-store'; import enMessages from '@/locales/en/common.json'; import frMessages from '@/locales/fr/common.json'; // Pre-loaded translations (loaded at build time, not runtime) const ALL_MESSAGES = { en: enMessages, fr: frMessages, }; interface IntlProviderProps { locale: string; messages: Record; children: React.ReactNode; } export function IntlProvider({ locale: initialLocale, children }: IntlProviderProps) { const currentLocale = useLocaleStore((state) => state.locale); const setLocale = useLocaleStore((state) => state.setLocale); const [activeLocale, setActiveLocale] = useState(currentLocale || initialLocale); const [timeZone, setTimeZone] = useState('UTC'); // Detect user's timezone on mount useEffect(() => { try { const detectedTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; setTimeZone(detectedTimeZone); } catch (error) { // Fallback to UTC if detection fails console.warn('Failed to detect timezone, using UTC:', error); setTimeZone('UTC'); } }, []); // Sync initial locale with store on first mount only useEffect(() => { if (!currentLocale) { setLocale(initialLocale); } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); // Switch locale immediately when store changes useEffect(() => { if (currentLocale) { setActiveLocale(currentLocale); } }, [currentLocale]); return ( {children} ); }