frontAnswerer/src/i18n/i18n.ts
2025-08-13 00:56:46 +03:00

92 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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) {
const detectedLang = langMatch[1].toLowerCase();
return detectedLang;
}
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("⚠️ Main i18n: Missing translation:", key);
return key; // Вернёт ключ вместо ошибки
},
missingKeyHandler: (lngs, ns, key) => {
console.error("🚨 Main i18n: Missing i18n key:", {
key,
languages: lngs,
namespace: ns,
stack: new Error().stack, // Выведет стек вызовов
});
},
})
.catch((err) => {
console.error("❌ Main i18n: Initialization failed:", err);
});
// 3. Логирование всех событий
i18n.on("languageChanged", (lng) => {
console.log("🔄 Main i18n: Language changed to:", lng);
});
i18n.on("initialized", (options) => {
console.log("🎯 Main i18n: Initialized event fired with options:", options);
});
i18n.on("failedLoading", (lng, ns, msg) => {
console.error(`💥 Main i18n: Failed loading ${lng}.json:`, msg);
// Если не удалось загрузить русский, пробуем английский
if (lng === "ru") {
console.log("🔄 Main i18n: Trying to load English as fallback");
i18n.changeLanguage("en");
}
});
i18n.on("loaded", (loaded) => {
console.log("📦 Main i18n: Translations loaded:", loaded);
});
i18n.on("missingKey", (lngs, namespace, key, res) => {
console.warn("⚠️ Main i18n: Missing key event:", { lngs, namespace, key, res });
});
export default i18n;