feat: multi key calling support

This commit is contained in:
Gabe Yuan
2023-12-22 11:35:46 +08:00
parent beca31f55d
commit b939d1849a
3 changed files with 47 additions and 0 deletions

View File

@@ -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.`,
},
}; };

View File

@@ -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);

View File

@@ -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") : ""
}
/> />
</> </>
)} )}