import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import HttpApi from 'i18next-http-backend'; import logger from './utils/errorLogger'; // Essential namespaces that should be preloaded to prevent Suspense const ESSENTIAL_NAMESPACES = [ 'common', 'tasks/task-table-bulk-actions', 'task-management', 'auth/login', 'settings' ]; i18n .use(HttpApi) .use(initReactI18next) .init({ fallbackLng: 'en', backend: { loadPath: '/locales/{{lng}}/{{ns}}.json', }, defaultNS: 'common', ns: ESSENTIAL_NAMESPACES, interpolation: { escapeValue: false, }, // Preload essential namespaces preload: ['en', 'es', 'pt', 'alb', 'de'], // Load all namespaces on initialization load: 'languageOnly', // Cache translations cache: { enabled: true, expirationTime: 24 * 60 * 60 * 1000, // 24 hours }, }); // Utility function to ensure translations are loaded export const ensureTranslationsLoaded = async (namespaces: string[] = ESSENTIAL_NAMESPACES) => { const currentLang = i18n.language || 'en'; try { // Load all essential namespaces for the current language await Promise.all( namespaces.map(ns => i18n.loadNamespaces(ns).catch(() => { logger.error(`Failed to load namespace: ${ns}`); }) ) ); // Also preload for other languages to prevent delays on language switch const otherLangs = ['en', 'es', 'pt', 'alb', 'de'].filter(lang => lang !== currentLang); await Promise.all( otherLangs.map(lang => Promise.all( namespaces.map(ns => i18n.loadNamespaces(ns).catch(() => { logger.error(`Failed to load namespace: ${ns}`); }) ) ) ) ); return true; } catch (error) { logger.error('Failed to load translations:', error); return false; } }; // Initialize translations on app startup ensureTranslationsLoaded(); export default i18n;