翻译API信息

Google 翻译 API 的请求地址为 https://translate.googleapis.com,该接口通过 GET 请求方式传递参数。具体参数如下:

  • client:固定值 gtx

  • dt:固定值 t

  • sl:源语言代码,可以设为 auto 将自动检测源语言

  • tl:目标语言代码

  • q:URL 编码后的待翻译文字

组织一个简单请求:

// API 请求示例
https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q=你好啊,亲爱的朋友

在这个示例中,将 sl 设置为了 auto,即自动检测源语言;将 tl 设置为 en,即翻译成英文。

将该 URL 复制到浏览器中打开,会自动下载一个 json.txt 文件,打开文件后的内容如下:

res=[
    [
        [
            "Hello, dear friend",
            "你好啊,亲爱的朋友",
            null,
            null,
            3,
            null,
            null,
            [[]],
            [
                [
                    ["af64405095a399ceb1e05c7abb7cda66","zh_en_2023q1.md"]
                ]
            ]
        ]
    ],
    null,
    "zh-CN",
    null,
    null,
    null,
    1,
    [],
    [["zh-CN"],null,[1],["zh-CN"]]
]

可以看到,返回的数据结构较为复杂,其他可以忽略,只需关注翻译结果 "Hello, dear friend",它位于返回数组 res 的第一个元素 res[0][0][0] 中。

如果发送一长串文本进行翻译,可能会返回多个结果项,所有结果项都以数组形式位于 res[0] 中。遍历 res[0] 即可获取所有翻译结果

例如

// API 请求示例
https://translate.googleapis.com/translate_a/single?client=gtx&dt=t&sl=auto&tl=en&q=你好啊,亲爱的朋友.今天天气不错哦。我有肉吃,你有吗

返回结果如

res=
[
    [
        ['Hello, dear friend. The weather is nice today. ', '你好啊,亲爱的朋友.今天天气不错哦。', None, None, 3, None, None, [[]], [[['af64405095a399ceb1e05c7abb7cda66', 'zh_en_2023q1.md']]]], 
        ['I have meat to eat, do you?', '我有肉吃,你有吗', None, None, 3, None, None, [[]], [[['af64405095a399ceb1e05c7abb7cda66', 'zh_en_2023q1.md']]]]
    ], 
    None, 'zh-CN', None, None, None, 1, [], [['zh-CN'], None, [1], ['zh-CN']]
]

在此示例中,只需遍历 res[0] 即可拿到所有翻译结果。Python 代码如下

# 遍历获取所有翻译结果的 Python 示例代码
text = [t[0] for t in res[0]]
print(text)
# 输出:['Hello, dear friend. The weather is nice today. ', 'I have meat to eat, do you?']

在CloudFlare配置

创建worker并部署

   
export default {
  async fetch(request, env, ctx) {
    let url = new URL(request.url);
    if(url.pathname.startsWith('/')){
      url.hostname="translate.googleapis.com"; 
      let new_request = new Request(url, request)
      let response=await fetch(new_request)
      if(response.status!==200){
        return new Response(JSON.stringify({code:1,msg:response.text}), {
          status: 200, 
          headers: {
            'content-type': 'application/json',
          },
        });
      }


      let jsonData = await response.json();
      let str=jsonData[0].map(it=>{
        return it[0]
      })

      let data={code:0,msg:"ok",text:str.join('')}

      return new Response(JSON.stringify(data), {
        status: 200, 
        headers: {
          'content-type': 'application/json', 
        },
      });
    }
    return await env.ASSETS.fetch(request);
  },
};

在触发器中使用自己的域名

你会看到路由地址,用该地址替换 translate.googleapis.com 即可使用


本站由 困困鱼 使用 Stellar 创建。