hudada-cli
Version:
专为程序员准备的本地文档搜索,快捷开发工具
3 lines (2 loc) • 2.49 kB
JavaScript
import{createHash as o}from"crypto";import{request as r}from"http";import e from"chalk";import t from"fs/promises";import n from"path";import s from"readline";async function c(){const o=n.join(process.cwd(),"translate.txt");let r="";r=-1!==process.argv.indexOf("--to")&&process.argv.indexOf("--to")>3?process.argv.slice(3,process.argv.indexOf("--to")).join(" "):process.argv.slice(3).join(" ");const s=await async function(o){try{const r=await t.readFile(o,"utf-8");return JSON.parse(r)}catch(o){return null}}(o);if(!s)return console.log(e.yellow("翻译功能未配置")),void a();r?await i(r,s):console.log(e.red("请输入要翻译的文本"))}async function a(){const o=n.join(process.cwd(),"translate.txt"),r=s.createInterface({input:process.stdin,output:process.stdout}),c=o=>new Promise((e=>{r.question(o,(o=>{e(o)}))}));try{console.log(e.cyan("请配置百度翻译 API 参数:"));let r="",n="";for(;!r;)r=(await c("请输入 APP ID: ")).trim(),r||console.log(e.red("APP ID 不能为空!"));for(;!n;)n=(await c("请输入密钥: ")).trim(),n||console.log(e.red("密钥不能为空!"));const s={BAIDU_APP_ID:r,BAIDU_SECRET:n};await t.writeFile(o,JSON.stringify(s,null,2)),console.log(e.green("配置保存成功!"))}catch(o){console.error(e.red("配置保存失败:",o))}finally{r.close()}}async function i(t,n){const{BAIDU_APP_ID:s,BAIDU_SECRET:c}=n;try{const n=function(o){const r=/[\u4e00-\u9fa5]/.test(o),e=/[a-zA-Z]/.test(o);return r&&!e?"chinese":!r&&e?"english":"mixed"}(t);let a="";const i=process.argv.indexOf("--to");if(-1!==i&&i+1<process.argv.length){if(a=process.argv[i+1],!a)return void console.log(e.red("请提供要翻译的语言"))}else"chinese"===n?a="en":"english"===n&&(a="zh");const l=Date.now(),p=function(r){return o("md5").update(r).digest("hex")}(s+t+l+c),d=`http://fanyi-api.baidu.com/api/trans/vip/translate?${new URLSearchParams({q:t,from:"auto",to:a,appid:s,salt:l.toString(),sign:p}).toString()}`,f=await new Promise(((o,e)=>{r(d,(r=>{let t="";r.on("data",(o=>{t+=o})),r.on("end",(()=>{try{const r=JSON.parse(t);r.error_code?e(new Error(`翻译错误: ${r.error_msg}`)):o(r)}catch(o){e(new Error("解析响应失败"))}})),r.on("error",(o=>{e(o)}))})).on("error",(o=>{e(o)})).end()})),g=f.trans_result[0];console.log(e.green(`原文: ${g.src}`)),console.log(e.blue(`译文: ${g.dst}`))}catch(o){console.error(e.red(`翻译失败: ${o.message}`))}}export{c as handleSetTranslateKey,a as handleTranslateSet,i as translate};