mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-02 14:22:28 +08:00
* feat: add multi-provider model configuration - Add model config dialog for managing multiple AI providers - Support for OpenAI, Anthropic, Google, Azure, Bedrock, OpenRouter, DeepSeek, SiliconFlow, Ollama, and AI Gateway - Add model selector dropdown in chat panel header - Add API key validation endpoint - Add custom model ID input with keyboard navigation - Fix hover highlight in Command component - Add suggested models for each provider including latest Claude 4.5 series - Store configuration locally in browser * feat: improve model config UI and move selector to chat input - Move model selector from header to chat input (left of send button) - Add per-model validation status (queued, running, valid, invalid) - Filter model selector to only show verified models - Add editable model IDs in config dialog - Add custom model input field alongside suggested models dropdown - Fix hover states on provider buttons and select triggers - Update OpenAI suggested models with GPT-5 series - Add alert-dialog component for delete confirmation * refactor: revert shadcn component changes, apply hover fix at usage site * feat: add AWS credentials support for Bedrock provider - Add AWS Access Key ID, Secret Access Key, Region fields for Bedrock - Show different credential fields based on provider type - Update validation API to handle Bedrock with AWS credentials - Add region selector with common AWS regions * fix: reset Test button after validation completes * fix: reset validation button to Test after success * fix: complete bedrock support and UI/UX improvements - Add bedrock to ALLOWED_CLIENT_PROVIDERS for client credentials - Pass AWS credentials through full chain (headers → API → provider) - Replace non-existent GPT-5 models with real ones (o1, o3-mini) - Add accessibility: aria-labels, focus-visible rings, inline errors - Add more AWS regions (Ohio, London, Paris, Mumbai, Seoul, São Paulo) - Fix setTimeout cleanup with useRef on component unmount - Fix TypeScript type consistency in getSelectedAIConfig fallback * chore: remove unused code - Remove unused setAccessCodeRequired state in chat-panel.tsx - Remove unused getSelectedModel export in model-config.ts * fix: UI/UX improvements for model configuration dialog - Add gradient header styling with icon badge - Change Configuration section icon from Key to Settings2 - Add duplicate model detection with warning banner and inline removal - Filter out already-added models from suggestions dropdown - Add type-to-confirm for deleting providers with 3+ models - Enhance delete confirmation dialog with warning icon - Improve model selector discoverability (show model name + chevron) - Add truncation for long model names with title tooltip - Remove AI provider settings from Settings dialog (now in Model Config) - Extract ValidationButton into reusable component * fix: prevent duplicate model IDs within same provider - Block adding model if ID already exists in provider - Block editing model ID to match existing model in provider * fix: improve duplicate model ID notifications - Add toast notification when trying to add duplicate model - Allow free typing when editing model ID, validate on blur - Show warning toast instead of blocking input * fix: improve duplicate model validation UX in config dialog - Add inline error display for duplicate model IDs - Show red border on input when error exists - Validate on blur with shake animation for edit errors - Prevent saving empty model names - Clear errors when user starts typing - Simplify error styling (small red text, no heavy chips)
204 lines
8.7 KiB
JSON
204 lines
8.7 KiB
JSON
{
|
||
"common": {
|
||
"save": "保存",
|
||
"cancel": "取消",
|
||
"close": "关闭",
|
||
"confirm": "确认",
|
||
"clear": "清除",
|
||
"edit": "编辑",
|
||
"delete": "删除",
|
||
"loading": "加载中...",
|
||
"new": "新建"
|
||
},
|
||
"nav": {
|
||
"about": "关于",
|
||
"editor": "编辑器",
|
||
"newChat": "开始新对话",
|
||
"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"
|
||
},
|
||
"chat": {
|
||
"placeholder": "描述您的图表或上传文件...",
|
||
"send": "发送",
|
||
"sending": "发送中...",
|
||
"sendMessage": "发送消息",
|
||
"clearConversation": "清除对话",
|
||
"diagramHistory": "图表历史",
|
||
"saveDiagram": "保存图表",
|
||
"uploadFile": "上传文件(图片、PDF、文本)",
|
||
"minimalStyle": "简约",
|
||
"styledMode": "精致",
|
||
"minimalTooltip": "使用简约模式以加快生成速度(无颜色)",
|
||
"regenerate": "重新生成响应",
|
||
"copyResponse": "复制响应",
|
||
"copied": "已复制!",
|
||
"failedToCopy": "复制失败",
|
||
"goodResponse": "有帮助",
|
||
"badResponse": "无帮助",
|
||
"clickToEdit": "点击编辑",
|
||
"editMessage": "编辑消息",
|
||
"saveAndSubmit": "保存并提交"
|
||
},
|
||
"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 服务器",
|
||
"mcpDescription": "在 Claude Desktop、VS Code 和 Cursor 中使用",
|
||
"preview": "预览"
|
||
},
|
||
"settings": {
|
||
"title": "设置",
|
||
"description": "配置您的应用程序设置。",
|
||
"accessCode": "访问码",
|
||
"accessCodePlaceholder": "输入访问码",
|
||
"accessCodeDescription": "使用此应用程序需要访问码。",
|
||
"aiProvider": "AI 提供商设置",
|
||
"aiProviderDescription": "使用您自己的 API 密钥来绕过使用限制。您的密钥仅存储在浏览器本地,不会存储在服务器上。",
|
||
"provider": "提供商",
|
||
"modelId": "模型 ID",
|
||
"apiKey": "API 密钥",
|
||
"apiKeyPlaceholder": "您的 API 密钥",
|
||
"baseUrl": "基础 URL(可选)",
|
||
"customEndpoint": "自定义端点 URL",
|
||
"overrides": "覆盖",
|
||
"clearSettings": "清除设置",
|
||
"useServerDefault": "使用服务器默认值",
|
||
"theme": "主题",
|
||
"themeDescription": "界面和 DrawIO 画布的深色/浅色模式。",
|
||
"drawioStyle": "DrawIO 样式",
|
||
"drawioStyleDescription": "画布样式:",
|
||
"switchTo": "切换到",
|
||
"minimal": "简约",
|
||
"sketch": "草图",
|
||
"closeProtection": "关闭确认",
|
||
"closeProtectionDescription": "离开页面时显示确认。"
|
||
},
|
||
"save": {
|
||
"title": "保存图表",
|
||
"description": "选择格式和文件名以保存您的图表。",
|
||
"format": "格式",
|
||
"filename": "文件名",
|
||
"filenamePlaceholder": "输入文件名",
|
||
"formats": {
|
||
"drawio": "Draw.io XML",
|
||
"png": "PNG 图片",
|
||
"svg": "SVG 图片"
|
||
}
|
||
},
|
||
"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})。请手动重试。",
|
||
"validationFailed": "图表验证失败。请尝试重新生成。",
|
||
"malformedXml": "AI 生成的图表 XML 无效。请尝试重新生成。",
|
||
"failedToProcess": "无法处理图表。请尝试重新生成。",
|
||
"sessionCorrupted": "会话数据已损坏。重新开始。",
|
||
"failedToSave": "无法保存消息到 localStorage",
|
||
"failedToRestore": "无法从 localStorage 恢复",
|
||
"failedToPersist": "卸载前无法持久化状态",
|
||
"failedToExport": "获取图表数据时出错",
|
||
"failedToLoadExample": "加载示例图片时出错"
|
||
},
|
||
"quota": {
|
||
"dailyLimit": "已达每日配额",
|
||
"tokenLimit": "已达每日令牌限制",
|
||
"tpmLimit": "速率限制",
|
||
"tpmMessage": "请求过多。请稍等片刻。",
|
||
"messageApi": "糟糕 — 您已达到此演示的每日 API 限制!作为一名独立开发者,我自己承担所有 API 费用,因此必须设置这些限制以保持可持续性。",
|
||
"messageToken": "糟糕 — 您已达到此演示的每日令牌限制!作为一名独立开发者,我自己承担所有 API 费用,因此必须设置这些限制以保持可持续性。",
|
||
"tip": "<strong>提示:</strong>您可以使用自己的 API 密钥(点击设置图标)或自托管项目来绕过这些限制。",
|
||
"reset": "您的限制将在明天重置。感谢您的理解!",
|
||
"selfHost": "自托管",
|
||
"sponsor": "赞助",
|
||
"learnMore": "了解更多 →",
|
||
"usedOf": "{used}/{limit}"
|
||
},
|
||
"tools": {
|
||
"generateDiagram": "生成图表",
|
||
"editDiagram": "编辑图表",
|
||
"appendDiagram": "继续图表",
|
||
"complete": "完成",
|
||
"error": "错误",
|
||
"truncated": "已截断"
|
||
},
|
||
"file": {
|
||
"reading": "读取中...",
|
||
"chars": "字符",
|
||
"removeFile": "移除文件"
|
||
},
|
||
"reasoning": {
|
||
"thinking": "思考中...",
|
||
"thoughtFor": "思考了 {duration} 秒",
|
||
"thoughtBrief": "思考了几秒钟"
|
||
},
|
||
"about": {
|
||
"modelChange": "模型变更与用量限制",
|
||
"walletCrying": "(别名:我的钱包顶不住了)",
|
||
"seekingSponsorship": "寻求赞助(求大佬捞一把)",
|
||
"contactMe": "联系我",
|
||
"usageNotice": "由于使用量过高,我已将模型从 Claude 更换为 minimax-m2,并设置了一些用量限制。详情请查看关于页面。"
|
||
},
|
||
"modelConfig": {
|
||
"title": "AI 模型配置",
|
||
"description": "配置多个 AI 提供商和模型",
|
||
"configure": "配置",
|
||
"addProvider": "添加提供商",
|
||
"addModel": "添加模型",
|
||
"modelId": "模型 ID",
|
||
"modelLabel": "显示名称",
|
||
"streaming": "启用流式输出",
|
||
"deleteProvider": "删除提供商",
|
||
"deleteModel": "删除模型",
|
||
"noModels": "尚未配置模型。添加模型以开始使用。",
|
||
"selectProvider": "选择一个提供商或添加新的",
|
||
"configureMultiple": "配置多个 AI 提供商并轻松切换",
|
||
"apiKeyStored": "API 密钥存储在您的浏览器本地",
|
||
"test": "测试",
|
||
"validationError": "验证失败",
|
||
"addModelFirst": "请先添加至少一个模型以进行验证"
|
||
}
|
||
}
|