diff --git a/src/renderer/src/pages/translate/TranslatePage.tsx b/src/renderer/src/pages/translate/TranslatePage.tsx index 353f75bf81..8d4e7116b6 100644 --- a/src/renderer/src/pages/translate/TranslatePage.tsx +++ b/src/renderer/src/pages/translate/TranslatePage.tsx @@ -1,16 +1,20 @@ -import { CheckOutlined, DeleteOutlined, HistoryOutlined, SendOutlined } from '@ant-design/icons' +import { CheckOutlined, DeleteOutlined, HistoryOutlined, RedoOutlined, SendOutlined } from '@ant-design/icons' import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar' import CopyIcon from '@renderer/components/Icons/CopyIcon' import { HStack } from '@renderer/components/Layout' import { isEmbeddingModel } from '@renderer/config/models' +import { TRANSLATE_PROMPT } from '@renderer/config/prompts' import { translateLanguageOptions } from '@renderer/config/translate' import { useCodeStyle } from '@renderer/context/CodeStyleProvider' import db from '@renderer/databases' import { useDefaultModel } from '@renderer/hooks/useAssistant' import { useProviders } from '@renderer/hooks/useProvider' +import { useSettings } from '@renderer/hooks/useSettings' import { fetchTranslate } from '@renderer/services/ApiService' import { getDefaultTranslateAssistant } from '@renderer/services/AssistantService' import { getModelUniqId, hasModel } from '@renderer/services/ModelService' +import { useAppDispatch } from '@renderer/store' +import { setTranslateModelPrompt } from '@renderer/store/settings' import type { Model, TranslateHistory } from '@renderer/types' import { runAsyncFunction, uuid } from '@renderer/utils' import { @@ -24,7 +28,7 @@ import TextArea, { TextAreaRef } from 'antd/es/input/TextArea' import dayjs from 'dayjs' import { useLiveQuery } from 'dexie-react-hooks' import { find, isEmpty, sortBy } from 'lodash' -import { HelpCircle, Settings2, TriangleAlert } from 'lucide-react' +import { ChevronDown, HelpCircle, Settings2, TriangleAlert } from 'lucide-react' import { FC, useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -65,7 +69,11 @@ const TranslateSettings: FC<{ selectOptions }) => { const { t } = useTranslation() + const { translateModelPrompt } = useSettings() + const dispatch = useAppDispatch() const [localPair, setLocalPair] = useState<[string, string]>(bidirectionalPair) + const [showPrompt, setShowPrompt] = useState(false) + const [localPrompt, setLocalPrompt] = useState(translateModelPrompt) const defaultTranslateModel = useMemo( () => (hasModel(translateModel) ? getModelUniqId(translateModel) : undefined), @@ -74,7 +82,8 @@ const TranslateSettings: FC<{ useEffect(() => { setLocalPair(bidirectionalPair) - }, [bidirectionalPair, visible]) + setLocalPrompt(translateModelPrompt) + }, [bidirectionalPair, translateModelPrompt, visible]) const handleSave = () => { if (localPair[0] === localPair[1]) { @@ -88,6 +97,8 @@ const TranslateSettings: FC<{ db.settings.put({ id: 'translate:bidirectional:pair', value: localPair }) db.settings.put({ id: 'translate:scroll:sync', value: isScrollSyncEnabled }) db.settings.put({ id: 'translate:markdown:enabled', value: enableMarkdown }) + db.settings.put({ id: 'translate:model:prompt', value: localPrompt }) + dispatch(setTranslateModelPrompt(localPrompt)) window.message.success({ content: t('message.save.success.title'), key: 'translate-settings-save' @@ -112,7 +123,14 @@ const TranslateSettings: FC<{ width={420}>
-
{t('translate.settings.model')}
+
+ {t('translate.settings.model')} + + + + + +
+ + )} +
+ +
+ +
setShowPrompt(!showPrompt)}> + {t('settings.models.translate_model_prompt_title')} + +
+ {localPrompt !== TRANSLATE_PROMPT && ( + +
+ +
+