frontAnswerer/src/i18n/i18n.ts

64 lines
1.9 KiB
TypeScript
Raw Normal View History

2025-04-20 15:16:22 +00:00
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) {
2025-04-21 23:09:44 +00:00
//console.log("Язык из URL:", langMatch[1]);
2025-04-20 15:16:22 +00:00
return langMatch[1].toLowerCase();
}
2025-04-21 23:09:44 +00:00
//console.log('Язык не указан в URL, используем "ru"');
2025-04-20 15:16:22 +00:00
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(() => {
2025-04-21 23:09:44 +00:00
//console.log("i18n инициализирован! Текущий язык:", i18n.language);
//console.log("Загруженные переводы:", i18n.store.data);
2025-04-20 15:16:22 +00:00
})
.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;