diff --git a/src/components/ClaudeCodeSession.tsx b/src/components/ClaudeCodeSession.tsx index e13ae7e..5860388 100644 --- a/src/components/ClaudeCodeSession.tsx +++ b/src/components/ClaudeCodeSession.tsx @@ -275,7 +275,7 @@ export const ClaudeCodeSession: React.FC = ({ setIsFirstPrompt(false); } catch (err) { console.error("Failed to load session history:", err); - setError("Failed to load session history"); + setError("加载会话历史失败"); } finally { setIsLoading(false); } @@ -377,7 +377,7 @@ export const ClaudeCodeSession: React.FC = ({ const selected = await open({ directory: true, multiple: false, - title: "Select Project Directory" + title: "选择项目目录" }); if (selected) { @@ -387,7 +387,7 @@ export const ClaudeCodeSession: React.FC = ({ } catch (err) { console.error("Failed to select directory:", err); const errorMessage = err instanceof Error ? err.message : String(err); - setError(`Failed to select directory: ${errorMessage}`); + setError(`选择目录失败: ${errorMessage}`); } }; @@ -395,7 +395,7 @@ export const ClaudeCodeSession: React.FC = ({ console.log('[ClaudeCodeSession] handleSendPrompt called with:', { prompt, model, projectPath, claudeSessionId, effectiveSession }); if (!projectPath) { - setError("Please select a project directory first"); + setError("请先选择项目目录"); return; } @@ -597,7 +597,7 @@ export const ClaudeCodeSession: React.FC = ({ } } catch (err) { console.error("Failed to send prompt:", err); - setError("Failed to send prompt"); + setError("发送提示失败"); setIsLoading(false); hasActiveSessionRef.current = false; } @@ -711,7 +711,7 @@ export const ClaudeCodeSession: React.FC = ({ const cancelMessage: ClaudeStreamMessage = { type: "system", subtype: "info", - result: "Session cancelled by user", + result: "会话已被用户取消", timestamp: new Date().toISOString() }; setMessages(prev => [...prev, cancelMessage]); @@ -723,7 +723,7 @@ export const ClaudeCodeSession: React.FC = ({ const errorMessage: ClaudeStreamMessage = { type: "system", subtype: "error", - result: `Failed to cancel execution: ${err instanceof Error ? err.message : 'Unknown error'}. The process may still be running in the background.`, + result: `取消执行失败: ${err instanceof Error ? err.message : '未知错误'}. 该进程可能仍在后台运行。`, timestamp: new Date().toISOString() }; setMessages(prev => [...prev, errorMessage]); @@ -772,7 +772,7 @@ export const ClaudeCodeSession: React.FC = ({ setForkSessionName(""); } catch (err) { console.error("Failed to fork checkpoint:", err); - setError("Failed to fork checkpoint"); + setError("分叉检查点失败"); } finally { setIsLoading(false); } @@ -904,7 +904,7 @@ export const ClaudeCodeSession: React.FC = ({ className="p-4 border-b border-border flex-shrink-0" >
= ({
-

Claude Code Session

+

Claude Code 会话

- {session ? `Resuming session ${session.id.slice(0, 8)}...` : 'Interactive session'} + {session ? `恢复会话 ${session.id.slice(0, 8)}...` : '交互式会话'}

@@ -991,7 +991,7 @@ export const ClaudeCodeSession: React.FC = ({ className="flex items-center gap-2" > - Settings + 设置 )} @@ -1023,13 +1023,13 @@ export const ClaudeCodeSession: React.FC = ({ className="flex items-center gap-2" > - {showPreview ? "Close Preview" : "Preview"} + {showPreview ? "关闭预览" : "预览"} {showPreview - ? "Close the preview pane" - : "Open a browser preview to test your web applications" + ? "关闭预览面板" + : "打开浏览器预览以测试您的Web应用程序" } @@ -1044,7 +1044,7 @@ export const ClaudeCodeSession: React.FC = ({ className="flex items-center gap-2" > - Copy Output + 复制输出 } @@ -1056,7 +1056,7 @@ export const ClaudeCodeSession: React.FC = ({ onClick={handleCopyAsMarkdown} className="w-full justify-start" > - Copy as Markdown + 复制为Markdown
} @@ -1115,7 +1115,7 @@ export const ClaudeCodeSession: React.FC = ({
- {session ? "Loading session history..." : "Initializing Claude Code..."} + {session ? "正在加载会话历史..." : "正在初始化Claude Code..."}
@@ -1138,7 +1138,7 @@ export const ClaudeCodeSession: React.FC = ({
- Queued Prompts ({queuedPrompts.length}) + 队列提示 ({queuedPrompts.length})
@@ -1236,7 +1236,7 @@ export const ClaudeCodeSession: React.FC = ({ } }} className="px-3 py-2 hover:bg-accent rounded-none" - title="Scroll to bottom" + title="滚动到底部" > @@ -1272,7 +1272,7 @@ export const ClaudeCodeSession: React.FC = ({
{totalTokens.toLocaleString()} - tokens + 标记
@@ -1294,7 +1294,7 @@ export const ClaudeCodeSession: React.FC = ({
{/* Timeline Header */}
-

Session Timeline

+

会话时间线

diff --git a/src/components/SessionOutputViewer.tsx b/src/components/SessionOutputViewer.tsx index 560b093..94ec6a4 100644 --- a/src/components/SessionOutputViewer.tsx +++ b/src/components/SessionOutputViewer.tsx @@ -146,7 +146,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp } } catch (error) { console.error('Failed to load session output:', error); - setToast({ message: 'Failed to load session output', type: 'error' }); + setToast({ message: '加载会话输出失败', type: 'error' }); } finally { setLoading(false); } @@ -180,12 +180,12 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp }); const completeUnlisten = await listen(`agent-complete:${session.id}`, () => { - setToast({ message: 'Agent execution completed', type: 'success' }); + setToast({ message: '智能体执行完成', type: 'success' }); // Don't set status here as the parent component should handle it }); const cancelUnlisten = await listen(`agent-cancelled:${session.id}`, () => { - setToast({ message: 'Agent execution was cancelled', type: 'error' }); + setToast({ message: '智能体执行已取消', type: 'error' }); }); unlistenRefs.current = [outputUnlisten, errorUnlisten, completeUnlisten, cancelUnlisten]; @@ -199,7 +199,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp const jsonl = rawJsonlOutput.join('\n'); await navigator.clipboard.writeText(jsonl); setCopyPopoverOpen(false); - setToast({ message: 'Output copied as JSONL', type: 'success' }); + setToast({ message: '输出已复制为JSONL', type: 'success' }); }; const handleCopyAsMarkdown = async () => { @@ -254,7 +254,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp await navigator.clipboard.writeText(markdown); setCopyPopoverOpen(false); - setToast({ message: 'Output copied as Markdown', type: 'success' }); + setToast({ message: '输出已复制为Markdown', type: 'success' }); }; @@ -262,10 +262,10 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp setRefreshing(true); try { await loadOutput(true); // Skip cache when manually refreshing - setToast({ message: 'Output refreshed', type: 'success' }); + setToast({ message: '输出已刷新', type: 'success' }); } catch (error) { console.error('Failed to refresh output:', error); - setToast({ message: 'Failed to refresh output', type: 'error' }); + setToast({ message: '刷新输出失败', type: 'error' }); } finally { setRefreshing(false); } @@ -345,7 +345,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp
{session.agent_icon}
- {session.agent_name} - Output + {session.agent_name} - 输出
{session.status} @@ -353,11 +353,11 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp {session.status === 'running' && (
- Live + 实时
)} - {messages.length} messages + {messages.length} 条消息
@@ -369,7 +369,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp variant="outline" size="sm" onClick={() => setIsFullscreen(!isFullscreen)} - title="Fullscreen" + title="全屏" > {isFullscreen ? : } @@ -381,7 +381,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp className="flex items-center gap-2" > - Copy Output + 复制输出 } @@ -393,7 +393,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp className="w-full justify-start" onClick={handleCopyAsJsonl} > - Copy as JSONL + 复制为JSONL
} @@ -416,7 +416,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp size="sm" onClick={refreshOutput} disabled={refreshing} - title="Refresh output" + title="刷新输出" > @@ -431,7 +431,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp
- Loading output... + 正在加载输出...
) : ( @@ -455,14 +455,14 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp {session.status === 'running' ? ( <> -

Waiting for output...

+

等待输出...

- Agent is running but no output received yet + 智能体正在运行但尚未收到输出

) : ( <> -

No output available

+

暂无输出

)} @@ -508,11 +508,11 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp
{session.agent_icon}
-

{session.agent_name} - Output

+

{session.agent_name} - 输出

{session.status === 'running' && (
- Running + 运行中
)}
@@ -526,7 +526,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp className="flex items-center gap-2" > - Copy Output + 复制输出 } @@ -538,7 +538,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp className="w-full justify-start" onClick={handleCopyAsJsonl} > - Copy as JSONL + 复制为JSONL
} @@ -562,7 +562,7 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp className="flex items-center gap-2" > - Close + 关闭
@@ -589,14 +589,14 @@ export function SessionOutputViewer({ session, onClose, className }: SessionOutp {session.status === 'running' ? ( <> -

Waiting for output...

+

等待输出...

- Agent is running but no output received yet + 智能体正在运行但尚未收到输出

) : ( <> -

No output available

+

暂无输出

)}