* feat(settings): expand settings api payload * feat(webui): build app-style settings center * feat(webui): add centered chat search dialog * fix(webui): shorten chat search label * fix(webui): center dialog entrance animation * fix(webui): simplify chat search results * fix(webui): tighten mobile settings navigation * feat(webui): persist sidebar state * feat(webui): add sidebar organization controls * refactor(webui): organize backend helpers * refactor(webui): remove utils compatibility shims * refactor(session): move shared webui helpers out of webui package * feat(webui): add image generation settings * style(webui): refine settings overview layout * fix(webui): localize settings zh-CN copy * style(webui): add settings status indicators * feat(webui): show sidebar run indicators * fix(webui): persist sidebar run indicators * fix(webui): highlight settings pending status * fix(webui): align settings test with provider update * fix(utils): preserve legacy webui helper imports
466 lines
16 KiB
JSON
466 lines
16 KiB
JSON
{
|
|
"app": {
|
|
"brand": "nanobot",
|
|
"loading": {
|
|
"connecting": "正在連線到 nanobot…",
|
|
"boot": "正在載入 nanobot…"
|
|
},
|
|
"error": {
|
|
"title": "無法連線到 nanobot",
|
|
"gatewayHint": "請確認 gateway 已啟動(`nanobot gateway`),並且目前頁面與 gateway 在同一台機器上開啟。"
|
|
},
|
|
"system": {
|
|
"section": "系統",
|
|
"restartHint": "重新啟動 nanobot 以套用執行階段變更。",
|
|
"restart": "重新啟動 nanobot",
|
|
"restarting": "正在重新啟動..."
|
|
},
|
|
"restart": {
|
|
"completed": "重新啟動已完成,耗時 {{seconds}} 秒。"
|
|
},
|
|
"documentTitle": {
|
|
"base": "nanobot",
|
|
"chat": "{{title}} · nanobot"
|
|
},
|
|
"meta": {
|
|
"description": "nanobot Web UI —— 與你的 nanobot 工作區對話。"
|
|
}
|
|
},
|
|
"sidebar": {
|
|
"collapse": "收合側邊欄",
|
|
"toggleTheme": "切換主題",
|
|
"newChat": "新增對話",
|
|
"viewOptions": "檢視",
|
|
"compactList": "緊湊列表",
|
|
"showPreviews": "顯示預覽",
|
|
"showTimestamps": "顯示時間",
|
|
"sortLabel": "排序",
|
|
"sortUpdated": "最近更新",
|
|
"sortCreated": "最近建立",
|
|
"sortTitle": "標題 A-Z",
|
|
"recent": "最近對話",
|
|
"refreshSessions": "重新整理會話",
|
|
"settings": "設定",
|
|
"language": {
|
|
"label": "語言",
|
|
"ariaLabel": "切換語言"
|
|
},
|
|
"searchAria": "搜尋",
|
|
"searchPlaceholder": "搜尋",
|
|
"searchResults": "搜尋結果",
|
|
"noSearchResults": "沒有符合的對話。"
|
|
},
|
|
"settings": {
|
|
"backToChat": "返回對話",
|
|
"sidebar": {
|
|
"title": "設定",
|
|
"ariaLabel": "設定分區"
|
|
},
|
|
"nav": {
|
|
"general": "一般",
|
|
"byok": "BYOK",
|
|
"overview": "Overview",
|
|
"appearance": "Appearance",
|
|
"models": "Models",
|
|
"providers": "Providers",
|
|
"image": "Image",
|
|
"web": "Web",
|
|
"runtime": "Runtime",
|
|
"advanced": "Advanced"
|
|
},
|
|
"sections": {
|
|
"interface": "介面",
|
|
"ai": "AI",
|
|
"system": "系統",
|
|
"status": "Status",
|
|
"localPreferences": "Local preferences",
|
|
"presets": "Presets",
|
|
"webSearch": "Web search",
|
|
"webBehavior": "Behavior",
|
|
"identity": "Identity",
|
|
"safety": "Safety",
|
|
"integrations": "Integrations"
|
|
},
|
|
"rows": {
|
|
"theme": "主題",
|
|
"language": "語言",
|
|
"provider": "提供者",
|
|
"model": "模型",
|
|
"restart": "重新啟動 nanobot",
|
|
"configPath": "設定檔路徑",
|
|
"activePreset": "Active preset",
|
|
"gateway": "Gateway",
|
|
"restartState": "Restart state",
|
|
"selectedPreset": "Selected preset",
|
|
"presetModel": "Preset model",
|
|
"density": "Density",
|
|
"activityMode": "Activity detail",
|
|
"codeWrap": "Code wrapping",
|
|
"maxResults": "Max results",
|
|
"timeout": "Timeout",
|
|
"jinaReader": "Jina reader",
|
|
"botName": "Bot name",
|
|
"botIcon": "Bot icon",
|
|
"timezone": "Timezone",
|
|
"toolHintMaxLength": "Tool hint length",
|
|
"workspacePath": "Workspace path",
|
|
"heartbeat": "Heartbeat",
|
|
"dream": "Dream",
|
|
"unifiedSession": "Unified session",
|
|
"restrictWorkspace": "Restrict to workspace",
|
|
"execTool": "Exec tool",
|
|
"execSandbox": "Exec sandbox",
|
|
"ssrfWhitelist": "SSRF whitelist",
|
|
"mcpServers": "MCP servers",
|
|
"pathAppend": "PATH append",
|
|
"configurationDocs": "Configuration docs"
|
|
},
|
|
"help": {
|
|
"theme": "在淺色與深色外觀之間切換。",
|
|
"language": "選擇 WebUI 使用的語言。",
|
|
"provider": "選擇新模型請求使用的服務提供者。",
|
|
"model": "設定 nanobot 預設使用的模型名稱。",
|
|
"configPath": "目前閘道正在使用的設定檔。",
|
|
"selectedPreset": "Named presets are read-only here; edit them in config.json.",
|
|
"presetModel": "Switch to Default to edit model and provider from the WebUI.",
|
|
"density": "Stored only in this browser.",
|
|
"activityMode": "Choose how much agent activity chrome to show by default.",
|
|
"codeWrap": "Keep long code lines readable on smaller screens.",
|
|
"maxResults": "Results returned by each web_search call.",
|
|
"timeout": "Seconds before a search provider request times out.",
|
|
"jinaReader": "Use Jina Reader for web_fetch when available.",
|
|
"botName": "Shown in runtime surfaces that use the configured bot identity.",
|
|
"botIcon": "Short emoji or text shown beside the bot name.",
|
|
"timezone": "IANA timezone used by runtime context and schedules.",
|
|
"toolHintMaxLength": "Maximum characters shown in tool progress hints.",
|
|
"advancedReadOnly": "Advanced safety controls are read-only in WebUI. Edit config.json intentionally when needed."
|
|
},
|
|
"values": {
|
|
"light": "淺色",
|
|
"dark": "深色",
|
|
"notAvailable": "不可用",
|
|
"enabled": "Enabled",
|
|
"disabled": "Disabled",
|
|
"restartRequired": "Restart required",
|
|
"liveReload": "Live reload ready",
|
|
"comfortable": "Comfortable",
|
|
"compact": "Compact",
|
|
"auto": "Auto",
|
|
"expanded": "Expanded",
|
|
"on": "On",
|
|
"off": "Off",
|
|
"configured": "Configured",
|
|
"notConfigured": "Not configured"
|
|
},
|
|
"status": {
|
|
"loading": "正在載入設定...",
|
|
"loadError": "無法載入設定",
|
|
"unsaved": "有未儲存的變更。",
|
|
"savedRestart": "已儲存。重新啟動 nanobot 後生效。"
|
|
},
|
|
"actions": {
|
|
"save": "儲存",
|
|
"saving": "儲存中",
|
|
"edit": "編輯",
|
|
"cancel": "取消",
|
|
"openDocs": "Open docs"
|
|
},
|
|
"byok": {
|
|
"description": "自帶 provider key。Nanobot 會從目前 config 讀取這些值,只有已設定的 provider 才能在一般設定中選擇。",
|
|
"configured": "已設定",
|
|
"notConfigured": "未設定",
|
|
"configuredSection": "已設定",
|
|
"notConfiguredSection": "未設定",
|
|
"showMore": "再顯示 {{count}} 個",
|
|
"showLess": "收合",
|
|
"apiKey": "API key",
|
|
"apiBase": "API base",
|
|
"apiKeyPlaceholder": "輸入 API key",
|
|
"apiKeyConfiguredPlaceholder": "留空則保留目前 key",
|
|
"configuredKeyHint": "已設定的 key",
|
|
"apiBasePlaceholder": "使用 provider 預設地址",
|
|
"apiKeyRequired": "需要 API key 才能設定此 provider。",
|
|
"showApiKey": "顯示 API key",
|
|
"hideApiKey": "隱藏 API key",
|
|
"noConfiguredProviders": "沒有已設定的 provider",
|
|
"configureFirst": "請先在 BYOK 設定 provider。",
|
|
"openByok": "開啟 BYOK",
|
|
"tabs": {
|
|
"ariaLabel": "BYOK 憑證類型",
|
|
"llm": "LLM",
|
|
"webSearch": "Web Search"
|
|
},
|
|
"webSearch": {
|
|
"provider": "搜尋 provider",
|
|
"providerHelp": "選擇 web search 工具使用的後端。",
|
|
"selectProvider": "選擇 provider",
|
|
"credentials": "憑證",
|
|
"noCredentialRequired": "不需要 key",
|
|
"noCredentialHelp": "DuckDuckGo 不需要儲存 API key。",
|
|
"apiKeyHelp": "儲存到 config 後只顯示遮罩提示。",
|
|
"baseUrl": "Base URL",
|
|
"baseUrlHelp": "SearXNG 需要你自己的實例網址。",
|
|
"baseUrlPlaceholder": "https://search.example.com",
|
|
"apiKeyRequired": "此搜尋 provider 需要 API key。",
|
|
"baseUrlRequired": "SearXNG 需要 Base URL。",
|
|
"missingCredential": "填寫必要憑證後才能儲存。",
|
|
"saveHint": "變更會套用到新的 web search 請求。"
|
|
}
|
|
},
|
|
"overview": {
|
|
"model": "Current model",
|
|
"providers": "Providers",
|
|
"configuredCount": "{{count}} configured",
|
|
"totalProviders": "{{count}} available",
|
|
"webSearch": "Web search",
|
|
"workspace": "Workspace"
|
|
},
|
|
"providers": {
|
|
"searchPlaceholder": "Search providers",
|
|
"noMatches": "No providers match this search."
|
|
}
|
|
},
|
|
"chat": {
|
|
"fallbackTitle": "對話 {{id}}",
|
|
"loading": "載入中…",
|
|
"noSessions": "目前還沒有會話。",
|
|
"actions": "「{{title}}」的會話操作",
|
|
"activity": {
|
|
"running": "Agent 正在執行",
|
|
"complete": "Agent 已完成"
|
|
},
|
|
"pin": "置頂",
|
|
"unpin": "取消置頂",
|
|
"rename": "重新命名",
|
|
"renameTitle": "重新命名對話",
|
|
"renameDescription": "為這個對話設定僅用於 WebUI 側邊欄的名稱。",
|
|
"renamePlaceholder": "對話名稱",
|
|
"renameSave": "儲存",
|
|
"archive": "封存",
|
|
"unarchive": "取消封存",
|
|
"showArchived": "顯示封存",
|
|
"hideArchived": "隱藏封存",
|
|
"delete": "刪除",
|
|
"newChat": "新增對話",
|
|
"groups": {
|
|
"pinned": "置頂",
|
|
"all": "對話",
|
|
"today": "今天",
|
|
"yesterday": "昨天",
|
|
"earlier": "更早",
|
|
"archived": "已封存"
|
|
}
|
|
},
|
|
"deleteConfirm": {
|
|
"title": "刪除這個對話?",
|
|
"description": "此操作無法復原。",
|
|
"cancel": "取消",
|
|
"confirm": "刪除"
|
|
},
|
|
"connection": {
|
|
"idle": "閒置",
|
|
"connecting": "連線中…",
|
|
"open": "已連線",
|
|
"reconnecting": "重新連線中…",
|
|
"closed": "已中斷",
|
|
"error": "連線錯誤"
|
|
},
|
|
"thread": {
|
|
"loadingConversation": "正在載入對話…",
|
|
"empty": {
|
|
"description": "你可以提問、延續本地工作,或是開始新的執行緒。",
|
|
"greeting": "我可以幫你做什麼?",
|
|
"quickActions": {
|
|
"plan": {
|
|
"title": "建立專案計畫",
|
|
"prompt": "幫我為接下來要做的事情寫一份簡潔的專案計畫。"
|
|
},
|
|
"analyze": {
|
|
"title": "分析這些資料",
|
|
"prompt": "幫我分析這些資料,並指出最重要的模式。"
|
|
},
|
|
"brainstorm": {
|
|
"title": "腦力激盪想法",
|
|
"prompt": "圍繞這個問題腦力激盪幾個實用方案,並說明取捨。"
|
|
},
|
|
"code": {
|
|
"title": "撰寫程式碼",
|
|
"prompt": "幫我為這個任務撰寫程式碼,先從最小可用改動開始。"
|
|
},
|
|
"summarize": {
|
|
"title": "總結這份文件",
|
|
"prompt": "幫我總結這份文件,並列出關鍵重點。"
|
|
},
|
|
"more": {
|
|
"title": "更多",
|
|
"prompt": "展示幾個你在這個工作區裡可以幫我的實用方式。"
|
|
}
|
|
},
|
|
"imageQuickActions": {
|
|
"icon": {
|
|
"title": "設計應用程式圖示",
|
|
"prompt": "生成一個乾淨的 1:1 nanobot 應用程式圖示:友善的機器人、簡潔向量風格、柔和藍白配色,不要文字。"
|
|
},
|
|
"sticker": {
|
|
"title": "製作貼圖",
|
|
"prompt": "生成一張可愛貼圖風格的小型機器人助理圖片,背景像透明貼紙,表情活潑有趣。"
|
|
},
|
|
"poster": {
|
|
"title": "建立海報",
|
|
"prompt": "生成一張個人 AI 助理的精緻海報概念圖,現代構圖、清楚的視覺層級,適合登陸頁展示。"
|
|
},
|
|
"product": {
|
|
"title": "產品樣機",
|
|
"prompt": "生成一張對話式 AI Web 應用的乾淨產品樣機圖,極簡介面、高級光影、真實裝置邊框。"
|
|
},
|
|
"portrait": {
|
|
"title": "風格化頭像",
|
|
"prompt": "生成一個友善 AI 夥伴的風格化頭像,柔和光線、細節豐富但親切,現代插畫風格。"
|
|
},
|
|
"edit": {
|
|
"title": "編輯圖片",
|
|
"prompt": "幫我編輯一張圖片。先請我上傳或指定要編輯的圖片,然後生成編輯後的結果。"
|
|
}
|
|
}
|
|
},
|
|
"header": {
|
|
"toggleSidebar": "切換側邊欄"
|
|
},
|
|
"composer": {
|
|
"placeholderThread": "輸入訊息…",
|
|
"placeholderHero": "你在想什麼?",
|
|
"placeholderOpening": "正在開啟新對話…",
|
|
"placeholderStreaming": "模型正在回覆…",
|
|
"inputAria": "訊息輸入框",
|
|
"sendHint": "Enter 送出 · Shift+Enter 換行",
|
|
"runRuntimeTitle": "執行中 · {{elapsed}}",
|
|
"goalStateStrip": "目標 · {{label}}",
|
|
"goalStateFallback": "目標",
|
|
"goalStateExpandAria": "查看完整目標",
|
|
"goalStateSheetTitle": "目標",
|
|
"send": "送出訊息",
|
|
"stop": "停止回覆",
|
|
"attachImage": "附加圖片",
|
|
"imageMode": {
|
|
"label": "圖片生成",
|
|
"toggle": "切換圖片生成模式",
|
|
"placeholder": "描述或編輯圖片…",
|
|
"aspectAria": "圖片畫幅",
|
|
"aspectLabel": "圖片畫幅",
|
|
"aspect": {
|
|
"auto": "自動",
|
|
"1_1": "方形 1:1",
|
|
"3_4": "直式 3:4",
|
|
"9_16": "故事版 9:16",
|
|
"4_3": "橫式 4:3",
|
|
"16_9": "寬螢幕 16:9"
|
|
}
|
|
},
|
|
"encoding": "處理中…",
|
|
"remove": "移除附件",
|
|
"normalizedSizeHint": "{{orig}} → {{current}}(已自動壓縮)",
|
|
"imageRejected": {
|
|
"unsupported_type": "不支援的檔案類型",
|
|
"too_many_images": "每則訊息最多 {{max}} 張圖片",
|
|
"magic_mismatch": "檔案看起來不像真正的圖片",
|
|
"decode_failed": "無法解碼這張圖片",
|
|
"too_large": "圖片太大,請換一張小一點的",
|
|
"io": "無法讀取這個檔案"
|
|
},
|
|
"slash": {
|
|
"ariaLabel": "斜線命令",
|
|
"label": "命令",
|
|
"navigateHint": "↑↓ 選擇",
|
|
"selectHint": "Enter/Tab 填入",
|
|
"closeHint": "Esc 關閉",
|
|
"commands": {
|
|
"new": {
|
|
"title": "新增對話",
|
|
"description": "停止目前任務,並開始新的對話。"
|
|
},
|
|
"stop": {
|
|
"title": "停止目前任務",
|
|
"description": "取消這個對話中正在執行的 agent 回合。"
|
|
},
|
|
"restart": {
|
|
"title": "重新啟動 nanobot",
|
|
"description": "原地重新啟動 bot 進程。"
|
|
},
|
|
"status": {
|
|
"title": "查看狀態",
|
|
"description": "顯示執行環境、provider 和 channel 狀態。"
|
|
},
|
|
"history": {
|
|
"title": "查看對話歷史",
|
|
"description": "列印最近 N 則已持久化的對話訊息。"
|
|
},
|
|
"dream": {
|
|
"title": "執行 Dream",
|
|
"description": "手動觸發記憶整理。"
|
|
},
|
|
"dream_log": {
|
|
"title": "查看 Dream 日誌",
|
|
"description": "查看上一次 Dream 整理變更了什麼。"
|
|
},
|
|
"dream_restore": {
|
|
"title": "恢復記憶",
|
|
"description": "將記憶恢復到之前的 Dream 快照。"
|
|
},
|
|
"goal": {
|
|
"title": "長期目標",
|
|
"description": "請助理把這則請求當成需要多步驟持續推進的目標。"
|
|
},
|
|
"help": {
|
|
"title": "查看說明",
|
|
"description": "列出可用的斜線命令。"
|
|
}
|
|
}
|
|
},
|
|
"goalStateCloseAria": "關閉目標"
|
|
},
|
|
"scrollToBottom": "捲動到底部",
|
|
"loadEarlier": "載入更早訊息"
|
|
},
|
|
"message": {
|
|
"streaming": "串流輸出中",
|
|
"assistantTyping": "助理正在輸入",
|
|
"toolSingle": "正在使用工具",
|
|
"toolMany": "已使用 {{count}} 個工具",
|
|
"toolSummary": "{{count}} 個工具",
|
|
"toolSummaryMany": "{{count}} 個工具",
|
|
"reasoningTools": "推理 · {{count}} 個工具",
|
|
"reasoningToolsSingular": "推理 · 1 個工具",
|
|
"reasoning": "思考過程",
|
|
"reasoningStreaming": "正在思考…",
|
|
"reasoningSummary": "推理",
|
|
"agentActivitySummary": "{{reasoning}} 步 · {{tools}} 次工具呼叫",
|
|
"agentActivityToolsOnly": "{{tools}} 次工具呼叫",
|
|
"agentActivityLiveSummary": "進行中… · {{reasoning}} 步 · {{tools}} 次工具呼叫",
|
|
"agentActivityLiveToolsOnly": "進行中… · {{tools}} 次工具呼叫",
|
|
"imageAttachment": "圖片附件",
|
|
"turnLatencyTitle": "本輪耗時(端到端)"
|
|
},
|
|
"lightbox": {
|
|
"title": "圖片預覽",
|
|
"open": "檢視圖片",
|
|
"prev": "上一張",
|
|
"next": "下一張",
|
|
"close": "關閉預覽"
|
|
},
|
|
"code": {
|
|
"fallbackLanguage": "程式碼",
|
|
"copyAria": "複製程式碼",
|
|
"copy": "複製",
|
|
"copied": "已複製"
|
|
},
|
|
"common": {
|
|
"dismiss": "關閉"
|
|
},
|
|
"errors": {
|
|
"messageTooBig": {
|
|
"title": "訊息過大",
|
|
"body": "伺服器因超過大小限制拒收了上一則訊息。可移除部分圖片或改用較小的圖片後再試。"
|
|
}
|
|
}
|
|
}
|