`xGmyA(qJ&zdf-!Y}D&ksXSL5ZOfmE#;*_AhBSQL6kE
zaR)j^I&CjjCTCQ_B88w-6H&|*@cY%SOHmNClEhN&$+=yTak%MsNr6T?Fo;J`c-Z&x
zfsr7hf_+KH+A-FuK5jeAcUANggJi_s6}O1l6Xc*G>PI6%z*;EA6anYOY?o4JV!M4Xg_fyC;1*K`?i!VTr!iIlMz=vsAF#E8tA~zo
z^wT|C(K+5Y5Dxv&wGQs*X(!$!O}{!itw;Cq^OF}-hlgT-2#r%wuRw(eDOkWaQhWmC
zo7~|l!6(SxPP`E8`KKx+Kp%j4>*fJ-;NaRG`LRDa@H{zyW=LCnjQxsgF=v$89!&gd
u^O0vpmXG=$;vCYr)DXG2R)jC^UrcQ3iuJ7ugMlvt0liVwP^gqM4*DNMJ2}Jv
literal 0
HcmV?d00001
diff --git a/app/globals.css b/app/globals.css
new file mode 100644
index 0000000..f4447b4
--- /dev/null
+++ b/app/globals.css
@@ -0,0 +1,88 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+:root {
+ --foreground-rgb: 0, 0, 0;
+ --background-start-rgb: 214, 219, 220;
+ --background-end-rgb: 255, 255, 255;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --foreground-rgb: 255, 255, 255;
+ --background-start-rgb: 0, 0, 0;
+ --background-end-rgb: 0, 0, 0;
+ }
+}
+
+@layer utilities {
+ .text-balance {
+ text-wrap: balance;
+ }
+}
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 0 0% 3.9%;
+ --card: 0 0% 100%;
+ --card-foreground: 0 0% 3.9%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 0 0% 3.9%;
+ --primary: 0 0% 9%;
+ --primary-foreground: 0 0% 98%;
+ --secondary: 0 0% 96.1%;
+ --secondary-foreground: 0 0% 9%;
+ --muted: 0 0% 96.1%;
+ --muted-foreground: 0 0% 45.1%;
+ --accent: 0 0% 96.1%;
+ --accent-foreground: 0 0% 9%;
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 0 0% 98%;
+ --border: 0 0% 89.8%;
+ --input: 0 0% 89.8%;
+ --ring: 0 0% 3.9%;
+ --chart-1: 12 76% 61%;
+ --chart-2: 173 58% 39%;
+ --chart-3: 197 37% 24%;
+ --chart-4: 43 74% 66%;
+ --chart-5: 27 87% 67%;
+ --radius: 0.5rem;
+ }
+ .dark {
+ --background: 0 0% 3.9%;
+ --foreground: 0 0% 98%;
+ --card: 0 0% 3.9%;
+ --card-foreground: 0 0% 98%;
+ --popover: 0 0% 3.9%;
+ --popover-foreground: 0 0% 98%;
+ --primary: 0 0% 98%;
+ --primary-foreground: 0 0% 9%;
+ --secondary: 0 0% 14.9%;
+ --secondary-foreground: 0 0% 98%;
+ --muted: 0 0% 14.9%;
+ --muted-foreground: 0 0% 63.9%;
+ --accent: 0 0% 14.9%;
+ --accent-foreground: 0 0% 98%;
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 0 0% 98%;
+ --border: 0 0% 14.9%;
+ --input: 0 0% 14.9%;
+ --ring: 0 0% 83.1%;
+ --chart-1: 220 70% 50%;
+ --chart-2: 160 60% 45%;
+ --chart-3: 30 80% 55%;
+ --chart-4: 280 65% 60%;
+ --chart-5: 340 75% 55%;
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
diff --git a/app/layout.tsx b/app/layout.tsx
new file mode 100644
index 0000000..d07aad6
--- /dev/null
+++ b/app/layout.tsx
@@ -0,0 +1,18 @@
+import type { Metadata } from 'next';
+import './globals.css';
+import Script from 'next/script';
+export const metadata: Metadata = {
+ title: 'MultiSite - 企业级多语言静态站点解决方案',
+ description: '基于 React/Next.js + gray-matter 构建的高性能多语言静态网站',
+};
+export default function RootLayout({ children }: { children: React.ReactNode }) {
+ return (
+
+
+ {children}
+
+
+
+
+ );
+}
diff --git a/app/page.tsx b/app/page.tsx
new file mode 100644
index 0000000..76add90
--- /dev/null
+++ b/app/page.tsx
@@ -0,0 +1,237 @@
+'use client';
+import Link from 'next/link';
+import { useState, useEffect } from 'react';
+import { Header } from '../components/Header';
+import { Footer } from '../components/Footer';
+
+export default function Page() {
+ const [currentLang, setCurrentLang] = useState('zh-CN');
+ const [isLoading, setIsLoading] = useState(true);
+
+ useEffect(() => {
+ // Simulate language detection from Accept-Language header
+ const detectLanguage = () => {
+ const browserLang = navigator.language || navigator.languages[0];
+ if (browserLang.startsWith('zh-TW') || browserLang.startsWith('zh-HK')) {
+ setCurrentLang('zh-TW');
+ } else if (browserLang.startsWith('en')) {
+ setCurrentLang('en');
+ } else {
+ setCurrentLang('zh-CN');
+ }
+ setIsLoading(false);
+ };
+
+ detectLanguage();
+ }, []);
+
+ const languages = {
+ 'zh-CN': {
+ title: '企业级多语言静态站点解决方案',
+ subtitle: '基于 React/Next.js + gray-matter 构建的高性能多语言静态网站',
+ description:
+ '支持简体中文、繁体中文、英文三种语言,提供完整的 SEO 优化、动态路由和静态生成功能',
+ features: [
+ '多语言动态路由系统',
+ 'SEO 友好的静态生成',
+ '智能语言检测与切换',
+ '自动站点地图生成',
+ ],
+
+ cta: '立即开始',
+ learnMore: '了解更多',
+ nav: {
+ home: '首页',
+ docs: '文档',
+ about: '关于',
+ contact: '联系我们',
+ },
+ },
+ 'zh-TW': {
+ title: '企業級多語言靜態站點解決方案',
+ subtitle: '基於 React/Next.js + gray-matter 構建的高性能多語言靜態網站',
+ description:
+ '支援簡體中文、繁體中文、英文三種語言,提供完整的 SEO 優化、動態路由和靜態生成功能',
+ features: [
+ '多語言動態路由系統',
+ 'SEO 友好的靜態生成',
+ '智能語言檢測與切換',
+ '自動站點地圖生成',
+ ],
+
+ cta: '立即開始',
+ learnMore: '了解更多',
+ nav: {
+ home: '首頁',
+ docs: '文檔',
+ about: '關於',
+ contact: '聯繫我們',
+ },
+ },
+ en: {
+ title: 'Enterprise Multi-language Static Site Solution',
+ subtitle:
+ 'High-performance multi-language static website built with React/Next.js + gray-matter',
+ description:
+ 'Supports Simplified Chinese, Traditional Chinese, and English with complete SEO optimization, dynamic routing, and static generation',
+ features: [
+ 'Multi-language Dynamic Routing',
+ 'SEO-friendly Static Generation',
+ 'Intelligent Language Detection',
+ 'Automatic Sitemap Generation',
+ ],
+
+ cta: 'Get Started',
+ learnMore: 'Learn More',
+ nav: {
+ home: 'Home',
+ docs: 'Docs',
+ about: 'About',
+ contact: 'Contact',
+ },
+ },
+ };
+
+ const currentContent = languages[currentLang];
+
+ const switchLanguage = (lang) => {
+ setCurrentLang(lang);
+ // In real implementation, this would redirect to /{lang}/
+ // window.location.href = `/${lang}/`;
+ };
+
+ if (isLoading) {
+ return (
+
+ );
+ }
+
+ return (
+
+
+
+ {/* Hero Section */}
+
+
+
+
+ {currentContent.title}
+
+
+ {currentContent.subtitle}
+
+
+ {currentContent.description}
+
+
+
+
+ {currentContent.cta}
+
+
+ {currentContent.learnMore}
+
+
+
+
+
+
+ {/* Features Section */}
+
+
+
+ {currentContent.features.map((feature, index) => (
+
+
+
+ {feature}
+
+
+ {currentLang === 'en'
+ ? 'Advanced functionality for modern web applications'
+ : '为现代网络应用提供先进功能'}
+
+
+ ))}
+
+
+
+
+ {/* Architecture Diagram */}
+
+
+
+
+ {currentLang === 'en' ? 'System Architecture' : '系统架构'}
+
+
+
+
+
+
+
+
pages/
+
+ [lang]/[...slug].tsx
+
+
+
+ {currentLang === 'en' ? 'Dynamic Routing' : '动态路由'}
+
+
+
+
+
+
+ content/
+
+
+ zh-CN/ zh-TW/ en/
+
+
+
+ {currentLang === 'en' ? 'Content Management' : '内容管理'}
+
+
+
+
+
+
+ public/
+
+
sitemap-*.xml
+
+
+ {currentLang === 'en' ? 'SEO Optimization' : 'SEO优化'}
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/bun.lockb b/bun.lockb
new file mode 100644
index 0000000000000000000000000000000000000000..529e1710365f1b2f30da6b57f852ff5d9eec6612
GIT binary patch
literal 184880
zcmeEPcRZHs|9>)DD3M)RMK&!WGlXPEqU=4gB9w-f(jGLFqM#3M>2Mtv{`gTaUxUdP+UuY2BTm=A20?o;V(?0@*XFt28_rkkBBIr2*w_$8NpyAX#)-c{0t35
z0KGwwAJ8i@(kIf3!FUek*e*OQG78EVahwbWALNsud@x|BM`&1pH-q5?`9YA6^9Tt>
zqYofI4DvSsQSU5;5k8S&!7)CJ_uLG|Xee(1M4d-~*v{W0GHhWegQ3jJw3ABJhX?q^
zq3$Bc3qiZ1lwJlP`oERJfJha;;4n{y3OIwhYoQ$R1mw~07%Hy=h3Kzmgol?;B!h7Z
z^4RV({6IfufGE}nQ|(Fr=0G0HLwq9qd^8yhV%KUYv%kI`kx>i4&j_FBNOYMGjAH!m
z0z#7{aS#^()TP>c`G*AsczZ>!%VWwWVN0h%xkWZW~@R8>QVtw%m
z2n`7Lh>SFca?Fdt}<~)@H
zM0>NL9#K?+$@c?9UVl0nl1x8-)j0`4K>KNcxE@B2VlY55i3bo&CDj9Bd8ZVE0U<~V
z42TMVurR!XV-Oe~5q^ER0e)gXR|29QjH_1^e9j!h?1zRlWe4(DAL;Ub>3}$n8h|iFN%DXgub~v~9m~u|MFt0Wf}H_Sj&b`8
zeqg*dk7MRLD8I;h_l%D842xqhb}KOXIL%PkD>yP1{Y5SGhvcmxkM=>kuU*Y}=6r*_
zBPuT3hhYzS2z`Dw}4-h_KZMEXcUImXw13KLBMaa}wC#Ca0n7aA4;7SJz`
z;7G|OO?9<@~1%$NDS^
zPXHp{+s7wdB_NU^PVt5V_LYZuMMVUJ`uIdfM+HDXeFH+hRieWgHik@l(ZfOgoDJaU9{?
zpaNTr|4l1qJtrXU2WhjI<1Rq8n{UJ1w>kmQF4s&ZK7l;W?@B=Q|0Y%M2#9`uhj!>c
zA0Wo@B_OV!3JQy;`U8MC&r$%f-!Xu=Px=9(pKyPU@bUABb%H$F35fKFi13JG7(gEV
zb#Y>r=L2Fqw4j_1P#zHNN&w