From 55b08a08f4865d7e8c9cf53ceb5af65a3f3c9ff7 Mon Sep 17 00:00:00 2001 From: Zopt <100939012+Zopt@users.noreply.github.com> Date: Fri, 12 Sep 2025 17:03:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.json | 3 + .gitignore | 40 + .prettierrc | 11 + README.md | 25 + app/about/page.tsx | 476 ++ app/contact/page.tsx | 510 ++ app/docs/[slug]/DocDetail.tsx | 114 + app/docs/[slug]/page.tsx | 28 + app/docs/page.tsx | 369 ++ app/favicon.ico | Bin 0 -> 179344 bytes app/globals.css | 88 + app/layout.tsx | 18 + app/page.tsx | 237 + bun.lockb | Bin 0 -> 184880 bytes components.json | 20 + components/DocumentList.tsx | 182 + components/Footer.tsx | 88 + components/Header.tsx | 69 + content/en/configuration.md | 235 + content/en/getting-started.md | 27 + content/zh-CN/configuration.md | 31 + content/zh-CN/content-management.md | 31 + content/zh-CN/deployment.md | 31 + content/zh-CN/getting-started.md | 31 + lib/content.ts | 91 + lib/utils.ts | 6 + next.config.mjs | 10 + package-lock.json | 7157 +++++++++++++++++++++++++++ package.json | 38 + pdf.py | 81 + pdf2.py | 104 + postcss.config.mjs | 8 + public/images/logo-text.png | Bin 0 -> 1174 bytes tailwind.config.ts | 67 + tsconfig.json | 42 + yarn.lock | 3772 ++++++++++++++ 36 files changed, 14040 insertions(+) create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100644 app/about/page.tsx create mode 100644 app/contact/page.tsx create mode 100644 app/docs/[slug]/DocDetail.tsx create mode 100644 app/docs/[slug]/page.tsx create mode 100644 app/docs/page.tsx create mode 100644 app/favicon.ico create mode 100644 app/globals.css create mode 100644 app/layout.tsx create mode 100644 app/page.tsx create mode 100644 bun.lockb create mode 100644 components.json create mode 100644 components/DocumentList.tsx create mode 100644 components/Footer.tsx create mode 100644 components/Header.tsx create mode 100644 content/en/configuration.md create mode 100644 content/en/getting-started.md create mode 100644 content/zh-CN/configuration.md create mode 100644 content/zh-CN/content-management.md create mode 100644 content/zh-CN/deployment.md create mode 100644 content/zh-CN/getting-started.md create mode 100644 lib/content.ts create mode 100644 lib/utils.ts create mode 100644 next.config.mjs create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pdf.py create mode 100644 pdf2.py create mode 100644 postcss.config.mjs create mode 100644 public/images/logo-text.png create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..bffb357 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3a700a9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# vscode +.vscode +.next-prod diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..36f0850 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,11 @@ +{ + "singleQuote": true, + "printWidth": 100, + "tabWidth": 4, + "useTabs": false, + "semi": true, + "jsxSingleQuote": false, + "bracketSpacing": true, + "arrowParens": "always", + "endOfLine": "lf" +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..839f8b3 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# Onlook Starter Template + +

+ +

+ +This is an [Onlook](https://onlook.com/) project set up with +[Next.js](https://nextjs.org/), [TailwindCSS](https://tailwindcss.com/) and +[ShadCN](https://ui.shadcn.com). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) in Onlook to see the result. diff --git a/app/about/page.tsx b/app/about/page.tsx new file mode 100644 index 0000000..711e037 --- /dev/null +++ b/app/about/page.tsx @@ -0,0 +1,476 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { Header } from '../../components/Header'; +import { Footer } from '../../components/Footer'; + +export default function AboutPage() { + const [currentLang, setCurrentLang] = useState('zh-CN'); + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + 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 content = { + 'zh-CN': { + title: '关于我们', + subtitle: '致力于构建下一代多语言网站解决方案', + nav: { + home: '首页', + docs: '文档', + about: '关于', + contact: '联系我们', + }, + mission: { + title: '我们的使命', + description: + 'MultiSite 致力于为全球企业提供最先进的多语言静态网站解决方案,让跨语言沟通变得简单高效。', + }, + vision: { + title: '我们的愿景', + description: '成为全球领先的多语言网站技术提供商,帮助企业轻松实现国际化业务拓展。', + }, + values: { + title: '核心价值观', + items: [ + { + title: '创新驱动', + description: '持续探索前沿技术,为用户提供最优质的解决方案', + }, + { + title: '用户至上', + description: '以用户需求为中心,不断优化产品体验', + }, + { + title: '开放合作', + description: '拥抱开源社区,与全球开发者共同成长', + }, + { + title: '品质保证', + description: '严格的质量标准,确保产品稳定可靠', + }, + ], + }, + team: { + title: '团队介绍', + description: '我们是一支充满激情的技术团队,专注于多语言网站技术的研发与创新。', + members: [ + { + name: '张伟', + role: '技术总监', + description: '10年前端开发经验,React/Next.js 技术专家', + }, + { + name: '李娜', + role: '产品经理', + description: '专注用户体验设计,国际化产品规划专家', + }, + { + name: '王强', + role: '架构师', + description: '全栈开发工程师,云原生技术专家', + }, + ], + }, + technology: { + title: '技术优势', + items: [ + { + title: 'React/Next.js', + description: '基于最新的 React 18 和 Next.js 14,提供卓越的性能和开发体验', + }, + { + title: '静态生成', + description: '利用 SSG 技术,实现极速加载和优秀的 SEO 表现', + }, + { + title: '多语言支持', + description: '智能语言检测和切换,支持全球主要语言', + }, + { + title: '响应式设计', + description: '完美适配各种设备,提供一致的用户体验', + }, + ], + }, + }, + 'zh-TW': { + title: '關於我們', + subtitle: '致力於構建下一代多語言網站解決方案', + nav: { + home: '首頁', + docs: '文檔', + about: '關於', + contact: '聯繫我們', + }, + mission: { + title: '我們的使命', + description: + 'MultiSite 致力於為全球企業提供最先進的多語言靜態網站解決方案,讓跨語言溝通變得簡單高效。', + }, + vision: { + title: '我們的願景', + description: '成為全球領先的多語言網站技術提供商,幫助企業輕鬆實現國際化業務拓展。', + }, + values: { + title: '核心價值觀', + items: [ + { + title: '創新驅動', + description: '持續探索前沿技術,為用戶提供最優質的解決方案', + }, + { + title: '用戶至上', + description: '以用戶需求為中心,不斷優化產品體驗', + }, + { + title: '開放合作', + description: '擁抱開源社區,與全球開發者共同成長', + }, + { + title: '品質保證', + description: '嚴格的質量標準,確保產品穩定可靠', + }, + ], + }, + team: { + title: '團隊介紹', + description: '我們是一支充滿激情的技術團隊,專注於多語言網站技術的研發與創新。', + members: [ + { + name: '張偉', + role: '技術總監', + description: '10年前端開發經驗,React/Next.js 技術專家', + }, + { + name: '李娜', + role: '產品經理', + description: '專注用戶體驗設計,國際化產品規劃專家', + }, + { + name: '王強', + role: '架構師', + description: '全棧開發工程師,雲原生技術專家', + }, + ], + }, + technology: { + title: '技術優勢', + items: [ + { + title: 'React/Next.js', + description: '基於最新的 React 18 和 Next.js 14,提供卓越的性能和開發體驗', + }, + { + title: '靜態生成', + description: '利用 SSG 技術,實現極速加載和優秀的 SEO 表現', + }, + { + title: '多語言支援', + description: '智能語言檢測和切換,支援全球主要語言', + }, + { + title: '響應式設計', + description: '完美適配各種設備,提供一致的用戶體驗', + }, + ], + }, + }, + en: { + title: 'About Us', + subtitle: 'Dedicated to building next-generation multi-language website solutions', + nav: { + home: 'Home', + docs: 'Docs', + about: 'About', + contact: 'Contact', + }, + mission: { + title: 'Our Mission', + description: + 'MultiSite is dedicated to providing the most advanced multi-language static website solutions for global enterprises, making cross-language communication simple and efficient.', + }, + vision: { + title: 'Our Vision', + description: + "To become the world's leading multi-language website technology provider, helping enterprises easily achieve international business expansion.", + }, + values: { + title: 'Core Values', + items: [ + { + title: 'Innovation Driven', + description: + 'Continuously explore cutting-edge technologies to provide users with the best solutions', + }, + { + title: 'User First', + description: + 'Focus on user needs and continuously optimize product experience', + }, + { + title: 'Open Collaboration', + description: + 'Embrace the open source community and grow together with global developers', + }, + { + title: 'Quality Assurance', + description: + 'Strict quality standards to ensure stable and reliable products', + }, + ], + }, + team: { + title: 'Our Team', + description: + 'We are a passionate technical team focused on the research and innovation of multi-language website technologies.', + members: [ + { + name: 'Zhang Wei', + role: 'Technical Director', + description: + '10 years of frontend development experience, React/Next.js expert', + }, + { + name: 'Li Na', + role: 'Product Manager', + description: + 'Focus on user experience design, internationalization product planning expert', + }, + { + name: 'Wang Qiang', + role: 'Architect', + description: + 'Full-stack development engineer, cloud-native technology expert', + }, + ], + }, + technology: { + title: 'Technical Advantages', + items: [ + { + title: 'React/Next.js', + description: + 'Based on the latest React 18 and Next.js 14, providing excellent performance and development experience', + }, + { + title: 'Static Generation', + description: + 'Utilizing SSG technology for ultra-fast loading and excellent SEO performance', + }, + { + title: 'Multi-language Support', + description: + 'Intelligent language detection and switching, supporting major global languages', + }, + { + title: 'Responsive Design', + description: + 'Perfect adaptation to various devices, providing consistent user experience', + }, + ], + }, + }, + }; + + const currentContent = content[currentLang]; + + if (isLoading) { + return ( +
+
+
+ ); + } + + return ( +
+
+ + {/* Hero Section */} +
+
+
+

+ {currentContent.title} +

+

+ {currentContent.subtitle} +

+
+
+
+ + {/* Mission & Vision */} +
+
+
+
+
+ + + +
+

+ {currentContent.mission.title} +

+

+ {currentContent.mission.description} +

+
+
+
+ + + + + +
+

+ {currentContent.vision.title} +

+

+ {currentContent.vision.description} +

+
+
+
+
+ + {/* Core Values */} +
+
+
+

+ {currentContent.values.title} +

+
+
+ {currentContent.values.items.map((value, index) => ( +
+
+
+
+

+ {value.title} +

+

+ {value.description} +

+
+ ))} +
+
+
+ + {/* Team */} +
+
+
+

+ {currentContent.team.title} +

+

+ {currentContent.team.description} +

+
+
+ {currentContent.team.members.map((member, index) => ( +
+
+ + + +
+

+ {member.name} +

+

{member.role}

+

{member.description}

+
+ ))} +
+
+
+ + {/* Technology */} +
+
+
+

+ {currentContent.technology.title} +

+
+
+ {currentContent.technology.items.map((tech, index) => ( +
+

+ {tech.title} +

+

{tech.description}

+
+ ))} +
+
+
+ +
+ ); +} diff --git a/app/contact/page.tsx b/app/contact/page.tsx new file mode 100644 index 0000000..a9294a9 --- /dev/null +++ b/app/contact/page.tsx @@ -0,0 +1,510 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { Header } from '../../components/Header'; +import { Footer } from '../../components/Footer'; + +export default function ContactPage() { + const [currentLang, setCurrentLang] = useState('zh-CN'); + const [isLoading, setIsLoading] = useState(true); + const [formData, setFormData] = useState({ + name: '', + email: '', + company: '', + message: '', + }); + + useEffect(() => { + 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 content = { + 'zh-CN': { + title: '联系我们', + subtitle: '我们很乐意为您提供帮助和支持', + nav: { + home: '首页', + docs: '文档', + about: '关于', + contact: '联系我们', + }, + form: { + title: '发送消息', + name: '姓名', + email: '邮箱', + company: '公司', + message: '消息', + submit: '发送消息', + namePlaceholder: '请输入您的姓名', + emailPlaceholder: '请输入您的邮箱地址', + companyPlaceholder: '请输入您的公司名称(可选)', + messagePlaceholder: '请描述您的需求或问题...', + }, + contact: { + title: '联系方式', + email: { + title: '邮箱', + value: 'contact@multisite.com', + }, + phone: { + title: '电话', + value: '+86 400-123-4567', + }, + address: { + title: '地址', + value: '北京市朝阳区科技园区创新大厦 A 座 1001 室', + }, + hours: { + title: '工作时间', + value: '周一至周五 9:00 - 18:00', + }, + }, + support: { + title: '技术支持', + items: [ + { + title: '在线文档', + description: '查看详细的使用指南和 API 文档', + link: '/docs', + }, + { + title: 'GitHub', + description: '访问我们的开源项目和代码示例', + link: 'https://github.com', + }, + { + title: '社区论坛', + description: '与其他开发者交流经验和解决方案', + link: '#', + }, + ], + }, + }, + 'zh-TW': { + title: '聯繫我們', + subtitle: '我們很樂意為您提供幫助和支援', + nav: { + home: '首頁', + docs: '文檔', + about: '關於', + contact: '聯繫我們', + }, + form: { + title: '發送消息', + name: '姓名', + email: '郵箱', + company: '公司', + message: '消息', + submit: '發送消息', + namePlaceholder: '請輸入您的姓名', + emailPlaceholder: '請輸入您的郵箱地址', + companyPlaceholder: '請輸入您的公司名稱(可選)', + messagePlaceholder: '請描述您的需求或問題...', + }, + contact: { + title: '聯繫方式', + email: { + title: '郵箱', + value: 'contact@multisite.com', + }, + phone: { + title: '電話', + value: '+86 400-123-4567', + }, + address: { + title: '地址', + value: '北京市朝陽區科技園區創新大廈 A 座 1001 室', + }, + hours: { + title: '工作時間', + value: '週一至週五 9:00 - 18:00', + }, + }, + support: { + title: '技術支援', + items: [ + { + title: '在線文檔', + description: '查看詳細的使用指南和 API 文檔', + link: '/docs', + }, + { + title: 'GitHub', + description: '訪問我們的開源項目和代碼示例', + link: 'https://github.com', + }, + { + title: '社區論壇', + description: '與其他開發者交流經驗和解決方案', + link: '#', + }, + ], + }, + }, + en: { + title: 'Contact Us', + subtitle: "We'd love to help and support you", + nav: { + home: 'Home', + docs: 'Docs', + about: 'About', + contact: 'Contact', + }, + form: { + title: 'Send Message', + name: 'Name', + email: 'Email', + company: 'Company', + message: 'Message', + submit: 'Send Message', + namePlaceholder: 'Enter your name', + emailPlaceholder: 'Enter your email address', + companyPlaceholder: 'Enter your company name (optional)', + messagePlaceholder: 'Describe your needs or questions...', + }, + contact: { + title: 'Contact Information', + email: { + title: 'Email', + value: 'contact@multisite.com', + }, + phone: { + title: 'Phone', + value: '+86 400-123-4567', + }, + address: { + title: 'Address', + value: 'Room 1001, Building A, Innovation Tower, Tech Park, Chaoyang District, Beijing', + }, + hours: { + title: 'Business Hours', + value: 'Monday - Friday 9:00 AM - 6:00 PM', + }, + }, + support: { + title: 'Technical Support', + items: [ + { + title: 'Documentation', + description: 'View detailed usage guides and API documentation', + link: '/docs', + }, + { + title: 'GitHub', + description: 'Access our open source projects and code examples', + link: 'https://github.com', + }, + { + title: 'Community Forum', + description: 'Exchange experiences and solutions with other developers', + link: '#', + }, + ], + }, + }, + }; + + const currentContent = content[currentLang]; + + const handleInputChange = (e: React.ChangeEvent) => { + const { name, value } = e.target; + setFormData((prev) => ({ + ...prev, + [name]: value, + })); + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + // 这里可以添加表单提交逻辑 + console.log('Form submitted:', formData); + alert(currentLang === 'en' ? 'Message sent successfully!' : '消息发送成功!'); + }; + + if (isLoading) { + return ( +
+
+
+ ); + } + + return ( +
+
+ + {/* Hero Section */} +
+
+
+

+ {currentContent.title} +

+

+ {currentContent.subtitle} +

+
+
+
+ + {/* Main Content */} +
+
+ {/* Contact Form */} +
+

+ {currentContent.form.title} +

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + {/* Contact Information */} +
+
+

+ {currentContent.contact.title} +

+
+
+
+ + + +
+
+

+ {currentContent.contact.email.title} +

+

+ {currentContent.contact.email.value} +

+
+
+
+
+ + + +
+
+

+ {currentContent.contact.phone.title} +

+

+ {currentContent.contact.phone.value} +

+
+
+
+
+ + + + + +
+
+

+ {currentContent.contact.address.title} +

+

+ {currentContent.contact.address.value} +

+
+
+
+
+ + + +
+
+

+ {currentContent.contact.hours.title} +

+

+ {currentContent.contact.hours.value} +

+
+
+
+
+ + {/* Technical Support */} +
+

+ {currentContent.support.title} +

+
+ {currentContent.support.items.map((item, index) => ( +
+

+ {item.title} +

+

+ {item.description} +

+ + {currentLang === 'en' ? 'Learn more →' : '了解更多 →'} + +
+ ))} +
+
+
+
+
+ +
+
+ ); +} diff --git a/app/docs/[slug]/DocDetail.tsx b/app/docs/[slug]/DocDetail.tsx new file mode 100644 index 0000000..206cf06 --- /dev/null +++ b/app/docs/[slug]/DocDetail.tsx @@ -0,0 +1,114 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import ReactMarkdown from 'react-markdown'; +import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; +import { tomorrow } from 'react-syntax-highlighter/dist/esm/styles/prism'; +import { ContentItem } from '@/lib/content'; +import { Header } from '@/components/Header'; +import { Footer } from '@/components/Footer'; +import Link from 'next/link'; + +interface DocDetailProps { + doc: ContentItem | null; + relatedDocs: ContentItem[]; + currentLang: string; +} + +export default function DocDetail({ doc, relatedDocs, currentLang }: DocDetailProps) { + const [lang, setLang] = useState(currentLang); + + // 你原有的语言检测逻辑也可以放在这里 + useEffect(() => { + const browserLang = navigator.language; + if (browserLang.startsWith('zh-TW') || browserLang.startsWith('zh-HK')) { + setLang('zh-TW'); + } else if (browserLang.startsWith('en')) { + setLang('en'); + } else { + setLang('zh-CN'); + } + }, []); + + if (!doc) { + return ( +
+

文档未找到

+
+ ); + } + + // 你原先的多语言文本映射 + const contentMap = { + 'zh-CN': { backTo: '← 返回文档', related: '相关文档' }, + 'zh-TW': { backTo: '← 返回文檔', related: '相關文檔' }, + en: { backTo: '← Back to Docs', related: 'Related Documents' }, + }; + + const labels = contentMap[lang] || contentMap['zh-CN']; + + return ( +
+
+ +
+ + {labels.backTo} + + +
+

{doc.metadata.title}

+

{doc.metadata.description}

+ + {String(children).replace(/\n$/, '')} + + ) : ( + + {children} + + ); + }, + }} + > + {doc.content} + +
+ + {relatedDocs.length > 0 && ( +
+

{labels.related}

+
    + {relatedDocs.map((item) => ( +
  • + + {item.metadata.title} + +
  • + ))} +
+
+ )} +
+ +
+
+ ); +} diff --git a/app/docs/[slug]/page.tsx b/app/docs/[slug]/page.tsx new file mode 100644 index 0000000..0842b91 --- /dev/null +++ b/app/docs/[slug]/page.tsx @@ -0,0 +1,28 @@ +import { getContentData, getAllContent, ContentItem } from '@/lib/content'; +import DocDetail from './DocDetail'; + +interface PageProps { + params: { slug: string }; +} + +export default async function Page({ params: { slug } }: PageProps) { + // 你可以根据需要改为从 headers、cookies 或其它方式获取语言 + const currentLang = 'zh-CN'; + + let doc: ContentItem | null; + let related: ContentItem[]; + try { + doc = getContentData(currentLang, slug); + const all = getAllContent(currentLang); + related = all + .filter( + (item) => item.metadata.category === doc.metadata.category && item.slug !== slug, + ) + .slice(0, 3); + } catch { + doc = null; + related = []; + } + + return ; +} diff --git a/app/docs/page.tsx b/app/docs/page.tsx new file mode 100644 index 0000000..4637f6a --- /dev/null +++ b/app/docs/page.tsx @@ -0,0 +1,369 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { Header } from '../../components/Header'; +import { Footer } from '../../components/Footer'; +import { DocumentList } from '../../components/DocumentList'; +import { ContentItem } from '../../lib/content'; +import Link from 'next/link'; + +export default function DocsPage() { + const [currentLang, setCurrentLang] = useState('zh-CN'); + const [isLoading, setIsLoading] = useState(true); + const [documents, setDocuments] = useState([]); + + useEffect(() => { + 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(); + }, []); + + useEffect(() => { + const loadDocuments = () => { + // 创建模拟文档数据 + const mockDocuments: ContentItem[] = [ + { + slug: 'getting-started', + metadata: { + title: currentLang === 'en' ? 'Getting Started' : '快速开始', + description: + currentLang === 'en' + ? 'Learn how to quickly get started with MultiSite for building multi-language websites' + : '学习如何快速开始使用 MultiSite 构建多语言网站', + date: '2024-01-15', + author: currentLang === 'en' ? 'MultiSite Team' : 'MultiSite 团队', + category: currentLang === 'en' ? 'Getting Started' : '入门指南', + tags: + currentLang === 'en' + ? ['getting-started', 'installation', 'setup'] + : ['快速开始', '安装', '设置'], + }, + content: '', + }, + { + slug: 'configuration', + metadata: { + title: currentLang === 'en' ? 'Configuration Guide' : '配置指南', + description: + currentLang === 'en' + ? 'Learn how to configure MultiSite to meet your project requirements' + : '了解如何配置 MultiSite 以满足您的项目需求', + date: '2024-01-16', + author: currentLang === 'en' ? 'MultiSite Team' : 'MultiSite 团队', + category: currentLang === 'en' ? 'Configuration' : '配置', + tags: + currentLang === 'en' + ? ['configuration', 'setup', 'customization'] + : ['配置', '设置', '自定义'], + }, + content: '', + }, + { + slug: 'content-management', + metadata: { + title: currentLang === 'en' ? 'Content Management' : '内容管理', + description: + currentLang === 'en' + ? 'Learn how to manage and organize your content in MultiSite' + : '学习如何在 MultiSite 中管理和组织您的内容', + date: '2024-01-17', + author: currentLang === 'en' ? 'MultiSite Team' : 'MultiSite 团队', + category: currentLang === 'en' ? 'Content' : '内容', + tags: + currentLang === 'en' + ? ['content', 'management', 'markdown'] + : ['内容', '管理', 'markdown'], + }, + content: '', + }, + { + slug: 'deployment', + metadata: { + title: currentLang === 'en' ? 'Deployment Guide' : '部署指南', + description: + currentLang === 'en' + ? 'Learn how to deploy your MultiSite project to production' + : '了解如何将您的 MultiSite 项目部署到生产环境', + date: '2024-01-18', + author: currentLang === 'en' ? 'MultiSite Team' : 'MultiSite 团队', + category: currentLang === 'en' ? 'Deployment' : '部署', + tags: + currentLang === 'en' + ? ['deployment', 'production', 'CI/CD'] + : ['部署', '生产', 'CI/CD'], + }, + content: '', + }, + ]; + + setDocuments(mockDocuments); + }; + + if (!isLoading) { + loadDocuments(); + } + }, [currentLang, isLoading]); + + const content = { + 'zh-CN': { + title: '文档', + subtitle: '完整的多语言静态站点开发指南', + description: '了解如何使用我们的多语言静态站点解决方案构建现代化的网站。', + nav: { + home: '首页', + docs: '文档', + about: '关于', + contact: '联系我们', + }, + }, + 'zh-TW': { + title: '文檔', + subtitle: '完整的多語言靜態站點開發指南', + description: '了解如何使用我們的多語言靜態站點解決方案構建現代化的網站。', + nav: { + home: '首頁', + docs: '文檔', + about: '關於', + contact: '聯繫我們', + }, + }, + en: { + title: 'Documentation', + subtitle: 'Complete guide for multi-language static site development', + description: + 'Learn how to build modern websites using our multi-language static site solution.', + nav: { + home: 'Home', + docs: 'Docs', + about: 'About', + contact: 'Contact', + }, + }, + }; + + const currentContent = content[currentLang]; + + if (isLoading) { + return ( +
+
+
+ ); + } + + return ( +
+
+
+
+
+
+ MS +
+
+ + MultiSite + +
+
+ + + +
+ +
+
+
+
+ +
+
+
+

+ {currentContent.title} +

+

+ {currentContent.subtitle} +

+

+ {currentContent.description} +

+
+
+
+ +
+ {/* Quick Start Section */} +
+

+ {currentLang === 'en' ? 'Getting Started' : '快速开始'} +

+
+

+ {currentLang === 'en' + ? 'Welcome to the MultiSite documentation. This guide will help you get started with building multi-language static websites.' + : '欢迎使用 MultiSite 文档。本指南将帮助您开始构建多语言静态网站。'} +

+

+ {currentLang === 'en' ? 'Features' : '特性'} +

+
    +
  • + {currentLang === 'en' ? 'Multi-language support' : '多语言支持'} +
  • +
  • + {currentLang === 'en' ? 'Static site generation' : '静态站点生成'} +
  • +
  • {currentLang === 'en' ? 'SEO optimization' : 'SEO 优化'}
  • +
  • {currentLang === 'en' ? 'Responsive design' : '响应式设计'}
  • +
+
+
+ + {/* Documentation Cards Section */} +
+
+

+ {currentLang === 'en' ? 'Documentation' : '文档列表'} +

+
+ {currentLang === 'en' + ? `${documents.length} documents available` + : `共 ${documents.length} 篇文档`} +
+
+ + {isLoading ? ( +
+
+ + {currentLang === 'en' ? 'Loading documents...' : '加载文档中...'} + +
+ ) : ( + + )} +
+
+ +
+
+
+
+
+
+ MS +
+ MultiSite +
+

+ {currentLang === 'en' + ? 'Enterprise-grade multi-language static site solution powered by React/Next.js' + : '基于 React/Next.js 的企业级多语言静态站点解决方案'} +

+
+ +
+

+ {currentLang === 'en' ? 'Resources' : '资源'} +

+
    +
  • + + {currentLang === 'en' ? 'Docs' : '文档'} + +
  • +
  • + + API + +
  • +
  • + + {currentLang === 'en' ? 'Examples' : '示例'} + +
  • +
+
+ +
+

+ {currentLang === 'en' ? 'Support' : '支持'} +

+
    +
  • + + {currentLang === 'en' ? 'Contact' : '联系我们'} + +
  • +
  • + + GitHub + +
  • +
  • + + {currentLang === 'en' ? 'Community' : '社区'} + +
  • +
+
+
+ +
+

+ © 2024 MultiSite.{' '} + {currentLang === 'en' ? 'All rights reserved.' : '保留所有权利。'} +

+
+
+
+
+ ); +} diff --git a/app/favicon.ico b/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1b3613cdcb50762ecb025f49ff186a45afe4dcc7 GIT binary patch literal 179344 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 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} + +