系统相关
首页 > 系统相关> > 命令行翻译工具trans同名劫持外部包装器Shell脚本,自动判断需要中翻英或英翻中,并自动朗读语音

命令行翻译工具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