import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import Backend from "i18next-http-backend"; // 1. Функция для принудительного определения языка из URL const getLanguageFromURL = (): string => { const path = window.location.pathname; // Регулярка для /en/ /ru/ /uz/ в начале пути const langMatch = path.match(/^\/(en|ru|uz)(\/|$)/i); if (langMatch) { //console.log("Язык из URL:", langMatch[1]); return langMatch[1].toLowerCase(); } //console.log('Язык не указан в URL, используем "ru"'); return "ru"; // Жёсткий фолбэк }; // 2. Конфиг с полной отладкой i18n .use(Backend) .use(initReactI18next) .init({ lng: getLanguageFromURL(), // Принудительно из URL fallbackLng: "ru", supportedLngs: ["en", "ru", "uz"], debug: true, interpolation: { escapeValue: false, }, backend: { loadPath: "/locales/{{lng}}.json", allowMultiLoading: false, requestOptions: { cache: "no-store", }, }, react: { useSuspense: false, // Отключаем для совместимости с React 18 }, detection: { order: ["path"], // Только из URL lookupFromPathIndex: 0, caches: [], // Не использовать localStorage }, parseMissingKeyHandler: (key) => { console.warn("Missing translation:", key); return key; // Вернёт ключ вместо ошибки }, missingKeyHandler: (lngs, ns, key) => { console.error("🚨 Missing i18n key:", { key, languages: lngs, namespace: ns, stack: new Error().stack, // Выведет стек вызовов }); }, }) .then(() => { console.log("i18n initialized. Current language:", i18n.language); console.log("Loading translations from:", `/locales/${i18n.language}.json`); }) .catch((err) => { console.error("Ошибка i18n:", err); }); // 3. Логирование всех событий i18n.on("languageChanged", (lng) => { console.log("Язык изменён на:", lng); }); i18n.on("failedLoading", (lng, ns, msg) => { console.error(`Ошибка загрузки ${lng}.json:`, msg); // Если не удалось загрузить русский, пробуем английский if (lng === "ru") { console.log("Пробуем загрузить английский язык как fallback"); i18n.changeLanguage("en"); } }); i18n.on("loaded", (loaded) => { console.log("Переводы загружены:", loaded); }); i18n.on("missingKey", (lngs, namespace, key, res) => { console.warn("Отсутствует ключ перевода:", { lngs, namespace, key, res }); }); export default i18n;