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"}'

性能优化建议

  1. 使用gunicorn提升并发能力:
gunicorn -w 4 -b :5000 trans_api:app
  1. 添加Redis缓存高频翻译结果
  2. 通过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%的成本,同时保证了技术术语的一致性。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐