浏览代码

添加了模型管理和提示词管理的格式化

kagg886 1 月之前
父节点
当前提交
1f53558ad5

+ 253 - 0
src/i18n/pages/assistant/en.ts

@@ -0,0 +1,253 @@
+// 定义内容
+export default {
+	sidebar: {
+		conversationHistory: 'Conversation History',
+		bookmark: 'Bookmarks',
+		createConversation: 'Create Conversation',
+	},
+	settings: {
+		autoRecordToolCalls: 'Auto-record tool calls for new conversations',
+		modelManagement: 'Model Management',
+		promptManagement: 'Prompt Management',
+		conversationManagement: 'Conversation Management',
+		cancelSelection: 'Cancel Selection',
+		deleteSelected: 'Delete Selected',
+	},
+	buttons: {
+		more: 'More Actions',
+		export: 'Export',
+		edit: 'Edit',
+		delete: 'Delete',
+		confirm: 'Confirm Changes',
+		cancel: 'Cancel Edit',
+		retry: 'Retry',
+		search: 'Search',
+		reset: 'Reset',
+		confirmDialog: 'Confirm',
+		cancelDialog: 'Cancel',
+	},
+	status: {
+		noModelConfigured: 'No Model Configured',
+		loading: 'Loading',
+		noPromptConfigured: 'No Prompt Configured',
+		aiThinking: 'AI is thinking...',
+		uploading: 'Please wait for upload to complete',
+		uploadProgress: 'Release mouse to upload files...',
+		clickToUpload: 'Click + on the right to upload files',
+	},
+	messages: {
+		replaceMessageWarning: 'Replacing the message will modify the bookmarked content. Do you want to continue?',
+		messageSaveFailed: 'Message save failed. Switching conversations will cause message history to be lost',
+		deleteSuccess: 'Delete successful',
+		selectConversationsToDelete: 'Please select conversations to delete',
+		deleteConfirm: 'Are you sure you want to delete the selected {count} conversations? This action cannot be undone!',
+		warning: 'Warning',
+		prompt: 'Prompt',
+	},
+	placeholders: {
+		inputQuestion: 'Please enter your question...',
+		searchBookmarks: 'Search bookmarked messages...',
+		customPrompt: 'Write your prompt here... (will be used as system prompt for this session)',
+	},
+	empty: {
+		noBookmarks: 'No Bookmarked Messages',
+		noBookmarksDescription: 'You have not bookmarked any conversation messages yet',
+		startNewConversation: 'Start a New Conversation',
+		tryTheseQuestions: 'Try these questions:',
+		bookmarkTip1: 'Click the ⭐ button in conversations to bookmark messages',
+		bookmarkTip2: 'Bookmarked messages support keyword search',
+		bookmarkTip3: 'Bookmarked messages are saved in the cloud and will never be lost',
+	},
+	examples: {
+		deviceStatus: 'Help me check device status and alarm information',
+		userPermissions: 'Analyze user permission configuration and role assignment',
+		systemPerformance: 'Check system performance and online user statistics',
+	},
+	prompt: {
+		// Search related
+		search: {
+			keyword: 'Search Keywords',
+			title: 'Prompt Title',
+			dateRange: 'Date Range'
+		},
+		// Button related
+		buttons: {
+			search: 'Search',
+			reset: 'Reset',
+			add: 'Add Prompt',
+			batchDelete: 'Batch Delete',
+			edit: 'Edit',
+			delete: 'Delete'
+		},
+		// Table columns
+		columns: {
+			id: 'ID',
+			title: 'Title',
+			prompt: 'Prompt Content',
+			placeholder: 'Placeholder',
+			createdAt: 'Created Time',
+			updatedAt: 'Updated Time',
+			actions: 'Actions'
+		},
+		// Form related
+		form: {
+			title: 'Prompt Title',
+			prompt: 'Prompt Content',
+			placeholder: 'Placeholder'
+		},
+		// Placeholders
+		placeholders: {
+			keyword: 'Search Keywords',
+			title: 'Prompt Title',
+			startTime: 'Start Time',
+			endTime: 'End Time',
+			inputTitle: 'Please enter prompt title',
+			inputPrompt: 'Please enter prompt content',
+			inputPlaceholder: 'Please enter placeholder'
+		},
+		// Dialog
+		dialog: {
+			addTitle: 'Add Prompt',
+			editTitle: 'Edit Prompt',
+			cancel: 'Cancel',
+			confirm: 'Confirm'
+		},
+		// Messages
+		messages: {
+			selectDeleteItems: 'Please select data to delete',
+			deleteConfirm: 'Are you sure you want to delete the selected data?',
+			deleteConfirmSingle: 'Are you sure you want to delete this data?',
+			deleteSuccess: 'Delete successful',
+			deleteFailed: 'Delete failed',
+			addSuccess: 'Add successful',
+			editSuccess: 'Edit successful',
+			saveFailed: 'Save failed',
+			getListFailed: 'Failed to get prompt list',
+			getDetailFailed: 'Failed to get prompt details',
+			confirmText: 'Confirm',
+			cancelText: 'Cancel',
+			warning: 'Warning',
+			// Legacy management properties for compatibility
+			management: 'Prompt Management',
+			customPrompt: 'Custom Prompt',
+			customPromptWithCount: 'Custom Prompt ({count}) characters',
+			noPrompt: 'No Prompt'
+		},
+		// Validation rules
+		rules: {
+			titleRequired: 'Please enter prompt title',
+			promptRequired: 'Please enter prompt content'
+		}
+	},
+	file: {
+		clickToOpen: 'Click to open: {name}',
+	},
+	model: {
+		// Search related
+		search: {
+			keyword: 'Search Keywords',
+			modelClass: 'Model Class',
+			modelName: 'Model Name',
+			modelType: 'Model Type',
+			status: 'Status',
+			dateRange: 'Date Range'
+		},
+		// Button related
+		buttons: {
+			search: 'Search',
+			reset: 'Reset',
+			add: 'Add Model',
+			batchDelete: 'Batch Delete',
+			edit: 'Edit',
+			delete: 'Delete',
+			enable: 'Enable',
+			disable: 'Disable'
+		},
+		// Table columns
+		columns: {
+			id: 'ID',
+			modelName: 'Model Name',
+			modelClass: 'Model Class',
+			modelType: 'Model Type',
+			status: 'Status',
+			createdAt: 'Created Time',
+			updatedAt: 'Updated Time',
+			actions: 'Actions'
+		},
+		// Form related
+		form: {
+			modelName: 'Model Name',
+			modelClass: 'Model Class',
+			modelType: 'Model Type',
+			apiKey: 'API Key',
+			baseUrl: 'Base URL',
+			maxToken: 'Max Tokens',
+			isCallFun: 'Call Function',
+			status: 'Status'
+		},
+		// Placeholders
+		placeholders: {
+			keyword: 'Search Keywords',
+			modelClass: 'Model Class',
+			modelName: 'Model Name',
+			modelType: 'Please select model type',
+			status: 'Status',
+			startTime: 'Start Time',
+			endTime: 'End Time',
+			inputModelName: 'Please enter model name',
+			inputModelClass: 'Please enter model class',
+			inputModelType: 'Please enter model type',
+			inputApiKey: 'Please enter API key',
+			inputBaseUrl: 'Please enter base URL',
+			inputMaxToken: 'Please enter max tokens'
+		},
+		// Options
+		options: {
+			all: 'All',
+			enabled: 'Enabled',
+			disabled: 'Disabled',
+			embedding: 'Embedding',
+			chat: 'Chat Model',
+			yes: 'Yes',
+			no: 'No'
+		},
+		// Dialog
+		dialog: {
+			addTitle: 'Add Model Configuration',
+			editTitle: 'Edit Model Configuration',
+			cancel: 'Cancel',
+			confirm: 'Confirm'
+		},
+		// Messages
+		messages: {
+			selectDeleteItems: 'Please select data to delete',
+			deleteConfirm: 'Are you sure you want to delete the selected data?',
+			deleteConfirmSingle: 'Are you sure you want to delete this data?',
+			enableConfirm: 'Are you sure you want to enable this model configuration?',
+			disableConfirm: 'Are you sure you want to disable this model configuration?',
+			deleteSuccess: 'Delete successful',
+			deleteFailed: 'Delete failed',
+			enableSuccess: 'Enable successful',
+			disableSuccess: 'Disable successful',
+			enableFailed: 'Enable failed',
+			disableFailed: 'Disable failed',
+			addSuccess: 'Add successful',
+			editSuccess: 'Edit successful',
+			saveFailed: 'Save failed',
+			getListFailed: 'Failed to get model list',
+			getDetailFailed: 'Failed to get model details',
+			confirmText: 'Confirm',
+			cancelText: 'Cancel',
+			warning: 'Warning'
+		},
+		// Validation rules
+		rules: {
+			modelNameRequired: 'Please enter model name',
+			modelClassRequired: 'Please enter model class',
+			modelTypeRequired: 'Please enter model type',
+			apiKeyRequired: 'Please enter API key',
+			baseUrlRequired: 'Please enter base URL',
+			maxTokenNumber: 'Max tokens must be a number'
+		}
+	},
+};

+ 253 - 0
src/i18n/pages/assistant/zh-cn.ts

@@ -0,0 +1,253 @@
+// 定义内容
+export default {
+	sidebar: {
+		conversationHistory: '对话历史',
+		bookmark: '收藏夹',
+		createConversation: '创建对话',
+	},
+	settings: {
+		autoRecordToolCalls: '新对话自动记录工具调用',
+		modelManagement: '模型管理',
+		promptManagement: '提示词管理',
+		conversationManagement: '对话管理',
+		cancelSelection: '取消选择',
+		deleteSelected: '删除选中',
+	},
+	buttons: {
+		more: '更多操作',
+		export: '导出',
+		edit: '编辑',
+		delete: '删除',
+		confirm: '确认修改',
+		cancel: '取消编辑',
+		retry: '重试',
+		search: '搜索',
+		reset: '重置',
+		confirmDialog: '确认',
+		cancelDialog: '取消',
+	},
+	status: {
+		noModelConfigured: '未配置模型',
+		loading: '加载中',
+		noPromptConfigured: '未配置提示词',
+		aiThinking: 'AI正在思考中...',
+		uploading: '请等待上传完成',
+		uploadProgress: '松开鼠标上传文件...',
+		clickToUpload: '点击右侧+上传文件',
+	},
+	messages: {
+		replaceMessageWarning: '替换消息会导致收藏内容被修改,是否继续?',
+		messageSaveFailed: '消息保存失败,切换对话会导致消息记录丢失',
+		deleteSuccess: '删除成功',
+		selectConversationsToDelete: '请选择要删除的会话',
+		deleteConfirm: '确定要删除选中的 {count} 个会话吗?此操作不可恢复!',
+		warning: '警告',
+		prompt: '提示',
+	},
+	placeholders: {
+		inputQuestion: '请输入您的问题...',
+		searchBookmarks: '搜索收藏的消息...',
+		customPrompt: '在此编写你的提示词...(将用于本次会话的系统提示)',
+	},
+	empty: {
+		noBookmarks: '暂无收藏消息',
+		noBookmarksDescription: '您还没有收藏任何对话消息',
+		startNewConversation: '开始新的对话',
+		tryTheseQuestions: '试试这些问题:',
+		bookmarkTip1: '在对话中点击 ⭐ 按钮即可收藏消息',
+		bookmarkTip2: '收藏的消息支持关键词搜索',
+		bookmarkTip3: '收藏消息会保存在云端,永不丢失',
+	},
+	examples: {
+		deviceStatus: '帮我查看设备运行状态和告警信息',
+		userPermissions: '分析用户权限配置和角色分配情况',
+		systemPerformance: '检查系统性能和在线用户统计',
+	},
+	prompt: {
+		// 搜索相关
+		search: {
+			keyword: '搜索关键字',
+			title: '提示词标题',
+			dateRange: '时间范围'
+		},
+		// 按钮相关
+		buttons: {
+			search: '查询',
+			reset: '重置',
+			add: '新增提示词',
+			batchDelete: '批量删除',
+			edit: '编辑',
+			delete: '删除'
+		},
+		// 表格列
+		columns: {
+			id: 'ID',
+			title: '标题',
+			prompt: '提示词内容',
+			placeholder: '占位符',
+			createdAt: '创建时间',
+			updatedAt: '更新时间',
+			actions: '操作'
+		},
+		// 表单相关
+		form: {
+			title: '提示词标题',
+			prompt: '提示词内容',
+			placeholder: '占位符'
+		},
+		// 占位符
+		placeholders: {
+			keyword: '搜索关键字',
+			title: '提示词标题',
+			startTime: '开始时间',
+			endTime: '结束时间',
+			inputTitle: '请输入提示词标题',
+			inputPrompt: '请输入提示词内容',
+			inputPlaceholder: '请输入占位符'
+		},
+		// 对话框
+		dialog: {
+			addTitle: '新增提示词',
+			editTitle: '编辑提示词',
+			cancel: '取消',
+			confirm: '确定'
+		},
+		// 消息
+		messages: {
+			selectDeleteItems: '请选择要删除的数据',
+			deleteConfirm: '您确定要删除所选数据吗?',
+			deleteConfirmSingle: '您确定要删除这条数据吗?',
+			deleteSuccess: '删除成功',
+			deleteFailed: '删除失败',
+			addSuccess: '新增成功',
+			editSuccess: '编辑成功',
+			saveFailed: '保存失败',
+			getListFailed: '获取提示词列表失败',
+			getDetailFailed: '获取提示词详情失败',
+			confirmText: '确认',
+			cancelText: '取消',
+			warning: '提示',
+			// 旧的管理相关属性保留兼容性
+			management: '提示词管理',
+			customPrompt: '自定义提示词',
+			customPromptWithCount: '自定义提示词 ({count}) 字',
+			noPrompt: '不启用提示词'
+		},
+		// 验证规则
+		rules: {
+			titleRequired: '请输入提示词标题',
+			promptRequired: '请输入提示词内容'
+		}
+	},
+	file: {
+		clickToOpen: '点击打开: {name}',
+	},
+	model: {
+		// 搜索相关
+		search: {
+			keyword: '搜索关键字',
+			modelClass: '模型分类',
+			modelName: '模型名称',
+			modelType: '模型类型',
+			status: '状态',
+			dateRange: '时间范围'
+		},
+		// 按钮相关
+		buttons: {
+			search: '查询',
+			reset: '重置',
+			add: '新增模型',
+			batchDelete: '批量删除',
+			edit: '编辑',
+			delete: '删除',
+			enable: '启用',
+			disable: '禁用'
+		},
+		// 表格列
+		columns: {
+			id: 'ID',
+			modelName: '模型名称',
+			modelClass: '模型分类',
+			modelType: '模型类型',
+			status: '状态',
+			createdAt: '创建时间',
+			updatedAt: '更新时间',
+			actions: '操作'
+		},
+		// 表单相关
+		form: {
+			modelName: '模型名称',
+			modelClass: '模型分类',
+			modelType: '模型类型',
+			apiKey: 'API密钥',
+			baseUrl: '基础URL',
+			maxToken: '最大令牌数',
+			isCallFun: '调用函数',
+			status: '状态'
+		},
+		// 占位符
+		placeholders: {
+			keyword: '搜索关键字',
+			modelClass: '模型分类',
+			modelName: '模型名称',
+			modelType: '请选择模型类型',
+			status: '状态',
+			startTime: '开始时间',
+			endTime: '结束时间',
+			inputModelName: '请输入模型名称',
+			inputModelClass: '请输入模型分类',
+			inputModelType: '请输入模型类型',
+			inputApiKey: '请输入API密钥',
+			inputBaseUrl: '请输入基础URL',
+			inputMaxToken: '请输入最大令牌数'
+		},
+		// 选项
+		options: {
+			all: '全部',
+			enabled: '启用',
+			disabled: '禁用',
+			embedding: '词嵌入',
+			chat: '对话模型',
+			yes: '是',
+			no: '否'
+		},
+		// 对话框
+		dialog: {
+			addTitle: '新增模型配置',
+			editTitle: '编辑模型配置',
+			cancel: '取消',
+			confirm: '确定'
+		},
+		// 消息
+		messages: {
+			selectDeleteItems: '请选择要删除的数据',
+			deleteConfirm: '您确定要删除所选数据吗?',
+			deleteConfirmSingle: '您确定要删除这条数据吗?',
+			enableConfirm: '您确定要启用这个模型配置吗?',
+			disableConfirm: '您确定要禁用这个模型配置吗?',
+			deleteSuccess: '删除成功',
+			deleteFailed: '删除失败',
+			enableSuccess: '启用成功',
+			disableSuccess: '禁用成功',
+			enableFailed: '启用失败',
+			disableFailed: '禁用失败',
+			addSuccess: '新增成功',
+			editSuccess: '编辑成功',
+			saveFailed: '保存失败',
+			getListFailed: '获取模型列表失败',
+			getDetailFailed: '获取模型详情失败',
+			confirmText: '确认',
+			cancelText: '取消',
+			warning: '提示'
+		},
+		// 验证规则
+		rules: {
+			modelNameRequired: '请输入模型名称',
+			modelClassRequired: '请输入模型分类',
+			modelTypeRequired: '请输入模型类型',
+			apiKeyRequired: '请输入API密钥',
+			baseUrlRequired: '请输入基础URL',
+			maxTokenNumber: '最大令牌数必须为数字'
+		}
+	},
+};

+ 253 - 0
src/i18n/pages/assistant/zh-tw.ts

@@ -0,0 +1,253 @@
+// 定義內容
+export default {
+	sidebar: {
+		conversationHistory: '對話歷史',
+		bookmark: '收藏夾',
+		createConversation: '創建對話',
+	},
+	settings: {
+		autoRecordToolCalls: '新對話自動記錄工具調用',
+		modelManagement: '模型管理',
+		promptManagement: '提示詞管理',
+		conversationManagement: '對話管理',
+		cancelSelection: '取消選擇',
+		deleteSelected: '刪除選中',
+	},
+	buttons: {
+		more: '更多操作',
+		export: '導出',
+		edit: '編輯',
+		delete: '刪除',
+		confirm: '確認修改',
+		cancel: '取消編輯',
+		retry: '重試',
+		search: '搜索',
+		reset: '重置',
+		confirmDialog: '確認',
+		cancelDialog: '取消',
+	},
+	status: {
+		noModelConfigured: '未配置模型',
+		loading: '加載中',
+		noPromptConfigured: '未配置提示詞',
+		aiThinking: 'AI正在思考中...',
+		uploading: '請等待上傳完成',
+		uploadProgress: '鬆開鼠標上傳文件...',
+		clickToUpload: '點擊右側+上傳文件',
+	},
+	messages: {
+		replaceMessageWarning: '替換消息會導致收藏內容被修改,是否繼續?',
+		messageSaveFailed: '消息保存失敗,切換對話會導致消息記錄丟失',
+		deleteSuccess: '刪除成功',
+		selectConversationsToDelete: '請選擇要刪除的會話',
+		deleteConfirm: '確定要刪除選中的 {count} 個會話嗎?此操作不可恢復!',
+		warning: '警告',
+		prompt: '提示',
+	},
+	placeholders: {
+		inputQuestion: '請輸入您的問題...',
+		searchBookmarks: '搜索收藏的消息...',
+		customPrompt: '在此編寫你的提示詞...(將用於本次會話的系統提示)',
+	},
+	empty: {
+		noBookmarks: '暫無收藏消息',
+		noBookmarksDescription: '您還沒有收藏任何對話消息',
+		startNewConversation: '開始新的對話',
+		tryTheseQuestions: '試試這些問題:',
+		bookmarkTip1: '在對話中點擊 ⭐ 按鈕即可收藏消息',
+		bookmarkTip2: '收藏的消息支持關鍵詞搜索',
+		bookmarkTip3: '收藏消息會保存在雲端,永不丟失',
+	},
+	examples: {
+		deviceStatus: '幫我查看設備運行狀態和告警信息',
+		userPermissions: '分析用戶權限配置和角色分配情況',
+		systemPerformance: '檢查系統性能和在線用戶統計',
+	},
+	prompt: {
+		// 搜索相關
+		search: {
+			keyword: '搜索關鍵字',
+			title: '提示詞標題',
+			dateRange: '時間範圍'
+		},
+		// 按鈕相關
+		buttons: {
+			search: '查詢',
+			reset: '重置',
+			add: '新增提示詞',
+			batchDelete: '批量刪除',
+			edit: '編輯',
+			delete: '刪除'
+		},
+		// 表格列
+		columns: {
+			id: 'ID',
+			title: '標題',
+			prompt: '提示詞內容',
+			placeholder: '占位符',
+			createdAt: '創建時間',
+			updatedAt: '更新時間',
+			actions: '操作'
+		},
+		// 表單相關
+		form: {
+			title: '提示詞標題',
+			prompt: '提示詞內容',
+			placeholder: '占位符'
+		},
+		// 占位符
+		placeholders: {
+			keyword: '搜索關鍵字',
+			title: '提示詞標題',
+			startTime: '開始時間',
+			endTime: '結束時間',
+			inputTitle: '請輸入提示詞標題',
+			inputPrompt: '請輸入提示詞內容',
+			inputPlaceholder: '請輸入占位符'
+		},
+		// 對話框
+		dialog: {
+			addTitle: '新增提示詞',
+			editTitle: '編輯提示詞',
+			cancel: '取消',
+			confirm: '確定'
+		},
+		// 消息
+		messages: {
+			selectDeleteItems: '請選擇要刪除的數據',
+			deleteConfirm: '您確定要刪除所選數據嗎?',
+			deleteConfirmSingle: '您確定要刪除這條數據嗎?',
+			deleteSuccess: '刪除成功',
+			deleteFailed: '刪除失敗',
+			addSuccess: '新增成功',
+			editSuccess: '編輯成功',
+			saveFailed: '保存失敗',
+			getListFailed: '獲取提示詞列表失敗',
+			getDetailFailed: '獲取提示詞詳情失敗',
+			confirmText: '確認',
+			cancelText: '取消',
+			warning: '提示',
+			// 舊的管理相關屬性保留兼容性
+			management: '提示詞管理',
+			customPrompt: '自定義提示詞',
+			customPromptWithCount: '自定義提示詞 ({count}) 字',
+			noPrompt: '不啟用提示詞'
+		},
+		// 驗證規則
+		rules: {
+			titleRequired: '請輸入提示詞標題',
+			promptRequired: '請輸入提示詞內容'
+		}
+	},
+	file: {
+		clickToOpen: '點擊打開: {name}',
+	},
+	model: {
+		// 搜索相關
+		search: {
+			keyword: '搜索關鍵字',
+			modelClass: '模型分類',
+			modelName: '模型名稱',
+			modelType: '模型類型',
+			status: '狀態',
+			dateRange: '時間範圍'
+		},
+		// 按鈕相關
+		buttons: {
+			search: '查詢',
+			reset: '重置',
+			add: '新增模型',
+			batchDelete: '批量刪除',
+			edit: '編輯',
+			delete: '刪除',
+			enable: '啟用',
+			disable: '禁用'
+		},
+		// 表格列
+		columns: {
+			id: 'ID',
+			modelName: '模型名稱',
+			modelClass: '模型分類',
+			modelType: '模型類型',
+			status: '狀態',
+			createdAt: '創建時間',
+			updatedAt: '更新時間',
+			actions: '操作'
+		},
+		// 表單相關
+		form: {
+			modelName: '模型名稱',
+			modelClass: '模型分類',
+			modelType: '模型類型',
+			apiKey: 'API密鑰',
+			baseUrl: '基础URL',
+			maxToken: '最大令牌數',
+			isCallFun: '調用函數',
+			status: '狀態'
+		},
+		// 占位符
+		placeholders: {
+			keyword: '搜索關鍵字',
+			modelClass: '模型分類',
+			modelName: '模型名稱',
+			modelType: '請選擇模型類型',
+			status: '狀態',
+			startTime: '開始時間',
+			endTime: '結束時間',
+			inputModelName: '請輸入模型名稱',
+			inputModelClass: '請輸入模型分類',
+			inputModelType: '請輸入模型類型',
+			inputApiKey: '請輸入API密鑰',
+			inputBaseUrl: '請輸入基础URL',
+			inputMaxToken: '請輸入最大令牌數'
+		},
+		// 選項
+		options: {
+			all: '全部',
+			enabled: '啟用',
+			disabled: '禁用',
+			embedding: '詞嵌入',
+			chat: '對話模型',
+			yes: '是',
+			no: '否'
+		},
+		// 對話框
+		dialog: {
+			addTitle: '新增模型配置',
+			editTitle: '編輯模型配置',
+			cancel: '取消',
+			confirm: '確定'
+		},
+		// 消息
+		messages: {
+			selectDeleteItems: '請選擇要刪除的數據',
+			deleteConfirm: '您確定要刪除所選數據嗎?',
+			deleteConfirmSingle: '您確定要刪除這條數據嗎?',
+			enableConfirm: '您確定要啟用這個模型配置嗎?',
+			disableConfirm: '您確定要禁用這個模型配置嗎?',
+			deleteSuccess: '刪除成功',
+			deleteFailed: '刪除失敗',
+			enableSuccess: '啟用成功',
+			disableSuccess: '禁用成功',
+			enableFailed: '啟用失敗',
+			disableFailed: '禁用失敗',
+			addSuccess: '新增成功',
+			editSuccess: '編輯成功',
+			saveFailed: '保存失敗',
+			getListFailed: '獲取模型列表失敗',
+			getDetailFailed: '獲取模型詳情失敗',
+			confirmText: '確認',
+			cancelText: '取消',
+			warning: '提示'
+		},
+		// 驗證規則
+		rules: {
+			modelNameRequired: '請輸入模型名稱',
+			modelClassRequired: '請輸入模型分類',
+			modelTypeRequired: '請輸入模型類型',
+			apiKeyRequired: '請輸入API密鑰',
+			baseUrlRequired: '請輸入基础URL',
+			maxTokenNumber: '最大令牌數必須為數字'
+		}
+	},
+};

+ 93 - 87
src/views/assistant/model.vue

@@ -2,10 +2,13 @@
 import { onMounted, reactive, ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { Search as EleSearch, Refresh as EleRefresh, Plus as ElePlus, Delete as EleDelete, Edit as EleEdit } from '@element-plus/icons-vue'
+import { useI18n } from 'vue-i18n'
 import { useLoading } from '/@/utils/loading-util'
 import api from '/@/api/assist'
 import type { LmConfigInfo, LmConfigListParams } from '/@/api/assist/type'
 
+const { t } = useI18n()
+
 // 数据搜索部分
 const searchParam = reactive<LmConfigListParams>({
 	pageNum: 1,
@@ -32,7 +35,7 @@ const { loading, doLoading: doListLoad } = useLoading(async () => {
 		total.value = res.total
 		data.value = res.list
 	} catch (error) {
-		console.error('获取模型列表失败:', error)
+		console.error(t('message.assistant.model.messages.getListFailed'), error)
 		data.value = []
 		total.value = 0
 	}
@@ -61,24 +64,24 @@ const onDeleteItemSelected = (selection: LmConfigInfo[]) => {
 // 批量删除
 const del = async () => {
 	if (ids.value.length === 0) {
-		ElMessage.error('请选择要删除的数据')
+		ElMessage.error(t('message.assistant.model.messages.selectDeleteItems'))
 		return
 	}
 
 	try {
-		await ElMessageBox.confirm('您确定要删除所选数据吗?', '提示', {
-			confirmButtonText: '确认',
-			cancelButtonText: '取消',
+		await ElMessageBox.confirm(t('message.assistant.model.messages.deleteConfirm'), t('message.assistant.model.messages.warning'), {
+			confirmButtonText: t('message.assistant.model.messages.confirmText'),
+			cancelButtonText: t('message.assistant.model.messages.cancelText'),
 			type: 'warning',
 		})
 
 		await api.model.del({ ids: ids.value })
-		ElMessage.success('删除成功')
+		ElMessage.success(t('message.assistant.model.messages.deleteSuccess'))
 		await doListLoad()
 	} catch (error) {
 		if (error !== 'cancel') {
-			console.error('删除失败:', error)
-			ElMessage.error('删除失败')
+			console.error(t('message.assistant.model.messages.deleteFailed'), error)
+			ElMessage.error(t('message.assistant.model.messages.deleteFailed'))
 		}
 	}
 }
@@ -86,19 +89,19 @@ const del = async () => {
 // 单个删除
 const delSingle = async (id: number) => {
 	try {
-		await ElMessageBox.confirm('您确定要删除这条数据吗?', '提示', {
-			confirmButtonText: '确认',
-			cancelButtonText: '取消',
+		await ElMessageBox.confirm(t('message.assistant.model.messages.deleteConfirmSingle'), t('message.assistant.model.messages.warning'), {
+			confirmButtonText: t('message.assistant.model.messages.confirmText'),
+			cancelButtonText: t('message.assistant.model.messages.cancelText'),
 			type: 'warning',
 		})
 
 		await api.model.del({ ids: [id] })
-		ElMessage.success('删除成功')
+		ElMessage.success(t('message.assistant.model.messages.deleteSuccess'))
 		await doListLoad()
 	} catch (error) {
 		if (error !== 'cancel') {
-			console.error('删除失败:', error)
-			ElMessage.error('删除失败')
+			console.error(t('message.assistant.model.messages.deleteFailed'), error)
+			ElMessage.error(t('message.assistant.model.messages.deleteFailed'))
 		}
 	}
 }
@@ -106,22 +109,25 @@ const delSingle = async (id: number) => {
 // 切换状态
 const toggleStatus = async (row: LmConfigInfo) => {
 	const newStatus = !row.status
-	const statusText = newStatus ? '启用' : '禁用'
+	const statusText = newStatus ? t('message.assistant.model.buttons.enable') : t('message.assistant.model.buttons.disable')
+	const confirmMessage = newStatus ? t('message.assistant.model.messages.enableConfirm') : t('message.assistant.model.messages.disableConfirm')
 
 	try {
-		await ElMessageBox.confirm(`您确定要${statusText}这个模型配置吗?`, '提示', {
-			confirmButtonText: '确认',
-			cancelButtonText: '取消',
+		await ElMessageBox.confirm(confirmMessage, t('message.assistant.model.messages.warning'), {
+			confirmButtonText: t('message.assistant.model.messages.confirmText'),
+			cancelButtonText: t('message.assistant.model.messages.cancelText'),
 			type: 'warning',
 		})
 
 		await api.model.setStatus({ id: row.id!, status: newStatus.toString() })
-		ElMessage.success(`${statusText}成功`)
+		const successMessage = newStatus ? t('message.assistant.model.messages.enableSuccess') : t('message.assistant.model.messages.disableSuccess')
+		ElMessage.success(successMessage)
 		await doListLoad()
 	} catch (error) {
 		if (error !== 'cancel') {
-			console.error(`${statusText}失败:`, error)
-			ElMessage.error(`${statusText}失败`)
+			const errorMessage = newStatus ? t('message.assistant.model.messages.enableFailed') : t('message.assistant.model.messages.disableFailed')
+			console.error(errorMessage, error)
+			ElMessage.error(errorMessage)
 		}
 	}
 }
@@ -146,12 +152,12 @@ const formData = reactive<LmConfigInfo>({
 
 // 表单验证规则
 const formRules = {
-	modelName: [{ required: true, message: '请输入模型名称', trigger: 'blur' }],
-	modelClass: [{ required: true, message: '请输入模型分类', trigger: 'blur' }],
-	modelType: [{ required: true, message: '请输入模型类型', trigger: 'blur' }],
-	apiKey: [{ required: true, message: '请输入API密钥', trigger: 'blur' }],
-	baseUrl: [{ required: true, message: '请输入基础URL', trigger: 'blur' }],
-	maxToken: [{ type: 'number', message: '最大令牌数必须为数字', trigger: 'blur' },],
+	modelName: [{ required: true, message: t('message.assistant.model.rules.modelNameRequired'), trigger: 'blur' }],
+	modelClass: [{ required: true, message: t('message.assistant.model.rules.modelClassRequired'), trigger: 'blur' }],
+	modelType: [{ required: true, message: t('message.assistant.model.rules.modelTypeRequired'), trigger: 'blur' }],
+	apiKey: [{ required: true, message: t('message.assistant.model.rules.apiKeyRequired'), trigger: 'blur' }],
+	baseUrl: [{ required: true, message: t('message.assistant.model.rules.baseUrlRequired'), trigger: 'blur' }],
+	maxToken: [{ type: 'number', message: t('message.assistant.model.rules.maxTokenNumber'), trigger: 'blur' },],
 }
 
 // 重置表单
@@ -173,7 +179,7 @@ const resetForm = () => {
 // 打开新增对话框
 const openAddDialog = () => {
 	resetForm()
-	dialogTitle.value = '新增模型配置'
+	dialogTitle.value = t('message.assistant.model.dialog.addTitle')
 	isEdit.value = false
 	dialogVisible.value = true
 }
@@ -185,12 +191,12 @@ const { doLoading: openEditDialog,loading: loadingOpenEditDialog } = useLoading(
 		loadingNum.value = row.id ?? -1
 		const res = await api.model.detail({ id: row.id! })
 		Object.assign(formData, res)
-		dialogTitle.value = '编辑模型配置'
+		dialogTitle.value = t('message.assistant.model.dialog.editTitle')
 		isEdit.value = true
 		dialogVisible.value = true
 	} catch (error) {
-		console.error('获取模型详情失败:', error)
-		ElMessage.error('获取模型详情失败')
+		console.error(t('message.assistant.model.messages.getDetailFailed'), error)
+		ElMessage.error(t('message.assistant.model.messages.getDetailFailed'))
 	}
 })
 
@@ -201,19 +207,19 @@ const { loading: saveLoading, doLoading: doSave } = useLoading(async () => {
 
 		if (isEdit.value) {
 			await api.model.edit(formData as any)
-			ElMessage.success('编辑成功')
+			ElMessage.success(t('message.assistant.model.messages.editSuccess'))
 		} else {
 			await api.model.add(formData as any)
-			ElMessage.success('新增成功')
+			ElMessage.success(t('message.assistant.model.messages.addSuccess'))
 		}
 
 		dialogVisible.value = false
 		await doListLoad()
 	} catch (error) {
-		console.error('保存失败:', error)
+		console.error(t('message.assistant.model.messages.saveFailed'), error)
 		if (error !== false) {
 			// 表单验证失败时不显示错误消息
-			ElMessage.error('保存失败')
+			ElMessage.error(t('message.assistant.model.messages.saveFailed'))
 		}
 	}
 })
@@ -229,25 +235,25 @@ onMounted(() => {
 		<!-- 搜索表单 -->
 		<el-form :model="searchParam" inline>
 			<el-form-item label="" prop="keyWord">
-				<el-input style="width: 200px" v-model="searchParam.keyWord" placeholder="搜索关键字" clearable />
+				<el-input style="width: 200px" v-model="searchParam.keyWord" :placeholder="t('message.assistant.model.placeholders.keyword')" clearable />
 			</el-form-item>
 			<el-form-item label="" prop="modelClass">
-				<el-input style="width: 150px" v-model="searchParam.modelClass" placeholder="模型分类" clearable />
+				<el-input style="width: 150px" v-model="searchParam.modelClass" :placeholder="t('message.assistant.model.placeholders.modelClass')" clearable />
 			</el-form-item>
 			<el-form-item label="" prop="modelName">
-				<el-input style="width: 150px" v-model="searchParam.modelName" placeholder="模型名称" clearable />
+				<el-input style="width: 150px" v-model="searchParam.modelName" :placeholder="t('message.assistant.model.placeholders.modelName')" clearable />
 			</el-form-item>
 			<el-form-item label="" prop="modelType">
-				<el-select v-model="searchParam.modelType" placeholder="请选择模型类型" clearable>
-					<el-option label="词嵌入" value="embedding" />
-					<el-option label="对话模型" value="chat" />
+				<el-select v-model="searchParam.modelType" :placeholder="t('message.assistant.model.placeholders.modelType')" clearable>
+					<el-option :label="t('message.assistant.model.options.embedding')" value="embedding" />
+					<el-option :label="t('message.assistant.model.options.chat')" value="chat" />
 				</el-select>
 			</el-form-item>
 			<el-form-item label="" prop="status">
-				<el-select style="width: 125px" v-model="searchParam.status" placeholder="状态" clearable>
-					<el-option label="全部" value="" />
-					<el-option label="启用" value="true" />
-					<el-option label="禁用" value="false" />
+				<el-select style="width: 125px" v-model="searchParam.status" :placeholder="t('message.assistant.model.placeholders.status')" clearable>
+					<el-option :label="t('message.assistant.model.options.all')" value="" />
+					<el-option :label="t('message.assistant.model.options.enabled')" value="true" />
+					<el-option :label="t('message.assistant.model.options.disabled')" value="false" />
 				</el-select>
 			</el-form-item>
 			<el-form-item label="" prop="dateRange">
@@ -257,8 +263,8 @@ onMounted(() => {
 					value-format="YYYY-MM-DD"
 					type="daterange"
 					range-separator="-"
-					start-placeholder="开始时间"
-					end-placeholder="结束时间"
+					:start-placeholder="t('message.assistant.model.placeholders.startTime')"
+					:end-placeholder="t('message.assistant.model.placeholders.endTime')"
 				/>
 			</el-form-item>
 			<el-form-item>
@@ -266,25 +272,25 @@ onMounted(() => {
 					<el-icon>
 						<EleSearch />
 					</el-icon>
-					查询
+					{{ t('message.assistant.model.buttons.search') }}
 				</el-button>
 				<el-button @click="reset">
 					<el-icon>
 						<EleRefresh />
 					</el-icon>
-					重置
+					{{ t('message.assistant.model.buttons.reset') }}
 				</el-button>
 				<el-button type="primary" @click="openAddDialog">
 					<el-icon>
 						<ElePlus />
 					</el-icon>
-					新增模型
+					{{ t('message.assistant.model.buttons.add') }}
 				</el-button>
 				<el-button type="danger" @click="del" :disabled="ids.length === 0">
 					<el-icon>
 						<EleDelete />
 					</el-icon>
-					批量删除
+					{{ t('message.assistant.model.buttons.batchDelete') }}
 				</el-button>
 			</el-form-item>
 		</el-form>
@@ -292,26 +298,26 @@ onMounted(() => {
 		<!-- 数据表格 -->
 		<el-table :data="data" style="width: 100%" v-loading="loading" @selection-change="onDeleteItemSelected">
 			<el-table-column type="selection" width="50" align="center" />
-			<el-table-column label="ID" prop="id" width="80" align="center" />
-			<el-table-column label="模型名称" prop="modelName" align="center" show-overflow-tooltip />
-			<el-table-column label="模型分类" prop="modelClass" align="center" show-overflow-tooltip />
-			<el-table-column label="模型类型" prop="modelType" align="center" show-overflow-tooltip />
-			<el-table-column label="状态" prop="status" width="100" align="center">
+			<el-table-column :label="t('message.assistant.model.columns.id')" prop="id" width="80" align="center" />
+			<el-table-column :label="t('message.assistant.model.columns.modelName')" prop="modelName" align="center" show-overflow-tooltip />
+			<el-table-column :label="t('message.assistant.model.columns.modelClass')" prop="modelClass" align="center" show-overflow-tooltip />
+			<el-table-column :label="t('message.assistant.model.columns.modelType')" prop="modelType" align="center" show-overflow-tooltip />
+			<el-table-column :label="t('message.assistant.model.columns.status')" prop="status" width="100" align="center">
 				<template #default="scope">
 					<el-tag :type="scope.row.status ? 'success' : 'danger'" size="small">
-						{{ scope.row.status ? '启用' : '禁用' }}
+						{{ scope.row.status ? t('message.assistant.model.options.enabled') : t('message.assistant.model.options.disabled') }}
 					</el-tag>
 				</template>
 			</el-table-column>
-			<el-table-column label="创建时间" prop="createdAt" width="180" align="center" />
-			<el-table-column label="更新时间" prop="updatedAt" width="180" align="center" />
-			<el-table-column label="操作" width="200" align="center" fixed="right">
+			<el-table-column :label="t('message.assistant.model.columns.createdAt')" prop="createdAt" width="180" align="center" />
+			<el-table-column :label="t('message.assistant.model.columns.updatedAt')" prop="updatedAt" width="180" align="center" />
+			<el-table-column :label="t('message.assistant.model.columns.actions')" width="200" align="center" fixed="right">
 				<template #default="scope">
-					<el-button text type="primary" size="small" @click="openEditDialog(scope.row)" :loading="loadingOpenEditDialog && loadingNum === scope.row.id"> 编辑 </el-button>
+					<el-button text type="primary" size="small" @click="openEditDialog(scope.row)" :loading="loadingOpenEditDialog && loadingNum === scope.row.id"> {{ t('message.assistant.model.buttons.edit') }} </el-button>
 					<el-button text :type="scope.row.status ? 'warning' : 'success'" size="small" @click="toggleStatus(scope.row)">
-						{{ scope.row.status ? '禁用' : '启用' }}
+						{{ scope.row.status ? t('message.assistant.model.buttons.disable') : t('message.assistant.model.buttons.enable') }}
 					</el-button>
-					<el-button text type="danger" size="small" @click="delSingle(scope.row.id)"> 删除 </el-button>
+					<el-button text type="danger" size="small" @click="delSingle(scope.row.id)"> {{ t('message.assistant.model.buttons.delete') }} </el-button>
 				</template>
 			</el-table-column>
 		</el-table>
@@ -321,11 +327,11 @@ onMounted(() => {
 			<el-pagination
 				v-show="total > 0"
 				:current-page="searchParam.pageNum"
-				:page-size="searchParam.PageSize"
+				:page-size="searchParam.pageSize"
 				:page-sizes="[10, 20, 50, 100]"
 				:total="total"
 				layout="total, sizes, prev, pager, next, jumper"
-				@size-change="(size: number) => { searchParam.PageSize = size; doListLoad(); }"
+				@size-change="(size: number) => { searchParam.pageSize = size; doListLoad(); }"
 				@current-change="(page: number) => { searchParam.pageNum = page; doListLoad(); }"
 			/>
 		</div>
@@ -333,46 +339,46 @@ onMounted(() => {
 		<!-- 编辑/新增对话框 -->
 		<el-dialog :title="dialogTitle" v-model="dialogVisible" width="600px" destroy-on-close @close="resetForm">
 			<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px">
-				<el-form-item label="模型名称" prop="modelName">
-					<el-input v-model="formData.modelName" placeholder="请输入模型名称" clearable />
+				<el-form-item :label="t('message.assistant.model.form.modelName')" prop="modelName">
+					<el-input v-model="formData.modelName" :placeholder="t('message.assistant.model.placeholders.inputModelName')" clearable />
 				</el-form-item>
-				<el-form-item label="模型分类" prop="modelClass">
-					<el-input v-model="formData.modelClass" placeholder="请输入模型分类" clearable />
+				<el-form-item :label="t('message.assistant.model.form.modelClass')" prop="modelClass">
+					<el-input v-model="formData.modelClass" :placeholder="t('message.assistant.model.placeholders.inputModelClass')" clearable />
 				</el-form-item>
-				<el-form-item label="模型类型" prop="modelType">
-					<el-select v-model="formData.modelType" placeholder="请选择模型类型">
-						<el-option label="词嵌入" value="embedding" />
-						<el-option label="对话模型" value="chat" />
+				<el-form-item :label="t('message.assistant.model.form.modelType')" prop="modelType">
+					<el-select v-model="formData.modelType" :placeholder="t('message.assistant.model.placeholders.modelType')">
+						<el-option :label="t('message.assistant.model.options.embedding')" value="embedding" />
+						<el-option :label="t('message.assistant.model.options.chat')" value="chat" />
 					</el-select>
 <!--					<el-input v-model="formData.modelType" placeholder="请输入模型类型" clearable />-->
 				</el-form-item>
-				<el-form-item label="API密钥" prop="apiKey">
-					<el-input v-model="formData.apiKey" type="password" placeholder="请输入API密钥" clearable show-password />
+				<el-form-item :label="t('message.assistant.model.form.apiKey')" prop="apiKey">
+					<el-input v-model="formData.apiKey" type="password" :placeholder="t('message.assistant.model.placeholders.inputApiKey')" clearable show-password />
 				</el-form-item>
-				<el-form-item label="基础URL" prop="baseUrl">
-					<el-input v-model="formData.baseUrl" placeholder="请输入基础URL" clearable />
+				<el-form-item :label="t('message.assistant.model.form.baseUrl')" prop="baseUrl">
+					<el-input v-model="formData.baseUrl" :placeholder="t('message.assistant.model.placeholders.inputBaseUrl')" clearable />
 				</el-form-item>
-				<el-form-item label="最大令牌数" prop="maxToken">
-					<el-input-number v-model="formData.maxToken" :min="1" :max="999999" placeholder="请输入最大令牌数" style="width: 100%" />
+				<el-form-item :label="t('message.assistant.model.form.maxToken')" prop="maxToken">
+					<el-input-number v-model="formData.maxToken" :min="1" :max="999999" :placeholder="t('message.assistant.model.placeholders.inputMaxToken')" style="width: 100%" />
 				</el-form-item>
-				<el-form-item label="调用函数" prop="isCallFun">
+				<el-form-item :label="t('message.assistant.model.form.isCallFun')" prop="isCallFun">
 					<el-radio-group v-model="formData.isCallFun">
-						<el-radio :label="true"></el-radio>
-						<el-radio :label="false"></el-radio>
+						<el-radio :label="true">{{ t('message.assistant.model.options.yes') }}</el-radio>
+						<el-radio :label="false">{{ t('message.assistant.model.options.no') }}</el-radio>
 					</el-radio-group>
 				</el-form-item>
-				<el-form-item label="状态" prop="status">
+				<el-form-item :label="t('message.assistant.model.form.status')" prop="status">
 					<el-radio-group v-model="formData.status">
-						<el-radio :label="true">启用</el-radio>
-						<el-radio :label="false">禁用</el-radio>
+						<el-radio :label="true">{{ t('message.assistant.model.options.enabled') }}</el-radio>
+						<el-radio :label="false">{{ t('message.assistant.model.options.disabled') }}</el-radio>
 					</el-radio-group>
 				</el-form-item>
 			</el-form>
 
 			<template #footer>
 				<div class="dialog-footer">
-					<el-button @click="dialogVisible = false">取消</el-button>
-					<el-button type="primary" @click="doSave" :loading="saveLoading"> 确定 </el-button>
+					<el-button @click="dialogVisible = false">{{ t('message.assistant.model.dialog.cancel') }}</el-button>
+					<el-button type="primary" @click="doSave" :loading="saveLoading"> {{ t('message.assistant.model.dialog.confirm') }} </el-button>
 				</div>
 			</template>
 		</el-dialog>

+ 52 - 49
src/views/assistant/prompt.vue

@@ -2,10 +2,13 @@
 import { onMounted, reactive, ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { Search as EleSearch, Refresh as EleRefresh, Plus as ElePlus, Delete as EleDelete, Edit as EleEdit } from '@element-plus/icons-vue'
+import { useI18n } from 'vue-i18n'
 import { useLoading } from '/@/utils/loading-util'
 import api from '/@/api/assist'
 import type { Prompt, PromptListParams } from '/@/api/assist/type'
 
+const { t } = useI18n()
+
 // 数据搜索部分
 const searchParam = reactive<PromptListParams>({
 	pageNum: 1,
@@ -29,7 +32,7 @@ const { loading, doLoading: doListLoad } = useLoading(async () => {
 		total.value = res.total
 		data.value = res.list
 	} catch (error) {
-		console.error('获取提示词列表失败:', error)
+		console.error(t('message.assistant.prompt.messages.getListFailed'), error)
 		data.value = []
 		total.value = 0
 	}
@@ -55,24 +58,24 @@ const onDeleteItemSelected = (selection: Prompt[]) => {
 // 批量删除
 const del = async () => {
 	if (ids.value.length === 0) {
-		ElMessage.error('请选择要删除的数据')
+		ElMessage.error(t('message.assistant.prompt.messages.selectDeleteItems'))
 		return
 	}
 
 	try {
-		await ElMessageBox.confirm('您确定要删除所选数据吗?', '提示', {
-			confirmButtonText: '确认',
-			cancelButtonText: '取消',
+		await ElMessageBox.confirm(t('message.assistant.prompt.messages.deleteConfirm'), t('message.assistant.prompt.messages.warning'), {
+			confirmButtonText: t('message.assistant.prompt.messages.confirmText'),
+			cancelButtonText: t('message.assistant.prompt.messages.cancelText'),
 			type: 'warning',
 		})
 
 		await api.chat.prompt.del({ ids: ids.value })
-		ElMessage.success('删除成功')
+		ElMessage.success(t('message.assistant.prompt.messages.deleteSuccess'))
 		await doListLoad()
 	} catch (error) {
 		if (error !== 'cancel') {
-			console.error('删除失败:', error)
-			ElMessage.error('删除失败')
+			console.error(t('message.assistant.prompt.messages.deleteFailed'), error)
+			ElMessage.error(t('message.assistant.prompt.messages.deleteFailed'))
 		}
 	}
 }
@@ -80,19 +83,19 @@ const del = async () => {
 // 单个删除
 const delSingle = async (id: number) => {
 	try {
-		await ElMessageBox.confirm('您确定要删除这条数据吗?', '提示', {
-			confirmButtonText: '确认',
-			cancelButtonText: '取消',
+		await ElMessageBox.confirm(t('message.assistant.prompt.messages.deleteConfirmSingle'), t('message.assistant.prompt.messages.warning'), {
+			confirmButtonText: t('message.assistant.prompt.messages.confirmText'),
+			cancelButtonText: t('message.assistant.prompt.messages.cancelText'),
 			type: 'warning',
 		})
 
 		await api.chat.prompt.del({ ids: [id] })
-		ElMessage.success('删除成功')
+		ElMessage.success(t('message.assistant.prompt.messages.deleteSuccess'))
 		await doListLoad()
 	} catch (error) {
 		if (error !== 'cancel') {
-			console.error('删除失败:', error)
-			ElMessage.error('删除失败')
+			console.error(t('message.assistant.prompt.messages.deleteFailed'), error)
+			ElMessage.error(t('message.assistant.prompt.messages.deleteFailed'))
 		}
 	}
 }
@@ -112,8 +115,8 @@ const formData = reactive<Prompt>({
 
 // 表单验证规则
 const formRules = {
-	title: [{ required: true, message: '请输入提示词标题', trigger: 'blur' }],
-	prompt: [{ required: true, message: '请输入提示词内容', trigger: 'blur' }],
+	title: [{ required: true, message: t('message.assistant.prompt.rules.titleRequired'), trigger: 'blur' }],
+	prompt: [{ required: true, message: t('message.assistant.prompt.rules.promptRequired'), trigger: 'blur' }],
 }
 
 // 重置表单
@@ -129,7 +132,7 @@ const resetForm = () => {
 // 打开新增对话框
 const openAddDialog = () => {
 	resetForm()
-	dialogTitle.value = '新增提示词'
+	dialogTitle.value = t('message.assistant.prompt.dialog.addTitle')
 	isEdit.value = false
 	dialogVisible.value = true
 }
@@ -141,12 +144,12 @@ const { doLoading: openEditDialog, loading: loadingOpenEditDialog } = useLoading
 		loadingNum.value = row.id ?? -1
 		const res = await api.chat.prompt.detail({ id: row.id })
 		Object.assign(formData, res)
-		dialogTitle.value = '编辑提示词'
+		dialogTitle.value = t('message.assistant.prompt.dialog.editTitle')
 		isEdit.value = true
 		dialogVisible.value = true
 	} catch (error) {
-		console.error('获取提示词详情失败:', error)
-		ElMessage.error('获取提示词详情失败')
+		console.error(t('message.assistant.prompt.messages.getDetailFailed'), error)
+		ElMessage.error(t('message.assistant.prompt.messages.getDetailFailed'))
 	}
 })
 
@@ -157,19 +160,19 @@ const { loading: saveLoading, doLoading: doSave } = useLoading(async () => {
 
 		if (isEdit.value) {
 			await api.chat.prompt.edit(formData as any)
-			ElMessage.success('编辑成功')
+			ElMessage.success(t('message.assistant.prompt.messages.editSuccess'))
 		} else {
 			await api.chat.prompt.add(formData as any)
-			ElMessage.success('新增成功')
+			ElMessage.success(t('message.assistant.prompt.messages.addSuccess'))
 		}
 
 		dialogVisible.value = false
 		await doListLoad()
 	} catch (error) {
-		console.error('保存失败:', error)
+		console.error(t('message.assistant.prompt.messages.saveFailed'), error)
 		if (error !== false) {
 			// 表单验证失败时不显示错误消息
-			ElMessage.error('保存失败')
+			ElMessage.error(t('message.assistant.prompt.messages.saveFailed'))
 		}
 	}
 })
@@ -185,10 +188,10 @@ onMounted(() => {
 		<!-- 搜索表单 -->
 		<el-form :model="searchParam" inline>
 			<el-form-item label="" prop="keyWord">
-				<el-input style="width: 200px" v-model="searchParam.keyWord" placeholder="搜索关键字" clearable />
+				<el-input style="width: 200px" v-model="searchParam.keyWord" :placeholder="t('message.assistant.prompt.placeholders.keyword')" clearable />
 			</el-form-item>
 			<el-form-item label="" prop="title">
-				<el-input style="width: 150px" v-model="searchParam.title" placeholder="提示词标题" clearable />
+				<el-input style="width: 150px" v-model="searchParam.title" :placeholder="t('message.assistant.prompt.placeholders.title')" clearable />
 			</el-form-item>
 			<el-form-item label="" prop="dateRange">
 				<el-date-picker
@@ -197,8 +200,8 @@ onMounted(() => {
 					value-format="YYYY-MM-DD"
 					type="daterange"
 					range-separator="-"
-					start-placeholder="开始时间"
-					end-placeholder="结束时间"
+					:start-placeholder="t('message.assistant.prompt.placeholders.startTime')"
+					:end-placeholder="t('message.assistant.prompt.placeholders.endTime')"
 				/>
 			</el-form-item>
 			<el-form-item>
@@ -206,25 +209,25 @@ onMounted(() => {
 					<el-icon>
 						<EleSearch />
 					</el-icon>
-					查询
+					{{ t('message.assistant.prompt.buttons.search') }}
 				</el-button>
 				<el-button @click="reset">
 					<el-icon>
 						<EleRefresh />
 					</el-icon>
-					重置
+					{{ t('message.assistant.prompt.buttons.reset') }}
 				</el-button>
 				<el-button type="primary" @click="openAddDialog">
 					<el-icon>
 						<ElePlus />
 					</el-icon>
-					新增提示词
+					{{ t('message.assistant.prompt.buttons.add') }}
 				</el-button>
 				<el-button type="danger" @click="del" :disabled="ids.length === 0">
 					<el-icon>
 						<EleDelete />
 					</el-icon>
-					批量删除
+					{{ t('message.assistant.prompt.buttons.batchDelete') }}
 				</el-button>
 			</el-form-item>
 		</el-form>
@@ -232,28 +235,28 @@ onMounted(() => {
 		<!-- 数据表格 -->
 		<el-table :data="data" style="width: 100%" v-loading="loading" @selection-change="onDeleteItemSelected">
 			<el-table-column type="selection" width="50" align="center" />
-			<el-table-column label="ID" prop="id" width="80" align="center" />
-			<el-table-column label="标题" prop="title" align="center" show-overflow-tooltip />
-			<el-table-column label="提示词内容" prop="prompt" align="center" show-overflow-tooltip>
+			<el-table-column :label="t('message.assistant.prompt.columns.id')" prop="id" width="80" align="center" />
+			<el-table-column :label="t('message.assistant.prompt.columns.title')" prop="title" align="center" show-overflow-tooltip />
+			<el-table-column :label="t('message.assistant.prompt.columns.prompt')" prop="prompt" align="center" show-overflow-tooltip>
 				<template #default="{row}:{row:Prompt}">
 					<div class="prompt-content">
 						{{ row.prompt.length > 100 ? row.prompt.substring(0, 100) + '...' : row.prompt }}
 					</div>
 				</template>
 			</el-table-column>
-			<el-table-column label="占位符" prop="placeholder" align="center" show-overflow-tooltip>
+			<el-table-column :label="t('message.assistant.prompt.columns.placeholder')" prop="placeholder" align="center" show-overflow-tooltip>
 				<template #default="{row}:{row:Prompt}">
 					<div class="prompt-placeholder">
 						{{ (row.placeholder?.length ?? 0) > 100 ? row.placeholder!.substring(0, 100) + '...' : row.placeholder}}
 					</div>
 				</template>
 			</el-table-column>
-			<el-table-column label="创建时间" prop="createdAt" width="180" align="center" />
-			<el-table-column label="更新时间" prop="updatedAt" width="180" align="center" />
-			<el-table-column label="操作" width="150" align="center" fixed="right">
+			<el-table-column :label="t('message.assistant.prompt.columns.createdAt')" prop="createdAt" width="180" align="center" />
+			<el-table-column :label="t('message.assistant.prompt.columns.updatedAt')" prop="updatedAt" width="180" align="center" />
+			<el-table-column :label="t('message.assistant.prompt.columns.actions')" width="150" align="center" fixed="right">
 				<template #default="scope">
-					<el-button text type="primary" size="small" @click="openEditDialog(scope.row)" :loading="loadingOpenEditDialog && loadingNum === scope.row.id"> 编辑 </el-button>
-					<el-button text type="danger" size="small" @click="delSingle(scope.row.id)"> 删除 </el-button>
+					<el-button text type="primary" size="small" @click="openEditDialog(scope.row)" :loading="loadingOpenEditDialog && loadingNum === scope.row.id"> {{ t('message.assistant.prompt.buttons.edit') }} </el-button>
+					<el-button text type="danger" size="small" @click="delSingle(scope.row.id)"> {{ t('message.assistant.prompt.buttons.delete') }} </el-button>
 				</template>
 			</el-table-column>
 		</el-table>
@@ -275,26 +278,26 @@ onMounted(() => {
 		<!-- 编辑/新增对话框 -->
 		<el-dialog :title="dialogTitle" v-model="dialogVisible" width="800px" destroy-on-close @close="resetForm">
 			<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px">
-				<el-form-item label="提示词标题" prop="title">
-					<el-input v-model="formData.title" placeholder="请输入提示词标题" clearable />
+				<el-form-item :label="t('message.assistant.prompt.form.title')" prop="title">
+					<el-input v-model="formData.title" :placeholder="t('message.assistant.prompt.placeholders.inputTitle')" clearable />
 				</el-form-item>
-				<el-form-item label="提示词内容" prop="prompt">
+				<el-form-item :label="t('message.assistant.prompt.form.prompt')" prop="prompt">
 					<el-input
 						v-model="formData.prompt"
 						type="textarea"
 						:rows="10"
-						placeholder="请输入提示词内容"
+						:placeholder="t('message.assistant.prompt.placeholders.inputPrompt')"
 						clearable
 						show-word-limit
 						maxlength="2000"
 					/>
 				</el-form-item>
-				<el-form-item label="占位符" prop="placeholder">
+				<el-form-item :label="t('message.assistant.prompt.form.placeholder')" prop="placeholder">
 					<el-input
 						v-model="formData.placeholder"
 						type="textarea"
 						:rows="3"
-						placeholder="请输入占位符"
+						:placeholder="t('message.assistant.prompt.placeholders.inputPlaceholder')"
 						clearable
 						show-word-limit
 						maxlength="2000"
@@ -304,8 +307,8 @@ onMounted(() => {
 
 			<template #footer>
 				<div class="dialog-footer">
-					<el-button @click="dialogVisible = false">取消</el-button>
-					<el-button type="primary" @click="doSave" :loading="saveLoading"> 确定 </el-button>
+					<el-button @click="dialogVisible = false">{{ t('message.assistant.prompt.dialog.cancel') }}</el-button>
+					<el-button type="primary" @click="doSave" :loading="saveLoading"> {{ t('message.assistant.prompt.dialog.confirm') }} </el-button>
 				</div>
 			</template>
 		</el-dialog>