资讯动态

translate-shell(trans 命令)完全指南:从命令行选项到多引擎翻译原理

发布时间:2026/10/15 18:28:52 来源:尧图企业网站定制
CLI开发工具【免费下载链接】translate-shell:speech_balloon: Command-line translator using Google Translate, Bing Translator, Yandex.Translate, etc.项目地址https://gitcode.com/gh_mirrors/tr/translate-shell点击查看免费下载导读translate-shell命令行命令名为trans是一款完全基于 GNU awkgawk实现的开源命令行翻译工具可调用 Google Translate、Bing Translator、Yandex.Translate 等多种在线翻译引擎在终端中完成文本翻译、语言识别、词典查询、语音朗读与交互式会话。本文以仓库中的官方 man 手册 man/trans.1.md 为骨架结合 include/Main.awk选项解析、include/TranslatorInterface.awk引擎抽象层、include/Translators各引擎实现等源码完整讲解trans的语法、全部命令行选项、环境变量、退出状态与初始化脚本机制并深入剖析其底层实现原理使读者既能直接上手使用也能理解其内部工作方式。本文面向当前仓库版本0.9.7.1见 metainfo.awk。名称与作用trans - Command-line translator using Google Translate, Bing Translator, Yandex.Translate, etc.trans是一个命令行翻译器支持 Google Translate、Bing Translator、Yandex.Translate 等翻译引擎。其基本调用形式为trans [OPTIONS] [SOURCE]:[TARGETS] [TEXT]...关于参数处理的三个关键规则详见 man 手册 DESCRIPTION 与 include/Main.awk 的解析逻辑非选项参数一律视为待翻译文本任何不匹配合法选项的参数都被当作 TEXTstdin 兜底如果命令行既没有给出 TEXT也没有通过-i指定输入文件程序会从标准输入读取并翻译因此trans天然支持管道用法例如echo hello | trans -b zh--终止选项解析--之后的所有参数全部按文本处理适合翻译以-开头的字符串。信息类选项查版本、看手册、列语言信息类选项在执行后立即输出并退出不会发起翻译请求。选项作用-V,-version打印版本号并退出-H,-help打印帮助信息并退出-M,-man显示 man 手册并退出-T,-reference打印全部支持的语言及代码对照表语言名用其母语自称 endonym显示-R,-reference-english同上但语言名以英文显示-S,-list-engines列出可用的翻译引擎并退出-list-languages列出所有支持的语言endonym 形式-list-languages-english列出所有支持的语言英文名-list-codes列出所有支持的语言代码-list-all同时列出语言代码、英文名与 endonym-L CODES,-linguist CODES打印语言详情多个代码用连接-U,-upgrade检查程序是否有新版本从源码看这些选项在 include/Main.awk 中由InfoOnly变量统一标记随后在switch (InfoOnly)中集中分发处理。例如-T/-reference会调用getReference(endonym)-R会调用getReference(name)-list-engines遍历全局Translator数组并对当前引擎默认为 auto以*标记-list-all则用printf(%-10s %-30s %s\n, code, name, endonym)输出三列对齐表格。引擎列表trans -S会输出当前所有provides()注册的引擎。在 include/Translators/_.awk 中可以看到全部引擎模块被统一引入googleGoogle Translate见 include/Translators/GoogleTranslate.awkbingBing Translator见 include/Translators/BingTranslator.awkyandexYandex.Translate见 include/Translators/YandexTranslate.awkapertiumApertium机器翻译平台见 include/Translators/Apertium.awkspell / aspell / hunspell本地拼写检查器见 include/Translators/SpellChecker.awkauto自动引擎选择见 include/Translators/Auto.awk其中auto是默认引擎Option[engine] auto。auto 的调度逻辑在 include/Translators/Auto.awk 中当源语言与目标语言都被 Google 支持时优先用 google否则若都被 Bing 支持则用 bing都不满足时回退到 google。TTS文本转语音与网页翻译 URL 生成目前也固定走 google。语言数据来源语言代码、英文名、endonym母语自称以及支持引擎标记都维护在 include/LanguageData.awk 中。例如list-languages在 include/Main.awk 中的实现会遍历Locale数组只输出Locale[code][supported-by]非空即至少被一个引擎支持的语言。-L zh:en这种用法则走getLanguage()返回该语言在Locale中的完整记录包括 name、endonym、支持引擎等详情。版本与升级检查-U/-upgrade的实现位于 include/Script.awk 的upgrade()函数它从 registry 索引拉取最新版本号用newerVersion()include/Utils.awk与本机版本做逐段比较然后提示当前版本 / 新版本 / 下载地址或提示已是最新。本机版本号定义在 metainfo.awkVersion 0.9.7.1ReleaseDate 2023-02-08。翻译引擎选择-e / -enginetrans -e google hello trans -e bing hello trans -e yandex hello-e ENGINE,-engine ENGINE指定使用的翻译引擎默认auto。另外还支持斜杠快捷语法trans /google hello源码中通过正则/^\/(.*)$/解析并直接写入Option[engine]。引擎抽象层在 include/TranslatorInterface.awk它定义了一组_Init、_RequestUrl、_Translate、_TTSUrl、_WebTranslateUrl等抽象方法通过engineMethod(Translate)动态分发到具体引擎的googleTranslate、bingTranslate、yandexTranslate等实现。每个引擎文件都以BEGIN { provides(engine-name) }注册自己。显示类选项从 verbose 到自定义输出显示模式开关选项作用-verbose详细模式显示原文、最相关的翻译、音标如有、候选翻译如有或词典释义若是单词。该模式默认开启通常无需显式指定-b,-brief简洁模式只显示最相关的翻译或其音标-d,-dictionary词典模式显示原词在词典中的释义-identify语言识别显示识别出的原文语言源码中-verbose将Option[verbose]置 1-brief置 0。-dictionary不仅开启词典显示还会同时关闭翻译词典与候选翻译显示Option[show-dictionary] 0、Option[show-alternatives] 0使输出专注于原词释义。-identify的实现比较巧妙Option[verbose] Option[verbose] - 2用负数标记仅识别语言模式。逐项显示开关Y/n以下选项的取值遵循 man 手册标注的默认值Y表示默认 yes、y/N表示默认 no选项默认值作用-show-originalyes是否显示原文-show-original-phoneticsyes是否显示原文音标-show-translationyes是否显示译文-show-translation-phoneticsyes是否显示译文音标-show-prompt-messageyes是否显示提示消息如 Translations of xxx-show-languagesyes是否显示源语言与目标语言-show-original-dictionaryno是否显示原文的词典条目词典模式下自动开启-show-dictionaryyes是否显示译文的词典条目-show-alternativesyes是否显示候选翻译在 include/Main.awk 的init()中可以看到与 man 手册一致的默认值矩阵show-original、show-translation、show-dictionary、show-alternatives等默认 1唯独show-original-dictionary默认 0。这些开关在解析时经yn()函数归一化为布尔值。例如trans -show-original no -show-translation yes hello排版与主题选项作用-w NUM,-width NUM指定屏幕宽度用于填充对齐覆盖环境变量$COLUMNS-indent NUM缩进大小空格数默认 4-theme FILENAME指定主题文件默认default-no-theme不使用默认主题以外的任何主题-no-ansi不使用 ANSI 转义序列-no-autocorrect不自动纠正拼写当引擎默认开启纠正时-no-bidi不转换双向文本-bidi强制转换双向文本-no-warn不向 stderr 写入警告-dump打印原始 API 响应宽度与缩进的底层逻辑init()中Option[width]优先取$COLUMNS - 2若未设置initMisc()会尝试tput cols探测终端宽度探测失败时兜底为 64且最小宽度不低于 4。-indent默认 4。主题机制主题通过sgr-*前缀的选项定义各部分输出的 SGRSelect Graphic Rendition即 ANSI 颜色样式。include/Theme.awk 的prettify(name, string)会查找Option[sgr- name]并调用ansi()包裹字符串setTheme()在命令解析完成后加载主题覆盖命令行默认样式主题文件中可设置sgr-original、sgr-translation、sgr-languages-sl、sgr-dictionary-word等大量样式项。-no-theme将Option[theme]置空-no-ansi则直接删除整个AnsiCode表禁用全部颜色。双向文本BiDi处理对于阿拉伯语、希伯来语等 RTL 语言include/Utils.awk 的initBiDi()会优先探测外部工具fribidi找不到时回退到 Unixrev。initBiDiTerm()还会检测终端类型vte、konsole、mlterm因为这些终端自带的 BiDi 实现会影响是否需要自行处理填充。dump 调试-dump直接输出引擎返回的原始响应如 Google 的 JSON便于调试接口变化各引擎的*Translate()中都有if (Option[dump]) return content分支。音频类选项朗读与下载语音选项作用-p,-play朗读译文。需要 mplayer、mpv 或 mpg123 之一来播放 Google Text-to-Speech 的流式音频否则回退到本地语音合成器macOS 用sayLinux 等平台用espeak-speak朗读原文-n VOICE,-narrator VOICE指定叙述人声常见值为male与female同时朗读译文-player PROGRAM指定音频播放器并朗读译文覆盖环境变量$PLAYER-no-play不朗读译文-no-translate使用-speak时不做任何翻译只朗读原文-download-audio将音频下载到当前目录-download-audio-as FILENAME将音频下载到指定文件从源码看include/Main.awk-play设Option[play] 1-speak设Option[play] 2区分播译文与播原文-narrator默认值为femaleOption[narrator] female指定-n或-player时会隐式开启-playinitMisc()中若-play开启但未指定播放器会先调用initAudioPlayer()依次探测 mplayer、mpv、mpg123找不到再尝试initSpeechSynthesizer()say / espeak两者都不可用则输出[WARNING] No available audio player or speech synthesizer.并取消播放-download-audio-as会自动附带开启下载模式。TTS 的 URL 由各引擎的*TTSUrl()提供例如 Google 引擎include/Translators/GoogleTranslate.awk构造translate_tts?ieUTF-8clientgtxtl...q...。终端分页与浏览-v / -view选项作用-v,-view在终端分页器中查看译文less、more 或 most-pager PROGRAM指定分页器并查看译文覆盖环境变量$PAGER-no-view,-no-pager不在分页器中查看-browser PROGRAM指定网页浏览器覆盖环境变量$BROWSER-no-browser不打开网页浏览器源码中-pager会隐式设置Option[view] 1。initMisc()中若未指定分页器则调用initPager()探测找不到时警告并回退。浏览器默认根据平台选择macOS 用open其他平台用xdg-open-no-browser将Option[browser]设为NONE。网页翻译的 URL 由_WebTranslateUrl()生成如 Google 的translate.google.com/translate?hlsltlu可通过-browser在浏览器中打开指定 URL 的翻译页。网络类选项代理与 User-Agent选项作用-x HOST:PORT,-proxy HOST:PORT使用给定端口上的 HTTP 代理覆盖环境变量$HTTP_PROXY与$http_proxy-u STRING,-user-agent STRING指定 User-Agent 标识覆盖环境变量$USER_AGENT-4,-ipv4,-inet4-only仅连接 IPv4 地址-6,-ipv6,-inet6-only仅连接 IPv6 地址源码中默认 User-Agent 是一段完整的浏览器标识Mozilla/5.0 ... Chrome/104.0.0.0 ... Edg/104.0.1293.54优先取$USER_AGENT。-4/-6将Option[ip-version]设为 4 或 6供底层 HTTP 服务选择 IP 协议栈。交互式 Shell 选项-I / -E选项作用-I,-interactive,-shell启动交互式 Shell尽可能调用rlwrap除非指定了-no-rlwrap-E,-emacs启动 GNU Emacs 前端交互会话不能与-I或-no-rlwrap同时使用-no-rlwrap启动交互 Shell 时不调用 rlwrap当终端类型不被 rlwrap 支持时有用例如 emacs 终端交互式 Shell 的实现位于 include/REPL.awk。welcome()输出欢迎消息prompt()负责渲染提示符支持strftime()风格的时间占位符%H、%M、%S等以及%_xxx 的翻译提示、%l/%L宿主语言名、%S源语言英文名多语言用连接、%T等自定义占位符。仓库还附带了 Emacs 前端脚本 google-translate-mode.el与-E配合使用。rlwrap 的封装逻辑在 include/Utils.awk 的rlwrapMe()它会探测系统是否安装 rlwrap并以-no-rlwrap参数重新拉起自身避免无限递归封装。I/O 选项输入输出重定向选项作用-i FILENAME,-input FILENAME指定输入文件源文本从该文件读取替代标准输入-o FILENAME,-output FILENAME指定输出文件译文写入该文件替代标准输出这两个选项使trans很容易嵌入脚本流水线trans -i input.txt -o output.txt zh:en cat input.txt | trans -o output.txt zh:en源码中Option[output]默认值为STDOUTinclude/Main.awk 的init()当没有非选项文本参数且未指定-i时Option[input]自动设为STDIN进入translateMain()逐行翻译流程。语言偏好选项-s / -t / -hl 与快捷格式宿主语言选项作用-hl CODE,-host CODE指定宿主语言verbose 模式下除源语言和目标语言外的提示性文字如 Translations of都用该语言显示对 brief 模式无效省略时默认用英语覆盖环境变量$LC_ALL、$LANG与$HOST_LANG源语言与目标语言选项作用-s CODES,-sl CODES,-source CODES,-from CODES指定源语言原文语言多语言用连接省略时自动识别存在误识别可能覆盖环境变量$SOURCE_LANG-t CODES,-tl CODES,-target CODES,-to CODES指定目标语言译文语言多语言用连接省略时译为英语覆盖环境变量$LC_ALL、$LANG与$TARGET_LANG源码中宿主语言默认值按优先级取$HOST_LANG→$HOME_LANG已标记待移除的旧变量→ 由 locale 推导的UserLang即跟随系统语言环境目标语言默认值取$TARGET_LANG或UserLang。快捷格式SOURCE:TARGETS这是 man 手册中特别强调的简便写法支持以下几种形态:与可以互换使用SOURCE-CODE:TARGET-CODE如en:zhSOURCE-CODE:TARGET-CODE1TARGET-CODE2...如en:zhjako多目标语言SOURCE-CODETARGET-CODE如enzhSOURCE-CODETARGET-CODE1TARGET-CODE2...规则源语言或目标语言可以省略其一但分隔符必须保留。例如:zh表示自动识别源语言译成中文en:表示从英文自动选择目标语言。对应的正则解析位于 include/Main.awk 中能同时处理前缀与区域子标签如zh-CN等变体并将多个代码按拆分进Option[sls]/Option[tl]数组。文本预处理与其他选项选项作用-j,-join-sentence把所有参数当作一个完整句子翻译-no-init不加载任何初始化脚本--选项结束标记其后的所有参数都按文本处理-j在 include/Main.awk 中通过noargv[0] join(noargv, )实现把散落的单词合并成单句再交给翻译引擎避免逐词翻译导致语序割裂。例如trans -j -b zh I love open source software # 等价于 trans -b zh I love open source software退出状态状态码含义0翻译成功1出错在 include/Main.awk 的BEGIN块中ExitCode初始化为 0遇到参数错误如已废弃的-r、-prompt、-prompt-color会打印[ERROR]提示并以exit 1结束拼写检查器发现拼写错误时也会置ExitCode 1见 include/Translators/SpellChecker.awk。环境变量一览man 手册 ENVIRONMENT 节列出全部可用的环境变量它们与对应选项等价选项优先级更高环境变量等价选项PAGER-pagerBROWSER-browserPLAYER-playerHTTP_PROXY-proxyUSER_AGENT-user-agentHOST_LANG-host宿主语言SOURCE_LANG-sourceTARGET_LANG-target另有两类特殊关联$COLUMNS影响默认宽度-w可覆盖$LC_ALL/$LANG同时参与宿主语言与目标语言的默认推导。这些默认值的装配全部集中在 include/Main.awk 的init()函数中例如Option[width] ENVIRON[COLUMNS] ? ENVIRON[COLUMNS] - 2 : 0 Option[proxy] ENVIRON[HTTP_PROXY] ? ENVIRON[HTTP_PROXY] : ENVIRON[http_proxy] Option[sl] ENVIRON[SOURCE_LANG] ? ENVIRON[SOURCE_LANG] : auto初始化脚本FILES 节详解man 手册 FILES 节列出了 4 个初始化脚本加载位置按优先级从高到低为路径作用域./.trans当前目录项目级$HOME/.translate-shell/init.trans用户级$XDG_CONFIG_HOME/translate-shell/init.trans用户级XDG 规范/etc/translate-shell系统级加载逻辑在 include/Main.awk 的initScript()中它按上述顺序查找第一个存在的文件并读取同时该函数还额外检查了$HOME/.config/translate-shell/init.transXDG 默认目录的兼容路径。-no-init可以完全跳过初始化脚本。初始化脚本的内容是:option value形式的配置指令键名带冒号前缀由 include/Script.awk 的loadOptions()解析支持十进制数字如:indent 2布尔值true/false如:verbose false带引号字符串如:fmt-prompt trans:%_字符串列表如:tl [zh ja]初始化脚本用于持久化配置例如在~/.translate-shell/init.trans中写入:engine google :verbose true :indent 2 :fmt-prompt trans %T 加载顺序include/Main.awkBEGIN块为默认值init()→ 初始化脚本initScript()→ 命令行选项。因此命令行选项拥有最高优先级脚本次之内置默认值最低——这与 man 手册的表述一致。值得注意的细节脚本加载后还会把Option[tl]强制转换为数组形态以满足多目标语言的内部数据结构要求。从源码看请求链路一次翻译发生了什么理解trans的选项后不妨深入一次翻译请求的完整链路对应 include/TranslatorInterface.awk 与各引擎实现解析阶段include/Main.awk 的BEGIN块按正则逐条匹配参数填充Option[]数组剩余参数收集为文本初始化initMisc()完成宽度探测、BiDi 工具探测、播放器/分页器探测、HTTP 服务初始化引擎分发_Translate()通过engineMethod(Translate)调用当前引擎如autoTranslate内部再按语言支持情况切换到 google 或 bing构造请求各引擎生成请求 URL/正文例如 Google 引擎include/Translators/GoogleTranslate.awk使用translate_a/single?clientgtxdtbddtex...sltlhlq还会用genTK()计算tk签名参数模拟浏览器端 token 算法基于 gawk 位运算实现网络传输底层通过 gawk 的|双向管道与 HTTP 服务交互见initHttpService()响应解析各引擎用 include/Parser.awk 中的tokenize()parseJson()把 JSON 响应解析为关联数组 AST再提取译文、音标、词典、候选翻译等字段渲染输出按 verbose/brief 模式与各项-show-*开关经prettify()include/Theme.awk着色后输出。Parser.awk的词法/语法分析器设计颇具通用性tokenize()支持引号、转义、C/Lisp/ML 风格的注释与数字字面量十进制/八进制/十六进制/科学计数法parseJson()/parseList()/parseJsonArray()用括号栈把 token 流折叠成多维数组 AST。这一层直接服务于 Google 的 JSON、Bing 的 JSON 与 Apertium 的 JSON 响应解析配套的单元测试位于 test/TestParser.awk。构建、测试与安装仓库通过 Makefile 管理构建与安装make # 构建默认 target 为 bash即生成自包含的 bash 脚本 make test # 构建并运行测试test.awk引入 test/ 下的各测试模块 make check # 构建、运行测试并做冒烟验证 make install # 安装到 $(PREFIX)/bin/trans 与 $(PREFIX)/share/man/man1/trans.1make install默认安装前缀为/usr/local可用PREFIX/usr覆盖并把 man/trans.1由 man/trans.1.md 生成的 roff 手册安装到 man1 目录。源码入口为 translate.awk它通过 gawk 的include机制按依赖顺序引入 include/Commons.awk、include/Utils.awk、include/LanguageData.awk、include/LanguageHelper.awk、include/Help.awk、include/Parser.awk、include/Theme.awk、include/Translate.awk、include/TranslatorInterface.awk、include/Translators/_.awk、include/Script.awk、include/REPL.awk、include/Main.awk 等全部模块。运行环境要求 gawk 4.0.0 及以上include/Utils.awk 的initGawk()会做版本检查并拒绝旧版本。常见用法速查目的命令中文译为英文默认引擎 autotrans zh:en 你好或trans -t en 你好译成中文trans :zh hello world自动识别源语言指定引擎trans -e bing en:zh hello简洁模式trans -b zh hello词典模式trans -d en:zh hello语言识别trans -identify こんにちは朗读译文trans -p -t zh hello朗读原文trans -speak en:zh hello下载译文音频trans -download-audio-as hello.mp3 -t zh hello多目标语言trans en:zhjako hello管道输入echo hello \| trans -b zh文件翻译trans -i notes.txt -o notes.zh.txt en:zh交互式会话trans -I查看语言代码表trans -list-all查看引擎列表trans -S结语translate-shell以 gawk 脚本实现了完整的命令行翻译工作流多引擎抽象与自动调度、完善的显示控制、语音朗读与下载、终端分页、交互式 REPL、初始化脚本持久化配置以及自研的 JSON/Token 解析器全部集中在 include 目录的模块化 awk 源码中。man 手册 man/trans.1.md 是其全部能力的权威索引——本文已将手册中的每个选项、环境变量与文件机制逐条展开并结合 include/Main.awk、include/TranslatorInterface.awk、include/Translators、include/Script.awk、include/Theme.awk 等源码给出了底层实现依据。日常使用、脚本集成或二次开发均可直接对照本文与仓库源码进行。赞分享CLI开发工具【免费下载链接】translate-shell:speech_balloon: Command-line translator using Google Translate, Bing Translator, Yandex.Translate, etc.项目地址https://gitcode.com/gh_mirrors/tr/translate-shell点击查看免费下载相关推荐终极指南在WSL中完美集成Translate Shell命令行翻译工具终极指南在WSL中完美集成Translate Shell命令行翻译工具 想要在Windows系统中享受Linux终端的高效翻译体验吗 TranslateCLI开发工具Translate Shell 终极指南如何在命令行中快速实现多语言翻译Translate Shell 终极指南如何在命令行中快速实现多语言翻译 在科学计算和编程开发中我们经常需要处理多语言文本的翻译需求。Translate SCLI开发工具Translate Shell 完全指南基于 gawk 的命令行翻译工具安装、参数与实战Translate Shell 完全指南基于 gawk 的命令行翻译工具安装、参数与实战 Translate Shell 是一个用 GNU Awk 编写的命令CLI开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑