From 8f09ef4faecfee7dc6080e32b467063510e90253 Mon Sep 17 00:00:00 2001 From: Mars-Sea <1195751600@qq.com> Date: Wed, 2 Apr 2025 18:56:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0MTranServer=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../channel/translate/info/MTranServerInfo.ts | 71 ++++++++++++++++ src/common/enums/TranslateServiceEnum.ts | 5 ++ .../channel/interfaces/MTranServerRequest.ts | 60 ++++++++++++++ .../product/translate/MTranServerChannel.ts | 76 ++++++++++++++++++ .../src/assets/translate/MTranServerLogo.png | Bin 0 -> 3950 bytes .../fun/serviceConfig/TranslateService.vue | 13 +++ 6 files changed, 225 insertions(+) create mode 100644 src/common/channel/translate/info/MTranServerInfo.ts create mode 100644 src/main/service/channel/interfaces/MTranServerRequest.ts create mode 100644 src/main/service/channel/product/translate/MTranServerChannel.ts create mode 100644 src/renderer/src/assets/translate/MTranServerLogo.png diff --git a/src/common/channel/translate/info/MTranServerInfo.ts b/src/common/channel/translate/info/MTranServerInfo.ts new file mode 100644 index 0000000..c5ea8a5 --- /dev/null +++ b/src/common/channel/translate/info/MTranServerInfo.ts @@ -0,0 +1,71 @@ +export default { + name: 'MTranServer翻译', + // 是否需要秘钥 + isKey: true, + // 是否单秘钥 + isOneAppKey: true, + // 构建时默认信息 + defaultInfo: { + requestUrl: 'http://localhost:8989' + }, + // 翻译语言 + languageList: [ + { + languageName: '中文(简体)', + languageType: 'zh' + }, + { + languageName: '中文(繁体)', + languageType: 'zh' + }, + { + languageName: '英语', + languageType: 'en' + }, + { + languageName: '日语', + languageType: 'ja' + }, + { + languageName: '韩语', + languageType: 'ko' + }, + { + languageName: '法语', + languageType: 'fr' + }, + { + languageName: '德语', + languageType: 'de' + }, + { + languageName: '西班牙语', + languageType: 'es' + }, + { + languageName: '意大利语', + languageType: 'it' + }, + { + languageName: '俄语', + languageType: 'ru' + }, + { + languageName: '葡萄牙语', + languageType: 'pt' + }, + { + languageName: '阿拉伯语', + languageType: 'ar' + }, + { + languageName: '波兰语', + languageType: 'pl' + }, + { + languageName: '波斯语', + languageType: 'fa' + } + ] + } + \ No newline at end of file diff --git a/src/common/enums/TranslateServiceEnum.ts b/src/common/enums/TranslateServiceEnum.ts index 283e4f2..6ca3e9b 100644 --- a/src/common/enums/TranslateServiceEnum.ts +++ b/src/common/enums/TranslateServiceEnum.ts @@ -107,6 +107,11 @@ class TranslateServiceEnum { */ static EC_DICT = 'EcDict' + /** + * MTranserver翻译服务 + */ + static MTRAN_SERVER = 'MTranServer' + } export default TranslateServiceEnum diff --git a/src/main/service/channel/interfaces/MTranServerRequest.ts b/src/main/service/channel/interfaces/MTranServerRequest.ts new file mode 100644 index 0000000..15d5b81 --- /dev/null +++ b/src/main/service/channel/interfaces/MTranServerRequest.ts @@ -0,0 +1,60 @@ +import HttpMethodType from '../../../enums/HttpMethodTypeClassEnum' +import { AxiosPromise } from 'axios' +import request from '../../../utils/request' +import https from 'https' + +// 创建一个忽略SSL证书验证的agent +const httpsAgent = new https.Agent({ + rejectUnauthorized: false +}); + +/** + * 翻译 + * + * @param info 翻译信息 + */ +const apiTranslate = (info): Promise => { + // 如果info.languageType === auto,替换为en + if (info.languageType === 'auto') { + info.languageType = 'en' + } + const body = { + from: info.languageType, + to: info.languageResultType, + text: info.translateContent + } + return request({ + baseURL: info.requestUrl, + url: '/translate', + method: HttpMethodType.POST, + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${info.appKey}` + }, + data: body, + httpsAgent // 使用忽略SSL证书验证的agent + }) +} + +/** + * 健康检查 + * + * @param info 检查信息 + */ +const healthCheck = (info): Promise => { + return request({ + baseURL: info.requestUrl, + url: '/health', + method: HttpMethodType.GET, + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${info.appKey}` + }, + httpsAgent // 使用忽略SSL证书验证的agent + }) +} + +export default { + apiTranslate, + healthCheck +} \ No newline at end of file diff --git a/src/main/service/channel/product/translate/MTranServerChannel.ts b/src/main/service/channel/product/translate/MTranServerChannel.ts new file mode 100644 index 0000000..165fa10 --- /dev/null +++ b/src/main/service/channel/product/translate/MTranServerChannel.ts @@ -0,0 +1,76 @@ +import MTranServerRequest from "../../interfaces/MTranServerRequest" +import log from '../../../../utils/log' +import GlobalWin from '../../../GlobalWin' +import ITranslateInterface from './ITranslateInterface' +import { isNull } from "../../../../../common/utils/validate" +import TranslateChannelFactory from "../../factory/TranslateChannelFactory" +import { commonError } from "../../../../utils/RequestUtil" +import R from "../../../../../common/class/R" +import TranslateServiceEnum from "../../../../../common/enums/TranslateServiceEnum" + +class MTranServerChannel implements ITranslateInterface { + /** + * 翻译 + * + * @param info 翻译信息 + */ + apiTranslate(info): void { + MTranServerRequest.apiTranslate(info) + .then((res) => { + log.info('[MTranServer] - 响应报文 : ', res) + const text = res['result'] + if (isNull(text)) { + GlobalWin.mainWinSend( + TranslateChannelFactory.callbackName(info.type), + R.okIT(info, '翻译出现错误') + ) + return + } + GlobalWin.mainWinSend(TranslateChannelFactory.callbackName(info.type), R.okIT(info, text)) + }) + .catch((err) => { + commonError('MTranServer翻译事件', err) + GlobalWin.mainWinSend( + TranslateChannelFactory.callbackName(info.type), + R.okIT(info, err.message) + ) + }) + } + + /** + * 翻译校验 + * + * @param info 翻译信息 + */ + apiTranslateCheck(info): void { + MTranServerRequest.apiTranslate(info).then( + (res) => { + log.info('[MTranServer翻译校验密钥事件] - 响应报文 : ', res) + const target = res['result'] + if (!target[0]) { + GlobalWin.setWin.webContents.send( + 'api-check-translate-callback-event', + TranslateServiceEnum.MTRAN_SERVER, + R.errorD(info.responseData) + ) + return + } + GlobalWin.setWin.webContents.send( + 'api-check-translate-callback-event', + TranslateServiceEnum.MTRAN_SERVER, + R.okD(info.responseData) + ) + }, + (err) => { + commonError('MTranServer翻译校验密钥', err) + + GlobalWin.mainWinSend( + TranslateChannelFactory.callbackName(info.type), + R.okIT(info, err.message) + ) + } + ) + } +} + +export default MTranServerChannel \ No newline at end of file diff --git a/src/renderer/src/assets/translate/MTranServerLogo.png b/src/renderer/src/assets/translate/MTranServerLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..85a93fa16480afdc92f94f5191a485dc0ad4a23f GIT binary patch literal 3950 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 literal 0 HcmV?d00001 diff --git a/src/renderer/src/set/components/fun/serviceConfig/TranslateService.vue b/src/renderer/src/set/components/fun/serviceConfig/TranslateService.vue index b875ced..f5b10bb 100644 --- a/src/renderer/src/set/components/fun/serviceConfig/TranslateService.vue +++ b/src/renderer/src/set/components/fun/serviceConfig/TranslateService.vue @@ -153,6 +153,19 @@ /> + + + 留空默认:http://localhost:8989 + +
验证中...