From 6ad338e437ea3fe271462b1bc3cd0d8791d40aec Mon Sep 17 00:00:00 2001 From: dean Date: Wed, 18 Feb 2026 01:00:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(landing-page):=20=E6=96=B0=E5=A2=9E=20i18n?= =?UTF-8?q?=20=E5=A4=9A=E8=AA=9E=E7=B3=BB=E3=80=81=E6=B7=BA=E8=89=B2?= =?UTF-8?q?=E6=B7=B1=E8=89=B2=E4=B8=BB=E9=A1=8C=E8=A8=AD=E8=A8=88=E3=80=81?= =?UTF-8?q?=E5=B8=B8=E8=A6=8B=20QA=20=E5=95=8F=E7=AD=94=E5=8D=80=E3=80=81?= =?UTF-8?q?=E6=9C=88=E4=BB=98/=E5=B9=B4=E4=BB=98=E5=88=87=E6=8F=9B?= =?UTF-8?q?=E3=80=81=E8=BC=89=E5=85=A5=E6=99=82=E7=9A=84=20loading=20?= =?UTF-8?q?=E9=A0=81=E9=9D=A2=E3=80=81Cookie=20=E5=90=8C=E6=84=8F=E5=BD=88?= =?UTF-8?q?=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 20 ++ src/components/CallToAction.jsx | 12 +- src/components/CookieConsent.jsx | 30 +++ src/components/FAQ.jsx | 40 ++++ src/components/Features.jsx | 20 +- src/components/Footer.jsx | 22 ++- src/components/Hero.jsx | 25 ++- src/components/Loading.jsx | 15 ++ src/components/Navbar.jsx | 29 ++- src/components/Pricing.jsx | 70 ++++++- src/components/SocialProof.jsx | 7 +- src/components/UseCases.jsx | 23 ++- src/contexts/I18nContext.jsx | 34 ++++ src/contexts/ThemeContext.jsx | 24 +++ src/data/locales.js | 326 +++++++++++++++++++++++++++++++ src/data/pricing.js | 3 + src/index.css | 256 ++++++++++++++++++++++++ src/main.jsx | 8 +- 18 files changed, 913 insertions(+), 51 deletions(-) create mode 100644 src/components/CookieConsent.jsx create mode 100644 src/components/FAQ.jsx create mode 100644 src/components/Loading.jsx create mode 100644 src/contexts/I18nContext.jsx create mode 100644 src/contexts/ThemeContext.jsx create mode 100644 src/data/locales.js diff --git a/src/App.jsx b/src/App.jsx index 3a7c65b..9446977 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,13 +1,31 @@ +import React, { useState, useEffect } from 'react'; import Navbar from './components/Navbar'; import Hero from './components/Hero'; import SocialProof from './components/SocialProof'; import Features from './components/Features'; import UseCases from './components/UseCases'; import Pricing from './components/Pricing'; +import FAQ from './components/FAQ'; import CallToAction from './components/CallToAction'; import Footer from './components/Footer'; +import Loading from './components/Loading'; +import CookieConsent from './components/CookieConsent'; function App() { + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + // Simulate loading delay + const timer = setTimeout(() => { + setIsLoading(false); + }, 1500); + return () => clearTimeout(timer); + }, []); + + if (isLoading) { + return ; + } + return (
@@ -17,9 +35,11 @@ function App() { +
+
); } diff --git a/src/components/CallToAction.jsx b/src/components/CallToAction.jsx index 28d1516..8636fee 100644 --- a/src/components/CallToAction.jsx +++ b/src/components/CallToAction.jsx @@ -1,20 +1,24 @@ +import { useI18n } from '../contexts/I18nContext'; + function CallToAction() { + const { t } = useI18n(); + return (