feat: multi key calling support
This commit is contained in:
@@ -707,4 +707,8 @@ export const I18N = {
|
|||||||
zh: `添加右键菜单`,
|
zh: `添加右键菜单`,
|
||||||
en: `Add Context Menus`,
|
en: `Add Context Menus`,
|
||||||
},
|
},
|
||||||
|
mulkeys_help: {
|
||||||
|
zh: `支持英文逗号隔开多个KEY轮寻调用。`,
|
||||||
|
en: `Supports multiple KEY round calling calls separated by English commas.`,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,6 +21,25 @@ import { msAuth } from "./auth";
|
|||||||
import { genDeeplFree } from "../apis/deepl";
|
import { genDeeplFree } from "../apis/deepl";
|
||||||
import { genBaidu } from "../apis/baidu";
|
import { genBaidu } from "../apis/baidu";
|
||||||
|
|
||||||
|
const keyMap = new Map();
|
||||||
|
|
||||||
|
// 轮寻key
|
||||||
|
const keyPick = (translator, key = "") => {
|
||||||
|
const keys = key
|
||||||
|
.split(",")
|
||||||
|
.map((item) => item.trim())
|
||||||
|
.filter(Boolean);
|
||||||
|
|
||||||
|
if (keys.length === 0) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
let index = keyMap.get(translator) ?? -1;
|
||||||
|
keyMap.set(translator, ++index);
|
||||||
|
|
||||||
|
return keys[index % keys.length];
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造缓存 request
|
* 构造缓存 request
|
||||||
* @param {*} request
|
* @param {*} request
|
||||||
@@ -257,6 +276,17 @@ const genCustom = ({ text, from, to, url, key }) => {
|
|||||||
*/
|
*/
|
||||||
export const newTransReq = ({ translator, text, from, to }, apiSetting) => {
|
export const newTransReq = ({ translator, text, from, to }, apiSetting) => {
|
||||||
const args = { text, from, to, ...apiSetting };
|
const args = { text, from, to, ...apiSetting };
|
||||||
|
|
||||||
|
switch (translator) {
|
||||||
|
case OPT_TRANS_DEEPL:
|
||||||
|
case OPT_TRANS_OPENAI:
|
||||||
|
case OPT_TRANS_GEMINI:
|
||||||
|
case OPT_TRANS_CLOUDFLAREAI:
|
||||||
|
args.key = keyPick(translator, args.key);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
switch (translator) {
|
switch (translator) {
|
||||||
case OPT_TRANS_GOOGLE:
|
case OPT_TRANS_GOOGLE:
|
||||||
return genGoogle(args);
|
return genGoogle(args);
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import CircularProgress from "@mui/material/CircularProgress";
|
|||||||
import {
|
import {
|
||||||
OPT_TRANS_ALL,
|
OPT_TRANS_ALL,
|
||||||
OPT_TRANS_MICROSOFT,
|
OPT_TRANS_MICROSOFT,
|
||||||
|
OPT_TRANS_DEEPL,
|
||||||
OPT_TRANS_DEEPLFREE,
|
OPT_TRANS_DEEPLFREE,
|
||||||
OPT_TRANS_BAIDU,
|
OPT_TRANS_BAIDU,
|
||||||
OPT_TRANS_TENCENT,
|
OPT_TRANS_TENCENT,
|
||||||
OPT_TRANS_OPENAI,
|
OPT_TRANS_OPENAI,
|
||||||
OPT_TRANS_GEMINI,
|
OPT_TRANS_GEMINI,
|
||||||
|
OPT_TRANS_CLOUDFLAREAI,
|
||||||
OPT_TRANS_CUSTOMIZE,
|
OPT_TRANS_CUSTOMIZE,
|
||||||
URL_KISS_PROXY,
|
URL_KISS_PROXY,
|
||||||
} from "../../config";
|
} from "../../config";
|
||||||
@@ -96,6 +98,13 @@ function ApiFields({ translator }) {
|
|||||||
OPT_TRANS_TENCENT,
|
OPT_TRANS_TENCENT,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const mulkeysTranslators = [
|
||||||
|
OPT_TRANS_DEEPL,
|
||||||
|
OPT_TRANS_OPENAI,
|
||||||
|
OPT_TRANS_GEMINI,
|
||||||
|
OPT_TRANS_CLOUDFLAREAI,
|
||||||
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Stack spacing={3}>
|
<Stack spacing={3}>
|
||||||
{!buildinTranslators.includes(translator) && (
|
{!buildinTranslators.includes(translator) && (
|
||||||
@@ -113,6 +122,10 @@ function ApiFields({ translator }) {
|
|||||||
name="key"
|
name="key"
|
||||||
value={key}
|
value={key}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
|
multiline={mulkeysTranslators.includes(translator)}
|
||||||
|
helperText={
|
||||||
|
mulkeysTranslators.includes(translator) ? i18n("mulkeys_help") : ""
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user