@@ -164,7 +181,42 @@ const FleetPage: React.FC = () => {
{index + 1}
- {vehicle.type || ''}
+ {isEnglish
+ ? (() => {
+ switch (vehicle.type) {
+ case 'Установка разведочного бурения':
+ return 'Exploration drilling rig';
+ case 'Специальное пассажирское ТС':
+ return 'Special-purpose passenger vehicle';
+ case 'Грузовой бортовой':
+ return 'Flatbed truck';
+ case 'УБШМ 1.20':
+ return 'UBShM 1.20 (drilling support vehicle)';
+ case 'Грузовое ТС, Фермер грузопассажирский УБШМ 1-13':
+ return 'Cargo vehicle, UBShM 1-13 crew cab (cargo-passenger)';
+ case 'Грузовой фургон':
+ return 'Box truck / cargo van';
+ case 'Установка разведочного бурения УРБ-2Д3':
+ return 'Exploration drilling rig URB-2D3';
+ case 'Седельный тягач':
+ return 'Tractor unit / semi-trailer truck';
+ case 'Полуприцеп низкорамный трал':
+ return 'Low-bed semi-trailer (lowboy)';
+ case 'Снегоход':
+ return 'Snowmobile';
+ case 'Прицеп для перевозки водной техники, грузов':
+ return 'Trailer for watercraft and cargo';
+ case 'Специальная установка каротажной станции СК 1-74-II':
+ return 'Special logging station unit SK 1-74-II';
+ case 'Фермер грузопассажирский УБШМ 1-13':
+ return 'UBShM 1-13 crew cab (cargo-passenger)';
+ case 'Болотовездеход':
+ return 'Amphibious all-terrain vehicle';
+ default:
+ return vehicle.type || '';
+ }
+ })()
+ : vehicle.type || ''}
{vehicle.brand}
@@ -179,15 +231,21 @@ const FleetPage: React.FC = () => {
{vehicles.length}
-
Единиц техники
+
+ {isEnglish ? 'Units of equipment' : 'Единиц техники'}
+
{carImages.length}
-
Фотографий
+
+ {isEnglish ? 'Photos' : 'Фотографий'}
+
24/7
-
Готовность к работе
+
+ {isEnglish ? 'Ready for work' : 'Готовность к работе'}
+
diff --git a/pages/Home.tsx b/pages/Home.tsx
index e6e0feb..9b0ed02 100644
--- a/pages/Home.tsx
+++ b/pages/Home.tsx
@@ -1,19 +1,67 @@
-import React from 'react';
+import React, { useEffect, useState } from 'react';
import Hero from '../components/Hero';
import Benefits from '../components/Benefits';
import Services from '../components/Services';
import Projects from '../components/Projects';
import Laboratories from '../components/Laboratories';
import Process from '../components/Process';
+import FleetTeaser from '../components/FleetTeaser';
+import Seo from '../components/Seo';
+import { getHomepage, HomepageData } from '../src/api/strapiClient';
+import { useLocation } from 'react-router-dom';
const Home: React.FC = () => {
+ const [homepage, setHomepage] = useState(null);
+ const location = useLocation();
+
+ const isEnglish = location.pathname.startsWith('/en');
+ const locale = isEnglish ? 'en' : 'ru';
+
+ useEffect(() => {
+ getHomepage(locale)
+ .then((data) => setHomepage(data))
+ .catch(() => {
+ // Молча используем дефолтные тексты при ошибке
+ });
+ }, [locale]);
+
+ const defaultSeoTitleRu = 'Инженерные изыскания и проектирование для сложных объектов';
+ const defaultSeoTitleEn = 'Engineering surveys and design for complex construction projects';
+
+ const defaultSeoDescriptionRu =
+ 'ООО «ГеоВектор» выполняет полный комплекс инженерных изысканий и проектных работ для девелоперов, промышленных предприятий и госзаказчиков в России и других странах.';
+ const defaultSeoDescriptionEn =
+ 'GeoVector provides a full range of engineering surveys and design services for developers, industrial companies and public sector clients in Russia and other regions.';
+
+ const seoTitle =
+ homepage?.seoTitle || (isEnglish ? defaultSeoTitleEn : defaultSeoTitleRu);
+ const seoDescription =
+ homepage?.seoDescription || (isEnglish ? defaultSeoDescriptionEn : defaultSeoDescriptionRu);
+
+ const defaultHeroTitleRu = 'Инженерные изыскания и проектирование для сложных и ответственных объектов';
+ const defaultHeroTitleEn = 'Engineering surveys and design for complex and demanding projects';
+
+ const defaultHeroSubtitleRu =
+ 'ООО «ГеоВектор» — полный комплекс инженерных изысканий и проектных решений для девелоперов, промышленных предприятий и госзаказчиков в России и других странах.';
+ const defaultHeroSubtitleEn =
+ 'GeoVector provides end-to-end engineering surveys and design solutions for developers, industrial companies and public sector clients in Russia and other regions.';
+
+ const heroTitle = homepage?.heroTitle || (isEnglish ? defaultHeroTitleEn : defaultHeroTitleRu);
+ const heroSubtitle =
+ homepage?.heroSubtitle || (isEnglish ? defaultHeroSubtitleEn : defaultHeroSubtitleRu);
+
return (
<>
-
+
+
+
>
);
diff --git a/pages/LandSurveyPage.tsx b/pages/LandSurveyPage.tsx
index fa67030..049a512 100644
--- a/pages/LandSurveyPage.tsx
+++ b/pages/LandSurveyPage.tsx
@@ -1,60 +1,100 @@
import React from 'react';
import PageHeader from '../components/PageHeader';
import { CheckCircle2, Map, FileText, MapPin, Landmark, ClipboardList, Navigation } from 'lucide-react';
+import { useLocation } from 'react-router-dom';
const LandSurveyPage: React.FC = () => {
+ const location = useLocation();
+ const isEnglish = location.pathname.startsWith('/en');
+
const services = [
{
icon: Landmark,
- title: 'Рекультивация нарушенных земель',
- description: 'Восстановление земель после промышленной деятельности и приведение их в состояние, пригодное для дальнейшего использования'
+ title: isEnglish ? 'Reclamation of disturbed lands' : 'Рекультивация нарушенных земель',
+ description: isEnglish
+ ? 'Restoration of land affected by industrial activities and bringing it into a condition suitable for further use.'
+ : 'Восстановление земель после промышленной деятельности и приведение их в состояние, пригодное для дальнейшего использования'
},
{
icon: FileText,
- title: 'Подготовка материалов к актам выбора земельного участка лесного фонда',
- description: 'Комплексная подготовка документации и согласование с надзорными инстанциями для выбора участков лесного фонда'
+ title: isEnglish
+ ? 'Preparation of documentation for selecting forest land plots'
+ : 'Подготовка материалов к актам выбора земельного участка лесного фонда',
+ description: isEnglish
+ ? 'Comprehensive preparation of documentation and coordination with supervisory authorities for selecting forest fund land plots.'
+ : 'Комплексная подготовка документации и согласование с надзорными инстанциями для выбора участков лесного фонда'
},
{
icon: Map,
- title: 'Градостроительный план земельного участка',
- description: 'Разработка градостроительного плана с указанием всех необходимых параметров и ограничений использования территории'
+ title: isEnglish
+ ? 'Urban development plan of a land plot'
+ : 'Градостроительный план земельного участка',
+ description: isEnglish
+ ? 'Development of an urban development plan indicating all required parameters and land‑use restrictions for the territory.'
+ : 'Разработка градостроительного плана с указанием всех необходимых параметров и ограничений использования территории'
},
{
icon: ClipboardList,
- title: 'Проект планировки и проект межевания территории',
- description: 'Разработка проектов планировки и межевания для комплексного освоения территорий и организации рационального землепользования'
+ title: isEnglish
+ ? 'Planning and subdivision (demarcation) projects'
+ : 'Проект планировки и проект межевания территории',
+ description: isEnglish
+ ? 'Development of planning and subdivision projects for integrated development of territories and rational land use.'
+ : 'Разработка проектов планировки и межевания для комплексного освоения территорий и организации рационального землепользования'
},
{
icon: Navigation,
- title: 'Получение технических условий',
- description: 'Получение технических условий на подключение к инженерным сетям и дальнейшее согласование в соответствующих организациях'
+ title: isEnglish ? 'Obtaining technical specifications' : 'Получение технических условий',
+ description: isEnglish
+ ? 'Obtaining technical conditions for connection to engineering networks and further coordination with the relevant utility providers.'
+ : 'Получение технических условий на подключение к инженерным сетям и дальнейшее согласование в соответствующих организациях'
}
];
const cadastralWorks = [
{
- title: 'Согласование границ земельных участков',
- description: 'Проведение работ по установлению и согласованию границ земельных участков с заинтересованными лицами и смежными землепользователями'
+ title: isEnglish
+ ? 'Boundary agreement for land plots'
+ : 'Согласование границ земельных участков',
+ description: isEnglish
+ ? 'Carrying out works to establish and agree land plot boundaries with interested parties and adjoining land users.'
+ : 'Проведение работ по установлению и согласованию границ земельных участков с заинтересованными лицами и смежными землепользователями'
},
{
- title: 'Определение координат и границ межевых знаков',
- description: 'Геодезические измерения и закрепление межевых знаков на местности с использованием современного оборудования'
+ title: isEnglish
+ ? 'Determining coordinates and boundaries of boundary markers'
+ : 'Определение координат и границ межевых знаков',
+ description: isEnglish
+ ? 'Geodetic measurements and setting boundary markers in the field using modern surveying equipment.'
+ : 'Геодезические измерения и закрепление межевых знаков на местности с использованием современного оборудования'
},
{
- title: 'Определение площади земельного участка',
- description: 'Точный расчет площади земельного участка по полученным координатам межевых знаков с применением современных методик'
+ title: isEnglish
+ ? 'Determining the land plot area'
+ : 'Определение площади земельного участка',
+ description: isEnglish
+ ? 'Accurate calculation of the land plot area based on boundary marker coordinates using modern methods.'
+ : 'Точный расчет площади земельного участка по полученным координатам межевых знаков с применением современных методик'
},
{
- title: 'Формирование пакета документов',
- description: 'Подготовка полного пакета документов и последующая сдача землеустроительного дела (межевой план) в соответствующие государственные органы'
+ title: isEnglish
+ ? 'Document package preparation'
+ : 'Формирование пакета документов',
+ description: isEnglish
+ ? 'Preparation of the full set of documents and subsequent submission of the land management file (cadastral plan) to the relevant state authorities.'
+ : 'Подготовка полного пакета документов и последующая сдача землеустроительного дела (межевой план) в соответствующие государственные органы'
}
];
return (
@@ -62,10 +102,12 @@ const LandSurveyPage: React.FC = () => {
{/* Основные услуги */}
- Основные виды работ
+ {isEnglish ? 'Main types of works' : 'Основные виды работ'}
- Профессиональное выполнение землеустроительных и кадастровых работ любой сложности
+ {isEnglish
+ ? 'Professional execution of land management and cadastral works of any complexity.'
+ : 'Профессиональное выполнение землеустроительных и кадастровых работ любой сложности'}
@@ -97,10 +139,14 @@ const LandSurveyPage: React.FC = () => {
- КАДАСТРОВЫЕ РАБОТЫ
+
+ {isEnglish ? 'CADASTRAL WORKS' : 'КАДАСТРОВЫЕ РАБОТЫ'}
+
- Комплексное выполнение работ по межеванию земельных участков и подготовке документации для государственного кадастрового учета
+ {isEnglish
+ ? 'Comprehensive execution of boundary survey works and preparation of documentation for state cadastral registration.'
+ : 'Комплексное выполнение работ по межеванию земельных участков и подготовке документации для государственного кадастрового учета'}
@@ -129,7 +175,7 @@ const LandSurveyPage: React.FC = () => {
{/* Этапы работы */}
- Этапы выполнения работ
+ {isEnglish ? 'Work stages' : 'Этапы выполнения работ'}
@@ -141,8 +187,14 @@ const LandSurveyPage: React.FC = () => {
1
-
Получение заявки и выезд на объект
-
Первичное обследование территории и определение объема работ
+
+ {isEnglish ? 'Receiving the request and site visit' : 'Получение заявки и выезд на объект'}
+
+
+ {isEnglish
+ ? 'Initial site survey and defining the scope of work.'
+ : 'Первичное обследование территории и определение объема работ'}
+
@@ -151,8 +203,14 @@ const LandSurveyPage: React.FC = () => {
2
-
Геодезические измерения
-
Проведение измерений и закрепление границ межевыми знаками
+
+ {isEnglish ? 'Geodetic measurements' : 'Геодезические измерения'}
+
+
+ {isEnglish
+ ? 'Carrying out field measurements and setting boundaries with boundary markers.'
+ : 'Проведение измерений и закрепление границ межевыми знаками'}
+
@@ -161,8 +219,14 @@ const LandSurveyPage: React.FC = () => {
3
-
Согласование границ
-
Согласование установленных границ со смежными землепользователями
+
+ {isEnglish ? 'Boundary agreement' : 'Согласование границ'}
+
+
+ {isEnglish
+ ? 'Agreeing established boundaries with adjoining land users.'
+ : 'Согласование установленных границ со смежными землепользователями'}
+
@@ -171,8 +235,14 @@ const LandSurveyPage: React.FC = () => {
4
-
Подготовка документации
-
Формирование межевого плана и полного пакета документов
+
+ {isEnglish ? 'Documentation preparation' : 'Подготовка документации'}
+
+
+ {isEnglish
+ ? 'Preparation of the cadastral (boundary) plan and the complete document package.'
+ : 'Формирование межевого плана и полного пакета документов'}
+
@@ -181,8 +251,14 @@ const LandSurveyPage: React.FC = () => {
5
-
Сдача в государственные органы
-
Передача документов в Росреестр для постановки на кадастровый учет
+
+ {isEnglish ? 'Submission to state authorities' : 'Сдача в государственные органы'}
+
+
+ {isEnglish
+ ? 'Submitting documents to Rosreestr for state cadastral registration.'
+ : 'Передача документов в Росреестр для постановки на кадастровый учет'}
+
@@ -193,7 +269,7 @@ const LandSurveyPage: React.FC = () => {
- Наши преимущества
+ {isEnglish ? 'Our advantages' : 'Наши преимущества'}
@@ -201,9 +277,13 @@ const LandSurveyPage: React.FC = () => {
-
Полное сопровождение
+
+ {isEnglish ? 'End‑to‑end support' : 'Полное сопровождение'}
+
- От измерений на местности до получения свидетельства о регистрации
+ {isEnglish
+ ? 'From field measurements to obtaining the registration certificate.'
+ : 'От измерений на местности до получения свидетельства о регистрации'}
@@ -211,9 +291,13 @@ const LandSurveyPage: React.FC = () => {
-
Точность измерений
+
+ {isEnglish ? 'Measurement accuracy' : 'Точность измерений'}
+
- Использование современного геодезического оборудования высокой точности
+ {isEnglish
+ ? 'Use of modern high‑precision geodetic equipment.'
+ : 'Использование современного геодезического оборудования высокой точности'}
@@ -221,9 +305,13 @@ const LandSurveyPage: React.FC = () => {
-
Юридическая чистота
+
+ {isEnglish ? 'Legal compliance' : 'Юридическая чистота'}
+
- Грамотное оформление всех документов в соответствии с законодательством
+ {isEnglish
+ ? 'Proper preparation of all documents in strict accordance with current legislation.'
+ : 'Грамотное оформление всех документов в соответствии с законодательством'}
@@ -233,13 +321,15 @@ const LandSurveyPage: React.FC = () => {
diff --git a/pages/ServicesPage.tsx b/pages/ServicesPage.tsx
index b8a1782..217ed4a 100644
--- a/pages/ServicesPage.tsx
+++ b/pages/ServicesPage.tsx
@@ -2,18 +2,29 @@ import React from 'react';
import PageHeader from '../components/PageHeader';
import { SERVICES } from '../constants';
import { ArrowRight } from 'lucide-react';
-import { Link } from 'react-router-dom';
+import { Link, useLocation } from 'react-router-dom';
const ServicesPage: React.FC = () => {
- // Отфильтровываем технические задания из основных услуг
- const mainServices = SERVICES.filter(service => service.title !== 'Технические задания');
+ const location = useLocation();
+ const isEnglish = location.pathname.startsWith('/en');
+ const prefix = isEnglish ? '/en' : '';
+
+ const pageTitle = isEnglish ? 'Our services' : 'Наши услуги';
+ const pageDescription = isEnglish
+ ? 'A full range of engineering and construction services – from surveys to turnkey delivery.'
+ : 'Полный спектр инженерных и строительных работ любой сложности. От изысканий до сдачи объекта под ключ.';
+
+ // Отфильтровываем технические задания и строительство из основных услуг
+ const mainServices = SERVICES.filter(
+ service => service.title !== 'Технические задания' && service.title !== 'Строительство'
+ );
const technicalTasksService = SERVICES.find(service => service.title === 'Технические задания');
return (
@@ -34,18 +45,19 @@ const ServicesPage: React.FC = () => {
- Образцы технических заданий
+ {isEnglish ? 'Technical assignment templates' : 'Образцы технических заданий'}
- Готовые шаблоны и примеры технических заданий для различных видов инженерных работ.
- Документы доступны для скачивания и могут быть адаптированы под ваш проект.
+ {isEnglish
+ ? 'Ready-made templates and examples of technical assignments for different types of engineering work. The documents are available for download and can be adapted to your project.'
+ : 'Готовые шаблоны и примеры технических заданий для различных видов инженерных работ. Документы доступны для скачивания и могут быть адаптированы под ваш проект.'}
- Посмотреть образцы
+ {isEnglish ? 'View templates' : 'Посмотреть образцы'}
@@ -55,7 +67,48 @@ const ServicesPage: React.FC = () => {
)}
- {mainServices.map((service, idx) => (
+ {mainServices.map((service, idx) => {
+ const title =
+ isEnglish
+ ? (() => {
+ switch (service.title) {
+ case 'Инженерные изыскания':
+ return 'Engineering surveys';
+ case 'Проектирование':
+ return 'Design';
+ case 'Обследование грунтов':
+ return 'Soil investigation';
+ case 'Обследование здания':
+ return 'Building survey';
+ case 'Землестроительный и Кадастровые работы':
+ return 'Land management and cadastral works';
+ default:
+ return service.title;
+ }
+ })()
+ : service.title;
+
+ const description =
+ isEnglish
+ ? (() => {
+ switch (service.title) {
+ case 'Инженерные изыскания':
+ return 'Comprehensive investigation of construction site conditions: engineering-geodetic, geological, hydrometeorological and environmental surveys.';
+ case 'Проектирование':
+ return 'Development of design and working documentation for civil and industrial facilities, including architectural and structural solutions.';
+ case 'Обследование грунтов':
+ return 'Laboratory and field testing of soils. Determination of physical and mechanical properties for designing foundations and subgrades.';
+ case 'Обследование здания':
+ return 'Technical inspection of buildings and structures. Assessment of load-bearing structures, detection of defects and development of strengthening recommendations.';
+ case 'Землестроительный и Кадастровые работы':
+ return 'Land surveying, preparation of technical plans and inspection reports, registration of real estate in the state cadastre.';
+ default:
+ return service.description;
+ }
+ })()
+ : service.description;
+
+ return (
{
-
{service.title}
+
{title}
- {service.description}
+ {description}
{service.title === 'Инженерные изыскания' && (
- Подробнее
+ {isEnglish ? 'Learn more' : 'Подробнее'}
)}
{service.title === 'Проектирование' && (
- Подробнее
-
- )}
- {service.title === 'Строительство' && (
-
- Подробнее
+ {isEnglish ? 'Learn more' : 'Подробнее'}
)}
{service.title === 'Обследование грунтов' && (
- Подробнее
+ {isEnglish ? 'Learn more' : 'Подробнее'}
)}
{service.title === 'Обследование здания' && (
- Подробнее
+ {isEnglish ? 'Learn more' : 'Подробнее'}
)}
{service.title === 'Землестроительный и Кадастровые работы' && (
- Подробнее
+ {isEnglish ? 'Learn more' : 'Подробнее'}
)}
- Заказать услугу
+ {isEnglish ? 'Request this service' : 'Заказать услугу'}
- ))}
+ )})}
diff --git a/pages/SoilSurveyPage.tsx b/pages/SoilSurveyPage.tsx
index 878ee0f..2a43880 100644
--- a/pages/SoilSurveyPage.tsx
+++ b/pages/SoilSurveyPage.tsx
@@ -1,44 +1,71 @@
import React from 'react';
import PageHeader from '../components/PageHeader';
import { CheckCircle2, AlertTriangle, Target, ClipboardCheck, Search, TrendingDown, Activity } from 'lucide-react';
+import { useLocation } from 'react-router-dom';
const SoilSurveyPage: React.FC = () => {
+ const location = useLocation();
+ const isEnglish = location.pathname.startsWith('/en');
+ const prefix = isEnglish ? '/en' : '';
+
const workTypes = [
{
icon: AlertTriangle,
- title: 'Проходка котлованов и траншей',
- description: 'Прокладка подземных коммуникаций, пешеходных и транспортных тоннелей ниже глубины заложения существующих фундаментов, особенно с применением водопонижения'
+ title: isEnglish ? 'Excavation of pits and trenches' : 'Проходка котлованов и траншей',
+ description: isEnglish
+ ? 'Laying underground utilities, pedestrian and traffic tunnels below the depth of existing foundations, especially with groundwater lowering.'
+ : 'Прокладка подземных коммуникаций, пешеходных и транспортных тоннелей ниже глубины заложения существующих фундаментов, особенно с применением водопонижения',
},
{
icon: TrendingDown,
- title: 'Строительство новых зданий',
- description: 'Возведение объектов, вызывающих дополнительные напряжения, перераспределение напряжений и перемещения грунта в активной зоне фундаментов существующих зданий'
+ title: isEnglish ? 'Construction of new buildings' : 'Строительство новых зданий',
+ description: isEnglish
+ ? 'Erection of facilities that cause additional stresses, stress redistribution and soil movements within the active zone of existing foundations.'
+ : 'Возведение объектов, вызывающих дополнительные напряжения, перераспределение напряжений и перемещения грунта в активной зоне фундаментов существующих зданий',
},
{
icon: Activity,
- title: 'Устройство стен в грунте',
- description: 'Забивка шпунта или свай вблизи существующих зданий с передачей на их основание динамических нагрузок'
+ title: isEnglish ? 'Installation of retaining walls and barriers' : 'Устройство стен в грунте',
+ description: isEnglish
+ ? 'Driving sheet piles or piles near existing buildings, transferring dynamic loads to their foundations.'
+ : 'Забивка шпунта или свай вблизи существующих зданий с передачей на их основание динамических нагрузок',
},
{
icon: Target,
- title: 'Динамические воздействия',
- description: 'От авто- и железнодорожного транспорта, линий метрополитена, оборудования, устанавливаемого в сооружениях и промышленных установках'
- }
+ title: isEnglish ? 'Dynamic impacts' : 'Динамические воздействия',
+ description: isEnglish
+ ? 'From road and rail transport, metro lines, equipment installed in buildings and industrial facilities.'
+ : 'От авто- и железнодорожного транспорта, линий метрополитена, оборудования, устанавливаемого в сооружениях и промышленных установках',
+ },
];
const mainTasks = [
- 'Возможности надстройки, реконструкции зданий и сооружений с увеличением временных и постоянных нагрузок на фундаменты',
- 'Установления причин деформаций и разработки мер для предотвращения их дальнейшего развития, а также восстановления условий нормальной эксплуатации зданий и сооружений',
- 'Определения состояния грунтов основания, возможности и условий достройки зданий и сооружений после длительной консервации их строительства',
- 'Определения состояния мест примыкания зданий-пристроек к существующим и разработки мер по обеспечению их устойчивости',
- 'Выяснения причин затапливания и подтапливания подвалов и других подземных сооружений'
+ isEnglish
+ ? 'Assessing the possibility of adding storeys or reconstructing buildings and structures with increased permanent and variable loads on foundations.'
+ : 'Возможности надстройки, реконструкции зданий и сооружений с увеличением временных и постоянных нагрузок на фундаменты',
+ isEnglish
+ ? 'Identifying causes of deformations and developing measures to prevent their further development and restore normal operating conditions.'
+ : 'Установления причин деформаций и разработки мер для предотвращения их дальнейшего развития, а также восстановления условий нормальной эксплуатации зданий и сооружений',
+ isEnglish
+ ? 'Determining the state of foundation soils and conditions for completing construction after long-term conservation.'
+ : 'Определения состояния грунтов основания, возможности и условий достройки зданий и сооружений после длительной консервации их строительства',
+ isEnglish
+ ? 'Assessing the condition of junctions between extensions and existing buildings and developing measures to ensure their stability.'
+ : 'Определения состояния мест примыкания зданий-пристроек к существующим и разработки мер по обеспечению их устойчивости',
+ isEnglish
+ ? 'Identifying causes of flooding and water ingress into basements and other underground structures.'
+ : 'Выяснения причин затапливания и подтапливания подвалов и других подземных сооружений',
];
return (
@@ -47,26 +74,28 @@ const SoilSurveyPage: React.FC = () => {
- Обследование состояния грунтов основания зданий и сооружений
+ {isEnglish
+ ? 'Investigation of foundation soils beneath buildings and structures'
+ : 'Обследование состояния грунтов основания зданий и сооружений'}
- Обследование состояния грунтов оснований зданий и сооружений выполняются для оценки возможных
- негативных последствий от реконструкции существующего здания, а также от воздействия на него нового
- строительства (реконструкции, расширения) на прилегающих территориях и, при необходимости, получение
- данных для разработки мероприятий по обеспечению эксплуатационной надежности существующей застройки.
+ {isEnglish
+ ? 'Soil investigations of existing foundations are carried out to assess possible adverse effects of reconstruction, as well as the impact of new construction (reconstruction or expansion) on adjacent plots and, where required, to obtain data for measures that ensure long-term operational reliability of existing developments.'
+ : 'Обследование состояния грунтов оснований зданий и сооружений выполняются для оценки возможных негативных последствий от реконструкции существующего здания, а также от воздействия на него нового строительства (реконструкции, расширения) на прилегающих территориях и, при необходимости, получение данных для разработки мероприятий по обеспечению эксплуатационной надежности существующей застройки.'}
-
- Когда необходимо обследование
-
+
+ {isEnglish ? 'When soil investigation is required' : 'Когда необходимо обследование'}
+
- Обследование грунтов оснований существующих зданий необходимо производить, когда в прилегающей
- к ним зоне производятся следующие виды работ (или возможны какие-то негативные воздействия):
+ {isEnglish
+ ? 'Soil investigations of existing foundations are required when the following types of work are carried out in the surrounding area (or when similar adverse impacts are expected):'
+ : 'Обследование грунтов оснований существующих зданий необходимо производить, когда в прилегающей к ним зоне производятся следующие виды работ (или возможны какие-то негативные воздействия):'}
@@ -74,7 +103,9 @@ const SoilSurveyPage: React.FC = () => {
{/* Виды работ */}
- Виды работ, требующие обследования грунтов
+ {isEnglish
+ ? 'Types of work that require soil investigation'
+ : 'Виды работ, требующие обследования грунтов'}
@@ -104,16 +135,17 @@ const SoilSurveyPage: React.FC = () => {
- ОСНОВНЫЕ ЗАДАЧИ ОБСЛЕДОВАНИЯ
+
+ {isEnglish ? 'KEY TASKS OF SOIL INVESTIGATION' : 'ОСНОВНЫЕ ЗАДАЧИ ОБСЛЕДОВАНИЯ'}
+
- При обследовании необходимо определять изменения инженерно-геологических условий за период
- строительства и эксплуатации предприятий, зданий и сооружений, включая изменения рельефа,
- геологического строения, гидрогеологических условий, состава, состояния и свойств грунтов,
- активности инженерно-геологических процессов, с целью получения данных для решения основных задач:
+ {isEnglish
+ ? 'During investigations it is necessary to determine how engineering‑geological conditions have changed over the period of construction and operation, including relief, geological structure, hydrogeology, soil composition and properties, and the activity of engineering‑geological processes, in order to obtain data for solving the key tasks listed below:'
+ : 'При обследовании необходимо определять изменения инженерно-геологических условий за период строительства и эксплуатации предприятий, зданий и сооружений, включая изменения рельефа, геологического строения, гидрогеологических условий, состава, состояния и свойств грунтов, активности инженерно-геологических процессов, с целью получения данных для решения основных задач:'}
@@ -135,7 +167,7 @@ const SoilSurveyPage: React.FC = () => {
{/* Методология */}
- Методология обследования
+ {isEnglish ? 'Methodology of soil investigation' : 'Методология обследования'}
@@ -144,15 +176,14 @@ const SoilSurveyPage: React.FC = () => {
-
- Использование материалов изысканий
-
+
+ {isEnglish ? 'Use of previous survey data' : 'Использование материалов изысканий'}
+
- При наличии материалов изысканий прошлых лет их использование возможно с учетом п. 5.2 СП 11-105-97,
- часть I. В случаях, когда материалы отсутствуют или при анализе оцениваются как недостаточные,
- сомнительные, устаревшие, обследование следует выполнять в составе и в объемах, обоснованных
- в программе изысканий.
+ {isEnglish
+ ? 'Where survey data from previous years are available, they may be used in accordance with SP 11‑105‑97, Part I. If such materials are missing or are considered insufficient, unreliable or outdated, investigations must be carried out in scope justified by the survey programme.'
+ : 'При наличии материалов изысканий прошлых лет их использование возможно с учетом п. 5.2 СП 11-105-97, часть I. В случаях, когда материалы отсутствуют или при анализе оцениваются как недостаточные, сомнительные, устаревшие, обследование следует выполнять в составе и в объемах, обоснованных в программе изысканий.'}
@@ -162,14 +193,13 @@ const SoilSurveyPage: React.FC = () => {
- Стационарные наблюдения
+ {isEnglish ? 'Stationary monitoring' : 'Стационарные наблюдения'}
- Обследование осуществляется на основе стационарных наблюдений за геофизическими параметрами среды
- (скоростью упругих волн, электрическим сопротивлением, температурой и др.), изменение которых позволяет
- судить об осадке оснований, фильтрации и других процессах. Выполняются повторные систематические
- наблюдения на одной и той же базе.
+ {isEnglish
+ ? 'Investigations are based on stationary monitoring of geophysical parameters (velocity of elastic waves, electrical resistivity, temperature, etc.), the changes of which indicate settlement of foundations, filtration and other processes. Repeated systematic measurements are carried out on the same base points.'
+ : 'Обследование осуществляется на основе стационарных наблюдений за геофизическими параметрами среды (скоростью упругих волн, электрическим сопротивлением, температурой и др.), изменение которых позволяет судить об осадке оснований, фильтрации и других процессах. Выполняются повторные систематические наблюдения на одной и той же базе.'}
@@ -183,11 +213,13 @@ const SoilSurveyPage: React.FC = () => {
-
Дополнительные исследования
+
+ {isEnglish ? 'Additional investigations' : 'Дополнительные исследования'}
+
- При обследовании оснований зданий и сооружений может выполняться определение глубины заложения
- фундаментов и оценки их состояния. Это позволяет получить полную картину состояния объекта
- и разработать комплекс мероприятий по обеспечению его безопасной эксплуатации.
+ {isEnglish
+ ? 'During investigations we can determine foundation depth and assess foundation condition. This gives a complete picture of the asset and enables us to develop a set of measures to ensure its safe operation.'
+ : 'При обследовании оснований зданий и сооружений может выполняться определение глубины заложения фундаментов и оценки их состояния. Это позволяет получить полную картину состояния объекта и разработать комплекс мероприятий по обеспечению его безопасной эксплуатации.'}
@@ -198,7 +230,7 @@ const SoilSurveyPage: React.FC = () => {
- Почему важно обследование грунтов
+ {isEnglish ? 'Why soil investigation is important' : 'Почему важно обследование грунтов'}
@@ -206,9 +238,13 @@ const SoilSurveyPage: React.FC = () => {
-
Предотвращение аварий
+
+ {isEnglish ? 'Accident prevention' : 'Предотвращение аварий'}
+
- Своевременное выявление проблем позволяет избежать деформаций и разрушений зданий
+ {isEnglish
+ ? 'Timely identification of problems helps prevent deformations and structural failures.'
+ : 'Своевременное выявление проблем позволяет избежать деформаций и разрушений зданий'}
@@ -216,9 +252,13 @@ const SoilSurveyPage: React.FC = () => {
-
Точная диагностика
+
+ {isEnglish ? 'Accurate diagnostics' : 'Точная диагностика'}
+
- Определение причин деформаций и разработка эффективных мер по их устранению
+ {isEnglish
+ ? 'Determining the causes of deformations and developing effective mitigation measures.'
+ : 'Определение причин деформаций и разработка эффективных мер по их устранению'}
@@ -226,9 +266,13 @@ const SoilSurveyPage: React.FC = () => {
-
Безопасность
+
+ {isEnglish ? 'Safety' : 'Безопасность'}
+
- Обеспечение эксплуатационной надежности существующей и новой застройки
+ {isEnglish
+ ? 'Ensuring operational reliability of both existing and new developments.'
+ : 'Обеспечение эксплуатационной надежности существующей и новой застройки'}
@@ -238,13 +282,13 @@ const SoilSurveyPage: React.FC = () => {
diff --git a/pages/SurveyingPage.tsx b/pages/SurveyingPage.tsx
index 5ce326b..25d8890 100644
--- a/pages/SurveyingPage.tsx
+++ b/pages/SurveyingPage.tsx
@@ -1,8 +1,13 @@
import React from 'react';
import PageHeader from '../components/PageHeader';
import { CheckCircle2, MapPin, Mountain, Leaf, Cloud, Wrench, Award } from 'lucide-react';
+import { useLocation } from 'react-router-dom';
const SurveyingPage: React.FC = () => {
+ const location = useLocation();
+ const isEnglish = location.pathname.startsWith('/en');
+ const prefix = isEnglish ? '/en' : '';
+
const surveyTypes = [
{
icon: MapPin,
@@ -70,25 +75,90 @@ const SurveyingPage: React.FC = () => {
];
const pricing = [
- { service: 'Инженерные изыскания под коттедж (геология+геодезия)', price: 'от 25000 ₽' },
- { service: 'Инженерно-геологические изыскания для строительства', price: 'от 500 ₽ / м.' },
- { service: 'Инженерно-геологические изыскания с экспертизой', price: 'от 500 ₽ / м.' },
- { service: 'Геологические изыскания (особо крупные объекты)', price: 'от 300 ₽ / м.' },
- { service: 'Геологические изыскания под коттедж', price: 'от 15000 ₽' },
- { service: 'Инженерно-геодезические изыскания для строительства', price: 'от 5000 ₽' },
- { service: 'Геоподоснова (топоплан с коммуникациями)', price: 'от 10000 ₽' },
- { service: 'Геодезические изыскания под коттедж (топосъемка)', price: 'от 5000 ₽' },
- { service: 'Определение границ, координатная привязка', price: 'от 2000 ₽' },
- { service: 'Разбивка осей, реперы, сопровождение строительства', price: 'от 2000 ₽' },
- { service: 'Инженерно-экологические изыскания', price: 'от 8000 ₽' },
- { service: 'Инженерные изыскания (комплекс работ)', price: '10% скидка', highlight: true }
+ {
+ service: isEnglish
+ ? 'Engineering surveys for a cottage (geology + geodesy)'
+ : 'Инженерные изыскания под коттедж (геология+геодезия)',
+ price: isEnglish ? 'from 25 000 ₽' : 'от 25000 ₽',
+ },
+ {
+ service: isEnglish
+ ? 'Engineering-geological surveys for construction'
+ : 'Инженерно-геологические изыскания для строительства',
+ price: isEnglish ? 'from 500 ₽ / m' : 'от 500 ₽ / м.',
+ },
+ {
+ service: isEnglish
+ ? 'Engineering-geological surveys with expert review'
+ : 'Инженерно-геологические изыскания с экспертизой',
+ price: isEnglish ? 'from 500 ₽ / m' : 'от 500 ₽ / м.',
+ },
+ {
+ service: isEnglish
+ ? 'Geological surveys (large-scale facilities)'
+ : 'Геологические изыскания (особо крупные объекты)',
+ price: isEnglish ? 'from 300 ₽ / m' : 'от 300 ₽ / м.',
+ },
+ {
+ service: isEnglish
+ ? 'Geological surveys for a cottage'
+ : 'Геологические изыскания под коттедж',
+ price: isEnglish ? 'from 15 000 ₽' : 'от 15000 ₽',
+ },
+ {
+ service: isEnglish
+ ? 'Engineering-geodetic surveys for construction'
+ : 'Инженерно-геодезические изыскания для строительства',
+ price: isEnglish ? 'from 5 000 ₽' : 'от 5000 ₽',
+ },
+ {
+ service: isEnglish
+ ? 'Geodetic base plan (topographic plan with utilities)'
+ : 'Геоподоснова (топоплан с коммуникациями)',
+ price: isEnglish ? 'from 10 000 ₽' : 'от 10000 ₽',
+ },
+ {
+ service: isEnglish
+ ? 'Geodetic surveys for a cottage (topographic survey)'
+ : 'Геодезические изыскания под коттедж (топосъемка)',
+ price: isEnglish ? 'from 5 000 ₽' : 'от 5000 ₽',
+ },
+ {
+ service: isEnglish
+ ? 'Boundary identification and coordinate referencing'
+ : 'Определение границ, координатная привязка',
+ price: isEnglish ? 'from 2 000 ₽' : 'от 2000 ₽',
+ },
+ {
+ service: isEnglish
+ ? 'Axis layout, benchmarks, construction support'
+ : 'Разбивка осей, реперы, сопровождение строительства',
+ price: isEnglish ? 'from 2 000 ₽' : 'от 2000 ₽',
+ },
+ {
+ service: isEnglish
+ ? 'Engineering-environmental surveys'
+ : 'Инженерно-экологические изыскания',
+ price: isEnglish ? 'from 8 000 ₽' : 'от 8000 ₽',
+ },
+ {
+ service: isEnglish
+ ? 'Engineering surveys (full scope)'
+ : 'Инженерные изыскания (комплекс работ)',
+ price: isEnglish ? '10% discount' : '10% скидка',
+ highlight: true,
+ },
];
return (
@@ -97,24 +167,33 @@ const SurveyingPage: React.FC = () => {
- Инженерные изыскания для выполнения строительства – комплекс мероприятий,
- направленных на сбор и анализ детальной информации о техногенных и природных условиях территории
- для будущего строительства. Полученные данные входят в состав обязательной документации для
- разработки проекта и проведения строительных работ.
+ {isEnglish ? (
+ <>
+ Engineering surveys for construction are a set of activities aimed at collecting
+ and analysing detailed information about the natural and man-made conditions of the site.
+ The resulting data form part of the mandatory documentation for design and construction.
+ >
+ ) : (
+ <>
+ Инженерные изыскания для выполнения строительства – комплекс мероприятий,
+ направленных на сбор и анализ детальной информации о техногенных и природных условиях территории
+ для будущего строительства. Полученные данные входят в состав обязательной документации для
+ разработки проекта и проведения строительных работ.
+ >
+ )}
- Необходимость проведения определенных видов изысканий, их объем и состав определяются после анализа
- технического задания и зависят от вида, уровня ответственности, назначения сооружений, стадии
- проектирования, условий участка и степени их изученности.
+ {isEnglish
+ ? 'The required types and scope of surveys are determined after analysing the technical assignment and depend on the type and responsibility level of the structures, design stage and the conditions and degree of study of the site.'
+ : 'Необходимость проведения определенных видов изысканий, их объем и состав определяются после анализа технического задания и зависят от вида, уровня ответственности, назначения сооружений, стадии проектирования, условий участка и степени их изученности.'}
- Проведение инженерных изысканий подразумевает анализ данных, оценку возможных последствий реализации
- проекта, получение санитарно-эпидемиологических заключений и составление технических отчетов, состав
- которых определяется действующими нормативными документами. Наши специалисты профессионально выполняют
- изыскания для строящихся или реконструируемых объектов любых типов.
+ {isEnglish
+ ? 'Engineering surveys include data analysis, assessment of possible consequences of the project implementation, obtaining sanitary and epidemiological conclusions and preparing technical reports in accordance with current regulations. Our specialists carry out surveys for new construction and reconstruction projects of any type.'
+ : 'Проведение инженерных изысканий подразумевает анализ данных, оценку возможных последствий реализации проекта, получение санитарно-эпидемиологических заключений и составление технических отчетов, состав которых определяется действующими нормативными документами. Наши специалисты профессионально выполняют изыскания для строящихся или реконструируемых объектов любых типов.'}
@@ -122,7 +201,9 @@ const SurveyingPage: React.FC = () => {
{/* Типы изысканий */}
- Мы выполняем следующие типы инженерных изысканий
+ {isEnglish
+ ? 'We carry out the following types of engineering surveys'
+ : 'Мы выполняем следующие типы инженерных изысканий'}
@@ -149,27 +230,43 @@ const SurveyingPage: React.FC = () => {
{/* Допуски к работам */}
-
-
-
-
ООО ГЕОВЕКТОР ИМЕЕТ ДОПУСК К СЛЕДУЮЩИМ ВИДАМ РАБОТ
+
+
+
+
+ {isEnglish
+ ? 'GeoVector LLC is certified to perform the following types of work'
+ : 'ООО ГЕОВЕКТОР ИМЕЕТ ДОПУСК К СЛЕДУЮЩИМ ВИДАМ РАБОТ'}
+
+
-
{/* Инженерно-геодезические */}
- Инженерно-геодезические изыскания
+ {isEnglish ? 'Engineering and geodetic surveys' : 'Инженерно-геодезические изыскания'}
- {geodesicWorks.map((work, index) => (
-
-
- {work}
-
- ))}
+ {geodesicWorks.map((work, index) => {
+ const text = isEnglish
+ ? [
+ 'Establishment of control geodetic networks.',
+ 'Geodetic monitoring of deformations and settlements of buildings and structures, ground surface displacements and hazardous natural processes.',
+ 'Creation and updating of engineering topographic plans at scales 1:200–1:5000, including digital form, surveying of underground utilities and structures.',
+ 'Route setting-out for linear facilities.',
+ 'Engineering hydrographic works.',
+ 'Special geodetic and topographic works during construction and reconstruction of buildings and structures.',
+ ][index] || work
+ : work;
+ return (
+
+
+ {text}
+
+ );
+ })}
@@ -177,15 +274,28 @@ const SurveyingPage: React.FC = () => {
- Инженерно-геологические изыскания
+ {isEnglish ? 'Engineering and geological surveys' : 'Инженерно-геологические изыскания'}
- {geologicalWorks.map((work, index) => (
-
-
- {work}
-
- ))}
+ {geologicalWorks.map((work, index) => {
+ const text = isEnglish
+ ? [
+ 'Engineering‑geological mapping at scales 1:500–1:25 000.',
+ 'Drilling of exploratory boreholes with sampling and laboratory testing of soil physical‑mechanical properties and groundwater chemistry.',
+ 'Study of hazardous geological and engineering‑geological processes with recommendations for engineering protection of the territory.',
+ 'Hydrogeological investigations.',
+ 'Engineering‑geophysical investigations.',
+ 'Engineering‑geocryological investigations.',
+ 'Seismological and seismotectonic investigations, seismic micro‑zoning of the territory.',
+ ][index] || work
+ : work;
+ return (
+
+
+ {text}
+
+ );
+ })}
@@ -193,15 +303,26 @@ const SurveyingPage: React.FC = () => {
- Инженерно-экологические изыскания
+ {isEnglish ? 'Engineering and environmental surveys' : 'Инженерно-экологические изыскания'}
- {ecologicalWorks.map((work, index) => (
-
-
- {work}
-
- ))}
+ {ecologicalWorks.map((work, index) => {
+ const text = isEnglish
+ ? [
+ 'Engineering‑environmental mapping of the territory.',
+ 'Investigation of chemical contamination of soils, surface and groundwater, air and pollution sources.',
+ 'Laboratory chemical‑analytical and gas‑chemical testing of soil and water samples.',
+ 'Study and assessment of physical impacts and radiation conditions across the territory.',
+ 'Study of vegetation and wildlife, sanitary‑epidemiological and biomedical investigations of the area.',
+ ][index] || work
+ : work;
+ return (
+
+
+ {text}
+
+ );
+ })}
@@ -209,15 +330,25 @@ const SurveyingPage: React.FC = () => {
- Инженерно-гидрометеорологические изыскания
+ {isEnglish ? 'Engineering and hydrometeorological surveys' : 'Инженерно-гидрометеорологические изыскания'}
- {hydrometeorologicalWorks.map((work, index) => (
-
-
- {work}
-
- ))}
+ {hydrometeorologicalWorks.map((work, index) => {
+ const text = isEnglish
+ ? [
+ 'Meteorological observations and study of the hydrological regime of water bodies.',
+ 'Analysis of hazardous hydrometeorological processes and phenomena with calculation of their characteristics.',
+ 'Study of channel processes in watercourses, bank deformation and erosion.',
+ 'Investigation of ice regime in water bodies.',
+ ][index] || work
+ : work;
+ return (
+
+
+ {text}
+
+ );
+ })}
@@ -225,19 +356,32 @@ const SurveyingPage: React.FC = () => {
- Инженерно-геотехнические изыскания
+ {isEnglish ? 'Engineering and geotechnical surveys' : 'Инженерно-геотехнические изыскания'}
- (Выполняются в составе инженерно-геологических изысканий или отдельно на изученной
- в инженерно-геологическом отношении территории под отдельные здания и сооружения).
+ {isEnglish
+ ? 'Performed as part of engineering and geological surveys or separately on sites that have already been investigated from an engineering-geological perspective.'
+ : '(Выполняются в составе инженерно-геологических изысканий или отдельно на изученной в инженерно-геологическом отношении территории под отдельные здания и сооружения).'}
- {geotechnicalWorks.map((work, index) => (
-
-
- {work}
-
- ))}
+ {geotechnicalWorks.map((work, index) => {
+ const text = isEnglish
+ ? [
+ 'Excavation of test pits and boreholes with sampling and laboratory tests to obtain parameters for specific foundation design schemes.',
+ 'Field testing of soils to determine standard strength and deformation characteristics (plate load, shear, pressuremeter, vane shear tests) and testing of reference and full‑scale piles.',
+ 'Determination of standard mechanical characteristics of soils using static, dynamic and drilling penetration tests.',
+ 'Physical and numerical modelling of interaction between buildings/structures and the geological environment.',
+ 'Special soil studies under bespoke programmes for non‑standard, including non‑linear, foundation and structure design methods.',
+ 'Geotechnical monitoring of construction of buildings, structures and adjacent areas.',
+ ][index] || work
+ : work;
+ return (
+
+
+ {text}
+
+ );
+ })}
@@ -246,15 +390,21 @@ const SurveyingPage: React.FC = () => {
{/* Прайс-лист */}
- Цены на основные виды работ по инженерным изысканиям
+ {isEnglish
+ ? 'Prices for main types of engineering surveys'
+ : 'Цены на основные виды работ по инженерным изысканиям'}
- Наименование услуги
- Стоимость
+
+ {isEnglish ? 'Service name' : 'Наименование услуги'}
+
+
+ {isEnglish ? 'Price' : 'Стоимость'}
+
@@ -285,13 +435,15 @@ const SurveyingPage: React.FC = () => {
diff --git a/src/api/strapiClient.ts b/src/api/strapiClient.ts
new file mode 100644
index 0000000..e469c13
--- /dev/null
+++ b/src/api/strapiClient.ts
@@ -0,0 +1,48 @@
+const STRAPI_URL = import.meta.env.VITE_STRAPI_URL || 'http://localhost:1337';
+
+type Locale = 'ru' | 'en';
+
+async function fetchJson(path: string, init?: RequestInit) {
+ const res = await fetch(`${STRAPI_URL}${path}`, {
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ ...init,
+ });
+
+ if (!res.ok) {
+ throw new Error(`Strapi request failed: ${res.status} ${res.statusText}`);
+ }
+
+ return res.json();
+}
+
+export interface HomepageData {
+ heroTitle?: string;
+ heroSubtitle?: string;
+ seoTitle?: string;
+ seoDescription?: string;
+}
+
+export async function getHomepage(locale: Locale): Promise {
+ const query = new URLSearchParams({
+ locale,
+ populate: '*',
+ }).toString();
+
+ const json = await fetchJson(`/api/homepage?${query}`);
+
+ if (!json || !json.data || !json.data.attributes) {
+ return null;
+ }
+
+ const attrs = json.data.attributes;
+
+ return {
+ heroTitle: attrs.heroTitle,
+ heroSubtitle: attrs.heroSubtitle,
+ seoTitle: attrs.seoTitle,
+ seoDescription: attrs.seoDescription,
+ };
+}
+