From 437dc976fb11f424a534c535528c0c9b3bfd36ae Mon Sep 17 00:00:00 2001 From: Leon-in Date: Wed, 29 Apr 2026 00:29:14 +0800 Subject: [PATCH] checkpoint: before i18n implementation --- app/about/page.tsx | 8 +- app/blog-posts/[slug]/page.tsx | 22 +- app/blog/page.tsx | 8 +- app/careers/[slug]/page.tsx | 41 +- app/careers/page.tsx | 12 +- app/coming-soon/page.tsx | 24 +- app/contact/page.tsx | 8 +- app/layout.tsx | 15 +- app/not-found.tsx | 24 +- app/page.tsx | 9 +- app/team-members/[id]/page.tsx | 43 +- components/ContactForm.tsx | 53 +- components/Footer.tsx | 191 ++----- components/GsapAnimations.tsx | 9 +- components/Header.tsx | 60 +- components/NewsletterForm.tsx | 10 +- components/RevealObserver.tsx | 4 +- components/ThemeToggle.tsx | 10 +- components/about/CareersSection.tsx | 85 ++- components/about/HeroSection.tsx | 117 ++-- components/about/MissionSection.tsx | 122 ++--- components/about/SocialLinksSection.tsx | 107 ++-- components/about/TeamSection.tsx | 322 +++-------- components/about/ValuesSection.tsx | 263 ++++----- components/blog/CtaSection.tsx | 10 +- components/blog/HeroSection.tsx | 25 +- components/blog/PostsGridSection.tsx | 23 +- components/contact/CardsSection.tsx | 30 +- components/contact/FormSection.tsx | 132 ++--- components/contact/HeroSection.tsx | 162 +++--- components/home/BlogPreviewSection.tsx | 141 ++--- components/home/CtaSection.tsx | 13 +- components/home/HeroSection.tsx | 169 +++--- components/home/IntegrationsSection.tsx | 352 +----------- components/home/PrinciplesSection.tsx | 49 +- lib/blog-data.ts | 216 ++++++-- lib/careers-data.ts | 93 +++- lib/site-content.ts | 284 ++++++++++ lib/team-data.ts | 57 +- package-lock.json | 698 +++++++++++++++++++++++- package.json | 1 + 41 files changed, 2167 insertions(+), 1855 deletions(-) create mode 100644 lib/site-content.ts diff --git a/app/about/page.tsx b/app/about/page.tsx index 5fdb501..60a2cf0 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -2,11 +2,11 @@ import type { Metadata } from "next" import { HeroSection, MissionSection, TeamSection, ValuesSection, CareersSection, SocialLinksSection } from "@/components/about" export const metadata: Metadata = { - title: "About", - description: "Learn about DalCode's mission, team, and values. We're building the next generation of AI-powered developer tools.", + title: "产品定位", + description: "了解 DAL Code 的产品隐喻、核心能力、目标用户和平台方向。", openGraph: { - title: "About DalCode", - description: "Learn about DalCode's mission, team, and values.", + title: "为什么是 DAL Code", + description: "了解 DAL Code 的产品隐喻、核心能力、目标用户和平台方向。", }, } diff --git a/app/blog-posts/[slug]/page.tsx b/app/blog-posts/[slug]/page.tsx index 580e3f0..137320a 100644 --- a/app/blog-posts/[slug]/page.tsx +++ b/app/blog-posts/[slug]/page.tsx @@ -15,12 +15,12 @@ export async function generateStaticParams() { export async function generateMetadata({ params }: Props): Promise { const { slug } = await params const post = BLOG_POSTS.find((p) => p.slug === slug) - if (!post) return { title: "Post Not Found" } + if (!post) return { title: "文章未找到" } return { - title: post.title, + title: `${post.title} | DAL Code`, description: post.excerpt, openGraph: { - title: post.title, + title: `${post.title} | DAL Code`, description: post.excerpt, images: [{ url: post.image }], }, @@ -73,12 +73,14 @@ export default async function BlogPostPage({ params }: Props) {
-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

-

Key Insights

-

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit.

-

At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.

-

Looking Ahead

-

Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

+ {post.sections.map((section) => ( +
+

{section.title}

+ {section.paragraphs.map((paragraph) => ( +

{paragraph}

+ ))} +
+ ))}
@@ -86,7 +88,7 @@ export default async function BlogPostPage({ params }: Props) {
-
Back to all articles
+
返回全部文章
diff --git a/app/blog/page.tsx b/app/blog/page.tsx index a0b4e64..bd06bc9 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -2,11 +2,11 @@ import type { Metadata } from "next" import { HeroSection, CtaSection, PostsGridSection } from "@/components/blog" export const metadata: Metadata = { - title: "Blog", - description: "Insights on AI, machine learning, and the future of software development from the DalCode team.", + title: "产品洞察", + description: "围绕 Intent-to-Code、Mission Mode、多模型路由和 Skills 平台的产品文章。", openGraph: { - title: "DalCode Blog", - description: "Insights on AI, machine learning, and the future of software development.", + title: "DAL Code 产品洞察", + description: "围绕 Intent-to-Code、Mission Mode、多模型路由和 Skills 平台的产品文章。", }, } diff --git a/app/careers/[slug]/page.tsx b/app/careers/[slug]/page.tsx index f3c2c42..ab4cbf7 100644 --- a/app/careers/[slug]/page.tsx +++ b/app/careers/[slug]/page.tsx @@ -14,12 +14,12 @@ export async function generateStaticParams() { export async function generateMetadata({ params }: Props): Promise { const { slug } = await params const career = CAREERS.find((c) => c.slug === slug) - if (!career) return { title: "Position Not Found" } + if (!career) return { title: "角色未找到" } return { - title: career.title, + title: `${career.title} | DAL Code`, description: career.description, openGraph: { - title: `${career.title} - DalCode Careers`, + title: `${career.title} | DAL Code`, description: career.description, }, } @@ -54,31 +54,22 @@ export default async function CareerDetailPage({ params }: Props) {
-

About the role

-

We are looking for a {career.title} to join our {career.department} team. In this role, you will work alongside world-class engineers and researchers to push the boundaries of what's possible with AI.

-

Responsibilities

+

角色概述

+

{career.description}

+

你会负责什么

    -
  • Collaborate with cross-functional teams to design, develop, and deploy AI solutions
  • -
  • Contribute to research and development of novel AI architectures and algorithms
  • -
  • Write clean, maintainable, and well-tested code
  • -
  • Participate in code reviews and contribute to engineering best practices
  • -
  • Stay up-to-date with the latest developments in AI and machine learning
  • + {career.responsibilities.map((item) => ( +
  • {item}
  • + ))}
-

Requirements

+

我们希望你具备

    -
  • Strong background in computer science, mathematics, or a related field
  • -
  • Experience with modern AI/ML frameworks and tools
  • -
  • Excellent problem-solving and communication skills
  • -
  • Ability to work independently and as part of a team
  • -
-

What we offer

-
    -
  • Competitive salary and equity package
  • -
  • Comprehensive health, dental, and vision insurance
  • -
  • Flexible work arrangements
  • -
  • Learning and development budget
  • -
  • Regular team events and offsites
  • + {career.requirements.map((item) => ( +
  • {item}
  • + ))}
+

我们期待它带来的结果

+

{career.outcome}

@@ -86,7 +77,7 @@ export default async function CareerDetailPage({ params }: Props) {
-
Back to all positions
+
返回建设方向
diff --git a/app/careers/page.tsx b/app/careers/page.tsx index d5fda28..a5c2def 100644 --- a/app/careers/page.tsx +++ b/app/careers/page.tsx @@ -3,11 +3,11 @@ import Link from "next/link" import { CAREERS } from "@/lib/careers-data" export const metadata: Metadata = { - title: "Careers", - description: "Join our team and help shape the future of AI. Explore open positions at DalCode.", + title: "建设中的角色", + description: "DAL Code 当前重点建设方向,面向 Agent Engine、Developer Experience、Routing 与 Intent UX。", openGraph: { - title: "Careers at DalCode", - description: "Join our team and help shape the future of AI.", + title: "DAL Code 建设中的角色", + description: "DAL Code 当前重点建设方向,面向 Agent Engine、Developer Experience、Routing 与 Intent UX。", }, } @@ -20,10 +20,10 @@ export default function CareersPage() {
Careers
-

Join our team

+

当前重点建设方向

-

We're looking for talented people to help us build the future of AI-powered development tools.

+

这些不是模板岗位,而是 DAL Code 未来 12 个月最值得投入的产品与工程能力面。

diff --git a/app/coming-soon/page.tsx b/app/coming-soon/page.tsx index 9263ea4..4c879d8 100644 --- a/app/coming-soon/page.tsx +++ b/app/coming-soon/page.tsx @@ -2,8 +2,8 @@ import type { Metadata } from "next" import Link from "next/link" export const metadata: Metadata = { - title: "Coming Soon", - description: "This page is coming soon. Stay tuned for updates.", + title: "建设中 | DAL Code", + description: "DAL Code 官网这部分内容还在补齐,路线图和更多产品细节会逐步上线。", } export default function ComingSoonPage() { @@ -11,17 +11,20 @@ export default function ComingSoonPage() {
-
Coming soon
+
Roadmap
-

Under construction

+

这部分内容还在持续建设中

-

We're working on something exciting. Check back soon for updates.

+

DAL Code 官网首版先把产品定位、核心能力和当前建设方向讲清楚,路线图与更多细节会分批补齐。

+
+
+

如果你想继续了解产品进展,建议先查看产品洞察,或直接联系团队沟通试用与企业方案。

- +
-
Back to home
+
查看产品洞察
@@ -32,6 +35,13 @@ export default function ComingSoonPage() {
+
+ +
+
联系 DAL Code 团队
+
+ +
diff --git a/app/contact/page.tsx b/app/contact/page.tsx index a3a2953..878c730 100644 --- a/app/contact/page.tsx +++ b/app/contact/page.tsx @@ -2,11 +2,11 @@ import type { Metadata } from "next" import { HeroSection, FormSection, CardsSection } from "@/components/contact" export const metadata: Metadata = { - title: "Contact", - description: "Get in touch with the DalCode team. We'd love to hear from you about partnerships, support, or general inquiries.", + title: "联系团队", + description: "和 DAL Code 团队聊聊产品试用、企业方案、生态合作和建设方向。", openGraph: { - title: "Contact DalCode", - description: "Get in touch with the DalCode team.", + title: "联系 DAL Code", + description: "和 DAL Code 团队聊聊产品试用、企业方案、生态合作和建设方向。", }, } diff --git a/app/layout.tsx b/app/layout.tsx index c20d128..83a7f1a 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -6,6 +6,7 @@ import Footer from "@/components/Footer" import GsapAnimations from "@/components/GsapAnimations" import RevealObserver from "@/components/RevealObserver" import PageTransition from "@/components/PageTransition" +import { SITE_BRAND, SITE_DESCRIPTION, SITE_NAME } from "@/lib/site-content" import "./webflow.css" import "./globals.css" @@ -22,16 +23,20 @@ const interTight = Inter_Tight({ variable: "--font-inter-tight", display: "swap", }) +const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? "http://localhost:3000" export const metadata: Metadata = { + metadataBase: new URL(SITE_URL), title: { - default: "DalCode - AI Code Intelligence", - template: "%s | DalCode", + default: SITE_BRAND, + template: `%s | ${SITE_NAME}`, }, - description: "DalCode - AI-powered code intelligence platform for innovation-driven teams.", + description: SITE_DESCRIPTION, openGraph: { type: "website", - siteName: "DalCode", + siteName: SITE_BRAND, + title: SITE_BRAND, + description: SITE_DESCRIPTION, }, } @@ -42,7 +47,7 @@ export default function RootLayout({ }>) { return ( diff --git a/app/not-found.tsx b/app/not-found.tsx index b919614..b7727eb 100644 --- a/app/not-found.tsx +++ b/app/not-found.tsx @@ -7,14 +7,30 @@ export default function NotFound() {
404
-

Page not found

+

这个页面现在不在 DAL Code 官网上

-

The page you're looking for doesn't exist or has been moved.

+

它可能在模板改造过程中被移除、改名,或者链接已经更新。你可以先回到首页,或继续查看产品定位与产品文章。

- - Back to home + +
+
返回首页
+
+ + + +
+
+
+
+ +
+
+ +
+
查看产品定位
+
diff --git a/app/page.tsx b/app/page.tsx index 739f2d9..eed35f2 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,12 +1,13 @@ import type { Metadata } from "next" import { HeroSection, IntegrationsSection, PrinciplesSection, CtaSection, BlogPreviewSection } from "@/components/home" +import { SITE_BRAND, SITE_DESCRIPTION } from "@/lib/site-content" export const metadata: Metadata = { - title: "DalCode - AI Code Intelligence Platform", - description: "Transform your development workflow with AI-powered code intelligence. DalCode helps innovation-driven teams ship faster with smart automation and deep code understanding.", + title: SITE_BRAND, + description: SITE_DESCRIPTION, openGraph: { - title: "DalCode - AI Code Intelligence Platform", - description: "Transform your development workflow with AI-powered code intelligence.", + title: SITE_BRAND, + description: SITE_DESCRIPTION, }, } diff --git a/app/team-members/[id]/page.tsx b/app/team-members/[id]/page.tsx index fedc3ab..c9d1580 100644 --- a/app/team-members/[id]/page.tsx +++ b/app/team-members/[id]/page.tsx @@ -15,12 +15,12 @@ export async function generateStaticParams() { export async function generateMetadata({ params }: Props): Promise { const { id } = await params const member = TEAM_MEMBERS.find((m) => m.slug === id) - if (!member) return { title: "Team Member Not Found" } + if (!member) return { title: "能力模块未找到" } return { - title: member.name, - description: `${member.name} - ${member.role} at DalCode`, + title: `${member.name} | DAL Code`, + description: member.bio, openGraph: { - title: `${member.name} - ${member.role}`, + title: `${member.name} | ${member.role}`, description: member.bio, images: [{ url: member.image }], }, @@ -61,35 +61,10 @@ export default async function TeamMemberPage({ params }: Props) {
-

About

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.

-

Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.

-
-
-
-
-
-
-
- -
- - - -
-
- -
-
- -
- - - -
-
- -
+

能力故事

+ {member.story.map((paragraph) => ( +

{paragraph}

+ ))}
@@ -97,7 +72,7 @@ export default async function TeamMemberPage({ params }: Props) {
-
Back to team
+
返回能力版图
diff --git a/components/ContactForm.tsx b/components/ContactForm.tsx index 7c68ab4..60d6820 100644 --- a/components/ContactForm.tsx +++ b/components/ContactForm.tsx @@ -6,14 +6,14 @@ import { z } from "zod" import { useState } from "react" const schema = z.object({ - firstName: z.string().min(1, "First name is required"), - lastName: z.string().min(1, "Last name is required"), - email: z.string().email("Please enter a valid email"), - country: z.string().min(1, "Country is required"), - phone: z.string().min(1, "Phone number is required"), - company: z.string().min(1, "Company is required"), - companySize: z.string().min(1, "Please select company size"), - message: z.string().min(10, "Message must be at least 10 characters"), + firstName: z.string().min(1, "请填写名字"), + lastName: z.string().min(1, "请填写姓氏"), + email: z.string().email("请输入有效的邮箱地址"), + country: z.string().min(1, "请填写所在国家或地区"), + phone: z.string().min(1, "请填写联系方式"), + company: z.string().min(1, "请填写公司或项目名称"), + companySize: z.string().min(1, "请选择团队规模"), + message: z.string().min(10, "请至少写 10 个字符说明你的需求"), }) type FormData = z.infer @@ -43,15 +43,15 @@ export default function ContactForm() { if (status === "success") { return ( -
+
-

Thank you! We'll get back to you soon

+

已收到你的信息,我们会尽快联系你

-

We have received your message and will get back to you as soon as possible.

+

如果你在消息里写了团队规模、代码栈和交付约束,后续沟通会更快进入正题。

@@ -60,20 +60,21 @@ export default function ContactForm() { } return ( -
+
- - - - - - + + + + + +
@@ -81,21 +82,21 @@ export default function ContactForm() {
-