前言
Linux.do可以白嫖DeepL的翻译,用的就是DeepLX,至于DeepLX是啥,这个就不多说了,自己去Google查。由于Bob自带的DeepL插件不支持自定义API,网上虽然也有几个,但是总感觉不完善,因此准备自己撸一套。
下载
下载地址:下载地址
完整代码仓库:https://github.com/almightyYantao/bob-plugin-deeplx-translator
代码详解
function translate(query, completion) {
// 判断是否选择了apiMenu的第一个选项
if ($option.apiMenu == 1) {
// 如果apiMenu为1,检查是否配置了API key
if ($option.key) {
// 如果有API key,发送翻译请求
send(query, "https://api.deeplx.org/" + $option.key + "/translate").then(
(resp) => {
// 定义一个变量来存储翻译建议字符串
let alternativesString = "";
// 如果响应中包含替代翻译
if (resp.data.alternatives) {
// 将替代翻译数组合并成一个字符串,每个翻译占一行
alternativesString = resp.data.alternatives.join("\n");
}
// 调用成功处理函数,将查询,翻译结果和替代翻译传递过去
success(query, [resp.data.data], alternativesString, completion);
}
);
} else {
// 如果没有配置API key,调用完成回调函数并返回错误信息
completion({
error: {
type: "secretKey",
message: "配置错误 - 请确保您在插件配置中填入了正确的 API Keys",
addition: "请在插件配置中填写正确的 API Keys",
},
});
}
} else {
// 如果apiMenu不为1,检查是否配置了自定义API地址
if ($option.customUrl) {
// 如果有自定义API地址,发送翻译请求
send(query, $option.customUrl).then((resp) => {
// 定义一个变量来存储翻译建议字符串
let alternativesString = "";
// 如果响应中包含替代翻译
if (resp.data.alternatives) {
// 将替代翻译数组合并成一个字符串,每个翻译占一行
alternativesString = resp.data.alternatives.join("\n");
}
// 调用成功处理函数,将查询,翻译结果和替代翻译传递过去
success(query, [resp.data.data], alternativesString, completion);
});
} else {
// 如果没有配置自定义API地址,调用完成回调函数并返回错误信息
completion({
error: {
type: "param",
message: "配置错误 - 你设置了自定义API,但未设置API地址",
addition: "请在插件配置中填写正确的API地址",
},
});
}
}
}
函数
translate
:接受两个参数:
query
(用户输入的查询)和completion
(回调函数,用于处理翻译结果或错误)。
检查
$option.apiMenu
:如果
$option.apiMenu
等于1,则表示用户选择了使用特定API进行翻译。
检查API key:
如果用户在配置中提供了API key (
$option.key
),则构造请求URL并发送请求。如果没有提供API key,则调用
completion
回调并返回错误信息。
处理API响应:
如果响应中包含替代翻译(
resp.data.alternatives
),将这些替代翻译合并成一个字符串。调用
success
函数,将查询、翻译结果和替代翻译传递给completion
回调函数。
自定义API:
如果
$option.apiMenu
不等于1,则检查用户是否提供了自定义API URL。如果提供了自定义API URL,发送翻译请求并处理响应。
如果没有提供自定义API URL,则调用
completion
回调并返回错误信息。