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

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

时间:2022-08-17 04:44:11浏览次数:59  
标签:脚本 翻英 Shell translate 英翻 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项目本身);

标签:脚本,翻英,Shell,translate,英翻,shell,自动,trans
From: https://www.cnblogs.com/cnhack/p/16593563.html

相关文章

  • pycharm 自动补全代码提示前符号f,m , p,c,v是什么意思?
    平时在用Pycharm的时候注意到在补全函数提示词前面有c,m,p等小分类,这些到底是什么意思呢,一起看一下吧!————————————————版权声明:本文为CSDN博主「老街小霸......
  • KMP,AC 自动机,以及 fail 树
    开坑待填。六个月后,yukari1735准备开始填坑。全文大概无图!\(\bold{Border}\)对于一个字符串\(s\),若\(s\)的一个前缀\(p\)同时也是\(s\)的后缀且\(p\neqs\),那......
  • 【鸟哥 Linux 10.4】Linux Bash Shell 操作环境(包含通配符相关内容)
    【鸟哥Linux10.4】LinuxBashShell操作环境(包含通配符相关内容)Linux命令的路径搜寻顺序当我们在linux终端输入一行命令,系统是怎么直到我们要执行的是什么呢?其实系......
  • 【转】shell中各种括号的作用
    原文链接:https://blog.csdn.net/taiyang1987912/article/details/39551385一、小括号,圆括号()1、单小括号()①命令组。括号中的命令将会新开一个子shell顺序执行,所以括......
  • Azure LSv3系列VM 自动挂载NVMe本地磁盘
    Azure的Lsv3系列虚拟机具有高吞吐量、低延迟、直接映射的本地NVMe存储。这些VM采用第三代Intel®Xeon®Platinum8370C(IceLake)处理器。Lsv3系列VM的规格......
  • chrome pre 自动换行
    问题引出当我想要使用chrome的打印功能生成一份关于md的pdf版本的时候发现有的代码块没有自动换行,生成的PDF没有自动换行,导致部分信息无法阅读处理方式把有自动换行......
  • 使用Xshell连接阿里云无法输入password
    首先打开云服务器点击远程连接用vcn的连接方式去修改sshd的配置文件命令为:vi/etc/ssh/sshd_config按照官方给的错误提示进入编辑后发现参数没有问题于是乎我重......
  • Salesforce自动化的未来:如何构建Flow的设计策略?
     Record-TriggeredFlow允许企业在Salesforce中基于创建、更新或删除记录事件在后台自动执行操作。这大大减少了业务用户花费在执行重复性任务上的时间,并且还降低了人为......
  • 解决echarts中横坐标值显示不全(自动隐藏)问题
    echarts中,横轴数据如果非常多,会自动隐藏一部分数据,我们可以通过属性interval来进行调整。如下图,当横轴时间为13天时,echarts会自动隔天显示   如果我们想显示全,则需......
  • 学自动化测试可以用这几个练手项目
    练手项目的业务逻辑比较简单,只适合练手,不能代替真实项目。学习自动化测试最难的是没有合适的项目练习。测试本身既要讲究科学,又有艺术成分,单单学几个api的调用很难应付......