From aa727949674e7e9bc3f4025706c01df9bf2b3657 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Thu, 2 Jan 2025 12:21:22 +0800 Subject: [PATCH] feat: improved translation features and settings --- src/renderer/src/config/prompts.ts | 17 +++- .../pages/home/Messages/MessageMenubar.tsx | 95 ++++++++++--------- src/renderer/src/providers/OpenAIProvider.ts | 3 +- src/renderer/src/services/AssistantService.ts | 5 + yarn.lock | 20 ++++ 5 files changed, 94 insertions(+), 46 deletions(-) diff --git a/src/renderer/src/config/prompts.ts b/src/renderer/src/config/prompts.ts index 2dfbcd6d..6c643c06 100644 --- a/src/renderer/src/config/prompts.ts +++ b/src/renderer/src/config/prompts.ts @@ -47,8 +47,21 @@ export const AGENT_PROMPT = ` export const SUMMARIZE_PROMPT = '你是一名擅长会话的助理,你需要将用户的会话总结为 10 个字以内的标题,标题语言与用户的首要语言一致,不要使用标点符号和其他特殊符号' -export const TRANSLATE_PROMPT = - 'You are a translation expert. Translate from input language to {{target_language}}, provide the translation result directly without any explanation and keep original format. Do not translate if the target language is the same as the source language.' +export const TRANSLATE_PROMPT = `You are a translation expert. + +Translate from input language to {{target_language}} + +Requirements: + +1. provide the translation result directly without any explanation and keep original format. +2. Do not translate if the target language is the same as the source language. + +Example: + +input: 你好,今天天气怎么样? +target_language: english +output: Hello, how is the weather today? +` export const REFERENCE_PROMPT = `请根据参考资料回答问题,并使用脚注格式引用数据来源。请忽略无关的参考资料。 diff --git a/src/renderer/src/pages/home/Messages/MessageMenubar.tsx b/src/renderer/src/pages/home/Messages/MessageMenubar.tsx index 1d1ddcb8..13ec2a0f 100644 --- a/src/renderer/src/pages/home/Messages/MessageMenubar.tsx +++ b/src/renderer/src/pages/home/Messages/MessageMenubar.tsx @@ -156,51 +156,9 @@ const MessageMenubar: FC = (props) => { key: 'edit', icon: , onClick: onEdit - }, - { - label: t('chat.translate'), - key: 'translate', - icon: isTranslating ? : , - children: [ - { - label: '🇨🇳 ' + t('languages.chinese'), - key: 'translate-chinese', - onClick: () => handleTranslate('chinese') - }, - { - label: '🇭🇰 ' + t('languages.chinese-traditional'), - key: 'translate-chinese-traditional', - onClick: () => handleTranslate('chinese-traditional') - }, - { - label: '🇬🇧 ' + t('languages.english'), - key: 'translate-english', - onClick: () => handleTranslate('english') - }, - { - label: '🇯🇵 ' + t('languages.japanese'), - key: 'translate-japanese', - onClick: () => handleTranslate('japanese') - }, - { - label: '🇰🇷 ' + t('languages.korean'), - key: 'translate-korean', - onClick: () => handleTranslate('korean') - }, - { - label: '🇷🇺 ' + t('languages.russian'), - key: 'translate-russian', - onClick: () => handleTranslate('russian') - }, - { - label: '✖ ' + t('translate.close'), - key: 'translate-close', - onClick: () => onEditMessage?.({ ...message, translatedContent: undefined }) - } - ] } ], - [handleTranslate, isTranslating, message, onEdit, onEditMessage, t] + [message, onEdit, t] ) const onAtModelRegenerate = async () => { @@ -261,6 +219,57 @@ const MessageMenubar: FC = (props) => { )} + {!isUserMessage && ( + handleTranslate('chinese') + }, + { + label: '🇭🇰 ' + t('languages.chinese-traditional'), + key: 'translate-chinese-traditional', + onClick: () => handleTranslate('chinese-traditional') + }, + { + label: '🇬🇧 ' + t('languages.english'), + key: 'translate-english', + onClick: () => handleTranslate('english') + }, + { + label: '🇯🇵 ' + t('languages.japanese'), + key: 'translate-japanese', + onClick: () => handleTranslate('japanese') + }, + { + label: '🇰🇷 ' + t('languages.korean'), + key: 'translate-korean', + onClick: () => handleTranslate('korean') + }, + { + label: '🇷🇺 ' + t('languages.russian'), + key: 'translate-russian', + onClick: () => handleTranslate('russian') + }, + { + label: '✖ ' + t('translate.close'), + key: 'translate-close', + onClick: () => onEditMessage?.({ ...message, translatedContent: undefined }) + } + ] + }} + trigger={['click']} + placement="topRight" + arrow> + + + + + + + )}