ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2022-08-17 05:00:30  阅读:226  来源: 互联网

标签:翻译 Shell translate 英翻 trans1 alias shell 自动 trans


注:以下脚本逻辑依赖于开源软件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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有