diff --git a/components/layout/footer.tsx b/components/layout/footer.tsx index 8bb17fd..f6f13f5 100644 --- a/components/layout/footer.tsx +++ b/components/layout/footer.tsx @@ -63,8 +63,8 @@ export function Footer() { if (email) { // Telefon raqamni tozalash (faqat raqamlar) const cleanPhone = email.replace(/\D/g, ""); - console.log("without 998: ",cleanPhone.slice(3)) - formRequest.mutate({ number: Number(cleanPhone.slice(3))}); + console.log("without 998: ", cleanPhone.slice(3)); + formRequest.mutate({ number: Number(cleanPhone.slice(3)) }); } }; @@ -76,7 +76,7 @@ export function Footer() { "linear-gradient(to top right, #452811 0%, #000000 20%, #000000 40%, #000000 60%, #000000 80%, #000000 100%)", }} > - {/* Newsletter Section for gitea */} + {/* Newsletter Section */}
@@ -241,18 +241,28 @@ export function Footer() { {/* Copyright Section */}
-
- - {t("footer.create", { name: "Felix-its.uz" })} - - {/* */} +
+ {locale === "uz" ? ( +
+ + Felix-its.uz + +

- Jamoasi tomonidan ishlab chiqilgan

+
+ ) : ( +
+ {locale === "ru" ?

Разработано -

:

Created by -

} + + Felix-its.uz + +
+ )}
diff --git a/components/pages/contact/main.tsx b/components/pages/contact/main.tsx index 0224e8c..0a04905 100644 --- a/components/pages/contact/main.tsx +++ b/components/pages/contact/main.tsx @@ -42,7 +42,7 @@ export function Contact() { className="absolute inset-0" style={{ background: - "radial-gradient(at center bottom, rgb(144 74 20) 0%, rgba(30, 29, 28, 0.914) 70%, rgba(30, 29, 28, 0.914) 70%)", + "radial-gradient(at center bottom, rgb(144 74 20) 0%, rgba(30, 29, 28, 0.914) 50%, rgba(30, 29, 28, 0.914) 70%)", }} />
diff --git a/components/pages/home/blog/catalog.tsx b/components/pages/home/blog/catalog.tsx index 857b94d..397af3c 100644 --- a/components/pages/home/blog/catalog.tsx +++ b/components/pages/home/blog/catalog.tsx @@ -7,6 +7,7 @@ import CatalogCardSkeleton from "@/components/loadingSkleton"; import EmptyData from "@/components/EmptyData"; import { getRouteLang } from "@/request/getLang"; import { CategoryType } from "@/lib/types"; +import { useTranslations } from "next-intl"; export default function Catalog() { const language = getRouteLang(); @@ -15,6 +16,7 @@ export default function Catalog() { queryFn: () => httpClient(endPoints.category.all), select: (data): CategoryType[] => data?.data?.results, }); + const t = useTranslations(); if (isLoading) { return ( @@ -30,8 +32,8 @@ export default function Catalog() { if (!data || data.length === 0) { return ( ); diff --git a/components/pages/products/catalog.tsx b/components/pages/products/catalog.tsx index 30818ec..14ed875 100644 --- a/components/pages/products/catalog.tsx +++ b/components/pages/products/catalog.tsx @@ -91,7 +91,7 @@ export default function CatalogCard({ {/* Background glow effect */}
diff --git a/components/pages/services/empty.tsx b/components/pages/services/empty.tsx index a225d0c..46cd7e5 100644 --- a/components/pages/services/empty.tsx +++ b/components/pages/services/empty.tsx @@ -12,7 +12,7 @@ export function EmptyServices() { transition={{ duration: 0.5 }} className="max-w-250 w-full mx-auto py-20" > -
+
- {t("home.services.noData.title") || "Xizmatlar topilmadi"} + {t("operationalSystems.noData.title") || "Xizmatlar topilmadi"} - {t("home.services.noData.description") || "Hozircha hech qanday xizmat mavjud emas. Tez orada yangi xizmatlar qo'shiladi."} + {t("operationalSystems.noData.description") || "Hozircha hech qanday xizmat mavjud emas. Tez orada yangi xizmatlar qo'shiladi."} window.location.reload()} className="font-almarai bg-red-600 hover:bg-red-700 text-white font-semibold py-3 px-8 rounded-full transition-all duration-300 transform hover:scale-105 shadow-lg hover:shadow-red-500/50" > - {t("home.services.noData.reload") || "Qayta yuklash"} + {t("operationalSystems.noData.empty") || "Qayta yuklash"}
diff --git a/components/pages/services/loading.tsx b/components/pages/services/loading.tsx index 4b40299..840fcf3 100644 --- a/components/pages/services/loading.tsx +++ b/components/pages/services/loading.tsx @@ -1,14 +1,13 @@ import { motion } from "framer-motion"; - // Loading Skeleton Component function ServiceCardSkeleton() { return ( -
-
-
-
-
+
+
+
+
+
); } @@ -38,9 +37,9 @@ export function ServicesLoading() {
-
+
); -} \ No newline at end of file +} diff --git a/components/pages/services/ourService.tsx b/components/pages/services/ourService.tsx index da67124..c8f3648 100644 --- a/components/pages/services/ourService.tsx +++ b/components/pages/services/ourService.tsx @@ -131,8 +131,8 @@ export function OurService() {
-
- +
+

{t("home.services.viewMoreServices")} diff --git a/messages/en.json b/messages/en.json index 9bfa2b3..27c9483 100644 --- a/messages/en.json +++ b/messages/en.json @@ -146,6 +146,10 @@ } }, "products": { + "noData": { + "title": "Catalog Not Found", + "description": "There are currently no categories available. Please check back later." + }, "catalog": { "blockdescription": "Polypropylene pipes and fittings for automatic fire suppression systems and internal fire water supply", "cadescription": "Equipment for automatic fire suppression", @@ -223,14 +227,20 @@ "help": "Help" }, "address": "Tashkent city, Yunusabad district, 3rd dead-end of Niyozbek Yoli street, house 39", - "create": "Created by {name}" + "create": "Created by {name}", + "terms": "Terms & Conditions", + "privacy": "Privacy Policy" }, "operationalSystems": { "title": "Operating Systems", "subtitle": "Automatic fire detection and extinguishing systems. Latest technological achievements.", "loading": "Loading...", "error": "An error occurred. Please try again.", - "noData": "No data found", + "noData": { + "empty": "No data found", + "title": "No Services Found", + "description": "There are currently no services available. New services will be added soon." + }, "retry": "Retry", "features": "Features", "systems": { diff --git a/messages/ru.json b/messages/ru.json index 3ba5513..a71abeb 100644 --- a/messages/ru.json +++ b/messages/ru.json @@ -146,6 +146,10 @@ } }, "products": { + "noData": { + "title": "Каталог не найден", + "description": "В настоящее время категории отсутствуют. Пожалуйста, зайдите позже." + }, "catalog": { "blockdescription": "Полипропиленовые трубы и фитинги для систем автоматического пожаротушения и внутреннего противопожарного водопровода", "cadescription": "Оборудование для автоматического пожаротушения", @@ -223,20 +227,26 @@ "help": "Помощь" }, "address": "г. Ташкент, Юнусабадский район, 3-й тупик улицы Ниязбек йўли, дом 39", - "create": "Разработано {name}" + "create": "Разработано", + "terms": "Условия использования", + "privacy": "Политика конфиденциальности" }, "operationalSystems": { "title": "Операционные системы", "subtitle": "Системы автоматического обнаружения и тушения пожаров. Последние достижения технологий.", "loading": "Загрузка...", "error": "Произошла ошибка. Пожалуйста, попробуйте снова.", - "noData": "Данные не найдены", + "noData": { + "empty": "Данные не найдены", + "title": "Услуги не найдены", + "description": "В настоящее время нет доступных услуг. Новые услуги будут добавлены в ближайшее время." + }, "retry": "Повторить", "features": "Характеристики", "systems": { "sprinkler": { "title": "Спринклерная система пожаротушения", - "short-desc":"Системы автоматического обнаружения и тушения пожаров. Новейшие достижения технологий.", + "short-desc": "Системы автоматического обнаружения и тушения пожаров. Новейшие достижения технологий.", "description": "Спринклерная система пожаротушения контролирует и тушит пожар на начальной стадии путем автоматического распыления воды. Система автоматически активируется при повышении температуры и работает только в зоне обнаружения пожара.", "features": [ "Автоматический механизм активации", diff --git a/messages/uz.json b/messages/uz.json index 70acbf8..ac56ed0 100644 --- a/messages/uz.json +++ b/messages/uz.json @@ -146,6 +146,10 @@ } }, "products": { + "noData":{ + "title":"Katalog topilmadi", + "description":"Hozircha kategoriyalar mavjud emas. Keyinroq urinib ko'ring" + }, "catalog": { "blockdescription": "Avtomatik yong‘in o‘chirish tizimlari va ichki yong‘inga qarshi suv ta’minoti uchun polipropilen quvurlar va fitinglar", "cadescription": "Avtomatik yong‘in o‘chirish uchun uskunalar", @@ -223,20 +227,26 @@ "help": "Yordam" }, "address": "Toshkent shahri , Yunusabod tumani , Niyozbek yo'li 3 tor ko'chasi , 39 uy", - "create": "{name} - Jamoasi tomonidan ishlab chiqilgan" + "create": "{name} - Jamoasi tomonidan ishlab chiqilgan", + "terms":"Foydalanish shartlari", + "privacy":"Maxfiylik siyosati" }, "operationalSystems": { "title": "Operatsion tizimlar", "subtitle": "Yong'inni avtomatik aniqlash va o'chirish tizimlari. Texnologiyaning eng so'nggi yutuqlari.", "loading": "Yuklanmoqda...", "error": "Xatolik yuz berdi. Iltimos, qaytadan urinib ko'ring.", - "noData": "Ma'lumotlar topilmadi", + "noData": { + "empty": "Ma'lumotlar topilmadi", + "title": "Xizmatlar topilmadi", + "description": "Hozircha hech qanday xizmat mavjud emas. Tez orada yangi xizmatlar qo'shiladi." + }, "retry": "Qayta urinish", "features": "Hususiyatlari", "systems": { "sprinkler": { "title": "Sprinklerli yong'in o'chirish tizimi", - "short-desc":"Yong'inni avtomatik aniqlash va o'chirish tizimlari. Texnologiyaning eng so'nggi yutuqlari.", + "short-desc": "Yong'inni avtomatik aniqlash va o'chirish tizimlari. Texnologiyaning eng so'nggi yutuqlari.", "description": "Sprinklerli yong'in o'chirish tizimi avtomatik suv purkash orqali yong'inni dastlabki bosqichida nazorat qiladi va o'chiradi. Tizim harorat oshganda avtomatik ishga tushadi va faqat yong'in aniqlangan hududda faoliyat ko'rsatadi.", "features": [ "Avtomatik ishga tushish mexanizmi",