近来使用的google翻译的插件有些不稳定, 时灵时不灵的,无奈的使用百度翻译了, 感觉体验也不好, 就想自己写一个翻译的脚本。
整体思路简单, 就是调用百度翻译api再将结果呈现出来, 最后使用alias链接一下。
大致使用工具: md5(自带)、httpie(需要安装)、jq(解析json需要安装),百度翻译api需要注册
1.百度翻译api具体可以在百度翻译开放平台查看
百度翻译开放平台api.fanyi.baidu.com分为通用翻译API/定制化翻译API/拍照翻译SDK/语音翻译SDK
使用通用翻译api就可以了不收费, 使用前要创建app,开发文档在:
百度翻译开放平台api.fanyi.baidu.com2.安装httpie、jq
brew install jq
brew install httpie
3、创建translate.sh文件写脚本, 详情如下
q=$1 # 接受参数, 有空格的字符串,记得用“”
appid="20141916" # 百度翻译app id, 注册后创建app就有了
secretKey="134134134qCd0PO" # 百度翻译app 密钥url="http://api.fanyi.baidu.com/api/trans/vip/translate" # 请求的url
fromLang="auto" #源语言选择
toLang="zh" # 目标语言选择
salt=$RANDOM # 随机串
sign=$appid$q$salt$secretKey # 加密前拼接串
sign=$(md5 -s "$sign"| cut -d '=' -f2|sed 's/^[ ]*//g') # 获取MD5串
# 请求
res=$(http $url appid==$appid q=="$q" from==$fromLang to==$toLang salt==$salt sign==$sign)
res=$(echo $res|jq -r '.trans_result[0].dst') # 解析出值
# 打印结果
echo "n033[36m ********************************************************* 033[0m"
echo "033[32m 翻译结果 033[0m n"
echo "033[32m $res 033[0m"
4、做alias链接, 我使用了oh-my-zsh, 我这里直接编辑用户目录下的~/.zshrc文件, 加入
alias translate="sh /Users/lixiang/translate.sh"
在source ~/.zshrc就可以使用了
![f74abefdf09ffa61d6402ce3681ec44f.png](https://img-blog.csdnimg.cn/img_convert/f74abefdf09ffa61d6402ce3681ec44f.png)
但是实际上来回复制粘贴还是觉得麻烦, 想着减少操作, 想到了可以直接从剪切板里获取, 又将逻辑代码无限循环, 添加了等待和系统通知
last='123413241234' # 记录上次翻译
while true # 循环
do
sleep 3 # 休息时间
q="$(pbpaste | head -n 1)" # 获取剪切板第一条if [[ $q == $last ]]; # 判断是否是上次翻译过的
thencontinue
fiecho $q appid="2fffffffff341916"secretKey="134134134qCd0PO" # 百度翻译app 密钥url="http://api.fanyi.baidu.com/api/trans/vip/translate"fromLang="auto"toLang="zh"salt=$RANDOMsign=$appid$q$salt$secretKeysign=$(md5 -s "$sign"| cut -d '=' -f2|sed 's/^[ ]*//g')res=$(http $url appid==$appid q=="$q" from==$fromLang to==$toLang salt==$salt sign==$sign)res=$(echo $res|jq -r '.trans_result[0].dst')echo "n033[36m ********************************************************* 033[0m"echo "033[32m 翻译结果 033[0m n"echo "033[32m $res 033[0m"s="'"'display notification "'$res'" with title "翻译结果"'"'"echo $s |xargs osascript -e #发送系统通知 last=$q
done
这样我们只要将脚本运行一下, 想翻译的文本复制剪切到剪切板就可以了
效果
![78960ad77acc1469fd0c6ebb0203e981.png](https://img-blog.csdnimg.cn/img_convert/78960ad77acc1469fd0c6ebb0203e981.png)
还是有很多不足, 无法翻译段落,只要剪切板里有东西就翻译,每次翻译都要复制或者剪切一下等等
但是已经能满足我的需要了