Linux CLI 翻译工具 trans 0.9.7 进阶:支持103种语言的脚本集成与API调用
·
Linux CLI 翻译工具 trans 0.9.7 进阶:103种语言的脚本集成与API调用实战指南
在全球化协作和跨语言开发的日常工作中,命令行翻译工具已成为技术工作者的刚需。trans 0.9.7作为当前功能最强大的开源翻译工具之一,其支持103种语言的特性远超同类产品。本文将深入探讨如何将其集成到自动化工作流中,通过三个实战脚本展示批量处理、交互式翻译和API调用的高阶用法。
1. trans工具核心能力解析
trans(Translate 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.7
2. 批量文件翻译自动化脚本
处理多语言文档时,手动逐个文件翻译效率低下。以下脚本实现目录内所有文本文件的自动翻译:
#!/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, stripall=True)
return highlight(text, lexer, TerminalFormatter())
except:
return text
def translate(text, src, tgt):
cmd = f'trans -b {src}:{tgt} "{text}"'
try:
result = subprocess.check_output(cmd, shell=True, text=True)
return result.strip()
except subprocess.CalledProcessError as e:
return f"Error: {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(f"Switched 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(f"Error: {str(e)}")
if __name__ == "__main__":
main()
功能亮点 :
- 语法高亮显示翻译结果
- 支持快速切换源语言和目标语言(输入
:switch) - 保持会话历史(通过readline实现)
- 自动语言检测(当src_lang设为auto时)
安装依赖:
pip install pygments
4. 作为微服务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_output=True, text=True, timeout=10)
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'], text=True)
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(host='0.0.0.0', port=5000, threaded=True)
部署与使用 :
# 启动服务
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_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=$HTTP_PROXY
5.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_ALL=en_US.UTF-8 trans :zh "text" # 强制UTF-8编码
实际项目中,我们曾用这些脚本实现了国际化文档的自动同步系统。当源文档更新时,CI流水线会自动触发翻译流程,将更新推送到各语言版本仓库。这种方案比商业SAAS服务节省了75%的成本,同时保证了技术术语的一致性。
更多推荐



所有评论(0)