From 6e3140274f30cbf6ba4f2d9d533a92d875481e9c Mon Sep 17 00:00:00 2001 From: geun <1416geun@naver.com> Date: Thu, 6 Aug 2026 16:13:50 +0900 Subject: [PATCH] =?UTF-8?q?=EC=98=81=EB=AC=B8=20=EB=B2=88=EC=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Router.jsx | 95 ++- src/components/Footer.jsx | 88 ++- src/components/Header.jsx | 353 +++++---- src/components/PrivacyModal.jsx | 191 +++-- src/components/SubHero.jsx | 86 +-- src/components/main/MainContact.jsx | 814 +++++++++++--------- src/components/main/MainNews.jsx | 113 ++- src/components/main/MainSolution.jsx | 330 +++++--- src/components/main/MainUam.jsx | 67 +- src/components/main/MainUtm.jsx | 284 +++---- src/components/main/MainVisual.jsx | 18 +- src/context/LanguageContext.jsx | 41 + src/css/common.css | 23 +- src/css/main.css | 1 + src/main.jsx | 5 +- src/pages/business/MaintenancePage.jsx | 333 ++++----- src/pages/business/RndPage.jsx | 366 +++++---- src/pages/business/SiPage.jsx | 414 ++++++---- src/pages/company/AboutPage.jsx | 298 +++++--- src/pages/company/CertPage.jsx | 205 +++-- src/pages/company/HistoryPage.jsx | 109 ++- src/pages/company/LocationPage.jsx | 290 ++++--- src/pages/company/PartnersPage.jsx | 174 +++-- src/pages/contact/InquiryPage.jsx | 107 ++- src/pages/contact/RecruitPage.jsx | 87 ++- src/pages/solution/FlightControlPage.jsx | 435 ++++++----- src/pages/solution/IbePage.jsx | 409 +++++----- src/pages/utm/CasePage.jsx | 44 +- src/pages/utm/IntroPage.jsx | 912 ++++++++++++----------- 29 files changed, 3993 insertions(+), 2699 deletions(-) create mode 100644 src/context/LanguageContext.jsx diff --git a/src/Router.jsx b/src/Router.jsx index 8e14f17..cd9570f 100644 --- a/src/Router.jsx +++ b/src/Router.jsx @@ -32,6 +32,45 @@ import SolutionKtGcloudPage from "./pages/solution/KtGcloudPage"; import ContactInquiryPage from "./pages/contact/InquiryPage"; import ContactRecruitPage from "./pages/contact/RecruitPage"; +// 서브 페이지 라우트 목록 (ko 기준 경로). renderSubRoutes()에서 "/en" prefix를 붙여 재사용한다. +const subRouteList = [ + { path: "/company", redirectTo: "/company/about" }, + { path: "/company/about", element: }, + { path: "/company/cert", element: }, + { path: "/company/history", element: }, + { path: "/company/partners", element: }, + { path: "/company/location", element: }, + + { path: "/utm", redirectTo: "/utm/intro" }, + { path: "/utm/intro", element: }, + { path: "/utm/case", element: }, + + { path: "/business", redirectTo: "/business/si" }, + { path: "/business/si", element: }, + { path: "/business/rnd", element: }, + { path: "/business/maintenance", element: }, + + { path: "/solution", redirectTo: "/solution/flight-control" }, + { path: "/solution/flight-control", element: }, + { path: "/solution/ibe", element: }, + { path: "/solution/smart-tour", element: }, + { path: "/solution/kt-gcloud", element: }, + + { path: "/contact", redirectTo: "/contact/inquiry" }, + { path: "/contact/inquiry", element: }, + { path: "/contact/recruit", element: }, +]; + +function renderSubRoutes(prefix = "") { + return subRouteList.map(({ path, element, redirectTo }) => { + const fullPath = prefix + path; + if (redirectTo) { + return } />; + } + return ; + }); +} + function Router() { return ( @@ -41,61 +80,13 @@ function Router() { {/* 메인 페이지 */} }> } /> + } /> - {/* 서브 페이지 */} + {/* 서브 페이지 (ko + en) */} }> - {/* Company */} - } - /> - } /> - } /> - } /> - } /> - } /> - - {/* UTM/UATM */} - } /> - } /> - } /> - - {/* Business */} - } - /> - } /> - } /> - } - /> - - {/* Solution */} - } - /> - } - /> - } /> - } - /> - } /> - - {/* Contact Us */} - } - /> - } /> - } /> + {renderSubRoutes()} + {renderSubRoutes("/en")} {/* 404: 잘못된 경로는 메인으로 */} diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index ed15419..531f291 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -1,10 +1,12 @@ import { Link } from "react-router-dom"; +import { useLanguage } from "../context/LanguageContext"; -const footerNav = [ +const footerNavKo = [ { title: "COMPANY", items: [ { label: "회사소개", to: "/company/about" }, + { label: "인증 및 특허현황", to: "/company/cert" }, { label: "연혁", to: "/company/history" }, { label: "고객 및 협력사", to: "/company/partners" }, { label: "찾아오시는 길", to: "/company/location" }, @@ -13,8 +15,8 @@ const footerNav = [ { title: "UTM/UATM", items: [ - { label: "소개", to: "/UTM/intro" }, - { label: "도입사례", to: "/UTM/case" }, + { label: "소개", to: "/utm/intro" }, + { label: "도입사례", to: "/utm/case" }, ], }, { @@ -43,13 +45,74 @@ const footerNav = [ }, ]; +const footerNavEn = [ + { + title: "COMPANY", + items: [ + { label: "About Us", to: "/company/about" }, + { label: "Certifications & Patents", to: "/company/cert" }, + { label: "History", to: "/company/history" }, + { label: "Clients & Partners", to: "/company/partners" }, + { label: "Location", to: "/company/location" }, + ], + }, + { + title: "UTM/UATM", + items: [ + { label: "Overview", to: "/utm/intro" }, + { label: "Case Studies", to: "/utm/case" }, + ], + }, + { + title: "BUSINESS", + items: [ + { label: "System Integration", to: "/business/si" }, + { label: "R&D", to: "/business/rnd" }, + { label: "Maintenance", to: "/business/maintenance" }, + ], + }, + { + title: "SOLUTION", + items: [ + { label: "Flight Control System", to: "/solution/flight-control" }, + { label: "IBE", to: "/solution/ibe" }, + // { label: "Smart Tourism Booking", to: "/solution/smart-tour" }, + // { label: "KT G-cloud Incheon Distributor", to: "/solution/kt-gcloud" }, + ], + }, + { + title: "CONTACT", + items: [ + { label: "Inquiry", to: "/contact/inquiry" }, + { label: "Careers", to: "/contact/recruit" }, + ], + }, +]; + +const INFO_TEXT = { + ko: { + ceo: "대표. 최현식", + bizNo: "사업자등록번호. 393-81-00110", + address: "인천광역시 서구 로봇랜드로 155-11 로봇랜드 14층 1401~2호", + }, + en: { + ceo: "CEO. Choi Hyun-sik", + bizNo: "Biz. Reg. No. 393-81-00110", + address: "14F, 1401-2, 155-11 Robot Land-ro, Seo-gu, Incheon, Republic of Korea", + }, +}; + function Footer() { + const { lang, withLang } = useLanguage(); + const footerNav = lang === "en" ? footerNavEn : footerNavKo; + const info = INFO_TEXT[lang]; + return (