feat(i18n): add zh/en locale switching
This commit is contained in:
+9
-2
@@ -1,5 +1,7 @@
|
||||
import type { Metadata } from "next"
|
||||
import { Inter, Inter_Tight } from "next/font/google"
|
||||
import { NextIntlClientProvider } from "next-intl"
|
||||
import { getLocale, getMessages } from "next-intl/server"
|
||||
import { ThemeProvider } from "next-themes"
|
||||
import Header from "@/components/Header"
|
||||
import Footer from "@/components/Footer"
|
||||
@@ -40,14 +42,18 @@ export const metadata: Metadata = {
|
||||
},
|
||||
}
|
||||
|
||||
export default function RootLayout({
|
||||
export default async function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode
|
||||
}>) {
|
||||
const locale = await getLocale()
|
||||
const messages = await getMessages()
|
||||
|
||||
return (
|
||||
<NextIntlClientProvider locale={locale} messages={messages}>
|
||||
<html
|
||||
lang="zh-CN"
|
||||
lang={locale}
|
||||
className={`w-mod-js w-mod-ix3 ${inter.variable} ${interTight.variable}`}
|
||||
suppressHydrationWarning
|
||||
>
|
||||
@@ -63,5 +69,6 @@ export default function RootLayout({
|
||||
</ThemeProvider>
|
||||
</body>
|
||||
</html>
|
||||
</NextIntlClientProvider>
|
||||
)
|
||||
}
|
||||
|
||||
+10
-6
@@ -2,10 +2,14 @@
|
||||
|
||||
import Image from "next/image"
|
||||
import Link from "next/link"
|
||||
import { useTranslations } from "next-intl"
|
||||
import NewsletterForm from "@/components/NewsletterForm"
|
||||
import { CONTACT_CHANNELS, FOOTER_GROUPS, SITE_BRAND, SITE_DESCRIPTION } from "@/lib/site-content"
|
||||
import { CONTACT_CHANNELS, FOOTER_GROUPS } from "@/lib/site-content"
|
||||
|
||||
export default function Footer() {
|
||||
const t = useTranslations("footer")
|
||||
const site = useTranslations("site")
|
||||
|
||||
return (
|
||||
<footer className="footer-wrapper">
|
||||
<div data-w-id="f1ff1ac2-5ccd-56f8-612a-0570791caa19" className="footer-main-section">
|
||||
@@ -18,7 +22,7 @@ export default function Footer() {
|
||||
</div>
|
||||
<Link href="/contact" className="footer-button w-inline-block">
|
||||
<div className="button-content footer">
|
||||
<div>申请试用</div>
|
||||
<div>{t("applyTrial")}</div>
|
||||
</div>
|
||||
<div className="button-icon-wrapper footer primary">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 17 17" fill="none" className="squared-icon">
|
||||
@@ -43,9 +47,9 @@ export default function Footer() {
|
||||
<div className="w-layout-blockcontainer container-default w-container">
|
||||
<div className="w-layout-grid footer-middle-content">
|
||||
<div className="inner-container _355px _100-tablet">
|
||||
<div className="display-6 medium text-titles-dm">{SITE_BRAND}</div>
|
||||
<div className="display-6 medium text-titles-dm">{site("brand")}</div>
|
||||
<div className="mg-top-8-px">
|
||||
<p className="text-color-neutral-400 mg-bottom-20px">{SITE_DESCRIPTION}</p>
|
||||
<p className="text-color-neutral-400 mg-bottom-20px">{site("description")}</p>
|
||||
</div>
|
||||
<NewsletterForm variant="dark" />
|
||||
</div>
|
||||
@@ -113,10 +117,10 @@ export default function Footer() {
|
||||
</path>
|
||||
</svg>
|
||||
</div>
|
||||
<div>了解产品定位</div>
|
||||
<div>{t("learnPositioning")}</div>
|
||||
</Link>
|
||||
<p className="text-color-neutral-500">
|
||||
Copyright © 2026 DAL Code by DeepAILab. 官网基于现有 Next.js 骨架持续演进。
|
||||
{t("copyright")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+10
-8
@@ -4,6 +4,7 @@ import { useState, useEffect, useCallback } from "react"
|
||||
import Image from "next/image"
|
||||
import Link from "next/link"
|
||||
import { usePathname } from "next/navigation"
|
||||
import { useTranslations } from "next-intl"
|
||||
import ThemeToggle from "@/components/ThemeToggle"
|
||||
import { NAV_GROUPS, NAV_LINKS } from "@/lib/site-content"
|
||||
|
||||
@@ -24,6 +25,7 @@ function DropdownIcon() {
|
||||
}
|
||||
|
||||
export default function Header() {
|
||||
const t = useTranslations("nav")
|
||||
const [mobileOpen, setMobileOpen] = useState(false)
|
||||
const [dropdownOpen, setDropdownOpen] = useState(false)
|
||||
const [scrolled, setScrolled] = useState(false)
|
||||
@@ -82,7 +84,7 @@ export default function Header() {
|
||||
<ChevronIcon />
|
||||
</div>
|
||||
</div>
|
||||
<div className="link-text">{label}</div>
|
||||
<div className="link-text">{label === "首页" ? t("home") : label === "产品定位" ? t("about") : label === "洞察" ? t("blog") : t("contact")}</div>
|
||||
</Link>
|
||||
</li>
|
||||
))}
|
||||
@@ -98,7 +100,7 @@ export default function Header() {
|
||||
aria-expanded={dropdownOpen}
|
||||
type="button"
|
||||
>
|
||||
<div>Explore</div>
|
||||
<div>{t("explore")}</div>
|
||||
<div className="dropdown-icon">
|
||||
<DropdownIcon />
|
||||
</div>
|
||||
@@ -109,14 +111,14 @@ export default function Header() {
|
||||
<div className="w-layout-grid header-dropdown-grid">
|
||||
{NAV_GROUPS.map((group) => (
|
||||
<div key={group.title}>
|
||||
<div className="dropdown-title">{group.title}</div>
|
||||
<div className="dropdown-title">{group.title === "产品" ? t("groups.product") : t("groups.content")}</div>
|
||||
<div className="w-layout-grid pages-column">
|
||||
{group.links.map(({ href, label }) => (
|
||||
<Link key={href} href={href} className="link w-inline-block" onClick={closeMenus}>
|
||||
<div className="link-icon-wrapper">
|
||||
<div className="link-icon"><ChevronIcon /></div>
|
||||
</div>
|
||||
<div className="link-text">{label}</div>
|
||||
<div className="link-text">{label === "首页" ? t("groupLinks.home") : label === "为什么是 DAL Code" ? t("groupLinks.whyDalCode") : label === "申请试用" ? t("groupLinks.applyTrial") : label === "产品洞察" ? t("groupLinks.insights") : t("groupLinks.buildingRoles")}</div>
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
@@ -131,7 +133,7 @@ export default function Header() {
|
||||
<li className="link-nav-item mbl-button">
|
||||
<Link href="/contact" className="primary-button w-inline-block" onClick={closeMenus}>
|
||||
<div className="button-content">
|
||||
<div>申请试用</div>
|
||||
<div>{t("applyTrial")}</div>
|
||||
<div className="button-icon-wrapper primary">
|
||||
<ChevronIcon />
|
||||
<div className="button-icon-bg" />
|
||||
@@ -146,7 +148,7 @@ export default function Header() {
|
||||
<div className="show-light-mode">
|
||||
<Link href="/contact" className="primary-button w-inline-block" onClick={closeMenus}>
|
||||
<div className="button-content">
|
||||
<div>申请试用</div>
|
||||
<div>{t("applyTrial")}</div>
|
||||
<div className="button-icon-wrapper primary">
|
||||
<ChevronIcon />
|
||||
<div className="button-icon-bg" />
|
||||
@@ -158,7 +160,7 @@ export default function Header() {
|
||||
<div className="show-dark-mode">
|
||||
<Link href="/contact" className="secondary-button w-inline-block" onClick={closeMenus}>
|
||||
<div className="button-content">
|
||||
<div>申请试用</div>
|
||||
<div>{t("applyTrial")}</div>
|
||||
<div className="button-icon-wrapper secondary">
|
||||
<ChevronIcon />
|
||||
<div className="button-icon-bg bg-neutral-800" />
|
||||
@@ -172,7 +174,7 @@ export default function Header() {
|
||||
<button
|
||||
className={`hamburger-menu w-nav-button ${mobileOpen ? "w--open" : ""}`}
|
||||
onClick={toggleMobile}
|
||||
aria-label="Toggle menu"
|
||||
aria-label={t("toggleMenu")}
|
||||
type="button"
|
||||
>
|
||||
<div className="hamburger-menu-flex">
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
"use client"
|
||||
|
||||
import { useState, useRef, useEffect } from "react"
|
||||
import { useLocale } from "next-intl"
|
||||
import { useRouter } from "next/navigation"
|
||||
import { locales } from "@/i18n/config"
|
||||
|
||||
const localeLabels: Record<string, string> = {
|
||||
"zh-CN": "中",
|
||||
en: "EN",
|
||||
}
|
||||
|
||||
function GlobeIcon({ className }: { className?: string }) {
|
||||
return (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="16"
|
||||
height="16"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
className={className}
|
||||
>
|
||||
<circle cx="12" cy="12" r="10" />
|
||||
<line x1="2" y1="12" x2="22" y2="12" />
|
||||
<path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" />
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
function ChevronDownIcon({ className }: { className?: string }) {
|
||||
return (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="12"
|
||||
height="12"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeWidth="2"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
className={className}
|
||||
>
|
||||
<polyline points="6 9 12 15 18 9" />
|
||||
</svg>
|
||||
)
|
||||
}
|
||||
|
||||
export default function LocaleSwitcher() {
|
||||
const locale = useLocale()
|
||||
const router = useRouter()
|
||||
const [open, setOpen] = useState(false)
|
||||
const ref = useRef<HTMLDivElement>(null)
|
||||
|
||||
useEffect(() => {
|
||||
function handleClickOutside(event: MouseEvent) {
|
||||
if (ref.current && !ref.current.contains(event.target as Node)) {
|
||||
setOpen(false)
|
||||
}
|
||||
}
|
||||
document.addEventListener("mousedown", handleClickOutside)
|
||||
return () => document.removeEventListener("mousedown", handleClickOutside)
|
||||
}, [])
|
||||
|
||||
const otherLocale = locales.find((l) => l !== locale)
|
||||
if (!otherLocale) return null
|
||||
|
||||
function setLocale(nextLocale: string) {
|
||||
document.cookie = `NEXT_LOCALE=${nextLocale}; path=/; max-age=31536000; samesite=lax`
|
||||
setOpen(false)
|
||||
router.refresh()
|
||||
}
|
||||
|
||||
return (
|
||||
<div ref={ref} className="locale-switcher">
|
||||
<button
|
||||
className="locale-switcher-trigger"
|
||||
onClick={() => setOpen((v) => !v)}
|
||||
aria-expanded={open}
|
||||
aria-haspopup="listbox"
|
||||
type="button"
|
||||
>
|
||||
<GlobeIcon />
|
||||
<span className="locale-switcher-label">{localeLabels[locale] ?? locale}</span>
|
||||
<ChevronDownIcon className={open ? "rotate-180" : ""} />
|
||||
</button>
|
||||
{open && (
|
||||
<div className="locale-switcher-dropdown" role="listbox">
|
||||
{locales.map((l) => (
|
||||
<button
|
||||
key={l}
|
||||
className={`locale-switcher-option ${l === locale ? "active" : ""}`}
|
||||
role="option"
|
||||
aria-selected={l === locale}
|
||||
onClick={() => setLocale(l)}
|
||||
type="button"
|
||||
>
|
||||
{localeLabels[l] ?? l}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export const locales = ["zh-CN", "en"] as const
|
||||
export type Locale = (typeof locales)[number]
|
||||
export const defaultLocale: Locale = "zh-CN"
|
||||
@@ -0,0 +1,13 @@
|
||||
import { getRequestConfig } from "next-intl/server"
|
||||
|
||||
import { defaultLocale, locales } from "./config"
|
||||
|
||||
export default getRequestConfig(async ({ requestLocale }) => {
|
||||
const requested = await requestLocale
|
||||
const locale = requested && locales.includes(requested as (typeof locales)[number]) ? requested : defaultLocale
|
||||
|
||||
return {
|
||||
locale,
|
||||
messages: (await import(`../messages/${locale}.json`)).default,
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,8 @@
|
||||
import { defineRouting } from "next-intl/routing"
|
||||
import { locales, defaultLocale } from "./config"
|
||||
|
||||
export const routing = defineRouting({
|
||||
locales,
|
||||
defaultLocale,
|
||||
localePrefix: "never",
|
||||
})
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"site": {
|
||||
"name": "DAL Code",
|
||||
"brand": "DAL Code by DeepAILab",
|
||||
"tagline": "AI-Guided Intent-to-Code Platform",
|
||||
"description": "Turn vague product ideas into code, tests, documentation, and reviewable engineering output."
|
||||
},
|
||||
"nav": {
|
||||
"home": "Home",
|
||||
"about": "Positioning",
|
||||
"blog": "Insights",
|
||||
"contact": "Contact",
|
||||
"explore": "Explore",
|
||||
"toggleMenu": "Toggle menu",
|
||||
"applyTrial": "Apply for trial",
|
||||
"groups": {
|
||||
"product": "Product",
|
||||
"content": "Content"
|
||||
},
|
||||
"groupLinks": {
|
||||
"home": "Home",
|
||||
"whyDalCode": "Why DAL Code",
|
||||
"applyTrial": "Apply for trial",
|
||||
"insights": "Product insights",
|
||||
"buildingRoles": "Build areas"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"applyTrial": "Apply for trial",
|
||||
"learnPositioning": "Learn positioning",
|
||||
"copyright": "Copyright © 2026 DAL Code by DeepAILab. This website continues to evolve on the existing Next.js foundation.",
|
||||
"groups": {
|
||||
"product": "Product",
|
||||
"resources": "Resources"
|
||||
},
|
||||
"groupLinks": {
|
||||
"home": "Home",
|
||||
"positioning": "Positioning and capabilities",
|
||||
"contactTeam": "Contact team",
|
||||
"articles": "Product articles",
|
||||
"roleDirections": "Build areas",
|
||||
"roadmap": "Roadmap"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,679 @@
|
||||
{
|
||||
"site": {
|
||||
"name": "DAL Code",
|
||||
"brand": "DAL Code by DeepAILab",
|
||||
"tagline": "AI-Guided Intent-to-Code Platform",
|
||||
"description": "让模糊需求先被 AI 问清楚,再把它变成代码、测试、文档和可审核的工程结果。"
|
||||
},
|
||||
"nav": {
|
||||
"home": "首页",
|
||||
"about": "产品定位",
|
||||
"blog": "洞察",
|
||||
"contact": "联系",
|
||||
"explore": "Explore",
|
||||
"toggleMenu": "Toggle menu",
|
||||
"applyTrial": "申请试用",
|
||||
"groups": {
|
||||
"product": "产品",
|
||||
"content": "内容"
|
||||
},
|
||||
"groupLinks": {
|
||||
"home": "首页",
|
||||
"whyDalCode": "为什么是 DAL Code",
|
||||
"applyTrial": "申请试用",
|
||||
"insights": "产品洞察",
|
||||
"buildingRoles": "建设中的角色"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"applyTrial": "申请试用",
|
||||
"learnPositioning": "了解产品定位",
|
||||
"copyright": "Copyright © 2026 DAL Code by DeepAILab. 官网基于现有 Next.js 骨架持续演进。",
|
||||
"groups": {
|
||||
"product": "产品",
|
||||
"resources": "资源"
|
||||
},
|
||||
"groupLinks": {
|
||||
"home": "首页",
|
||||
"positioning": "定位与能力",
|
||||
"contactTeam": "联系团队",
|
||||
"articles": "产品文章",
|
||||
"roleDirections": "角色方向",
|
||||
"roadmap": "路线图"
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"about": {
|
||||
"title": "产品定位",
|
||||
"description": "了解 DAL Code 的产品隐喻、核心能力、目标用户和平台方向。",
|
||||
"ogTitle": "为什么是 DAL Code"
|
||||
},
|
||||
"blog": {
|
||||
"title": "产品洞察",
|
||||
"description": "围绕 Intent-to-Code、Mission Mode、多模型路由和 Skills 平台的产品文章。",
|
||||
"ogTitle": "DAL Code 产品洞察"
|
||||
},
|
||||
"contact": {
|
||||
"title": "联系团队",
|
||||
"description": "和 DAL Code 团队聊聊产品试用、企业方案、生态合作和建设方向。",
|
||||
"ogTitle": "联系 DAL Code"
|
||||
},
|
||||
"careers": {
|
||||
"title": "建设中的角色",
|
||||
"description": "DAL Code 当前重点建设方向,面向 Agent Engine、Developer Experience、Routing 与 Intent UX。",
|
||||
"ogTitle": "DAL Code 建设中的角色"
|
||||
},
|
||||
"comingSoon": {
|
||||
"title": "建设中 | DAL Code",
|
||||
"description": "DAL Code 官网这部分内容还在补齐,路线图和更多产品细节会逐步上线。"
|
||||
},
|
||||
"teamMember": {
|
||||
"notFound": "能力模块未找到"
|
||||
},
|
||||
"blogPost": {
|
||||
"notFound": "文章未找到"
|
||||
},
|
||||
"career": {
|
||||
"notFound": "角色未找到"
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"hero": {
|
||||
"subtitle": "DAL Code by DeepAILab",
|
||||
"title": "让 AI 先把需求问清楚,再把它变成代码",
|
||||
"description": "DAL Code 不是另一个只会接 prompt 的 AI IDE。它把 Intent Capture、Mission Mode、Smart Routing 和可审批的工程执行组合成一条完整工作流。",
|
||||
"cta": "理解产品定位",
|
||||
"aboutSubtitle": "Why DAL Code",
|
||||
"aboutText": "传统 AI 编程工具默认用户已经知道怎么提技术需求,所以产品重点落在补全、改代码和聊天上。DAL Code 把核心交互改成另一件事:让 AI 主动采访用户,把模糊业务目标变成结构化工程任务。然后再通过 Agent、Skills、多模型路由和上下文压缩,把代码、测试、文档和审批一起交付出来。",
|
||||
"intentToBuild": "Intent to build"
|
||||
},
|
||||
"integrations": {
|
||||
"subtitle": "Work Surfaces",
|
||||
"title": "一个产品里,接住从需求澄清到工程交付的整条链路",
|
||||
"description": "DAL Code 把 Desktop IDE、Web Workspace、Mobile Review、Mission Planner、RAG、Tools、Diff 审批和企业治理放到同一条体验链上。"
|
||||
},
|
||||
"principles": {
|
||||
"subtitle": "Core Principles",
|
||||
"title": "DAL Code 最值得被记住的三件事",
|
||||
"description": "如果这三件事讲不清楚,DAL Code 就会被误解成另一个模板化 AI IDE。",
|
||||
"cta": "继续看产品定位",
|
||||
"intentCapture": {
|
||||
"title": "Intent Capture",
|
||||
"description": "不是等用户写出完美 prompt,而是由 AI 用结构化问题把需求澄清成工程任务。"
|
||||
},
|
||||
"smartRouting": {
|
||||
"title": "Smart Routing",
|
||||
"description": "同一个工作流里的不同子任务自动选择最优模型,在质量、速度和成本之间动态平衡。"
|
||||
},
|
||||
"openCoreTrust": {
|
||||
"title": "Open Core Trust",
|
||||
"description": "客户端开源、数据路径透明、危险操作可审批,既给个人开发者效率,也给团队可审计性。"
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"subtitle": "Next Step",
|
||||
"title": "把模糊想法交给 DAL Code,先从一次清晰的需求采访开始",
|
||||
"description": "这版官网展示的是产品方法论、核心能力和建设方向。下一步最适合的是拉一次产品场景沟通,确认你的团队到底需要 Mission Mode、私有化还是多模型路由。",
|
||||
"button": "联系团队"
|
||||
},
|
||||
"blogPreview": {
|
||||
"subtitle": "Insights",
|
||||
"title": "把产品判断写成文章,而不是散落在对话里",
|
||||
"description": "这些内容围绕 DAL Code 的产品隐喻、Agent 执行、多模型路由和 Skills 平台展开。",
|
||||
"cta": "查看全部文章"
|
||||
},
|
||||
"stats": {
|
||||
"models": "可智能路由的模型",
|
||||
"collaborationModes": "协作模式",
|
||||
"contextCompression": "上下文压缩层级",
|
||||
"openSource": "客户端开源策略"
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"subtitle": "Product Positioning",
|
||||
"title": "DAL Code 不是另一个 AI Chat,而是一个 Intent-to-Code 平台",
|
||||
"description": "我们在做的是一个会先澄清需求、再规划任务、再驱动工具和模型去完成交付的 AI Engineering Workspace,而不是把更多模型名堆在界面上。"
|
||||
},
|
||||
"mission": {
|
||||
"subtitle": "Operating Principles",
|
||||
"title": "DAL Code 背后的八个产品原则",
|
||||
"description": "从中文表达、权限审批到开源边界,我们更关心产品是否能被真实团队长期采用,而不是只在 Demo 里显得聪明。",
|
||||
"cta": "申请试用",
|
||||
"values": {
|
||||
"transparent": "透明可审计",
|
||||
"chineseFirst": "中文优先",
|
||||
"multiModel": "多模型务实主义",
|
||||
"endToEnd": "端到端自动化",
|
||||
"securityDefault": "安全默认开启",
|
||||
"enterpriseReady": "企业可落地",
|
||||
"qualityFirst": "工程质量优先",
|
||||
"reusableKnowledge": "知识可复用"
|
||||
}
|
||||
},
|
||||
"team": {
|
||||
"subtitle": "Build Areas",
|
||||
"title": "我们正在建设的四个核心能力面",
|
||||
"description": "这里不是虚构团队介绍,而是 DAL Code 当前最重要的产品与工程能力切面。每一层都在决定这是不是一个能长期交付结果的 AI IDE。",
|
||||
"viewDetails": "查看详情",
|
||||
"viewDirections": "查看当前建设方向",
|
||||
"storyTitle": "能力故事",
|
||||
"backToMap": "返回能力版图"
|
||||
},
|
||||
"careers": {
|
||||
"subtitle": "Who We Build For",
|
||||
"title": "DAL Code 目前最优先服务的四类用户",
|
||||
"description": "我们不想做一个谁都能说得通、但谁都不真正依赖的 AI IDE,所以官网也直接把核心目标用户讲清楚。",
|
||||
"personas": {
|
||||
"indieDev": {
|
||||
"title": "独立开发者",
|
||||
"description": "需要一个真正能接手样板代码、重构和测试的 AI 编程搭档。"
|
||||
},
|
||||
"teamLead": {
|
||||
"title": "团队 Lead",
|
||||
"description": "想统一模型策略、控制成本,并让 Agent 输出过程可审查。"
|
||||
},
|
||||
"nonTechFounder": {
|
||||
"title": "非技术创业者",
|
||||
"description": "不想学习 prompt engineering,更想让 AI 先把需求问清楚。"
|
||||
},
|
||||
"enterpriseCto": {
|
||||
"title": "企业 CTO",
|
||||
"description": "关心私有化部署、SSO、审计日志和与现有知识库的连接能力。"
|
||||
}
|
||||
}
|
||||
},
|
||||
"valuesSection": {
|
||||
"title": "当前重点建设方向",
|
||||
"description": "我们把官网里的“职位”改成能力建设清单,用更真实的方式展示 DAL Code 接下来 12 个月的投入重点。",
|
||||
"viewAll": "查看全部方向",
|
||||
"overviewTitle": "角色概述",
|
||||
"responsibilitiesTitle": "你会负责什么",
|
||||
"requirementsTitle": "我们希望你具备",
|
||||
"outcomeTitle": "我们期待它带来的结果",
|
||||
"backToDirections": "返回建设方向"
|
||||
},
|
||||
"social": {
|
||||
"subtitle": "Stay Connected",
|
||||
"title": "继续跟进 DAL Code 的建设进展",
|
||||
"cta": "联系团队"
|
||||
}
|
||||
},
|
||||
"blog": {
|
||||
"hero": {
|
||||
"subtitle": "产品洞察",
|
||||
"title": "把 DAL Code 的产品判断、能力边界和建设路径讲清楚",
|
||||
"description": "这里不是泛 AI 新闻聚合,而是围绕 Intent-to-Code、Mission Mode、Smart Routing、Skills 与中文开发者工作流持续输出的产品文章。",
|
||||
"sideText": "当前首批上线 {count} 篇文章,按产品定位、Agent 与平台能力三个主题组织,方便快速理解 DAL Code 到底解决什么问题。",
|
||||
"recommendation": "推荐先读置顶两篇,再继续往下看多模型路由、Open Core 与 Skills 平台的完整逻辑。"
|
||||
},
|
||||
"cta": {
|
||||
"subtitle": "Newsletter",
|
||||
"title": "每月一封,跟进 DAL Code 的产品洞察与建设进度",
|
||||
"description": "我们会把官网文章、关键产品判断、路线图变化和典型场景拆解整理成简洁摘要。中文优先,英文技术术语保留,不发泛泛行业噪音。",
|
||||
"checkItem": "每月 1 封,只发和产品建设直接相关的内容"
|
||||
},
|
||||
"postsGrid": {
|
||||
"title": "全部文章",
|
||||
"emptyCategory": "这个分类下的内容还在整理中,先看看其他文章。"
|
||||
},
|
||||
"categories": {
|
||||
"all": "全部",
|
||||
"positioning": "产品定位",
|
||||
"agent": "Agent",
|
||||
"platform": "平台能力"
|
||||
},
|
||||
"backToAll": "返回全部文章"
|
||||
},
|
||||
"careers": {
|
||||
"page": {
|
||||
"subtitle": "Careers",
|
||||
"title": "当前重点建设方向",
|
||||
"description": "这些不是模板岗位,而是 DAL Code 未来 12 个月最值得投入的产品与工程能力面。"
|
||||
},
|
||||
"detail": {
|
||||
"overviewTitle": "角色概述",
|
||||
"responsibilitiesTitle": "你会负责什么",
|
||||
"requirementsTitle": "我们希望你具备",
|
||||
"outcomeTitle": "我们期待它带来的结果",
|
||||
"backToDirections": "返回建设方向"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"hero": {
|
||||
"subtitle": "Contact",
|
||||
"title": "和 DAL Code 团队聊聊你的真实场景",
|
||||
"description": "无论你想申请试用、评估企业方案,还是讨论 Skills / 插件生态,都建议先把团队背景、代码栈、交付约束和预期目标告诉我们,后续沟通会更高效。"
|
||||
},
|
||||
"formSection": {
|
||||
"subtitle": "沟通入口",
|
||||
"title": "选择一个更适合你的沟通起点",
|
||||
"description": "如果你能提前说明团队规模、技术栈、希望自动化的环节和安全约束,我们会更容易判断 DAL Code 适合从哪里切入。",
|
||||
"cards": {
|
||||
"trial": {
|
||||
"title": "产品试用 / Demo",
|
||||
"description": "适合还在判断 DAL Code 是否匹配当前研发流程的团队,建议先从一个真实任务场景开始聊。",
|
||||
"linkText": "提交试用需求"
|
||||
},
|
||||
"enterprise": {
|
||||
"title": "企业方案 / 安全合规",
|
||||
"description": "适合已经明确关注私有化、审批流、权限治理、采购流程和团队协作边界的负责人。",
|
||||
"linkText": "说明企业约束"
|
||||
},
|
||||
"ecosystem": {
|
||||
"title": "生态合作 / Skills 共建",
|
||||
"description": "适合希望围绕插件、模板、知识工作流和开发者社区共同建设产品生态的伙伴。",
|
||||
"linkText": "访问 DeepAILab"
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
"productConsulting": {
|
||||
"title": "产品咨询",
|
||||
"value": "申请产品演示与试用方向沟通",
|
||||
"description": "适合想了解 DAL Code 产品定位、路线图和早期试用机会的团队。"
|
||||
},
|
||||
"enterprise": {
|
||||
"title": "企业方案",
|
||||
"value": "私有化部署 / 团队采购 / 安全合规",
|
||||
"description": "适合关注多模型路由、私有部署和审批流的技术负责人。"
|
||||
},
|
||||
"ecosystem": {
|
||||
"title": "生态合作",
|
||||
"value": "Skills / 插件 / 社区共建",
|
||||
"description": "适合希望围绕 DAL Code 一起构建工作流、模板和生态能力的伙伴。"
|
||||
}
|
||||
},
|
||||
"heroChannels": {
|
||||
"demo": {
|
||||
"headline": "申请产品演示"
|
||||
},
|
||||
"enterprise": {
|
||||
"headline": "私有化与采购"
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"subtitle": "FAQ",
|
||||
"title": "常见问题",
|
||||
"description": "如果下面几条还不够覆盖你的情况,直接提交表单会更高效。",
|
||||
"submitRequest": "提交需求",
|
||||
"questions": {
|
||||
"vsCursor": {
|
||||
"question": "DAL Code 和 Cursor / Codex 的核心区别是什么?",
|
||||
"answer": "DAL Code 的重点不是让用户写更好的 prompt,而是让 AI 先把需求问清楚,再把任务拆解、执行和交付。"
|
||||
},
|
||||
"routingStability": {
|
||||
"question": "多模型路由会影响团队的稳定性吗?",
|
||||
"answer": "不会。模型选择由统一策略控制,任务类型、成本预算和延迟阈值都会被显式纳入路由决策。"
|
||||
},
|
||||
"enterprisePrivate": {
|
||||
"question": "你们支持企业私有化和审计吗?",
|
||||
"answer": "这是产品路线里的重点方向。官网当前版本展示的是目标能力,实际合作可以先从约束清晰的场景开始落地。"
|
||||
},
|
||||
"whatAreSkills": {
|
||||
"question": "DAL Code 的 Skills 是什么?",
|
||||
"answer": "Skills 不是 prompt 模板,而是把经验封装成可复用的引导式工作流,让 AI 能主动采访、验证和执行。"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"form": {
|
||||
"contact": {
|
||||
"placeholders": {
|
||||
"firstName": "名字",
|
||||
"lastName": "姓氏",
|
||||
"email": "工作邮箱",
|
||||
"country": "所在国家 / 地区",
|
||||
"phone": "微信 / 电话",
|
||||
"company": "公司 / 项目名称",
|
||||
"companySize": "团队规模",
|
||||
"message": "介绍你的团队、当前流程、想解决的问题,以及希望 DAL Code 帮你完成什么。"
|
||||
},
|
||||
"companySizeOptions": {
|
||||
"placeholder": "团队规模",
|
||||
"1-10": "1-10 人",
|
||||
"11-50": "11-50 人",
|
||||
"51-200": "51-200 人",
|
||||
"200+": "200 人以上"
|
||||
},
|
||||
"validation": {
|
||||
"firstName": "请填写名字",
|
||||
"lastName": "请填写姓氏",
|
||||
"email": "请输入有效的邮箱地址",
|
||||
"country": "请填写所在国家或地区",
|
||||
"phone": "请填写联系方式",
|
||||
"company": "请填写公司或项目名称",
|
||||
"companySize": "请选择团队规模",
|
||||
"message": "请至少写 10 个字符说明你的需求"
|
||||
},
|
||||
"submit": "提交需求",
|
||||
"submitting": "提交中...",
|
||||
"success": {
|
||||
"title": "已收到你的信息,我们会尽快联系你",
|
||||
"description": "如果你在消息里写了团队规模、代码栈和交付约束,后续沟通会更快进入正题。"
|
||||
},
|
||||
"errors": {
|
||||
"validation": "请先完整填写必填项,并确认邮箱格式正确。",
|
||||
"generic": "提交失败,请稍后重试。"
|
||||
}
|
||||
},
|
||||
"newsletter": {
|
||||
"placeholder": "输入邮箱,接收 DAL Code 月度洞察",
|
||||
"submit": "订阅",
|
||||
"submitting": "提交中...",
|
||||
"success": "已订阅 DAL Code 月度洞察。",
|
||||
"error": "订阅失败,请稍后重试。",
|
||||
"validation": "请输入有效的邮箱地址"
|
||||
}
|
||||
},
|
||||
"comingSoon": {
|
||||
"subtitle": "Roadmap",
|
||||
"title": "这部分内容还在持续建设中",
|
||||
"description1": "DAL Code 官网首版先把产品定位、核心能力和当前建设方向讲清楚,路线图与更多细节会分批补齐。",
|
||||
"description2": "如果你想继续了解产品进展,建议先查看产品洞察,或直接联系团队沟通试用与企业方案。",
|
||||
"ctaBlog": "查看产品洞察",
|
||||
"ctaContact": "联系 DAL Code 团队"
|
||||
},
|
||||
"notFound": {
|
||||
"subtitle": "404",
|
||||
"title": "这个页面现在不在 DAL Code 官网上",
|
||||
"description": "它可能在模板改造过程中被移除、改名,或者链接已经更新。你可以先回到首页,或继续查看产品定位与产品文章。",
|
||||
"ctaHome": "返回首页",
|
||||
"ctaAbout": "查看产品定位"
|
||||
},
|
||||
"theme": {
|
||||
"switchToLight": "Switch to light mode",
|
||||
"switchToDark": "Switch to dark mode",
|
||||
"toggle": "Toggle theme"
|
||||
},
|
||||
"blogPosts": {
|
||||
"whyDalCode": {
|
||||
"title": "为什么 DAL Code 不是另一个 AI IDE,而是 Intent-to-Code Platform",
|
||||
"excerpt": "从“用户先写 prompt”转向“AI 先把需求问清楚”,这是 DAL Code 和传统 AI IDE 的分水岭。",
|
||||
"sections": {
|
||||
"intentGap": {
|
||||
"title": "意图鸿沟才是真问题",
|
||||
"paragraphs": [
|
||||
"大多数 AI 编程工具默认用户已经知道该怎么表达技术需求,于是产品体验围绕 prompt、diff 和代码修改展开。",
|
||||
"DAL Code 从一开始就把问题重新定义为意图捕获:当用户只知道业务目标时,AI 应该主动发问、缩小模糊空间,再进入工程执行。"
|
||||
]
|
||||
},
|
||||
"taskMindset": {
|
||||
"title": "从编辑器思维转向任务思维",
|
||||
"paragraphs": [
|
||||
"传统 IDE 的核心工作单元是文件和函数,DAL Code 的核心工作单元是带上下文、约束和验收标准的任务。",
|
||||
"这也是为什么 DAL Code 不止输出代码,还要输出测试、文档、执行步骤和审批节点。"
|
||||
]
|
||||
},
|
||||
"whyWebsite": {
|
||||
"title": "官网为什么先强调这个",
|
||||
"paragraphs": [
|
||||
"如果官网只讲 Agent、多模型和插件,用户会自然把它理解成另一个 Cursor。",
|
||||
"把产品隐喻讲清楚,后面的 Mission Mode、Skills 和多模型路由才有一致的解释框架。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"missionMode": {
|
||||
"title": "Mission Mode 背后到底在做什么",
|
||||
"excerpt": "Mission Mode 不是一次长对话,而是一次可分解、可追踪、可审批的工程执行流程。",
|
||||
"sections": {
|
||||
"taskNotOneLine": {
|
||||
"title": "任务不是一句话结束的",
|
||||
"paragraphs": [
|
||||
"用户输入一个目标后,DAL Code 先匹配适合的 Skill,再通过 intake questions 把目标变成结构化需求。",
|
||||
"只有需求足够清晰,任务拆解、工具编排和最终审批才不会失真。"
|
||||
]
|
||||
},
|
||||
"notBlackBox": {
|
||||
"title": "自主执行不等于黑盒",
|
||||
"paragraphs": [
|
||||
"Mission Mode 会把计划、上下文压缩、工具调用和权限请求拆到可追踪的步骤上。",
|
||||
"这和纯云端黑盒 Agent 的差别很大:用户既能中途干预,也能在结果阶段看到真实的工程边界。"
|
||||
]
|
||||
},
|
||||
"whyForTeam": {
|
||||
"title": "为什么它适合团队",
|
||||
"paragraphs": [
|
||||
"团队要的不是单次惊艳,而是可解释的长期协作能力。",
|
||||
"Mission Mode 的价值在于把“AI 做了什么、为什么这样做、需要谁审批”都保留下来。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"smartRouting": {
|
||||
"title": "多模型智能路由不是模型切换器,而是产品能力",
|
||||
"excerpt": "同一条工作流里,补全、代码审查、网页抓取和长任务规划不该强行使用同一个模型。",
|
||||
"sections": {
|
||||
"notDecoration": {
|
||||
"title": "路由不是装饰层",
|
||||
"paragraphs": [
|
||||
"如果模型选择还要靠用户手动下拉,产品就没有真正把复杂性接过去。",
|
||||
"DAL Code 把任务类型、上下文长度、成本预算和延迟阈值都变成路由输入,而不是让用户自己猜。"
|
||||
]
|
||||
},
|
||||
"teamConsistency": {
|
||||
"title": "团队收益来自一致性",
|
||||
"paragraphs": [
|
||||
"真正有价值的不是“能选 20+ 模型”,而是“同一套策略能在团队内稳定复用”。",
|
||||
"这样才能把模型成本、成功率和审批路径统一管理起来。"
|
||||
]
|
||||
},
|
||||
"chinaOpportunity": {
|
||||
"title": "这也是中国市场机会",
|
||||
"paragraphs": [
|
||||
"很多国际产品要么模型单一,要么对中文开发者工作流支持不足。",
|
||||
"DAL Code 的差异化之一,就是把本地化、路由和工程交付作为同一个产品问题来解。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"skills": {
|
||||
"title": "Skills 为什么不是 prompt 模板,而是经验封装",
|
||||
"excerpt": "DAL Code 想沉淀的不是单次对话,而是可复用、可组合、可交易的工作流资产。",
|
||||
"sections": {
|
||||
"templateLimit": {
|
||||
"title": "prompt 模板解决不了交付一致性",
|
||||
"paragraphs": [
|
||||
"模板只能复用一段话,却无法复用提问顺序、默认值、验证规则和工具执行顺序。",
|
||||
"Skills 的意义在于把这些隐性经验显式化,变成可安装的产品单元。"
|
||||
]
|
||||
},
|
||||
"moat": {
|
||||
"title": "技能系统为什么能形成护城河",
|
||||
"paragraphs": [
|
||||
"每次 Skill 被使用,DAL Code 都在积累哪类问题最有效、哪类执行顺序最稳定。",
|
||||
"这是一种真正会越用越强的数据飞轮,而不是单纯堆更多提示词。"
|
||||
]
|
||||
},
|
||||
"websiteMeaning": {
|
||||
"title": "对官网的含义",
|
||||
"paragraphs": [
|
||||
"官网不能只把 Skills 写成一个点状功能。",
|
||||
"它应该被用户理解为 DAL Code 从工具走向平台的关键桥梁。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"openCore": {
|
||||
"title": "AI 编程产品为什么需要 Open Core 的信任结构",
|
||||
"excerpt": "在涉及代码、终端、权限和企业知识库的场景里,透明度不是加分项,而是进入门槛。",
|
||||
"sections": {
|
||||
"notFullyClosed": {
|
||||
"title": "为什么不是全闭源",
|
||||
"paragraphs": [
|
||||
"当 AI 需要读代码、改文件、跑命令时,用户天然会关心它到底看到了什么、能做什么。",
|
||||
"客户端开源把最敏感的交互层暴露给用户审视,这是建立信任的最短路径。"
|
||||
]
|
||||
},
|
||||
"notFullyOpen": {
|
||||
"title": "为什么也不是全部开源",
|
||||
"paragraphs": [
|
||||
"DAL Code 的差异化很大一部分来自 Agent 引擎、上下文压缩、路由和知识层的长期工程积累。",
|
||||
"Open Core 允许公开信任边界,同时保留真正难复制的智能层能力。"
|
||||
]
|
||||
},
|
||||
"commercialization": {
|
||||
"title": "这会影响商业化吗",
|
||||
"paragraphs": [
|
||||
"不会,反而更清晰。个人开发者先因为透明和易用进入产品,企业客户再因为私有化和治理能力付费。",
|
||||
"这也是产品文案里必须同时出现开源信任和企业方案的原因。"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"chineseFirst": {
|
||||
"title": "做一个中文开发者优先的 AI Engineering Workspace",
|
||||
"excerpt": "中文优先不是把界面翻译成中文,而是把提问方式、文档语境和社区支持一起本地化。",
|
||||
"sections": {
|
||||
"notUiOnly": {
|
||||
"title": "为什么这不是 UI 层问题",
|
||||
"paragraphs": [
|
||||
"很多国际产品只有英文信息架构,中文用户即使看懂了界面,也很难把真实需求表达精确。",
|
||||
"DAL Code 的本地化重点在于问答路径、默认示例、文档引用和协作语气都服务于中文工作流。"
|
||||
]
|
||||
},
|
||||
"localizationVsProfessional": {
|
||||
"title": "本地化和专业度不冲突",
|
||||
"paragraphs": [
|
||||
"中文优先不意味着弱化技术深度,而是把专业能力交付给更多原本不擅长写 prompt 的用户。",
|
||||
"这也是 DAL Code 想覆盖独立开发者、团队 Lead 和非技术创业者的基础。"
|
||||
]
|
||||
},
|
||||
"websiteRequirement": {
|
||||
"title": "对官网的直接要求",
|
||||
"paragraphs": [
|
||||
"官网首版就应该说中文,但保留关键技术术语,让用户一眼知道产品是为谁设计的。",
|
||||
"产品站的语气和结构,本身就是定位的一部分。"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"careersData": {
|
||||
"agentRuntime": {
|
||||
"title": "Agent Runtime Engineer",
|
||||
"department": "Agent Engine",
|
||||
"location": "Remote / Shanghai",
|
||||
"type": "优先建设方向",
|
||||
"description": "负责 DAL Code 的任务执行、工具编排、权限流和长任务稳定性,让 Agent 从“能跑”走向“可托付”。",
|
||||
"responsibilities": [
|
||||
"推进 query loop、tool orchestration、权限审批与恢复机制的稳定性",
|
||||
"把复杂任务拆成可观测、可回滚、可验证的执行单元",
|
||||
"和产品设计一起定义 Mission Mode 的用户可见行为"
|
||||
],
|
||||
"requirements": [
|
||||
"熟悉 TypeScript 后端、异步流程控制和任务状态机",
|
||||
"对 Agent 失败模式、上下文管理和安全边界有工程判断",
|
||||
"能把抽象能力落成稳定的产品行为,而不是 demo"
|
||||
],
|
||||
"outcome": "让 DAL Code 的 Agent 能在真实项目里长期可靠地工作。"
|
||||
},
|
||||
"desktopIde": {
|
||||
"title": "Desktop IDE Engineer",
|
||||
"department": "Developer Experience",
|
||||
"location": "Remote / Shanghai",
|
||||
"type": "优先建设方向",
|
||||
"description": "负责 Electron + VS Code Fork 的体验收口,把 Agent 能力带进真正可日常使用的 IDE 工作流。",
|
||||
"responsibilities": [
|
||||
"完善 Composer、Diff 审批、Terminal、搜索和设置体系",
|
||||
"把私有 Agent 能力和开源客户端边界处理清楚",
|
||||
"持续提升性能、稳定性和与上游 VS Code 的对齐策略"
|
||||
],
|
||||
"requirements": [
|
||||
"熟悉 Electron、React、VS Code 扩展或 IDE 产品工程",
|
||||
"愿意处理复杂状态、性能和边界兼容问题",
|
||||
"对开发者工具的细节质量有较高要求"
|
||||
],
|
||||
"outcome": "让 DAL Code 不只会自动写代码,也值得被开发者长期打开。"
|
||||
},
|
||||
"multiModelRouting": {
|
||||
"title": "Multi-Model Routing Engineer",
|
||||
"department": "Platform Intelligence",
|
||||
"location": "Remote",
|
||||
"type": "优先建设方向",
|
||||
"description": "负责多模型能力矩阵、路由策略与降级机制,把 DeepAILab 的模型平台能力真正产品化。",
|
||||
"responsibilities": [
|
||||
"设计任务分类与模型能力评分体系",
|
||||
"构建路由策略、超时降级和成本控制逻辑",
|
||||
"用真实任务反馈持续优化成功率与稳定性"
|
||||
],
|
||||
"requirements": [
|
||||
"熟悉 LLM 产品、评测体系或推理服务工程",
|
||||
"理解延迟、成本、质量三者之间的权衡",
|
||||
"能用数据而不是感觉做路由决策"
|
||||
],
|
||||
"outcome": "让 DAL Code 在不同任务里始终选到更合适的模型。"
|
||||
},
|
||||
"aiProductDesigner": {
|
||||
"title": "AI Product Designer",
|
||||
"department": "Intent UX",
|
||||
"location": "Remote / Shanghai",
|
||||
"type": "优先建设方向",
|
||||
"description": "负责 DAL Code 的意图捕获体验,把复杂 AI 能力转成清晰、可信、中文开发者友好的交互流程。",
|
||||
"responsibilities": [
|
||||
"设计 intake questions、Mission Mode 和审批流的界面结构",
|
||||
"把产品定位、品牌语气和协作流程统一成一套体验语言",
|
||||
"和工程一起把视觉、动效与真实能力对应起来"
|
||||
],
|
||||
"requirements": [
|
||||
"有复杂工具产品、开发者产品或 AI 产品设计经验",
|
||||
"能同时理解用户研究、信息架构和工程实现约束",
|
||||
"对中文产品表达和交互质感敏感"
|
||||
],
|
||||
"outcome": "让 DAL Code 在复杂能力之上依然保持低门槛与高信任。"
|
||||
}
|
||||
},
|
||||
"teamData": {
|
||||
"intentCapture": {
|
||||
"name": "Intent Capture",
|
||||
"role": "把模糊目标变成可执行需求",
|
||||
"bio": "DAL Code 的第一能力不是写代码,而是先用结构化问题把需求问清楚。",
|
||||
"story": [
|
||||
"Intent Capture 负责接住用户最初那句不完整的话,把产品目标、约束和成功标准变成工程语言。",
|
||||
"它决定了 DAL Code 是否真的能服务非技术用户,也决定了后续 Agent 执行会不会偏离意图。"
|
||||
]
|
||||
},
|
||||
"agentRuntime": {
|
||||
"name": "Agent Runtime",
|
||||
"role": "让计划、工具和审批跑得稳定",
|
||||
"bio": "从 query loop 到 tool orchestration,这一层决定了 DAL Code 的自主执行是否值得信任。",
|
||||
"story": [
|
||||
"Agent Runtime 处理任务拆解、上下文压缩、工具执行和权限流,让 Mission Mode 不只是一个长对话。",
|
||||
"它的重点不是更激进,而是更可控:每一步都要能解释、验证和回滚。"
|
||||
]
|
||||
},
|
||||
"smartRouting": {
|
||||
"name": "Smart Routing",
|
||||
"role": "在质量、速度和成本之间动态选模",
|
||||
"bio": "DAL Code 的多模型优势只有在产品层真正落地,才会变成用户感知得到的体验差异。",
|
||||
"story": [
|
||||
"Smart Routing 不是把模型列表摆给用户看,而是让产品在不同任务阶段自动选更合适的模型。",
|
||||
"对团队来说,这意味着成本、延迟和质量可以被统一治理,而不是靠个人经验调参。"
|
||||
]
|
||||
},
|
||||
"openCoreDx": {
|
||||
"name": "Open Core DX",
|
||||
"role": "兼顾开源信任与企业治理",
|
||||
"bio": "客户端开源、智能层持续演进、企业边界清晰,这一块决定了 DAL Code 是否能走向长期平台。",
|
||||
"story": [
|
||||
"Open Core DX 关注的不是单点功能,而是产品信任结构:哪些能力公开,哪些能力需要审计,哪些能力适合企业部署。",
|
||||
"它也是 DAL Code 从个人工具走向团队平台时最关键的一层产品设计。"
|
||||
]
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"readMore": "查看详情",
|
||||
"back": "返回",
|
||||
"submit": "提交",
|
||||
"cancel": "取消",
|
||||
"close": "关闭",
|
||||
"loading": "加载中...",
|
||||
"socialLinks": {
|
||||
"deepailab": "DeepAILab",
|
||||
"github": "GitHub",
|
||||
"blog": "Blog",
|
||||
"contact": "Contact"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { NextResponse } from "next/server"
|
||||
|
||||
export default function middleware() {
|
||||
return NextResponse.next()
|
||||
}
|
||||
|
||||
export const config = {
|
||||
matcher: ["/((?!api|_next|_vercel|.*\\..*).*)"],
|
||||
}
|
||||
+4
-1
@@ -1,4 +1,7 @@
|
||||
import type { NextConfig } from "next";
|
||||
import createNextIntlPlugin from "next-intl/plugin";
|
||||
|
||||
const withNextIntl = createNextIntlPlugin();
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
images: {
|
||||
@@ -11,4 +14,4 @@ const nextConfig: NextConfig = {
|
||||
},
|
||||
};
|
||||
|
||||
export default nextConfig;
|
||||
export default withNextIntl(nextConfig);
|
||||
|
||||
Reference in New Issue
Block a user