From 8a09356208e161cb2d5d04480a4ba58d1898210d Mon Sep 17 00:00:00 2001 From: Nastya Date: Tue, 1 Jul 2025 17:26:50 +0300 Subject: [PATCH] fix --- lib/assets/icons/NameplateLogo.tsx | 94 ++++++++++++++---------- lib/assets/icons/NameplateLogoFQ.tsx | 44 +++++++---- lib/assets/icons/NameplateLogoFQDark.tsx | 44 +++++++---- src/i18n/i18nWidget.ts | 9 ++- 4 files changed, 123 insertions(+), 68 deletions(-) diff --git a/lib/assets/icons/NameplateLogo.tsx b/lib/assets/icons/NameplateLogo.tsx index 8558c5f..425ae33 100644 --- a/lib/assets/icons/NameplateLogo.tsx +++ b/lib/assets/icons/NameplateLogo.tsx @@ -1,21 +1,39 @@ import { FC, SVGProps } from "react"; -import { useLocation } from "react-router-dom"; + +// Fallback функция для получения языка, когда React Router недоступен +const getLanguageFromUrlFallback = (): string => { + const path = window.location.pathname; + const langMatch = path.match(/^\/(en|ru|uz)(\/|$)/i); + if (langMatch) { + return langMatch[1].toLowerCase(); + } + return "ru"; +}; export const NameplateLogo: FC> = (props) => { - const location = useLocation(); - const pathname = location.pathname; + let lang = "ru"; // fallback - const getLanguageFromUrl = () => { - const parts = pathname.split("/"); - if (parts.length >= 2) { - const langSegment = parts[1].toLowerCase(); - if (langSegment === "en") return "en"; - if (langSegment === "uz") return "uz"; - } - return "ru"; - }; + try { + // Пытаемся использовать React Router + const { useLocation } = require("react-router-dom"); + const location = useLocation(); + const pathname = location.pathname; - const lang = getLanguageFromUrl(); // Оптимизация - вызываем функцию один раз + const getLanguageFromUrl = () => { + const parts = pathname.split("/"); + if (parts.length >= 2) { + const langSegment = parts[1].toLowerCase(); + if (langSegment === "en") return "en"; + if (langSegment === "uz") return "uz"; + } + return "ru"; + }; + + lang = getLanguageFromUrl(); + } catch (error) { + // Если React Router недоступен (в виджете), используем fallback + lang = getLanguageFromUrlFallback(); + } if (lang === "ru") return ; if (lang === "en") return ; @@ -40,26 +58,24 @@ const UZ: FC> = (props) => ( - - ); @@ -160,7 +176,7 @@ const RU: FC> = (props) => ( /> ); @@ -174,31 +190,29 @@ const EN: FC> = (props) => ( xmlns="http://www.w3.org/2000/svg" > - - diff --git a/lib/assets/icons/NameplateLogoFQ.tsx b/lib/assets/icons/NameplateLogoFQ.tsx index d94fcb7..fd66f0b 100644 --- a/lib/assets/icons/NameplateLogoFQ.tsx +++ b/lib/assets/icons/NameplateLogoFQ.tsx @@ -1,21 +1,39 @@ import { FC, SVGProps } from "react"; -import { useLocation } from "react-router-dom"; + +// Fallback функция для получения языка, когда React Router недоступен +const getLanguageFromUrlFallback = (): string => { + const path = window.location.pathname; + const langMatch = path.match(/^\/(en|ru|uz)(\/|$)/i); + if (langMatch) { + return langMatch[1].toLowerCase(); + } + return "ru"; +}; export const NameplateLogoFQ: FC> = (props) => { - const location = useLocation(); - const pathname = location.pathname; + let lang = "ru"; // fallback - const getLanguageFromUrl = () => { - const parts = pathname.split("/"); - if (parts.length >= 2) { - const langSegment = parts[1].toLowerCase(); - if (langSegment === "en") return "en"; - if (langSegment === "uz") return "uz"; - } - return "ru"; - }; + try { + // Пытаемся использовать React Router + const { useLocation } = require("react-router-dom"); + const location = useLocation(); + const pathname = location.pathname; - const lang = getLanguageFromUrl(); // Оптимизация - вызываем функцию один раз + const getLanguageFromUrl = () => { + const parts = pathname.split("/"); + if (parts.length >= 2) { + const langSegment = parts[1].toLowerCase(); + if (langSegment === "en") return "en"; + if (langSegment === "uz") return "uz"; + } + return "ru"; + }; + + lang = getLanguageFromUrl(); + } catch (error) { + // Если React Router недоступен (в виджете), используем fallback + lang = getLanguageFromUrlFallback(); + } if (lang === "ru") return ; if (lang === "en") return ; diff --git a/lib/assets/icons/NameplateLogoFQDark.tsx b/lib/assets/icons/NameplateLogoFQDark.tsx index d3d0515..f8266a6 100644 --- a/lib/assets/icons/NameplateLogoFQDark.tsx +++ b/lib/assets/icons/NameplateLogoFQDark.tsx @@ -1,21 +1,39 @@ import { FC, SVGProps } from "react"; -import { useLocation } from "react-router-dom"; + +// Fallback функция для получения языка, когда React Router недоступен +const getLanguageFromUrlFallback = (): string => { + const path = window.location.pathname; + const langMatch = path.match(/^\/(en|ru|uz)(\/|$)/i); + if (langMatch) { + return langMatch[1].toLowerCase(); + } + return "ru"; +}; export const NameplateLogoFQDark: FC> = (props) => { - const location = useLocation(); - const pathname = location.pathname; + let lang = "ru"; // fallback - const getLanguageFromUrl = () => { - const parts = pathname.split("/"); - if (parts.length >= 2) { - const langSegment = parts[1].toLowerCase(); - if (langSegment === "en") return "en"; - if (langSegment === "uz") return "uz"; - } - return "ru"; - }; + try { + // Пытаемся использовать React Router + const { useLocation } = require("react-router-dom"); + const location = useLocation(); + const pathname = location.pathname; - const lang = getLanguageFromUrl(); // Оптимизация - вызываем функцию один раз + const getLanguageFromUrl = () => { + const parts = pathname.split("/"); + if (parts.length >= 2) { + const langSegment = parts[1].toLowerCase(); + if (langSegment === "en") return "en"; + if (langSegment === "uz") return "uz"; + } + return "ru"; + }; + + lang = getLanguageFromUrl(); + } catch (error) { + // Если React Router недоступен (в виджете), используем fallback + lang = getLanguageFromUrlFallback(); + } if (lang === "ru") return ; if (lang === "en") return ; diff --git a/src/i18n/i18nWidget.ts b/src/i18n/i18nWidget.ts index 693e57a..2bbdc33 100644 --- a/src/i18n/i18nWidget.ts +++ b/src/i18n/i18nWidget.ts @@ -70,8 +70,7 @@ const r = { "questions are not ready yet": "Вопросы для аудитории ещё не созданы. Пожалуйста, подождите", "Add your image": "Добавьте своё изображение", "select emoji": "выберите смайлик", - "file is too big": "Файл слишком большой", - "file type is not supported": "Тип файла не поддерживается", + "": "", // Пустой ключ для fallback }, en: { "quiz is inactive": "Quiz is inactive", @@ -132,6 +131,7 @@ const r = { "questions are not ready yet": "There are no questions for the audience yet. Please wait", "Add your image": "Add your image", "select emoji": "select emoji", + "": "", // Пустой ключ для fallback }, uz: { "quiz is inactive": "Test faol emas", @@ -192,6 +192,7 @@ const r = { "questions are not ready yet": "Tomoshabinlar uchun hozircha savollar yo'q. Iltimos kuting", "Add your image": "Rasmingizni qo'shing", "select emoji": "emoji tanlang", + "": "", // Пустой ключ для fallback }, }; @@ -230,6 +231,10 @@ i18n }) .then(() => { console.log("i18n initialized. Current language:", i18n.language); + console.log("Available languages:", i18n.languages); + console.log("Available keys for ru:", Object.keys(r.ru)); + console.log("Available keys for en:", Object.keys(r.en)); + console.log("Available keys for uz:", Object.keys(r.uz)); }); // 4. Логирование событий