命令行翻译工具trans同名劫持外部包装器Shell脚本,自动判断需要中翻英或英翻中,并自动朗读语音
作者:互联网
注:以下脚本逻辑依赖于开源软件translate-shell,请先按照官方说明安装trans
到本地目录,并修改以下脚本中的路径为trans的实际的绝对路径。
官方软件包:
https://github.com/soimort/translate-shell
warpper包装器完整代码,劫持 trans
命令
请将以下脚本代码加入个人配置文件(~/.bash_profile或~/.bashrc或其他自动任意一个加载的配置文件
),即可在交互式命令行中调用;
trans() {
#劫持trans同名命令,缺省详细参数时自动判断需要中翻英还是英翻中
#执行脚本:/v/bin/trans
# Github:https://github.com/soimort/translate-shell
local header=$(cat<<EOF
# trans 同名劫持函数
# 执行脚本:/v/bin/trans
# Github:https://github.com/soimort/translate-shell
-----------
# 你可以使用以下别名翻译为不同目标语言:
`alias|grep 'alias trans-'`
EOF
)
[ $# -eq 0 ] && echo "$header" && /v/bin/trans --shell && return
OLD_IFS=$IFS
IFS=$(echo -e "\n")
local audioFile=""
local pointLang=0 #参数中是否指定了特定的翻译语言,1为已指定,0为未指定
local originOptions=( $@ )
while [ $# -gt 0 ];
do
if [[ "${1,,}" == "-download-audio-as" ]];then
audioFile="$2"
elif [[ "${1,,}" =~ ^: ]];then
pointLang=1
fi
shift
done
set -- ${originOptions[@]}
#判断参数起始字符是否是中文字符,从而决定中翻英还是英翻中
if [ $pointLang -eq 0 ] && [[ "${1,,}" =~ ^[^0-9a-z\-] ]];then
/v/bin/trans :en $@
else
/v/bin/trans $@
fi
IFS=$OLD_IFS
#是否自动播放语音文件(依赖于/v/bin/playaudio,实际调用程序cmdmp3)
#命令行播放音频第三方程序:cmdmp3(https://lawlessguy.wordpress.com/2015/06/27/update-to-a-command-line-mp3-player-for-windows/)
if [[ "$*" =~ "-download-audio-as" ]] && [ -f "$audioFile" ];then
print_color "播放语音文件..."
playaudio $audioFile
[ -f "$audioFile" ] && rm -vf $audioFile
fi
}
alias trans0=trans
alias fy2=trans # <--- fy已指定其他程序(/usr/local/bin/fy.exe)
alias fy=trans
trans1() {
#翻译的同时自动下载语音文件到本地临时文件进行播放
#alias trans1='trans -download-audio-as /tmp/textaudio.mp3' # <--- alias由于传参顺序不对,暂时弃用...
local transTarget="" #<--翻译的目标语言
#如果参数$1指定了翻译的目标语种,则调换参数顺序,以便为trans1创建多语种别名,同时保证trans函数良好执行
#eg: trans1 邵氏影院 :fr
# 等效于
# trans1 :fr 邵氏影院 (指定翻译目标语种为法语)
#-------------------
# 别名调用示例(翻译为法语并朗读):trans-fa 邵氏影院
if [[ "$1" =~ ^\: ]];then
#echo "需要调换参数顺序..."
transTarget="$1" && shift
fi
set -- "$@" "$transTarget" # <--- 注意 $@ 加双引号,否则英文句子会被分成多个参数传递
#set -x
OLD_IFS=$IFS
IFS=$(echo -e "\n")
trans $@ -download-audio-as /tmp/textaudio.mp3
IFS=$OLD_IFS
#set +x
}
alias fy3=trans1
#翻译支持的语言:https://github.com/soimort/translate-shell/wiki/Languages
alias trans-fa='trans1 :fr' #翻译为法语
alias trans-de='trans1 :de' #翻译为德语
alias trans-en='trans1 :en' #翻译为英语
alias trans-es='trans1 :es' #翻译为西班牙语
alias trans-spa=trans-es
alias trans-it='trans1 :it' #翻译为意大利语
alias trans-yi=trans-it
alias trans-ja='trans1 :ja' #翻译为日语
alias trans-ri=trans-ja
alias trans-ko='trans1 :ko' #翻译为韩语
alias trans-han=trans-ko
alias trans-ms='trans1 :ms' #翻译为马来语
alias trans-malai=trans-ms
alias trans-my='trans1 :my' #翻译为缅甸语
alias trans-mian=trans-my
alias trans-vi='trans1 :vi' #翻译为越南语
alias trans-yn=trans-vi
alias trans-th='trans1 :th' #翻译为泰语
alias trans-tai=trans-th
alias trans-tl='trans1 :tl' #翻译为菲律宾
alias trans-fei=trans-tl
alias trans-zh='trans1 :zh-CN' #翻译为简体中文
alias trans-zhft='trans1 :zh-TW' #翻译为繁体中文
alias trans-yue='trans1 :yue' #翻译为粤语
函数一:trans (英翻中、中翻英自动识别)
1、无需指定冗长的命令行参数,直接调用 trans xxxxx
,脚本即可自动根据你传递的参数判断是需要中翻英,还是英翻中,如果需要翻译其他语种,请指定详尽的命令行参数(具体参数参考translate-shell官方文档);
2、当传递多个命令行参数时,脚本不对输入做任何处理,直接按原样传递参数给trans实体文件(即translate-shell项目本身);
注:由于英文带空格,需要加双引号包裹,如果语句不带空格(比如中文),可省略双引号。
函数二:trans1(中英互翻自动识别,并自动朗读语音)
功能同trans
函数,但在翻译的同时会下载目标语言的语音文件到本地临时文件夹,并调用本地命令行声音播放程序来朗读语音。
此处测试使用的播放音频的程序为cmdmp3( https://lawlessguy.wordpress.com/2015/06/27/update-to-a-command-line-mp3-player-for-windows/ ),
你也可以视具体情况替换为其他程序!
一些快捷翻译到特定语言的别名命令:
alias trans-fa='trans1 :fr' #翻译为法语 alias trans-de='trans1 :de' #翻译为德语 alias trans-en='trans1 :en' #翻译为英语 alias trans-es='trans1 :es' #翻译为西班牙语 alias trans-spa=trans-es alias trans-it='trans1 :it' #翻译为意大利语 alias trans-yi=trans-it alias trans-ja='trans1 :ja' #翻译为日语 alias trans-ri=trans-ja alias trans-ko='trans1 :ko' #翻译为韩语 alias trans-han=trans-ko alias trans-ms='trans1 :ms' #翻译为马来语 alias trans-malai=trans-ms alias trans-my='trans1 :my' #翻译为缅甸语 alias trans-mian=trans-my alias trans-vi='trans1 :vi' #翻译为越南语 alias trans-yn=trans-vi alias trans-th='trans1 :th' #翻译为泰语 alias trans-tai=trans-th alias trans-tl='trans1 :tl' #翻译为菲律宾 alias trans-fei=trans-tl alias trans-zh='trans1 :zh-CN' #翻译为简体中文 alias trans-zhft='trans1 :zh-TW' #翻译为繁体中文 alias trans-yue='trans1 :yue' #翻译为粤语
Gitee代码共享:
请访问
https://gitee.com/hexiyou/shell-scripts/blob/master/trans-wraper.sh
标签:翻译,Shell,translate,英翻,trans1,alias,shell,自动,trans 来源: https://www.cnblogs.com/cnhack/p/16593563.html