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, }, react: { useSuspense: false, // Отключаем для совместимости с React 18 }, detection: { order: ["path"], // Только из URL lookupFromPathIndex: 0, caches: [], // Не использовать localStorage }, }) .then(() => { //console.log("i18n инициализирован! Текущий язык:", i18n.language); //console.log("Загруженные переводы:", i18n.store.data); }) .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); }); export default i18n;