)}
- Thinking{isStreaming && !answer ? "..." : ""}
+ 思考中{isStreaming && !answer ? "..." : ""}
{!thinkingCollapsed && (
@@ -232,12 +232,12 @@ function ResearchTaskCard({ task, onRemove }: { task: ResearchTask; onRemove: (i
}[task.status]
const statusText = {
- queued: "Queued",
- searching: "Searching web...",
- synthesizing: "Synthesizing...",
- saving: "Saving to wiki...",
- done: task.savedPath ? "Saved" : "Done",
- error: "Failed",
+ queued: "排队中",
+ searching: "正在搜索网页...",
+ synthesizing: "正在综合...",
+ saving: "正在保存到 Wiki...",
+ done: task.savedPath ? "已保存" : "已完成",
+ error: "失败",
}[task.status]
async function handleOpenSaved() {
@@ -281,7 +281,7 @@ function ResearchTaskCard({ task, onRemove }: { task: ResearchTask; onRemove: (i
{task.webResults.length > 0 && (
- Sources ({task.webResults.length})
+ 来源({task.webResults.length})
{task.webResults.map((r, i) => (
@@ -307,7 +307,7 @@ function ResearchTaskCard({ task, onRemove }: { task: ResearchTask; onRemove: (i
{task.savedPath && (
)}
{(task.status === "done" || task.status === "error") && (
@@ -318,7 +318,7 @@ function ResearchTaskCard({ task, onRemove }: { task: ResearchTask; onRemove: (i
onClick={() => onRemove(task.id)}
>
- Remove
+ 移除
)}
diff --git a/src/components/lint/lint-view.tsx b/src/components/lint/lint-view.tsx
index cac42681..ba8cba3d 100644
--- a/src/components/lint/lint-view.tsx
+++ b/src/components/lint/lint-view.tsx
@@ -20,10 +20,10 @@ import { readFile, writeFile, listDirectory } from "@/commands/fs"
import { normalizePath } from "@/lib/path-utils"
const typeConfig: Record
= {
- orphan: { icon: Unlink, label: "Orphan Page" },
- "broken-link": { icon: Link2Off, label: "Broken Link" },
- "no-outlinks": { icon: ArrowUpRight, label: "No Outbound Links" },
- semantic: { icon: BrainCircuit, label: "Semantic Issue" },
+ orphan: { icon: Unlink, label: "孤立页面" },
+ "broken-link": { icon: Link2Off, label: "失效链接" },
+ "no-outlinks": { icon: ArrowUpRight, label: "没有出站链接" },
+ semantic: { icon: BrainCircuit, label: "语义问题" },
}
export function LintView() {
@@ -83,7 +83,7 @@ export function LintView() {
}
}
setSelectedFile(candidates[0])
- setFileContent(`Unable to load: ${page}`)
+ setFileContent(`无法加载:${page}`)
}
async function handleFix(result: LintResult, index: number) {
@@ -116,13 +116,13 @@ export function LintView() {
const pagePath = `${pp}/wiki/${result.page}`
useReviewStore.getState().addItem({
type: "confirm",
- title: `Fix broken link in ${result.page}`,
+ title: `修复 ${result.page} 中的失效链接`,
description: result.detail,
affectedPages: [result.page],
options: [
- { label: "Open & Edit", action: `open:${result.page}` },
- { label: "Delete Page", action: `delete:${pagePath}` },
- { label: "Skip", action: "Skip" },
+ { label: "打开并编辑", action: `open:${result.page}` },
+ { label: "删除页面", action: `delete:${pagePath}` },
+ { label: "跳过", action: "Skip" },
],
})
setResults((prev) => prev.filter((_, i) => i !== index))
@@ -133,12 +133,12 @@ export function LintView() {
// Send to Review — user should add links manually
useReviewStore.getState().addItem({
type: "suggestion",
- title: `Add cross-references to ${result.page}`,
- description: "This page has no outbound [[wikilinks]]. Consider adding cross-references to related entities and concepts.",
+ title: `为 ${result.page} 添加交叉引用`,
+ description: "此页面没有出站 [[wikilinks]]。建议添加指向相关实体和概念的交叉引用。",
affectedPages: [result.page],
options: [
- { label: "Open & Edit", action: `open:${result.page}` },
- { label: "Skip", action: "Skip" },
+ { label: "打开并编辑", action: `open:${result.page}` },
+ { label: "跳过", action: "Skip" },
],
})
setResults((prev) => prev.filter((_, i) => i !== index))
@@ -153,8 +153,8 @@ export function LintView() {
description: result.detail,
affectedPages: result.affectedPages ?? [result.page],
options: [
- { label: "Open & Edit", action: `open:${result.page}` },
- { label: "Skip", action: "Skip" },
+ { label: "打开并编辑", action: `open:${result.page}` },
+ { label: "跳过", action: "Skip" },
],
})
setResults((prev) => prev.filter((_, i) => i !== index))
@@ -177,7 +177,7 @@ export function LintView() {
if (!project) return
const pp = normalizePath(project.path)
const pagePath = `${pp}/wiki/${result.page}`
- const confirmed = window.confirm(`Delete orphan page "${result.page}"?`)
+ const confirmed = window.confirm(`删除孤立页面“${result.page}”?`)
if (!confirmed) return
try {
@@ -207,10 +207,10 @@ export function LintView() {
-
Wiki Lint
+ Wiki 检查
{hasRun && results.length > 0 && (
- {results.length} issue{results.length !== 1 ? "s" : ""}
+ {results.length} 个问题
)}
@@ -222,7 +222,7 @@ export function LintView() {
checked={runSemantic}
onChange={(e) => setRunSemantic(e.target.checked)}
/>
- Semantic (LLM)
+ 语义检查(LLM)
@@ -239,19 +239,19 @@ export function LintView() {
{!hasRun ? (
-
Run lint to check wiki health
-
Checks for orphan pages, broken links, and more
+
运行检查以评估 Wiki 健康度
+
检查孤立页面、失效链接等问题
) : results.length === 0 ? (
-
All clear!
-
No issues found.
+
一切正常!
+
未发现问题。
) : (
{warnings.length > 0 && (
-
+
)}
{warnings.map((result, i) => (
))}
{infos.length > 0 && (
-
+
)}
{infos.map((result, i) => {
const realIndex = warnings.length + i
@@ -363,7 +363,7 @@ function LintCard({
className="h-6 text-xs gap-1"
onClick={() => onOpenPage(result.page)}
>
- Open
+ 打开
{onDelete && (
)}
diff --git a/src/components/mermaid-diagram.tsx b/src/components/mermaid-diagram.tsx
index a3a49a08..f35fce71 100644
--- a/src/components/mermaid-diagram.tsx
+++ b/src/components/mermaid-diagram.tsx
@@ -82,7 +82,7 @@ export function MermaidDiagram({ code }: MermaidDiagramProps) {
if (error) {
return (
-
Mermaid syntax error
+
Mermaid 语法错误
{error}
)
@@ -101,7 +101,7 @@ export function MermaidDiagram({ code }: MermaidDiagramProps) {
type="button"
onClick={() => setExpanded(true)}
className="absolute top-2 right-2 z-10 rounded-md bg-background/80 px-1.5 py-1 text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-foreground group-hover/diagram:opacity-100"
- title="Enlarge diagram"
+ title="放大图表"
>
@@ -113,11 +113,11 @@ export function MermaidDiagram({ code }: MermaidDiagramProps) {
>
) : visible ? (
- Rendering diagram...
+ 正在渲染图表...
) : (
- Diagram
+ 图表
)}
diff --git a/src/components/project/create-project-dialog.tsx b/src/components/project/create-project-dialog.tsx
index 85859489..5d4673a6 100644
--- a/src/components/project/create-project-dialog.tsx
+++ b/src/components/project/create-project-dialog.tsx
@@ -40,7 +40,7 @@ export function CreateProjectDialog({ open: isOpen, onOpenChange, onCreated }: C
const selected = await open({
directory: true,
multiple: false,
- title: "Select Parent Directory",
+ title: "选择父目录",
})
if (selected) {
setPath(selected)
@@ -49,11 +49,11 @@ export function CreateProjectDialog({ open: isOpen, onOpenChange, onCreated }: C
async function handleCreate() {
if (!name.trim() || !path.trim()) {
- setError("Name and path are required")
+ setError("请填写项目名称和路径")
return
}
if (!language) {
- setError("Please pick an AI output language")
+ setError("请选择 AI 输出语言")
return
}
setCreating(true)
@@ -94,20 +94,20 @@ export function CreateProjectDialog({ open: isOpen, onOpenChange, onCreated }: C