2026-01-27 13:21:20 +09:00
|
|
|
|
{
|
|
|
|
|
|
"common": {
|
|
|
|
|
|
"save": "儲存",
|
|
|
|
|
|
"cancel": "取消",
|
|
|
|
|
|
"close": "關閉",
|
|
|
|
|
|
"confirm": "確認",
|
|
|
|
|
|
"clear": "清除",
|
|
|
|
|
|
"edit": "編輯",
|
|
|
|
|
|
"delete": "刪除",
|
|
|
|
|
|
"loading": "載入中...",
|
|
|
|
|
|
"new": "新建"
|
|
|
|
|
|
},
|
|
|
|
|
|
"nav": {
|
|
|
|
|
|
"about": "關於",
|
|
|
|
|
|
"editor": "編輯器",
|
|
|
|
|
|
"newChat": "開始新對話",
|
|
|
|
|
|
"github": "GitHub",
|
|
|
|
|
|
"settings": "設定",
|
|
|
|
|
|
"hidePanel": "隱藏聊天面板 (Ctrl+B)",
|
|
|
|
|
|
"showPanel": "顯示聊天面板 (Ctrl+B)",
|
|
|
|
|
|
"aiChat": "AI 聊天"
|
|
|
|
|
|
},
|
|
|
|
|
|
"providers": {
|
|
|
|
|
|
"useServerDefault": "使用伺服器預設值",
|
|
|
|
|
|
"openai": "OpenAI",
|
|
|
|
|
|
"anthropic": "Anthropic",
|
|
|
|
|
|
"google": "Google",
|
|
|
|
|
|
"azure": "Azure OpenAI",
|
|
|
|
|
|
"openrouter": "OpenRouter",
|
|
|
|
|
|
"deepseek": "DeepSeek",
|
|
|
|
|
|
"siliconflow": "SiliconFlow",
|
feat: Add support for Chinese AI providers (GLM, Qwen, Kimi, MiniMax, Qiniu)
* feat: Add support for Chinese AI providers (GLM, Qwen, Kimi, MiniMax, Qiniu)
- Add minimax, glm, qwen, qiniu, kimi to ProviderName type
- Add provider configurations to PROVIDER_INFO with default base URLs
- Add suggested models for MiniMax in SUGGESTED_MODELS
- Add minimax/glm/qwen/qiniu/kimi cases to getAIModel using OpenAI-compatible SDK
- Update ALLOWED_CLIENT_PROVIDERS and error messages
- Add environment variable examples to env.example
Fixes: MiniMax API compatibility issue (invalid chat setting 2013)
* fix: Add missing providers to PROVIDER_ENV_VARS type
* fix: Handle null case in PROVIDER_ENV_VARS for new providers
* fix: Add minimax/glm/qwen/kimi/qiniu support to validate-model API
- Add getDefaultBaseUrl helper function
- Add validation cases for new providers in validate-model route
* fix: Add new providers to buildProviderOptions switch case
* fix: Merge multiple system messages into one for minimax/glm/qwen/kimi/qiniu
MiniMax API doesn't support multiple system messages.
This fix combines them into a single message for Chinese providers.
* fix: Handle null provider in system message check
* debug: Add logging for allMessages count
* fix: Use effective provider (including env var fallback) for isSingleSystemProvider check
* fix: apply biome formatting (line-wrapping)
* docs: add Chinese AI providers documentation (MiniMax, GLM, Qwen, Kimi, Qiniu)
- Add i18n translations for new providers in all language dictionaries
- Add provider configuration documentation in en/cn/ja docs
* fix: 改进 PR #722 的代码审查反馈
1. 删除重复的 getDefaultBaseUrl 函数,改用 model-config.ts 的 PROVIDER_INFO
2. validate-model 路由改用 AI SDK 的 createOpenAI + generateText
3. 修复 resolveBaseURL 回退逻辑,传入 PROVIDER_INFO 的 defaultBaseUrl
4. 删除无用的 .bak 备份文件
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* fix: 修正中国 AI provider 端点配置
- qiniu: api.qiniucdn.com → api.qnaigc.com
- qwen: dashscope.aliyun.com → dashscope.aliyuncs.com
- 更新 env.example 文档链接
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* feat: MiniMax 使用 Anthropic 兼容 API
- MiniMax 改用 createAnthropic (而非 createOpenAI)
- 支持 api.minimax.io/anthropic 和 api.minimaxi.com/anthropic
- 合并多个 system 消息为单个 (MiniMax/GLM/Qwen/Kimi/Qiniu)
- 更新默认模型为 MiniMax-M2.5 系列
- 支持 MINIMAX_BASE_URL 环境变量配置
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* docs: 更新 MiniMax 文档
- 添加 Anthropic 兼容 API 说明
- 更新默认模型为 MiniMax-M2.5
- 添加国际版/中国大陆版配置示例
- 更新 env.example 注释
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* fix: 完善 MiniMax 双端点支持及问题修复
- 支持 MiniMax Anthropic 兼容端点和 OpenAI 兼容端点自动切换
- 修正默认端点为 api.minimaxi.com (中国大陆可用)
- 修复端点路径缺少 /v1 的问题
- 添加前端 MiniMax logo 映射
- 移除调试日志
- 修正 env.example 默认配置
* chore: clean backup artifacts and align biome formatting
* fix: resolve effectiveProvider bug, deduplicate MiniMax URL logic, fix docs
- Fix critical bug: effectiveProvider was empty during auto-detection,
causing multi-system-message to be sent to MiniMax (which rejects it).
Now uses resolved provider from getAIModel instead of re-deriving it.
- Extract normalizeMiniMaxBaseURL() shared helper to eliminate duplication
between ai-providers.ts and validate-model/route.ts
- Add guard for undefined MiniMax baseURL to prevent hitting api.anthropic.com
- Fix docs: mark China mainland URL as default (matches code behavior)
- Restructure minimax/glm/qwen/kimi/qiniu validation to use shared pattern
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: document MiniMax dual API formats in docs and UI
- Add hint below Base URL input when MiniMax is selected, explaining
Anthropic-compatible (/anthropic) vs OpenAI-compatible (/v1) endpoints
- Update all 3 ai-providers docs (en/cn/ja) to list all 4 endpoint options
(China/International × Anthropic/OpenAI)
- Add i18n translations for the hint in all 4 locales
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: deduplicate PROVIDER_LOGO_MAP, remove unnecessary optional chaining
- Extract PROVIDER_LOGO_MAP to lib/types/model-config.ts (was duplicated
in model-config-dialog.tsx and model-selector.tsx)
- Remove unnecessary ?. on PROVIDER_INFO.minimax (it's a full Record)
---------
Co-authored-by: msga-oc <msga-oc@gitea.misakiga.top>
Co-authored-by: Shinyi <shinyi@openclaw.ai>
Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:53:47 +08:00
|
|
|
|
"modelscope": "ModelScope",
|
|
|
|
|
|
"minimax": "MiniMax",
|
|
|
|
|
|
"glm": "GLM",
|
|
|
|
|
|
"qwen": "Qwen",
|
|
|
|
|
|
"kimi": "Kimi",
|
2026-07-12 08:10:12 +08:00
|
|
|
|
"qiniu": "Qiniu",
|
|
|
|
|
|
"mimo": "MiMo (小米)"
|
2026-01-27 13:21:20 +09:00
|
|
|
|
},
|
|
|
|
|
|
"chat": {
|
|
|
|
|
|
"placeholder": "描述您的圖表或上傳檔案...",
|
|
|
|
|
|
"send": "傳送",
|
2026-01-29 19:10:25 +05:30
|
|
|
|
"stopGeneration": "停止產生",
|
2026-01-27 13:21:20 +09:00
|
|
|
|
"sendMessage": "傳送訊息",
|
|
|
|
|
|
"clearConversation": "清除對話",
|
|
|
|
|
|
"diagramHistory": "圖表歷史",
|
|
|
|
|
|
"saveDiagram": "儲存圖表",
|
|
|
|
|
|
"uploadFile": "上傳檔案(圖片、PDF、文字)",
|
|
|
|
|
|
"minimalStyle": "簡約",
|
|
|
|
|
|
"styledMode": "精緻",
|
|
|
|
|
|
"minimalTooltip": "使用簡約模式以加快產生速度(無顏色)",
|
|
|
|
|
|
"regenerate": "重新產生回應",
|
|
|
|
|
|
"copyResponse": "複製回應",
|
|
|
|
|
|
"copied": "已複製!",
|
|
|
|
|
|
"failedToCopy": "複製失敗",
|
|
|
|
|
|
"failedToCopyDetail": "複製訊息失敗。請手動複製或檢查剪貼簿權限。",
|
|
|
|
|
|
"goodResponse": "有幫助",
|
|
|
|
|
|
"badResponse": "無幫助",
|
|
|
|
|
|
"clickToEdit": "點擊編輯",
|
|
|
|
|
|
"editMessage": "編輯訊息",
|
|
|
|
|
|
"saveAndSubmit": "儲存並提交",
|
|
|
|
|
|
"ExtractURL": "從 URL 擷取"
|
|
|
|
|
|
},
|
|
|
|
|
|
"examples": {
|
|
|
|
|
|
"title": "用 AI 建立圖表",
|
|
|
|
|
|
"subtitle": "描述您想要建立的內容或上傳圖片進行複製",
|
|
|
|
|
|
"quickExamples": "快速範例",
|
|
|
|
|
|
"paperToDiagram": "文件轉圖表",
|
|
|
|
|
|
"paperDescription": "上傳 .pdf, .txt, .md, .json, .csv, .py, .js, .ts 等檔案",
|
|
|
|
|
|
"animatedDiagram": "動畫圖表",
|
|
|
|
|
|
"animatedDescription": "繪製帶有動畫連接器的 Transformer 架構",
|
|
|
|
|
|
"awsArchitecture": "AWS 架構",
|
|
|
|
|
|
"awsDescription": "使用 AWS 圖示建立雲端架構圖",
|
|
|
|
|
|
"replicateFlowchart": "複製流程圖",
|
|
|
|
|
|
"replicateDescription": "上傳並複製現有流程圖",
|
|
|
|
|
|
"creativeDrawing": "創意繪圖",
|
|
|
|
|
|
"creativeDescription": "繪製有趣且富有創意的內容",
|
|
|
|
|
|
"cachedNote": "範例已快取,可即時回應",
|
|
|
|
|
|
"mcpServer": "MCP 伺服器",
|
2026-04-06 10:17:38 +09:00
|
|
|
|
"mcpDescription": "在 Claude Desktop、VS Code 和 Cursor 中使用"
|
2026-01-27 13:21:20 +09:00
|
|
|
|
},
|
|
|
|
|
|
"settings": {
|
|
|
|
|
|
"title": "設定",
|
|
|
|
|
|
"description": "配置您的應用程式設定。",
|
2026-01-29 12:33:15 +08:00
|
|
|
|
"apiKeysModels": "API 金鑰和模型",
|
|
|
|
|
|
"apiKeysModelsDescription": "配置 AI 提供商和 API 金鑰。",
|
2026-01-27 13:21:20 +09:00
|
|
|
|
"accessCode": "存取碼",
|
|
|
|
|
|
"accessCodePlaceholder": "輸入存取碼",
|
|
|
|
|
|
"accessCodeDescription": "使用此應用程式需要存取碼。",
|
|
|
|
|
|
"aiProvider": "AI 提供商設定",
|
|
|
|
|
|
"aiProviderDescription": "使用您自己的 API 金鑰來繞過使用限制。您的金鑰僅儲存在瀏覽器本機,不會儲存在伺服器上。",
|
|
|
|
|
|
"provider": "提供商",
|
|
|
|
|
|
"modelId": "模型 ID",
|
|
|
|
|
|
"apiKey": "API 金鑰",
|
|
|
|
|
|
"apiKeyPlaceholder": "您的 API 金鑰",
|
|
|
|
|
|
"baseUrl": "基礎 URL(可選)",
|
|
|
|
|
|
"customEndpoint": "自訂端點 URL",
|
|
|
|
|
|
"overrides": "覆寫",
|
|
|
|
|
|
"clearSettings": "清除設定",
|
|
|
|
|
|
"useServerDefault": "使用伺服器預設值",
|
|
|
|
|
|
"language": "語言",
|
|
|
|
|
|
"languageDescription": "選擇介面語言。",
|
|
|
|
|
|
"theme": "主題",
|
|
|
|
|
|
"themeDescription": "介面和 DrawIO 畫布的深色/淺色模式。",
|
|
|
|
|
|
"drawioStyle": "DrawIO 樣式",
|
2026-05-15 22:14:20 +08:00
|
|
|
|
"drawioStyleDescription": "畫布樣式",
|
|
|
|
|
|
"themeDefault": "預設",
|
|
|
|
|
|
"themeDark": "深色",
|
|
|
|
|
|
"themeMinimal": "簡約",
|
|
|
|
|
|
"themeSketch": "草圖",
|
|
|
|
|
|
"themeSimple": "簡單",
|
2026-01-27 13:21:20 +09:00
|
|
|
|
"diagramStyle": "圖表樣式",
|
|
|
|
|
|
"diagramStyleDescription": "切換簡約與精緻圖表輸出模式。",
|
|
|
|
|
|
"sendShortcut": "傳送快捷鍵",
|
|
|
|
|
|
"sendShortcutDescription": "選擇傳送訊息的方式。",
|
|
|
|
|
|
"enterToSend": "Enter 傳送",
|
|
|
|
|
|
"ctrlEnterToSend": "Cmd/Ctrl+Enter 傳送",
|
|
|
|
|
|
"diagramActions": "圖表操作",
|
|
|
|
|
|
"diagramActionsDescription": "管理圖表歷史紀錄和匯出",
|
|
|
|
|
|
"history": "歷史紀錄",
|
|
|
|
|
|
"download": "下載",
|
|
|
|
|
|
"proxy": "代理設定",
|
|
|
|
|
|
"proxyDescription": "配置 API 請求的 HTTP/HTTPS 代理(僅桌面版)",
|
|
|
|
|
|
"httpProxy": "HTTP 代理",
|
|
|
|
|
|
"httpsProxy": "HTTPS 代理",
|
|
|
|
|
|
"applyProxy": "套用",
|
|
|
|
|
|
"proxyApplied": "代理設定已套用",
|
|
|
|
|
|
"diagramValidation": "圖表驗證(實驗性)",
|
|
|
|
|
|
"diagramValidationDescription": "使用視覺語言模型驗證產生的圖表。需要支援視覺的模型,如 GPT-5.2 或 Sonnet-4.5。",
|
|
|
|
|
|
"enabled": "已啟用",
|
2026-03-07 19:07:54 +09:00
|
|
|
|
"disabled": "已停用",
|
|
|
|
|
|
"customSystemMessage": "自訂系統訊息",
|
|
|
|
|
|
"customSystemMessageDescription": "新增自訂指示,將附加到 AI 的系統提示末尾。",
|
feat: add personal My Templates library alongside Quick Examples (#773)
* 增加了ralph自动化编程梳理
* feat: US-001 - 为模板库建立独立的 IndexedDB 存储层
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-002 - 在空聊天状态用我的模板库替换官方示例
- 将 ChatLobby 中的 Quick Examples 替换为 TemplatePanel
- 当没有历史会话时,展示完整的模板库面板
- 当有历史会话时,展示可折叠的 "My Templates" 区域
- 使用 TemplatePanel 组件展示用户的个人模板库
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-004 - Provide template creation flow
- Create TemplateCreateDialog component with form fields for prompt, title, description, tags, and pinned
- Add i18n translations for template creation UI in en, zh, zh-Hant, ja
- Update TemplatePanel to integrate the create dialog
- Support initialPrompt prop for pre-filling from current input
- Validate required prompt field (empty prompt not allowed)
- Auto-generate default title from first 20 chars of Pin templates appear at top of list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-005 - 为模板卡片提供编辑、删除和复制操作
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-006 - Send template directly on click and record usage statistics
- Implement click-to-send template functionality with confirmation dialog
- Add clickCount and runCount increment logic
- Display runCount and lastUsedAt on template card
- Add i18n translations for confirmation dialog (en, zh, zh-Hant, ja)
- Pass onSendTemplate and currentInput props through component hierarchy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-007 - Support template search, pin and default sorting
- Add search bar to TemplatePanel with real-time filtering by title, description, and tags
- Add pin/unpin toggle button on template cards (uses Bookmark icon with fill indicator)
- Search uses existing searchTemplates function from template-storage
- Sort uses existing sortTemplates function (pinned desc, runCount desc, lastUsedAt desc, updatedAt desc)
- Show empty state with Search icon when search returns no results
- List re-sorts immediately after pin/unpin toggle
- Add i18n keys: searchPlaceholder, searchNoResults, pin, unpin for all 4 languages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-008 - Support saving current input as template
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-009 - Support saving historical user message as template
- Add "Save as Template" button to user messages
- Pre-fill prompt with original user message text
- Only show on user messages,- Dialog opens TemplateCreateDialog on click
- Template appears in list immediately after saving
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-010 - Support template import and export
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove local-only dirs from git tracking (.agents, .cursor, scripts, screenshots)
These directories contain local IDE configs, agent scripts, and
dev tooling that should not be part of the upstream repository.
Added them to .gitignore to prevent future accidental commits.
* chore: remove AGENTS.md from git tracking
* fix: add missing i18n keys for template export/import (en/zh/zh-Hant/ja)
* fix: review fixes for my-templates PR
- Fix fragile querySelector("form") with id-based lookup
- Add objectStoreNames.contains guards for IndexedDB upgrades
- Remove duplicate TemplateSchema, import from template-storage
- Revert contributor-specific .gitignore additions
- Fix broken i18n placeholders and missing translations (zh/ja/zh-Hant)
- Remove unused setFiles prop from ChatLobby
- Remove tags feature (unnecessary complexity)
- Improve template card layout: overlay icons on hover, align stats
- Add break-all and overflow-hidden for long prompt text in dialogs
- Move incrementClickCount into sendTemplate for accurate tracking
- Use Intl.RelativeTimeFormat for locale-aware relative time
* feat: restore Quick Examples panel and add lobby panel visibility settings
Bring back the ExamplePanel as a third collapsible section in ChatLobby
alongside Recent Chats and My Templates. Add toggle switches in Settings
to show/hide each lobby panel, persisted via localStorage.
* fix: template send race condition, import defaults, and empty title bug
- Use flushSync instead of setTimeout(0) in handleSendTemplate to
ensure React state is flushed before form submission
- Explicitly validate and default all fields in importTemplates to
prevent undefined counters from malformed import JSON
- Fall back to existing title in edit dialog instead of writing undefined
* fix: address Copilot review comments and remove PRD file
- Fix fallback formatLastUsed returning "Not used yet" for recent usage
- Remove dead mounted flag in TemplatePanel useEffect
- Respect panel visibility settings in no-history lobby state
- Reject empty/whitespace titles in import validation
- Trim title/prompt in importTemplates with default title fallback
- Remove tasks/prd-template-library-replaces-examples.md from repo
* fix: remove double sort, dead code, redundant stats, and break-all CSS
- Remove redundant sortTemplates call in loadTemplates (already sorted by getAllTemplates)
- Remove unused createEmptyTemplateInput and sortTemplates import
- Show "Not used yet" only once for unused templates instead of twice
- Use break-words instead of break-all on prompt textareas
---------
Co-authored-by: 杜雷 <dreamfly@126.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
2026-04-03 11:16:01 +08:00
|
|
|
|
"customSystemMessagePlaceholder": "例如:圖表始終使用藍色配色方案...",
|
|
|
|
|
|
"panelVisibility": "大廳面板",
|
|
|
|
|
|
"panelVisibilityDescription": "選擇在聊天大廳顯示哪些面板。",
|
|
|
|
|
|
"showRecentChats": "最近聊天",
|
|
|
|
|
|
"showMyTemplates": "我的範本",
|
|
|
|
|
|
"showQuickExamples": "快速範例"
|
2026-01-27 13:21:20 +09:00
|
|
|
|
},
|
|
|
|
|
|
"save": {
|
|
|
|
|
|
"title": "儲存圖表",
|
|
|
|
|
|
"description": "選擇格式和檔案名稱以儲存您的圖表。",
|
|
|
|
|
|
"format": "格式",
|
|
|
|
|
|
"filename": "檔案名稱",
|
|
|
|
|
|
"filenamePlaceholder": "輸入檔案名稱",
|
|
|
|
|
|
"formats": {
|
|
|
|
|
|
"drawio": "Draw.io XML",
|
|
|
|
|
|
"png": "PNG 圖片",
|
2026-04-03 07:50:57 +08:00
|
|
|
|
"svg": "SVG 圖片",
|
|
|
|
|
|
"xmlsvg": "可編輯 SVG"
|
2026-01-27 13:21:20 +09:00
|
|
|
|
},
|
|
|
|
|
|
"savedSuccessfully": "儲存成功!"
|
|
|
|
|
|
},
|
|
|
|
|
|
"history": {
|
|
|
|
|
|
"title": "圖表歷史",
|
|
|
|
|
|
"description": "在 AI 修改之前儲存的每個圖表。\n點擊圖表以還原它",
|
|
|
|
|
|
"noHistory": "尚無歷史紀錄。傳送訊息以建立圖表歷史。",
|
|
|
|
|
|
"version": "版本",
|
|
|
|
|
|
"restoreTo": "還原到版本 {version}?"
|
|
|
|
|
|
},
|
|
|
|
|
|
"dialogs": {
|
|
|
|
|
|
"clearTitle": "清除所有內容?",
|
|
|
|
|
|
"clearDescription": "這將清除目前對話並重設圖表。此操作無法復原。",
|
|
|
|
|
|
"clearEverything": "清除所有內容",
|
|
|
|
|
|
"clearSuccess": "已開始新對話"
|
|
|
|
|
|
},
|
|
|
|
|
|
"errors": {
|
|
|
|
|
|
"maxFiles": "檔案太多。最多允許 {max} 個。",
|
|
|
|
|
|
"onlyMoreAllowed": "只能再新增 {slots} 個檔案",
|
|
|
|
|
|
"fileExceeds": "「{name}」大小為 {size}(超過 {max}MB)",
|
|
|
|
|
|
"unsupportedType": "「{name}」不是支援的檔案類型",
|
|
|
|
|
|
"filesRejected": "{count} 個檔案被拒絕:",
|
|
|
|
|
|
"andMore": "...還有 {count} 個",
|
|
|
|
|
|
"invalidAccessCode": "無效或缺少存取碼。請在設定中配置。",
|
|
|
|
|
|
"networkError": "網路錯誤。請檢查您的連線。",
|
|
|
|
|
|
"retryLimit": "已達自動重試限制({max})。請手動重試。",
|
|
|
|
|
|
"continuationRetryLimit": "已達繼續重試限制({max})。圖表可能過於複雜。",
|
|
|
|
|
|
"validationFailed": "圖表驗證失敗。請嘗試重新產生。",
|
|
|
|
|
|
"malformedXml": "AI 產生的圖表 XML 無效。請嘗試重新產生。",
|
|
|
|
|
|
"failedToProcess": "無法處理圖表。請嘗試重新產生。",
|
|
|
|
|
|
"sessionCorrupted": "工作階段資料已損壞。重新開始。",
|
|
|
|
|
|
"failedToSave": "無法儲存訊息到 localStorage",
|
|
|
|
|
|
"failedToRestore": "無法從 localStorage 還原",
|
|
|
|
|
|
"failedToPersist": "卸載前無法持久化狀態",
|
|
|
|
|
|
"failedToExport": "取得圖表資料時出錯",
|
|
|
|
|
|
"failedToLoadExample": "載入範例圖片時出錯",
|
|
|
|
|
|
"failedToRecordFeedback": "記錄您的回饋失敗。請重試。",
|
|
|
|
|
|
"storageUpdateFailed": "聊天已清除,但無法更新瀏覽器儲存空間"
|
|
|
|
|
|
},
|
|
|
|
|
|
"quota": {
|
|
|
|
|
|
"dailyLimit": "已達每日配額",
|
|
|
|
|
|
"tokenLimit": "已達每日令牌限制",
|
|
|
|
|
|
"tpmLimit": "速率限制",
|
|
|
|
|
|
"tpmMessage": "請求過多。請稍等片刻。",
|
|
|
|
|
|
"tpmMessageDetailed": "達到速率限制({limit} 令牌/分鐘)。請等待 {seconds} 秒後再傳送請求。",
|
|
|
|
|
|
"messageApi": "看來您今天的體驗次數已達上限。非常高興您玩得開心,雖然本專案由字節跳動豆包慷慨贊助,但為了確保大家都能公平使用,我們不得不對使用量做一點小小的限制。",
|
2026-02-27 07:34:05 -08:00
|
|
|
|
"messageApiSelfHosted": null,
|
2026-01-27 13:21:20 +09:00
|
|
|
|
"messageToken": "看來您今天的 Token 用量已達上限。非常高興您玩得開心,雖然本專案由字節跳動豆包慷慨贊助,但為了確保大家都能公平使用,我們不得不對使用量做一點小小的限制。",
|
2026-02-27 07:34:05 -08:00
|
|
|
|
"messageTokenSelfHosted": null,
|
2026-01-27 13:21:20 +09:00
|
|
|
|
"tip": "<strong>提示:</strong>您可以使用自己的 API 金鑰(點擊設定圖示)或自行託管專案來繞過這些限制。",
|
2026-02-27 07:34:05 -08:00
|
|
|
|
"tipSelfHosted": "<strong>提示:</strong>您可以在設定中配置自己的 API 金鑰以繼續使用服務。",
|
2026-01-27 13:21:20 +09:00
|
|
|
|
"reset": "您的限制將在明天重設。感謝您的理解。",
|
|
|
|
|
|
"doubaoSponsorship": "<a href=\"{link}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"underline hover:text-foreground\">點此註冊</a>可獲得每個模型 50 萬免費 Token(包括豆包、DeepSeek 和 Kimi),然後在模型設定中配置您的 API Key。",
|
|
|
|
|
|
"configModel": "使用您的金鑰",
|
|
|
|
|
|
"selfHost": "自行託管",
|
|
|
|
|
|
"sponsor": "贊助",
|
|
|
|
|
|
"learnMore": "了解更多 →",
|
|
|
|
|
|
"usedOf": "{used}/{limit}"
|
|
|
|
|
|
},
|
|
|
|
|
|
"tools": {
|
|
|
|
|
|
"generateDiagram": "產生圖表",
|
|
|
|
|
|
"editDiagram": "編輯圖表",
|
|
|
|
|
|
"appendDiagram": "繼續圖表",
|
|
|
|
|
|
"complete": "完成",
|
|
|
|
|
|
"error": "錯誤",
|
|
|
|
|
|
"truncated": "已截斷"
|
|
|
|
|
|
},
|
|
|
|
|
|
"file": {
|
|
|
|
|
|
"reading": "讀取中...",
|
|
|
|
|
|
"chars": "字元",
|
|
|
|
|
|
"removeFile": "移除檔案"
|
|
|
|
|
|
},
|
|
|
|
|
|
"url": {
|
|
|
|
|
|
"title": "從 URL 擷取內容",
|
|
|
|
|
|
"description": "貼上 URL 以擷取和分析其內容",
|
|
|
|
|
|
"Extracting": "擷取中...",
|
|
|
|
|
|
"extract": "擷取",
|
|
|
|
|
|
"Cancel": "取消",
|
|
|
|
|
|
"enterUrl": "請輸入 URL",
|
|
|
|
|
|
"invalidFormat": "URL 格式無效"
|
|
|
|
|
|
},
|
|
|
|
|
|
"reasoning": {
|
|
|
|
|
|
"thinking": "思考中...",
|
|
|
|
|
|
"thoughtFor": "思考了 {duration} 秒",
|
|
|
|
|
|
"thoughtBrief": "思考了幾秒鐘"
|
|
|
|
|
|
},
|
|
|
|
|
|
"dev": {
|
|
|
|
|
|
"title": "開發:XML 串流模擬器",
|
|
|
|
|
|
"preset": "預設:",
|
|
|
|
|
|
"selectPreset": "選擇預設...",
|
|
|
|
|
|
"clear": "清除",
|
|
|
|
|
|
"placeholder": "在此貼上 mxCell XML 或選擇預設...",
|
|
|
|
|
|
"interval": "間隔:",
|
|
|
|
|
|
"chars": "字元:",
|
|
|
|
|
|
"streaming": "串流傳輸中...",
|
|
|
|
|
|
"simulate": "模擬",
|
|
|
|
|
|
"stop": "停止",
|
|
|
|
|
|
"testQuotaToast": "測試配額提示",
|
|
|
|
|
|
"simulatingMessage": "[開發] 模擬 XML 串流傳輸",
|
|
|
|
|
|
"successMessage": "成功顯示圖表。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"about": {
|
|
|
|
|
|
"modelChange": "模型變更與用量限制",
|
|
|
|
|
|
"walletCrying": "(別名:我的錢包頂不住了)",
|
|
|
|
|
|
"seekingSponsorship": "尋求贊助(求大佬撈一把)",
|
|
|
|
|
|
"contactMe": "聯絡我",
|
|
|
|
|
|
"usageNotice": "由於使用量過高,我已將模型從 Claude 更換為 minimax-m2,並設定了一些用量限制。詳情請查看關於頁面。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"sessionHistory": {
|
|
|
|
|
|
"tooltip": "聊天歷史",
|
|
|
|
|
|
"newChat": "新對話",
|
|
|
|
|
|
"empty": "暫無聊天紀錄",
|
|
|
|
|
|
"emptyHint": "開始對話吧",
|
|
|
|
|
|
"today": "今天",
|
|
|
|
|
|
"yesterday": "昨天",
|
|
|
|
|
|
"thisWeek": "本週",
|
|
|
|
|
|
"earlier": "更早",
|
|
|
|
|
|
"deleteTitle": "刪除此對話?",
|
|
|
|
|
|
"deleteDescription": "這將永久刪除此聊天工作階段及其圖表。此操作無法復原。",
|
|
|
|
|
|
"recentChats": "最近對話",
|
|
|
|
|
|
"justNow": "剛剛",
|
|
|
|
|
|
"searchPlaceholder": "搜尋對話...",
|
|
|
|
|
|
"noResults": "未找到對話"
|
|
|
|
|
|
},
|
feat: add personal My Templates library alongside Quick Examples (#773)
* 增加了ralph自动化编程梳理
* feat: US-001 - 为模板库建立独立的 IndexedDB 存储层
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-002 - 在空聊天状态用我的模板库替换官方示例
- 将 ChatLobby 中的 Quick Examples 替换为 TemplatePanel
- 当没有历史会话时,展示完整的模板库面板
- 当有历史会话时,展示可折叠的 "My Templates" 区域
- 使用 TemplatePanel 组件展示用户的个人模板库
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-004 - Provide template creation flow
- Create TemplateCreateDialog component with form fields for prompt, title, description, tags, and pinned
- Add i18n translations for template creation UI in en, zh, zh-Hant, ja
- Update TemplatePanel to integrate the create dialog
- Support initialPrompt prop for pre-filling from current input
- Validate required prompt field (empty prompt not allowed)
- Auto-generate default title from first 20 chars of Pin templates appear at top of list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-005 - 为模板卡片提供编辑、删除和复制操作
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-006 - Send template directly on click and record usage statistics
- Implement click-to-send template functionality with confirmation dialog
- Add clickCount and runCount increment logic
- Display runCount and lastUsedAt on template card
- Add i18n translations for confirmation dialog (en, zh, zh-Hant, ja)
- Pass onSendTemplate and currentInput props through component hierarchy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-007 - Support template search, pin and default sorting
- Add search bar to TemplatePanel with real-time filtering by title, description, and tags
- Add pin/unpin toggle button on template cards (uses Bookmark icon with fill indicator)
- Search uses existing searchTemplates function from template-storage
- Sort uses existing sortTemplates function (pinned desc, runCount desc, lastUsedAt desc, updatedAt desc)
- Show empty state with Search icon when search returns no results
- List re-sorts immediately after pin/unpin toggle
- Add i18n keys: searchPlaceholder, searchNoResults, pin, unpin for all 4 languages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-008 - Support saving current input as template
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-009 - Support saving historical user message as template
- Add "Save as Template" button to user messages
- Pre-fill prompt with original user message text
- Only show on user messages,- Dialog opens TemplateCreateDialog on click
- Template appears in list immediately after saving
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: US-010 - Support template import and export
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove local-only dirs from git tracking (.agents, .cursor, scripts, screenshots)
These directories contain local IDE configs, agent scripts, and
dev tooling that should not be part of the upstream repository.
Added them to .gitignore to prevent future accidental commits.
* chore: remove AGENTS.md from git tracking
* fix: add missing i18n keys for template export/import (en/zh/zh-Hant/ja)
* fix: review fixes for my-templates PR
- Fix fragile querySelector("form") with id-based lookup
- Add objectStoreNames.contains guards for IndexedDB upgrades
- Remove duplicate TemplateSchema, import from template-storage
- Revert contributor-specific .gitignore additions
- Fix broken i18n placeholders and missing translations (zh/ja/zh-Hant)
- Remove unused setFiles prop from ChatLobby
- Remove tags feature (unnecessary complexity)
- Improve template card layout: overlay icons on hover, align stats
- Add break-all and overflow-hidden for long prompt text in dialogs
- Move incrementClickCount into sendTemplate for accurate tracking
- Use Intl.RelativeTimeFormat for locale-aware relative time
* feat: restore Quick Examples panel and add lobby panel visibility settings
Bring back the ExamplePanel as a third collapsible section in ChatLobby
alongside Recent Chats and My Templates. Add toggle switches in Settings
to show/hide each lobby panel, persisted via localStorage.
* fix: template send race condition, import defaults, and empty title bug
- Use flushSync instead of setTimeout(0) in handleSendTemplate to
ensure React state is flushed before form submission
- Explicitly validate and default all fields in importTemplates to
prevent undefined counters from malformed import JSON
- Fall back to existing title in edit dialog instead of writing undefined
* fix: address Copilot review comments and remove PRD file
- Fix fallback formatLastUsed returning "Not used yet" for recent usage
- Remove dead mounted flag in TemplatePanel useEffect
- Respect panel visibility settings in no-history lobby state
- Reject empty/whitespace titles in import validation
- Trim title/prompt in importTemplates with default title fallback
- Remove tasks/prd-template-library-replaces-examples.md from repo
* fix: remove double sort, dead code, redundant stats, and break-all CSS
- Remove redundant sortTemplates call in loadTemplates (already sorted by getAllTemplates)
- Remove unused createEmptyTemplateInput and sortTemplates import
- Show "Not used yet" only once for unused templates instead of twice
- Use break-words instead of break-all on prompt textareas
---------
Co-authored-by: 杜雷 <dreamfly@126.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
2026-04-03 11:16:01 +08:00
|
|
|
|
"templates": {
|
|
|
|
|
|
"title": "我的範本",
|
|
|
|
|
|
"subtitle": "快速建立圖表的個人提示庫",
|
|
|
|
|
|
"emptyTitle": "尚無範本",
|
|
|
|
|
|
"emptyDescription": "建立您的第一個範本,開始構建您的個人提示庫",
|
|
|
|
|
|
"createFirst": "建立第一個範本",
|
|
|
|
|
|
"neverUsed": "未使用過",
|
|
|
|
|
|
"usedCount": "使用 {count} 次",
|
|
|
|
|
|
"myTemplates": "我的範本",
|
|
|
|
|
|
"createTitle": "建立範本",
|
|
|
|
|
|
"createDescription": "儲存常用提示以便重複使用。範本幫助您快速開始常用工作流程。",
|
|
|
|
|
|
"promptLabel": "提示",
|
|
|
|
|
|
"promptPlaceholder": "描述您想建立的圖表...",
|
|
|
|
|
|
"promptRequired": "提示為必填項",
|
|
|
|
|
|
"titleLabel": "標題",
|
|
|
|
|
|
"titlePlaceholder": "輸入標題",
|
|
|
|
|
|
"titleHint": "留空則使用提示的前 20 個字元",
|
|
|
|
|
|
"descriptionLabel": "描述",
|
|
|
|
|
|
"descriptionPlaceholder": "為此範本新增描述",
|
|
|
|
|
|
"pinnedLabel": "釘選範本",
|
|
|
|
|
|
"pinnedHint": "釘選的範本會顯示在清單頂部",
|
|
|
|
|
|
"createButton": "建立範本",
|
|
|
|
|
|
"createFailed": "建立範本失敗,請重試。",
|
|
|
|
|
|
"editTitle": "編輯範本",
|
|
|
|
|
|
"editDescription": "更新範本內容和設定。",
|
|
|
|
|
|
"updateFailed": "更新範本失敗,請重試。",
|
|
|
|
|
|
"duplicate": "複製",
|
|
|
|
|
|
"copySuffix": "(副本)",
|
|
|
|
|
|
"deleteTitle": "刪除此範本?",
|
|
|
|
|
|
"deleteDescription": "此操作將永久刪除該範本,無法復原。",
|
|
|
|
|
|
"confirmSendTitle": "取代目前輸入?",
|
|
|
|
|
|
"confirmSendDescription": "您有未傳送的內容。傳送此範本將取代它。",
|
|
|
|
|
|
"confirmSendButton": "傳送範本",
|
|
|
|
|
|
"searchPlaceholder": "搜尋範本...",
|
|
|
|
|
|
"searchNoResults": "沒有符合的範本",
|
|
|
|
|
|
"pin": "置頂",
|
|
|
|
|
|
"unpin": "取消置頂",
|
|
|
|
|
|
"saveAsTemplate": "儲存為範本",
|
|
|
|
|
|
"exportTemplates": "匯出範本",
|
|
|
|
|
|
"importTemplates": "匯入範本",
|
|
|
|
|
|
"exportEmpty": "沒有可匯出的範本",
|
|
|
|
|
|
"exportSuccess": "成功匯出 {count} 個範本",
|
|
|
|
|
|
"importNoFile": "請選擇一個 JSON 檔案",
|
|
|
|
|
|
"importFailed": "匯入失敗:{error}",
|
|
|
|
|
|
"importSuccess": "成功匯入 {imported} 個範本,跳過 {skipped} 個重複"
|
|
|
|
|
|
},
|
2026-01-27 13:21:20 +09:00
|
|
|
|
"validation": {
|
|
|
|
|
|
"title": "驗證圖表",
|
|
|
|
|
|
"capturing": "截圖中",
|
|
|
|
|
|
"validating": "驗證中",
|
|
|
|
|
|
"validatingWithAttempt": "驗證中 ({attempt}/{max})",
|
|
|
|
|
|
"valid": "通過",
|
|
|
|
|
|
"validWithWarnings": "通過(有警告)",
|
|
|
|
|
|
"issuesFound": "發現問題",
|
|
|
|
|
|
"error": "錯誤",
|
|
|
|
|
|
"skipped": "已跳過",
|
|
|
|
|
|
"capturedScreenshot": "截圖預覽:",
|
|
|
|
|
|
"issuesFoundLabel": "發現的問題:",
|
|
|
|
|
|
"suggestions": "建議:",
|
|
|
|
|
|
"passedValidation": "圖表通過視覺驗證 - 未發現問題。",
|
|
|
|
|
|
"improvementRequested": "改進請求已傳送 - 請查看下方新圖表",
|
|
|
|
|
|
"improveWithSuggestions": "根據建議改進",
|
|
|
|
|
|
"regenerateWithFeedback": "使用驗證回饋重新產生圖表"
|
|
|
|
|
|
},
|
|
|
|
|
|
"modelConfig": {
|
|
|
|
|
|
"title": "AI 模型配置",
|
|
|
|
|
|
"description": "配置多個 AI 提供商和模型",
|
|
|
|
|
|
"configure": "配置",
|
|
|
|
|
|
"addProvider": "新增提供商",
|
|
|
|
|
|
"addModel": "新增模型",
|
|
|
|
|
|
"modelId": "模型 ID",
|
|
|
|
|
|
"modelLabel": "顯示名稱",
|
|
|
|
|
|
"streaming": "啟用串流輸出",
|
|
|
|
|
|
"deleteProvider": "刪除提供商",
|
|
|
|
|
|
"deleteModel": "刪除模型",
|
|
|
|
|
|
"noModels": "尚未配置模型。新增模型以開始使用。",
|
|
|
|
|
|
"selectProvider": "選擇一個提供商或新增",
|
|
|
|
|
|
"configureMultiple": "配置多個 AI 提供商並輕鬆切換",
|
|
|
|
|
|
"apiKeyStored": "API 金鑰儲存在您的瀏覽器本機",
|
|
|
|
|
|
"test": "測試",
|
|
|
|
|
|
"validationError": "驗證失敗",
|
|
|
|
|
|
"addModelFirst": "請先新增至少一個模型以進行驗證",
|
|
|
|
|
|
"providers": "提供商",
|
|
|
|
|
|
"addProviderHint": "新增提供商即可開始使用",
|
|
|
|
|
|
"verified": "已驗證",
|
|
|
|
|
|
"configuration": "配置",
|
|
|
|
|
|
"displayName": "顯示名稱",
|
|
|
|
|
|
"awsAccessKeyId": "AWS 存取金鑰 ID",
|
|
|
|
|
|
"awsSecretAccessKey": "AWS Secret Access Key",
|
|
|
|
|
|
"awsRegion": "AWS 區域",
|
|
|
|
|
|
"selectRegion": "選擇區域",
|
|
|
|
|
|
"apiKey": "API 金鑰",
|
|
|
|
|
|
"enterApiKey": "輸入您的 API 金鑰",
|
|
|
|
|
|
"enterSecretKey": "輸入您的 Secret Key",
|
|
|
|
|
|
"baseUrl": "基礎 URL",
|
|
|
|
|
|
"optional": "(可選)",
|
|
|
|
|
|
"baseUrlWithExample": "基礎 URL(可選,例如 {example})",
|
|
|
|
|
|
"customEndpoint": "自訂端點 URL",
|
feat: Add support for Chinese AI providers (GLM, Qwen, Kimi, MiniMax, Qiniu)
* feat: Add support for Chinese AI providers (GLM, Qwen, Kimi, MiniMax, Qiniu)
- Add minimax, glm, qwen, qiniu, kimi to ProviderName type
- Add provider configurations to PROVIDER_INFO with default base URLs
- Add suggested models for MiniMax in SUGGESTED_MODELS
- Add minimax/glm/qwen/qiniu/kimi cases to getAIModel using OpenAI-compatible SDK
- Update ALLOWED_CLIENT_PROVIDERS and error messages
- Add environment variable examples to env.example
Fixes: MiniMax API compatibility issue (invalid chat setting 2013)
* fix: Add missing providers to PROVIDER_ENV_VARS type
* fix: Handle null case in PROVIDER_ENV_VARS for new providers
* fix: Add minimax/glm/qwen/kimi/qiniu support to validate-model API
- Add getDefaultBaseUrl helper function
- Add validation cases for new providers in validate-model route
* fix: Add new providers to buildProviderOptions switch case
* fix: Merge multiple system messages into one for minimax/glm/qwen/kimi/qiniu
MiniMax API doesn't support multiple system messages.
This fix combines them into a single message for Chinese providers.
* fix: Handle null provider in system message check
* debug: Add logging for allMessages count
* fix: Use effective provider (including env var fallback) for isSingleSystemProvider check
* fix: apply biome formatting (line-wrapping)
* docs: add Chinese AI providers documentation (MiniMax, GLM, Qwen, Kimi, Qiniu)
- Add i18n translations for new providers in all language dictionaries
- Add provider configuration documentation in en/cn/ja docs
* fix: 改进 PR #722 的代码审查反馈
1. 删除重复的 getDefaultBaseUrl 函数,改用 model-config.ts 的 PROVIDER_INFO
2. validate-model 路由改用 AI SDK 的 createOpenAI + generateText
3. 修复 resolveBaseURL 回退逻辑,传入 PROVIDER_INFO 的 defaultBaseUrl
4. 删除无用的 .bak 备份文件
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* fix: 修正中国 AI provider 端点配置
- qiniu: api.qiniucdn.com → api.qnaigc.com
- qwen: dashscope.aliyun.com → dashscope.aliyuncs.com
- 更新 env.example 文档链接
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* feat: MiniMax 使用 Anthropic 兼容 API
- MiniMax 改用 createAnthropic (而非 createOpenAI)
- 支持 api.minimax.io/anthropic 和 api.minimaxi.com/anthropic
- 合并多个 system 消息为单个 (MiniMax/GLM/Qwen/Kimi/Qiniu)
- 更新默认模型为 MiniMax-M2.5 系列
- 支持 MINIMAX_BASE_URL 环境变量配置
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* docs: 更新 MiniMax 文档
- 添加 Anthropic 兼容 API 说明
- 更新默认模型为 MiniMax-M2.5
- 添加国际版/中国大陆版配置示例
- 更新 env.example 注释
Co-authored-by: Shinyi <shinyi@openclaw.ai>
* fix: 完善 MiniMax 双端点支持及问题修复
- 支持 MiniMax Anthropic 兼容端点和 OpenAI 兼容端点自动切换
- 修正默认端点为 api.minimaxi.com (中国大陆可用)
- 修复端点路径缺少 /v1 的问题
- 添加前端 MiniMax logo 映射
- 移除调试日志
- 修正 env.example 默认配置
* chore: clean backup artifacts and align biome formatting
* fix: resolve effectiveProvider bug, deduplicate MiniMax URL logic, fix docs
- Fix critical bug: effectiveProvider was empty during auto-detection,
causing multi-system-message to be sent to MiniMax (which rejects it).
Now uses resolved provider from getAIModel instead of re-deriving it.
- Extract normalizeMiniMaxBaseURL() shared helper to eliminate duplication
between ai-providers.ts and validate-model/route.ts
- Add guard for undefined MiniMax baseURL to prevent hitting api.anthropic.com
- Fix docs: mark China mainland URL as default (matches code behavior)
- Restructure minimax/glm/qwen/kimi/qiniu validation to use shared pattern
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: document MiniMax dual API formats in docs and UI
- Add hint below Base URL input when MiniMax is selected, explaining
Anthropic-compatible (/anthropic) vs OpenAI-compatible (/v1) endpoints
- Update all 3 ai-providers docs (en/cn/ja) to list all 4 endpoint options
(China/International × Anthropic/OpenAI)
- Add i18n translations for the hint in all 4 locales
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* refactor: deduplicate PROVIDER_LOGO_MAP, remove unnecessary optional chaining
- Extract PROVIDER_LOGO_MAP to lib/types/model-config.ts (was duplicated
in model-config-dialog.tsx and model-selector.tsx)
- Remove unnecessary ?. on PROVIDER_INFO.minimax (it's a full Record)
---------
Co-authored-by: msga-oc <msga-oc@gitea.misakiga.top>
Co-authored-by: Shinyi <shinyi@openclaw.ai>
Co-authored-by: dayuan.jiang <jdy.toh@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:53:47 +08:00
|
|
|
|
"minimaxBaseUrlHint": "使用 /anthropic 端點為 Anthropic 相容 API(推薦),或使用 /v1 端點為 OpenAI 相容 API",
|
2026-07-12 08:10:12 +08:00
|
|
|
|
"mimoBaseUrlHint": "預設地址適用於按量付費金鑰(sk-...)。Token Plan 訂閱用戶(tp-... 金鑰)請設定為 https://token-plan-cn.xiaomimimo.com/v1",
|
2026-01-27 13:21:20 +09:00
|
|
|
|
"models": "模型",
|
|
|
|
|
|
"customModelId": "自訂模型 ID...",
|
|
|
|
|
|
"allAdded": "已全部新增",
|
|
|
|
|
|
"suggested": "推薦",
|
|
|
|
|
|
"noModelsConfigured": "尚未配置模型",
|
|
|
|
|
|
"modelIdEmpty": "模型 ID 不能為空",
|
|
|
|
|
|
"modelIdExists": "此模型 ID 已存在",
|
|
|
|
|
|
"configureProviders": "配置 AI 提供商",
|
|
|
|
|
|
"selectProviderHint": "從列表中選擇提供商或新增以配置 API 金鑰和模型",
|
|
|
|
|
|
"deleteConfirmDesc": "確定要刪除 {name} 嗎?這將移除所有配置的模型且無法復原。",
|
|
|
|
|
|
"typeToConfirm": "輸入「{name}」以確認",
|
|
|
|
|
|
"typeProviderName": "輸入提供商名稱...",
|
|
|
|
|
|
"modelsConfiguredCount": "已配置 {count} 個模型",
|
|
|
|
|
|
"validationFailedCount": "{count} 個模型驗證失敗",
|
|
|
|
|
|
"cancel": "取消",
|
|
|
|
|
|
"delete": "刪除",
|
|
|
|
|
|
"clickToChange": "(點擊變更)",
|
|
|
|
|
|
"usingServerDefault": "使用伺服器預設模型",
|
|
|
|
|
|
"selectModel": "選擇模型",
|
|
|
|
|
|
"searchModels": "搜尋模型...",
|
|
|
|
|
|
"noVerifiedModels": "沒有已驗證的模型。請先測試您的模型。",
|
|
|
|
|
|
"noModelsFound": "未找到模型。",
|
|
|
|
|
|
"default": "預設",
|
|
|
|
|
|
"serverDefault": "伺服器預設",
|
|
|
|
|
|
"serverModels": "伺服器模型",
|
|
|
|
|
|
"userModels": "使用者模型",
|
|
|
|
|
|
"configureModels": "配置模型...",
|
|
|
|
|
|
"onlyVerifiedShown": "僅顯示已驗證的模型",
|
|
|
|
|
|
"showUnvalidatedModels": "顯示未驗證的模型",
|
|
|
|
|
|
"allModelsShown": "顯示所有模型(包括未驗證的)",
|
|
|
|
|
|
"unvalidatedModelWarning": "此模型尚未驗證",
|
feat: add file-based admin settings panel at /admin (#866)
* feat: add file-based admin settings panel at /admin
Settings saved in the panel are written to data/settings.json and
overlaid onto process.env, taking precedence over environment
variables and applying immediately without restart. Enable by setting
ADMIN_PASSWORD; on serverless platforms without persistent disk the
panel degrades to read-only.
* polish: admin panel UI improvements
- Provider logos in credential rows (shared ProviderLogo component,
extracted from model-config-dialog)
- Scroll-spy active state in the sidebar nav
- Green success state in the save bar that clears after a few seconds
- Wider content column (max-w-6xl) for less wasted space on desktop
* polish: admin panel section toggles and reorder
- Move Quota & Rate Limits to the end of the settings page
- Add enable switches to Observability and Quota sections; default off
with fields grayed out, auto-on when any field is already configured
* polish: make section enable switch more visible
Wrap the switch in a labeled pill ('Enabled'/'Disabled') with border
and background so the off state is clearly visible.
* refactor: derive admin registry from PROVIDER_INFO, simplify page state
- Provider options, labels, and base-URL placeholders now come from
PROVIDER_INFO instead of hand-copied lists (fixes SiliconFlow .com/.cn
placeholder drift; panel names now match the model-config dialog)
- Replace free-text subgroup strings + SUBGROUP_PROVIDERS reverse map
with a typed provider field on SettingDef
- Precompute SETTINGS_BY_GROUP and PROVIDER_SUBGROUPS at module level
- Merge justSaved into saveMessage, drop unused mainRef, hoist
fetchSettings out of the component, dedupe savedText logic
- Serialize from SETTINGS_REGISTRY directly; json validators in a map
instead of a hardcoded key check
- Make allowPrivateUrls a function so ALLOW_PRIVATE_URLS edits in the
admin panel apply without restart
* feat: graphical model management in admin panel
Replace the provider credential fields and raw AI_MODELS_CONFIG JSON
textarea with a Models section mirroring the in-app model settings UI:
provider instance list with logos, credential fields per provider type,
model add/remove with suggestions, per-model connectivity test, and a
default-provider star.
On save the server derives everything the runtime needs into
settings.json: credential env vars (with _2 suffixes for multiple
instances of one provider), AI_MODELS_CONFIG, and AI_PROVIDER/AI_MODEL
for the default. Secrets round-trip as masked markers and are never
sent back to the browser. The general settings registry now only
covers non-provider settings (generation, access, features,
observability, quota).
* fix: allow testing unsaved providers in admin panel
The test button previously looked up credentials by providerId in the
saved settings, so testing a newly added (unsaved) provider failed with
'Unknown provider or model'. The test endpoint now accepts the client's
current provider state; newly typed secrets are used as-is and masked
markers are resolved against the stored values, so testing works both
before and after saving.
* fix: merge env AI_MODELS_CONFIG with admin panel providers
Previously, saving in the admin panel wrote a complete AI_MODELS_CONFIG
into settings.json, which (by overlay precedence) replaced any config
from .env or ai-models.json — admins lost their env-configured models.
The panel no longer writes AI_MODELS_CONFIG. Instead its providers are
merged with the env baseline at read time in loadRawServerModelsConfig,
and panel credentials go to ADMIN_-prefixed env vars wired up via
apiKeyEnv/baseUrlEnv so they never shadow standard vars. Env-based
providers now appear read-only in the panel, name clashes are rejected,
and a panel default overrides the env default. data/ is now gitignored.
* fix: block global-credential providers already managed via env
Bedrock, Vertex AI, and Ollama credentials live in fixed env vars with
no apiKeyEnv redirection, so a panel instance of one of these would
silently override the credentials that env-configured models rely on.
The API now rejects saving such a provider when the env config already
uses that type, and the Add Provider dropdown disables it with a
'managed via env' note.
* fix: address admin panel review findings
- Security: test-model no longer resolves a stored secret when the
request's baseUrl/provider differs from the stored entry, closing a
path where a tampered baseUrl could exfiltrate a saved key
- Save failures are now visible: the save bar shows the error in red
(was masked by the persistent 'Unsaved changes' text), and per-field
validation errors from the settings API are surfaced under each field
- The Observability/Quota enable switch is now real: toggling off stages
deletion of the group's saved values, and the toggle no longer snaps
back to Enabled after saving
- Env provider's default star is hidden when a panel provider is the
active default (no more double star)
- Clearing a credential field reverts to the stored value instead of
silently deleting it; an explicit X button removes a stored secret
- Form inputs are disabled during an in-flight save
* refactor(admin): split 1549-line admin page into focused modules
Extract admin-shared.ts (types + fetch helper), setting-field.tsx
(registry-driven fields), and models-section.tsx (provider/model
manager) from page.tsx. Pure mechanical move, no behavior change.
* feat(admin): share credential fields with user dialog and localize panel
Extract ProviderCredentialsFields (display name + per-provider
credential inputs) used by both the user ModelConfigDialog and the
admin Models panel; secret input passed via renderSecret (plaintext
vs masked), test button via footer slot. Add full i18n for the admin
panel across en/zh/ja/zh-Hant, reusing modelConfig.* for shared parts.
* fix(admin): address Copilot review findings
- Reflect built-in defaults for boolean settings (ALLOW_PRIVATE_URLS
defaults on) and allow clearing a saved boolean back to default,
so the SSRF toggle matches actual runtime behavior.
- Harden JSON loading: filter settings values to strings only, and
schema-validate stored ADMIN_PROVIDERS entries, dropping malformed
ones instead of letting them reach runtime code.
- Set beforeunload returnValue so the unsaved-changes prompt shows in
all browsers; reject non-finite numbers in settings validation.
- Fix README/CN/JA docs that claimed the panel auto-generates
AI_MODELS_CONFIG (providers are merged at read time, not written).
- Add unit tests for corrupted-file value filtering and provider
schema validation.
* docs: move admin panel details to dedicated docs/{en,cn,ja}/admin-panel.md
The READMEs now carry a short blurb + link, matching the existing
per-topic docs (docker.md, ai-providers.md, ...). Removes the ~22-line
inline section and the duplicated data/settings.json mentions.
* fix(admin): address follow-up Copilot findings on the prior fixes
- loadAdminProviders now validates against a stored-shape schema where
secrets are plain strings, so a hand-edited ADMIN_PROVIDERS holding an
{isSet} marker is dropped instead of later crashing maskSecret().
- loadSettings guards against array values (typeof [] === 'object'),
which would otherwise overlay numeric keys onto process.env.
- Admin SecretInput uses the bare id so the shared component's
<Label htmlFor> stays associated (only one ProviderDetail mounts).
- Add tests: marker-secret rejection, array-values guard, bedrock
multi-secret round-trip.
2026-06-15 00:40:35 +09:00
|
|
|
|
"serverDefaultModel": "伺服器預設模型",
|
|
|
|
|
|
"showValue": "顯示值",
|
|
|
|
|
|
"hideValue": "隱藏值"
|
|
|
|
|
|
},
|
|
|
|
|
|
"admin": {
|
|
|
|
|
|
"title": "管理員設定",
|
|
|
|
|
|
"loginPrompt": "輸入管理員密碼(即 ADMIN_PASSWORD 環境變數)以管理伺服器設定。",
|
|
|
|
|
|
"password": "密碼",
|
|
|
|
|
|
"signIn": "登入",
|
|
|
|
|
|
"signingIn": "正在登入…",
|
|
|
|
|
|
"loginFailed": "登入失敗",
|
|
|
|
|
|
"precedence": "檔案覆蓋環境變數 · 環境變數覆蓋預設值",
|
|
|
|
|
|
"notWritable": "此部署環境下設定檔不可寫入(無伺服器平台沒有持久化磁碟)。設定以唯讀方式顯示——請改用環境變數進行設定。",
|
|
|
|
|
|
"settingGroups": "設定分組",
|
|
|
|
|
|
"enabled": "已啟用",
|
|
|
|
|
|
"disabled": "已停用",
|
|
|
|
|
|
"enableGroup": "啟用 {group}",
|
|
|
|
|
|
"unsavedChanges": "有未儲存的變更",
|
|
|
|
|
|
"saved": "設定已儲存,變更立即生效。",
|
|
|
|
|
|
"saveFailed": "儲存失敗。請檢查網路連線後重試。",
|
|
|
|
|
|
"invalidSettings": "部分設定無效。",
|
|
|
|
|
|
"discard": "捨棄",
|
|
|
|
|
|
"saveChanges": "儲存變更",
|
|
|
|
|
|
"saving": "正在儲存…",
|
|
|
|
|
|
"sourceSaved": "已儲存",
|
|
|
|
|
|
"sourceEnv": "環境變數",
|
|
|
|
|
|
"sourceSavedTitle": "在管理員設定檔中設定",
|
|
|
|
|
|
"sourceEnvTitle": "透過環境變數設定",
|
|
|
|
|
|
"restartRequired": "需要重新啟動",
|
|
|
|
|
|
"modified": "已修改",
|
|
|
|
|
|
"notSet": "未設定",
|
|
|
|
|
|
"savedReplace": "已儲存({hint})——輸入以取代",
|
|
|
|
|
|
"showValue": "顯示值",
|
|
|
|
|
|
"hideValue": "隱藏值",
|
|
|
|
|
|
"removeValue": "移除值",
|
|
|
|
|
|
"removeValueTitle": "移除已儲存的值",
|
|
|
|
|
|
"resetToDefault": "重設為預設",
|
|
|
|
|
|
"models": "模型",
|
|
|
|
|
|
"modelsDescription": "面向所有使用者的伺服器端 provider 與模型——無需個人 API 金鑰。當使用者未選擇模型時,使用預設 provider 的第一個模型。",
|
|
|
|
|
|
"addProviderHint": "新增一個 provider,為所有使用者提供伺服器端模型。",
|
|
|
|
|
|
"selectProviderHint": "選擇或新增一個 provider 以設定其憑證和模型。",
|
|
|
|
|
|
"addProviderToOfferModels": "至少新增一個模型,才能向使用者開放此 provider。",
|
|
|
|
|
|
"managedViaEnv": "(透過環境變數管理)",
|
|
|
|
|
|
"envReadOnly": "在 AI_MODELS_CONFIG / ai-models.json 中定義——此處唯讀。請編輯環境設定以變更。",
|
|
|
|
|
|
"defaultModel": "預設模型",
|
|
|
|
|
|
"noModelsConfigured": "未設定模型",
|
|
|
|
|
|
"modelCount": "{count} 個模型",
|
|
|
|
|
|
"modelCountPlural": "{count} 個模型",
|
|
|
|
|
|
"default": "預設",
|
|
|
|
|
|
"setAsDefault": "設為預設 provider",
|
|
|
|
|
|
"defaultProvider": "預設 provider",
|
|
|
|
|
|
"modelIdPlaceholder": "模型 ID…",
|
|
|
|
|
|
"addModel": "新增模型",
|
|
|
|
|
|
"suggested": "推薦",
|
|
|
|
|
|
"test": "測試",
|
|
|
|
|
|
"testOk": "正常({ms} 毫秒)",
|
|
|
|
|
|
"testFailed": "失敗",
|
|
|
|
|
|
"removeModel": "移除 {model}",
|
|
|
|
|
|
"deleteProviderTitle": "刪除 {name}?",
|
|
|
|
|
|
"deleteProviderDesc": "儲存後,其憑證和模型將從伺服器上移除。",
|
|
|
|
|
|
"cancel": "取消",
|
|
|
|
|
|
"delete": "刪除",
|
|
|
|
|
|
"groups": {
|
|
|
|
|
|
"generation": {
|
|
|
|
|
|
"title": "生成",
|
|
|
|
|
|
"description": "套用於所有聊天請求的輸出參數。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"access": {
|
|
|
|
|
|
"title": "存取控制",
|
|
|
|
|
|
"description": "限制誰可以使用此部署。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"features": {
|
|
|
|
|
|
"title": "功能",
|
|
|
|
|
|
"description": "選用功能和安全開關。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"observability": {
|
|
|
|
|
|
"title": "可觀測性",
|
|
|
|
|
|
"description": "對 LLM 呼叫進行 Langfuse 追蹤。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"quota": {
|
|
|
|
|
|
"title": "配額與速率限制",
|
|
|
|
|
|
"description": "按 IP 的用量限制。強制執行需要 DynamoDB 表。"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"settings": {
|
|
|
|
|
|
"TEMPERATURE": {
|
|
|
|
|
|
"label": "溫度",
|
|
|
|
|
|
"description": "對於拒絕溫度參數的推理模型,請留空。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"MAX_OUTPUT_TOKENS": {
|
|
|
|
|
|
"label": "最大輸出 token 數"
|
|
|
|
|
|
},
|
|
|
|
|
|
"ACCESS_CODE_LIST": {
|
|
|
|
|
|
"label": "存取碼",
|
|
|
|
|
|
"description": "以逗號分隔的清單。使用者需輸入其中之一才能聊天。留空 = 開放存取。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"ENABLE_VLM_VALIDATION": {
|
|
|
|
|
|
"label": "VLM 圖表驗證",
|
|
|
|
|
|
"description": "使用視覺模型對產生的圖表進行視覺化驗證。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"VALIDATION_MODEL": {
|
|
|
|
|
|
"label": "驗證模型",
|
|
|
|
|
|
"description": "留空時回退到預設 AI 模型。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"VALIDATION_TIMEOUT": {
|
|
|
|
|
|
"label": "驗證逾時(毫秒)"
|
|
|
|
|
|
},
|
|
|
|
|
|
"ENABLE_HISTORY_XML_REPLACE": {
|
|
|
|
|
|
"label": "歷史 XML 壓縮",
|
|
|
|
|
|
"description": "用占位符取代歷史記錄中的舊圖表 XML。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"ALLOW_PRIVATE_URLS": {
|
|
|
|
|
|
"label": "允許私有 URL",
|
|
|
|
|
|
"description": "關閉以阻擋對私有 IP 和內部主機名的請求(SSRF 防護)。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"LANGFUSE_PUBLIC_KEY": {
|
|
|
|
|
|
"label": "Langfuse Public Key"
|
|
|
|
|
|
},
|
|
|
|
|
|
"LANGFUSE_SECRET_KEY": {
|
|
|
|
|
|
"label": "Langfuse Secret Key"
|
|
|
|
|
|
},
|
|
|
|
|
|
"LANGFUSE_BASEURL": {
|
|
|
|
|
|
"label": "Langfuse Base URL"
|
|
|
|
|
|
},
|
|
|
|
|
|
"DAILY_REQUEST_LIMIT": {
|
|
|
|
|
|
"label": "每日請求上限",
|
|
|
|
|
|
"description": "每個 IP 每天。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"DAILY_TOKEN_LIMIT": {
|
|
|
|
|
|
"label": "每日 token 上限",
|
|
|
|
|
|
"description": "每個 IP 每天。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"TPM_LIMIT": {
|
|
|
|
|
|
"label": "每分鐘 token 數"
|
|
|
|
|
|
},
|
|
|
|
|
|
"DYNAMODB_QUOTA_TABLE": {
|
|
|
|
|
|
"label": "DynamoDB 表",
|
|
|
|
|
|
"description": "留空時配額強制執行被停用。"
|
|
|
|
|
|
},
|
|
|
|
|
|
"DYNAMODB_REGION": {
|
|
|
|
|
|
"label": "DynamoDB 區域"
|
|
|
|
|
|
},
|
|
|
|
|
|
"QUOTA_TIMEZONE": {
|
|
|
|
|
|
"label": "配額時區",
|
|
|
|
|
|
"description": "每日重置邊界所用的時區。"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-01-27 13:21:20 +09:00
|
|
|
|
}
|
|
|
|
|
|
}
|