add deepl api
This commit is contained in:
@@ -3,6 +3,7 @@ import { fetchPolyfill } from "../libs/fetch";
|
|||||||
import {
|
import {
|
||||||
OPT_TRANS_GOOGLE,
|
OPT_TRANS_GOOGLE,
|
||||||
OPT_TRANS_MICROSOFT,
|
OPT_TRANS_MICROSOFT,
|
||||||
|
OPT_TRANS_DEEPL,
|
||||||
OPT_TRANS_OPENAI,
|
OPT_TRANS_OPENAI,
|
||||||
URL_MICROSOFT_TRANS,
|
URL_MICROSOFT_TRANS,
|
||||||
OPT_LANGS_SPECIAL,
|
OPT_LANGS_SPECIAL,
|
||||||
@@ -95,6 +96,36 @@ const apiMicrosoftTranslate = (translator, text, to, from) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DeepL翻译
|
||||||
|
* @param {*} text
|
||||||
|
* @param {*} to
|
||||||
|
* @param {*} from
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const apiDeepLTranslate = (translator, text, to, from, setting) => {
|
||||||
|
const { deeplUrl, deeplKey } = setting;
|
||||||
|
const data = {
|
||||||
|
text: [text],
|
||||||
|
target_lang: to,
|
||||||
|
split_sentences: "0",
|
||||||
|
};
|
||||||
|
if (from) {
|
||||||
|
data.source_lang = from;
|
||||||
|
}
|
||||||
|
return fetchPolyfill(deeplUrl, {
|
||||||
|
headers: {
|
||||||
|
"Content-type": "application/json",
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify(data),
|
||||||
|
useCache: true,
|
||||||
|
usePool: true,
|
||||||
|
translator,
|
||||||
|
token: deeplKey,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OpenAI 翻译
|
* OpenAI 翻译
|
||||||
* @param {*} text
|
* @param {*} text
|
||||||
@@ -160,6 +191,10 @@ export const apiTranslate = async ({
|
|||||||
const res = await apiMicrosoftTranslate(translator, q, to, from);
|
const res = await apiMicrosoftTranslate(translator, q, to, from);
|
||||||
trText = res[0].translations[0].text;
|
trText = res[0].translations[0].text;
|
||||||
isSame = to === res[0].detectedLanguage.language;
|
isSame = to === res[0].detectedLanguage.language;
|
||||||
|
} else if (translator === OPT_TRANS_DEEPL) {
|
||||||
|
const res = await apiDeepLTranslate(translator, q, to, from, setting);
|
||||||
|
trText = res.translations.map((item) => item.text).join(" ");
|
||||||
|
isSame = to === res.translations[0].detected_source_language;
|
||||||
} else if (translator === OPT_TRANS_OPENAI) {
|
} else if (translator === OPT_TRANS_OPENAI) {
|
||||||
const res = await apiOpenaiTranslate(translator, q, to, from, setting);
|
const res = await apiOpenaiTranslate(translator, q, to, from, setting);
|
||||||
trText = res?.choices?.[0].message.content;
|
trText = res?.choices?.[0].message.content;
|
||||||
|
|||||||
@@ -260,6 +260,14 @@ export const I18N = {
|
|||||||
zh: `请检查url地址是否正确或稍后再试。`,
|
zh: `请检查url地址是否正确或稍后再试。`,
|
||||||
en: `Please check if the url address is correct or try again later.`,
|
en: `Please check if the url address is correct or try again later.`,
|
||||||
},
|
},
|
||||||
|
deepl_api: {
|
||||||
|
zh: `DeepL 接口`,
|
||||||
|
en: `DeepL API`,
|
||||||
|
},
|
||||||
|
deepl_key: {
|
||||||
|
zh: `DeepL 密钥`,
|
||||||
|
en: `DeepL Key`,
|
||||||
|
},
|
||||||
openai_api: {
|
openai_api: {
|
||||||
zh: `OpenAI 接口`,
|
zh: `OpenAI 接口`,
|
||||||
en: `OpenAI API`,
|
en: `OpenAI API`,
|
||||||
|
|||||||
@@ -66,10 +66,12 @@ export const URL_MICROSOFT_TRANS =
|
|||||||
|
|
||||||
export const OPT_TRANS_GOOGLE = "Google";
|
export const OPT_TRANS_GOOGLE = "Google";
|
||||||
export const OPT_TRANS_MICROSOFT = "Microsoft";
|
export const OPT_TRANS_MICROSOFT = "Microsoft";
|
||||||
|
export const OPT_TRANS_DEEPL = "DeepL";
|
||||||
export const OPT_TRANS_OPENAI = "OpenAI";
|
export const OPT_TRANS_OPENAI = "OpenAI";
|
||||||
export const OPT_TRANS_ALL = [
|
export const OPT_TRANS_ALL = [
|
||||||
OPT_TRANS_GOOGLE,
|
OPT_TRANS_GOOGLE,
|
||||||
OPT_TRANS_MICROSOFT,
|
OPT_TRANS_MICROSOFT,
|
||||||
|
OPT_TRANS_DEEPL,
|
||||||
OPT_TRANS_OPENAI,
|
OPT_TRANS_OPENAI,
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -119,6 +121,12 @@ export const OPT_LANGS_SPECIAL = {
|
|||||||
["zh-CN", "zh-Hans"],
|
["zh-CN", "zh-Hans"],
|
||||||
["zh-TW", "zh-Hant"],
|
["zh-TW", "zh-Hant"],
|
||||||
]),
|
]),
|
||||||
|
[OPT_TRANS_DEEPL]: new Map([
|
||||||
|
...OPT_LANGS_FROM.map(([key]) => [key, key.toUpperCase()]),
|
||||||
|
["auto", ""],
|
||||||
|
["zh-CN", "ZH"],
|
||||||
|
["zh-TW", "ZH"],
|
||||||
|
]),
|
||||||
[OPT_TRANS_OPENAI]: new Map(
|
[OPT_TRANS_OPENAI]: new Map(
|
||||||
OPT_LANGS_FROM.map(([key, val]) => [key, val.split(" - ")[0]])
|
OPT_LANGS_FROM.map(([key, val]) => [key, val.split(" - ")[0]])
|
||||||
),
|
),
|
||||||
@@ -200,6 +208,8 @@ export const DEFAULT_SETTING = {
|
|||||||
subrulesList: DEFAULT_SUBRULES_LIST, // 订阅列表
|
subrulesList: DEFAULT_SUBRULES_LIST, // 订阅列表
|
||||||
owSubrule: DEFAULT_OW_RULE, // 覆写订阅规则
|
owSubrule: DEFAULT_OW_RULE, // 覆写订阅规则
|
||||||
googleUrl: "https://translate.googleapis.com/translate_a/single", // 谷歌翻译接口
|
googleUrl: "https://translate.googleapis.com/translate_a/single", // 谷歌翻译接口
|
||||||
|
deeplUrl: "https://api-free.deepl.com/v2/translate",
|
||||||
|
deeplKey: "",
|
||||||
openaiUrl: "https://api.openai.com/v1/chat/completions",
|
openaiUrl: "https://api.openai.com/v1/chat/completions",
|
||||||
openaiKey: "",
|
openaiKey: "",
|
||||||
openaiModel: "gpt-4",
|
openaiModel: "gpt-4",
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import {
|
|||||||
MSG_FETCH_CLEAR,
|
MSG_FETCH_CLEAR,
|
||||||
CACHE_NAME,
|
CACHE_NAME,
|
||||||
OPT_TRANS_MICROSOFT,
|
OPT_TRANS_MICROSOFT,
|
||||||
|
OPT_TRANS_DEEPL,
|
||||||
OPT_TRANS_OPENAI,
|
OPT_TRANS_OPENAI,
|
||||||
DEFAULT_FETCH_INTERVAL,
|
DEFAULT_FETCH_INTERVAL,
|
||||||
DEFAULT_FETCH_LIMIT,
|
DEFAULT_FETCH_LIMIT,
|
||||||
@@ -67,9 +68,11 @@ const newCacheReq = async (request) => {
|
|||||||
*/
|
*/
|
||||||
const fetchApi = async ({ input, init = {}, translator, token }) => {
|
const fetchApi = async ({ input, init = {}, translator, token }) => {
|
||||||
if (translator === OPT_TRANS_MICROSOFT) {
|
if (translator === OPT_TRANS_MICROSOFT) {
|
||||||
init.headers["Authorization"] = `Bearer ${token}`;
|
init.headers["Authorization"] = `Bearer ${token}`; // Microsoft
|
||||||
|
} else if (translator === OPT_TRANS_DEEPL) {
|
||||||
|
init.headers["Authorization"] = `DeepL-Auth-Key ${token}`; // DeepL
|
||||||
} else if (translator === OPT_TRANS_OPENAI) {
|
} else if (translator === OPT_TRANS_OPENAI) {
|
||||||
init.headers["Authorization"] = `Bearer ${token}`; // // OpenAI
|
init.headers["Authorization"] = `Bearer ${token}`; // OpenAI
|
||||||
init.headers["api-key"] = token; // Azure OpenAI
|
init.headers["api-key"] = token; // Azure OpenAI
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ export default function Settings() {
|
|||||||
minLength,
|
minLength,
|
||||||
maxLength,
|
maxLength,
|
||||||
openaiUrl,
|
openaiUrl,
|
||||||
|
deeplUrl = "",
|
||||||
|
deeplKey = "",
|
||||||
openaiKey,
|
openaiKey,
|
||||||
openaiModel,
|
openaiModel,
|
||||||
openaiPrompt,
|
openaiPrompt,
|
||||||
@@ -144,6 +146,22 @@ export default function Settings() {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<TextField
|
||||||
|
size="small"
|
||||||
|
label={i18n("deepl_api")}
|
||||||
|
name="deeplUrl"
|
||||||
|
value={deeplUrl}
|
||||||
|
onChange={handleChange}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextField
|
||||||
|
size="small"
|
||||||
|
label={i18n("deepl_key")}
|
||||||
|
name="deeplKey"
|
||||||
|
value={deeplKey}
|
||||||
|
onChange={handleChange}
|
||||||
|
/>
|
||||||
|
|
||||||
<TextField
|
<TextField
|
||||||
size="small"
|
size="small"
|
||||||
label={i18n("openai_api")}
|
label={i18n("openai_api")}
|
||||||
|
|||||||
Reference in New Issue
Block a user