前言

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回调并返回错误信息。

截图