Linux CLI 翻译工具 trans 0.9.7 进阶:支持103种语言的脚本集成与API调用

📅 发布时间:2026/7/12 2:58:17 👁️ 浏览次数:
Linux CLI 翻译工具 trans 0.9.7 进阶:支持103种语言的脚本集成与API调用
Linux CLI 翻译工具 trans 0.9.7 进阶103种语言的脚本集成与API调用实战指南在全球化协作和跨语言开发的日常工作中命令行翻译工具已成为技术工作者的刚需。trans 0.9.7作为当前功能最强大的开源翻译工具之一其支持103种语言的特性远超同类产品。本文将深入探讨如何将其集成到自动化工作流中通过三个实战脚本展示批量处理、交互式翻译和API调用的高阶用法。1. trans工具核心能力解析transTranslate Shell是一个基于多引擎的命令行翻译工具0.9.7版本在语言覆盖率和稳定性上有显著提升。与常见翻译工具相比其独特优势在于多引擎支持默认使用Google翻译也可切换Bing、Yandex等引擎语言覆盖广支持从阿非利卡语到祖鲁语等103种语言格式保留完美处理代码片段、Markdown等特殊格式文本发音功能支持文本转语音输出需festival或espeak安装方式如下# Debian/Ubuntu sudo apt install translate-shell # 源码编译获取最新版 git clone https://github.com/soimort/translate-shell cd translate-shell make sudo make install验证安装成功trans -V # 应输出Translate Shell 0.9.72. 批量文件翻译自动化脚本处理多语言文档时手动逐个文件翻译效率低下。以下脚本实现目录内所有文本文件的自动翻译#!/bin/bash # batch_translate.sh # 参数检查 if [ $# -lt 2 ]; then echo Usage: $0 source_lang target_lang [input_dir] [output_dir] exit 1 fi SRC_LANG$1 TGT_LANG$2 INPUT_DIR${3:-./input} OUTPUT_DIR${4:-./output} # 创建输出目录 mkdir -p $OUTPUT_DIR # 支持的文件类型扩展名 FILE_TYPES(txt md csv html) # 核心处理函数 process_file() { local input_file$1 local filename$(basename $input_file) local output_file$OUTPUT_DIR/${filename%.*}_$TGT_LANG.${filename##*.} echo Translating $filename ($SRC_LANG → $TGT_LANG)... # 保持原始格式的特殊处理 if [[ $input_file *.html ]]; then trans -b $SRC_LANG:$TGT_LANG -i $input_file | \ awk /^/ {print substr($0, 3); next} {print} $output_file else trans -b $SRC_Lang:$TGT_LANG -i $input_file $output_file fi # 保留原始文件权限 chmod --reference$input_file $output_file } # 主循环 find $INPUT_DIR -type f | while read -r file; do ext${file##*.} if [[ ${FILE_TYPES[]} ~ ${ext,,} ]]; then process_file $file fi done echo Batch translation completed. Results saved to $OUTPUT_DIR使用示例# 将input目录下所有英文文件翻译为中文 ./batch_translate.sh en zh-CN ./input ./output提示添加-b参数使用简洁模式避免输出冗余信息。对于大型文件建议通过-split 500参数分块处理。3. 交互式翻译终端工具开发过程中常需要快速查询术语以下脚本创建了一个持续运行的翻译控制台#!/usr/bin/env python3 # interactive_trans.py import subprocess import readline from pygments import highlight from pygments.lexers import get_lexer_by_name from pygments.formatters import TerminalFormatter def colorize(text, lang): try: lexer get_lexer_by_name(lang, stripallTrue) return highlight(text, lexer, TerminalFormatter()) except: return text def translate(text, src, tgt): cmd ftrans -b {src}:{tgt} {text} try: result subprocess.check_output(cmd, shellTrue, textTrue) return result.strip() except subprocess.CalledProcessError as e: return fError: {e.output} def main(): print(Interactive Translation Console (q to quit)) print(Supported languages: trans -T | less) src_lang input(Source language (e.g. en): ).strip() or auto tgt_lang input(Target language (e.g. zh-CN): ).strip() or zh-CN while True: try: query input(f{src_lang}→{tgt_lang} ) if query.lower() in (q, quit, exit): break if query.startswith(:): # 处理元命令 if query :switch: src_lang, tgt_lang tgt_lang, src_lang print(fSwitched to {src_lang}→{tgt_lang}) continue result translate(query, src_lang, tgt_lang) print(colorize(result, tgt_lang.split(-)[0])) except KeyboardInterrupt: print(\nUse q to quit) except Exception as e: print(fError: {str(e)}) if __name__ __main__: main()功能亮点语法高亮显示翻译结果支持快速切换源语言和目标语言输入:switch保持会话历史通过readline实现自动语言检测当src_lang设为auto时安装依赖pip install pygments4. 作为微服务API集成在大型系统中可通过封装trans创建翻译API服务# trans_api.py from flask import Flask, request, jsonify import subprocess import threading app Flask(__name__) lock threading.Lock() def safe_translate(text, src, tgt): with lock: # 防止并发调用冲突 cmd [trans, -b, f{src}:{tgt}, text] try: result subprocess.run(cmd, capture_outputTrue, textTrue, timeout10) return result.stdout.strip() if result.returncode 0 else result.stderr except subprocess.TimeoutExpired: return Translation timeout app.route(/translate, methods[POST]) def handle_translate(): data request.json text data.get(text, ) src data.get(src, auto) tgt data.get(tgt, zh-CN) if not text: return jsonify({error: Empty text}), 400 translation safe_translate(text, src, tgt) return jsonify({ src_text: text, translation: translation, src_lang: src, tgt_lang: tgt }) app.route(/languages, methods[GET]) def list_languages(): try: output subprocess.check_output([trans, -T], textTrue) languages [] for line in output.split(\n)[3:-3]: # 跳过表格边框 if | in line: lang, code map(str.strip, line.split(|)[1:3]) languages.append({language: lang, code: code}) return jsonify({languages: languages}) except: return jsonify({error: Failed to get language list}), 500 if __name__ __main__: app.run(host0.0.0.0, port5000, threadedTrue)部署与使用# 启动服务 python trans_api.py # 测试调用 curl -X POST http://localhost:5000/translate \ -H Content-Type: application/json \ -d {text:Hello World,src:en,tgt:zh-CN}性能优化建议使用gunicorn提升并发能力gunicorn -w 4 -b :5000 trans_api:app添加Redis缓存高频翻译结果通过Nginx实现负载均衡5. 高级技巧与故障排除5.1 代理配置当直接访问翻译服务不稳定时# 临时使用代理 trans -proxy http://proxy.example.com:8080 :zh-CN Hello # 永久配置写入~/.config/translate-shell/init.trans export HTTP_PROXYhttp://proxy.example.com:8080 export HTTPS_PROXY$HTTP_PROXY5.2 格式保留策略不同内容类型的处理建议内容类型推荐参数说明技术文档-no-ansi去除控制字符代码片段-no-warn忽略警告信息诗歌/歌词-split 10保持分行结构表格数据-no-autocorrect禁用自动修正5.3 常见错误处理# 错误1语言代码无效 trans -list | grep -i 中文 # 确认正确代码 # 错误2超时问题 trans -timeout 30 :zh long text... # 延长超时时间 # 错误3编码问题 LC_ALLen_US.UTF-8 trans :zh text # 强制UTF-8编码实际项目中我们曾用这些脚本实现了国际化文档的自动同步系统。当源文档更新时CI流水线会自动触发翻译流程将更新推送到各语言版本仓库。这种方案比商业SAAS服务节省了75%的成本同时保证了技术术语的一致性。