我们都知道,在查询Linux命令的具体用法的时候可以加上help参数查看帮助信息,但输出的帮助信息都是英文的,对于大多数英文不好的同学来说,只能是连猜带蒙了(没说,说的就是我自己)。
对此,根据我的使用经验,有2种解决方法。
一则是用手机APP“有道翻译”,内置拍照功能,可以直接把屏幕上的英文文本翻译为中文,可读性很好。
二则就是今天介绍的,通过安装Linux版翻译软件的方法,再自行编写脚本,将软件的英文帮助翻译为中文。
trans主页:Translate Shell
GITHUB地址:https://github.com/soimort/translate-shell/
在RHEL/CentOS下安装翻译软件和编写脚本,实施步骤如下。
1、安装翻译软件trans
先更新系统软件(提前配好源):yum update
安装翻译软件:yum install -y translate-shell
2、尝试命令行手动翻译
trans -e bing :zh "china"
出现翻译结果就是安装成功了:
其中的 -e bing 是在线调用bing的翻译引擎,,有时会很慢,如果不想等待就按Ctrl+c中断作业并再次运行。
以后有不懂的词句,就可以在命令行手动翻译,很方便(当然要在线)。
如果不加 -e bing 就是调用google翻译引擎,国内用不了。
3、编写脚本自动翻译
trans是命令行接口,但我们通过脚本将其改造为能翻译文件。
假设要翻译Linux命令:lvm help 的输出。该输出分为2列,中间空格隔开,部分截图如下:
希望得到左侧命令不变,右侧解释翻译为中文的效果。
首先把帮助信息重定向到文件help,但要注意该输出是“标准错误”,所以要用错误输出重定向:
lvm help 2>help
编写脚本读入文本文件help逐行翻译:
#!/bin/bash
while IFS= read -r line
do
echo $line | cut -d' ' -f1|tr -d '\n'&& echo -n " " #只显示第一列,不换行 #只显示第一列,不换行
echo $line | cut -d' ' -f2-|trans -j -e bing -b :zh #翻译第二列开始直到行末的所有英文
done < "help"
输出如下,列出了所有lvm非交互命令及中文翻译:
实现了我们的目标。
如果发生卡顿就等待,直到翻译完毕。
lvm help 命令的帮助信息有其特殊之处:总共2列,前列命令名,后列英文说明,格式非常规整。但Linux命令帮助信息并非总是如此,更多的是连续的段落,为了翻译这类文档,脚本需要稍加改动使其更加通用。以翻译 tar 帮助信息为例。
先运行 tar --help>help 将帮助信息重定向到 help 文件,再运行脚本:
#!/bin/bash
while IFS= read -r line
do
abc=a
echo $line|trans -j -e bing -b :zh
done < "help"
漂亮的翻译就出现了:
技巧:有些帮助信息因为一行太长就写为多行,这会导致翻译生硬或者错误,为此可以在vim里将多行合并为一行再翻译,比如:
改为:
修改文件名或脚本中的文件名,可以翻译任何文本文件,比如:
翻译 ls 命令的man手册:
① 先把ls命令的man手册导出为文本文件help:man ls|col -bx>help
② 翻译手册:./fy.sh
trans的一些扩展用法:
单独翻译每个单词:trans -e bing en:zh word processor
将所有单词作为一句话翻译:trans -e bing en:zh "word processor"
同上,另一种写法:trans -j -e bing en:zh word processor
把单词翻译为中文和日文:trans :zh+ja word
为了避免标点符号(如惊叹号“ !”)或其他特殊字符被 shell 解释,可使用单引号:
trans -e bing :zh 'Out, out, brief candle!'
但在某些情况下,你可能仍想使用双引号(比如句子包含单引号“ '
”)
trans -e bing :zh "Life's but a walking shadow, a poor player"
指定源语言为中文,目标语言为英文,以简洁方式显示:
trans -e bing -b -s zh -t en "这里是需要翻译的中文文本"
启动交互式翻译,同时定义源语言和目标语言:
trans -e bing -shell en:fr
列出关于语言和详细代码的详细信息:
trans -R 或 trans -T