MTrans

GitHub
809 206 简单 1 次阅读 1个月前数据工具音频插件
AI 解读 由 AI 自动生成,仅供参考

MTrans 是一款轻量级的多源翻译与语音合成(TTS)开源服务,旨在为开发者提供便捷的集成方案。它通过聚合百度、谷歌、有道、腾讯等主流平台的在线接口,让用户只需发送简单的 HTTP 请求,即可获取高质量的文本翻译结果或生成自然流畅的语音音频。

在日常开发中,接入单一翻译引擎往往面临语种覆盖有限、服务稳定性波动或配置复杂等痛点。MTrans 有效解决了这些问题,它不仅支持中、英、日、韩、法、俄、德等多种语言的互译,还允许开发者灵活切换不同的数据源,从而提升应用的容错能力与服务可用性。其核心亮点在于高度模块化的架构设计,基于 Java 语言构建,提供了清晰的查询器模式(Querier),用户仅需几行代码即可完成从参数设置到结果获取的全流程,极大降低了二次开发的门槛。

这款工具特别适合需要快速集成多语言功能的软件工程师、后端开发人员以及进行自然语言处理研究的技术人员。无论是构建跨语言聊天机器人、开发国际化应用,还是搭建个人辅助工具,MTrans 都能作为一个可靠的基础设施组件,帮助创作者专注于业务逻辑本身,而无需重复造轮子去处理复杂的底层通信与解析工作。

使用场景

某跨境电商开发团队正在构建一个多语言商品评论自动分析系统,需要实时将全球用户的评论翻译成中文并生成语音播报供运营人员监听。

没有 MTrans 时

  • 接口对接繁琐:开发人员需分别阅读百度、谷歌、有道等各家翻译平台的 API 文档,编写多套独立的 HTTP 请求与解析代码,重复工作量巨大。
  • 单点故障风险高:系统硬编码绑定单一翻译源(如仅用谷歌),一旦该服务网络波动或被限流,整个评论处理流程即刻中断,缺乏容错机制。
  • 功能扩展困难:若要增加 TTS 语音合成功能,需重新寻找音频接口并适配新的鉴权逻辑,导致项目迭代周期被迫拉长。
  • 维护成本高昂:不同厂商的返回数据格式各异,每次上游接口变更都需要人工逐一排查修改,极易引发线上故障。

使用 MTrans 后

  • 统一调用标准:通过 MTrans 提供的标准化 Querier 接口,团队仅需几行代码即可灵活切换百度、腾讯、搜狗等七种翻译源,无需关心底层协议差异。
  • 多源冗余备份:系统可轻松配置“主备模式”,当谷歌翻译响应超时时,MTrans 能自动无缝切换至有道或百度翻译,确保业务 7x24 小时不间断运行。
  • 译音一体化集成:利用 MTrans 内置的 TTS 模块,开发人员可直接复用同一套架构调用百度或谷歌的语音合成服务,快速实现“文本翻译 + 语音播报”闭环。
  • 轻量级易维护:作为开源轻量级库,MTrans 屏蔽了各厂商复杂的参数加密与解析逻辑,后续新增语种或更换服务商只需调整配置类即可。

MTrans 通过聚合多源翻译与 TTS 能力,将原本分散脆弱的异构接口整合为稳定统一的标准化服务,显著提升了跨国数据处理的效率与鲁棒性。

运行环境要求

操作系统
  • 未说明
GPU

不需要 GPU

内存

未说明

依赖
notes本项目为 Java 开发,需使用 IDEA + Maven 环境。不支持 Python。主要功能是通过 HTTP 请求调用百度、谷歌、有道等在线翻译及 TTS 接口,无需本地模型文件。
python不适用
org.apache.httpcomponents:httpclient:4.5.5
com.fasterxml.jackson.core:jackson-databind:2.9.5
MTrans hero image

快速开始

MTrans 项目介绍

本项目 多源翻译 (Multi-source Translation, MTrans),提供了集多种主流的 在线翻译TTS 功能于一身的轻量级服务。通过程序向所支持的在线目标服务器发送 HTTP 请求,获取并解析返回的结果,为使用者提供便利。目前,本项目免费开源,开发者可基于此进行二次开发。

目前支持 语种 如下:

翻译源 服务器地址 支持语种 方式
百度翻译 http://fanyi.baidu.com/v2transapi 中文、英语、日语、韩语、法语、俄语、德语 互译
有道翻译 http://fanyi.youdao.com/translate_o 中文、英语、日语、韩语、法语、俄语 互译
谷歌翻译 https://translate.google.cn/translate_a/single 中文、英语、日语、韩语、法语、俄语、德语 互译
腾讯翻译君 http://fanyi.qq.com/api/translate 中文、英语、日语、韩语、法语、俄语、德语 互译
欧米翻译 http://www.omifanyi.com/transSents.do 中文、英语 互译
TryCan http://fanyi.trycan.com/Transfer.do 中文、英语 互译
金山爱词霸 http://fy.iciba.com/ajax.php?a=fy 中文、英语、日语、韩语、法语、德语 互译
搜狗翻译 http://fanyi.sogou.com/reventondc/translate 中文、英语、日语、韩语、法语、俄语、德语 互译
TTS 源 服务器地址 支持语种
百度 TTS http://fanyi.baidu.com/gettts 中文、英语、日语、韩语、法语、俄语、德语、泰语
有道 TTS http://tts.youdao.com/fanyivoice 英语、日语、韩语、法语
谷歌 TTS https://translate.google.cn/translate_tts 中文、英语、日语、韩语、法语、俄语、德语
腾讯 TTS http://audiodetect.browser.qq.com:8080/tts 中文、英语、日语、韩语
搜狗 TTS http://fanyi.sogou.com/reventondc/synthesis 中文、英语

一、快速开始

1、环境配置

本项目使用 IDEA + Maven 进行开发,请在 pom.xml 中添加如下依赖。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.5</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.5</version>
</dependency>

2、最小实例

  • 最小翻译实例
    import com.swjtu.lang.LANG;
    import com.swjtu.querier.Querier;
    import com.swjtu.trans.AbstractTranslator;
    import com.swjtu.trans.impl.GoogleTranslator;
    
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {
            Querier<AbstractTranslator> querierTrans = new Querier<>();                   // 获取查询器
    
            querierTrans.setParams(LANG.ZH, LANG.EN, "如果这都不算爱,我有什么好悲哀!");    // 设置参数
            
            querierTrans.attach(new GoogleTranslator());                                  // 向查询器中添加 Google 翻译器
    
            List<String> result = querierTrans.execute();                                 // 执行查询并接收查询结果
    
            for (String str : result) {
                System.out.println(str);
            }
        }
    }
    
  • 最小 TTS 实例
    import com.swjtu.lang.LANG;
    import com.swjtu.querier.Querier;
    import com.swjtu.tts.AbstractTTS;
    import com.swjtu.tts.impl.BaiduTTS;
    
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {
            Querier<AbstractTTS> querierTTS = new Querier<>();                          // 获取查询器
    
            querierTTS.setParams(LANG.EN, "To be or not to be, that is a question.");   // 设置参数
            
            querierTTS.attach(new BaiduTTS());                                          // 向查询器中添加 Google 翻译器
    
            List<String> result = querierTTS.execute();                                 // 执行查询并接收查询结果
    
            for (String str : result) {
                System.out.println(str);
            }
        }
    }
    

二、MTrans 使用说明

1、包/类 一览表

本项目中主要定义了如下几个包,其命名及作用如下表:

包名 包含类 说明
com.swjtu.lang LANG 枚举类型,支持的语种列表
com.swjtu.util Util 工具包
com.swjtu.http HttpParamsAbstractHttpAttribute HTTP 方法接口及抽象类
com.swjtu.querier Querier 泛型,查询器
com.swjtu.trans AbstractTranslator 翻译器(抽象)类
com.swjtu.trans.impl BaiduTranslatorGoogleTranslatorYoudaoTranslatorIcibaTranslator
OmiTranslatorSogouTranslatorTencentTranslatorTrycanTranslator
翻译器实体类
com.swjtu.tts AbstractTTS TTS 抽象类
com.swjtu.tts.impl BaiduTTSYoudaoTTSGoogleTTSTencentTTSSogouTTS TTS 实体类

2、类图

3、类说明

  • LANG 枚举:定义所支持或将支持的语种,统一并规范了语种列表。

    public enum LANG {
        ZH,             // 中文
        EN,             // 英语
        JP,             // 日语
        JPKA,           // 日语假名
        TH,             // 泰语
        ...
    }
    
  • Util 类:包含并实现了一些实用方法。

    public static List<NameValuePair> map2list(Map<String, String> mapParams);              // 将 Map 转换成 List
    public static String getUrlWithQueryString(String url, Map<String, String> params);     // 生成 URL
    
    // 各种格式的 MD5
    public static String md5(String input);
    public static String md5(File file);
    public static String md5(InputStream in);
    
  • Querier 类:定义了 Querier 类,使用了观察者模式。该类包含了一个集合,集合中的元素为翻译器类 或 TTS 类,通过 setParams() 设定好参数后,执行 execute() 方法发送请求,同时返回结果。可以通过 attach()detach() 方法向集合中添加或移除元素。

    public final class Querier<T extends AbstractHttpAttribute> {
        private List<T> collection;                               // 集合
    
        ...
    
        public void setParams(LANG source, String text);          // TTS 参数设置, source 源语种,text 待转换为语音的内容
        public void setParams(LANG from, LANG to, String text);   // 翻译器参数设置,from 源语种,to 目标语种,text 待翻译内容
        
        public List<String> execute() {
            List<String> result = new ArrayList<String>();
    
            for (T element : collection) {
                if (element.getClass().getName().contains("Translator")) {
                    result.add(element.run(from, to, text));
                } else if (element.getClass().getName().contains("TTS")) {
                    result.add(element.run(from, text));
                }
            }
            return result;
        }
    
        public void attach(T element);
        public void detach(T element);
    
        ...
    }
    
  • HttpParams 接口:定义了设置 HTTP 数据格式的接口方法

    public interface HttpParams {
        public void setFormData(LANG source, String text);           // 设置 TTS 参数的接口方法
        public void setFormData(LANG from, LANG to, String text);    // 设置翻译器参数的接口方法
    }
    
  • AbstractHttpAttribute 类:与 HTTP 请求相关的请求及控制流程

    public abstract String query() throws Exception;
    public abstract String run(LANG source, String text);
    public abstract String run(LANG from, LANG to, String text);
    
    // 资源释放
    public void close(HttpEntity httpEntity, CloseableHttpResponse httpResponse);
    public void close();
    
  • AbstractTranslator 类:继承自 AbstractHttpAttribute 类,并实现了 HttpParams 接口,定义了抽象的翻译器类。

    @Override
    public String run(LANG from, LANG to, String text) {
        String result = "";
        setFormData(from, to, text);
        try {
            result = parses(query());
        } catch (Exception e) {
            e.printStackTrace();
        }
        close();
        return result;
    }
    
    public abstract void setLangSupport();                              // 设置支持的语种
    public abstract String parses(String text) throws IOException;      // 解析返回结果
    
  • AbstractTTS 类:继承自 AbstractHttpAttribute 类,并实现了 HttpParams 接口,定义了抽象的 TTS 类。

    @Override
    public String run(LANG source, String text) {
        String saveFile = null;
        setFormData(source, text);
        try {
            saveFile = query();
            System.out.println(saveFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        close();
        return saveFile;
    }
    
    public String query() throws IOException {
        ...
    
        // 将 TTS 结果保存为 mp3 音频文件,以待转换文本的 md5 码作为部分文件名
        StringBuilder saveFile = new StringBuilder();
        saveFile.append("./tts/")
                .append(this.getClass().getName())
                .append("-")
                .append(Util.md5(uri))
                .append(".mp3");
        
        ...
    }
    

三、提供的 API

本项目封装了若干方法,并通过 Querier 泛型类暴露出来的 5个 API 方法,非常简单易于使用,详见实例:

// 设置查询器参数
public void setParams(LANG source, String text);
public void setParams(LANG from, LANG to, String text);

public List<String> execute();                       // 执行查询并返回结果
public void attach(T element);                       // 向查询器中添加元素
public void detach(T element);                       // 移除查询器中的元素

四、如何扩展?

本项目支持并提供了主流的 在线翻译TTS 服务,通过提供的 API 接口可方便的进行相关任务。同时,考虑到用户潜在的需求,现介绍如何基于本项目进行扩展,达到二次开发的目的。在扩展本项目之前,用户需对项目源码及 HTTP 知识有一定的了解。

1、扩展语种

项目代码中枚举 LANG 定义了大部分常用的语种,若所支持的语种不能满足用户的需求时,用户可自行扩展。

  • 确定目标服务器支持的语种及该语种代号;
  • 将所需语种自定义代号添加到枚举中;
  • 在实体类 setLangSupport() 方法中,将代号映射添加到 langMap 变量中;

举例:如对 Youdao 翻译器添加 西班牙语 的支持:

  • 步骤一:通过查询有道翻译服务器所支持的语种列表可知,支持西班牙语种且其代号为:es

  • 步骤二:在 LANG 中,添加语种自定义代号:

    public enum LANG {
        ZH,             // 中文
        EN,             // 英语
        JP,             // 日语
        JPKA,           // 日语假名
        TH,             // 泰语
        FRA,            // 法语
        SPA,            // 西班牙语    <---  添加语种(自定义语种代号)
        KOR,            // 韩语
        ....
    }
    
  • 步骤三:在 YoudaoTranslator 类中,添加代号映射:

    @Override
    public void setLangSupport() {
        langMap.put(LANG.ZH, "zh-CHS");
        langMap.put(LANG.EN, "en");
        langMap.put(LANG.JP, "ja");
        langMap.put(LANG.KOR, "ko");
        langMap.put(LANG.FRA, "fr");
        langMap.put(LANG.RU, "ru");
        langMap.put(LANG.SPA, "es");                  // 添加代号映射
    }
    

2、扩展翻译器

开发者通过继承 AbstractTranslator 类来定义自己的翻译器类,并实现该类中的如下抽象方法:

// 添加语种支持
public abstract void setLangSupport();
// 用于设置请求参数
public abstract void setFormData(LANG from, LANG to, String text);
// 发送 HTTP 请求并接收返回结果(通常为 JSON 或 XML 字符串,根据用户请求结果而定)
public abstract String query() throws Exception;
// 解析字符串,提取翻译结果
public abstract String parses(String text) throws IOException;

注意:对于某些需要设置 Cookie 的 HTTP 请求,请先获取并设置好 Cookie 再进行请求。通常,在 Chrome 浏览器中按下 F12 键,并在 Console 控制台中输入: document.cookie 即可查看。

3、扩展 TTS

开发者通过继承 AbstractTTS 类来定义自己的 TTS 类,并实现该类中的如下抽象方法:

// 添加语种支持
public abstract void setLangSupport();
// 用于设置请求参数
public abstract void setFormData(LANG source, String text);
// 发送 HTTP 请求并接收返回结果(通常为 JSON 或 XML 字符串,根据用户请求结果而定)
public abstract String query() throws Exception;

注意:TTS 保存路径默认为:./tts/类名-md5(待转换内容).mp3(如:com.swjtu.tts.impl.GoogleTTS-5757a2c16ce52b5427eb12f961d6362e.mp3)

版本历史

V2.1.0
V2.0.0

常见问题

相似工具推荐

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

OpenHands

OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。

70.6k|★★★☆☆|今天
语言模型Agent开发框架

gpt4free

gpt4free 是一个由社区驱动的开源项目,旨在聚合多种可访问的大型语言模型(LLM)和媒体生成接口,让用户能更灵活、便捷地使用前沿 AI 能力。它解决了直接调用各类模型时面临的接口分散、门槛高或成本昂贵等痛点,通过统一的标准将不同提供商的资源整合在一起。 无论是希望快速集成 AI 功能的开发者、需要多模型对比测试的研究人员,还是想免费体验最新技术的普通用户,都能从中受益。gpt4free 提供了丰富的使用方式:既包含易于上手的 Python 和 JavaScript 客户端库,也支持部署本地图形界面(GUI),更提供了兼容 OpenAI 标准的 REST API,方便无缝替换现有应用后端。 其技术亮点在于强大的多提供商支持架构,能够动态调度包括 Opus、Gemini、DeepSeek 等多种主流模型资源,并支持 Docker 一键部署及本地推理。项目秉持社区优先原则,在降低使用门槛的同时,也为贡献者提供了扩展新接口的便利框架,是探索和利用多样化 AI 资源的实用工具。

66k|★★☆☆☆|2天前
插件语言模型Agent

scikit-learn

scikit-learn 是一个基于 Python 构建的开源机器学习库,依托于 SciPy、NumPy 等科学计算生态,旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口,涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具,内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。 对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言,scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点,让用户无需重复造轮子,只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。 其核心技术亮点在于高度一致的 API 设计风格,所有估算器(Estimator)均遵循相同的调用逻辑,极大地降低了学习成本并提升了代码的可读性与可维护性。此外,它还提供了强大的模型选择与评估工具,如交叉验证和网格搜索,帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目,scikit-learn 以其稳定性、详尽的文档和活跃的社区支持,成为连接理论学习与工业级应用的最

65.6k|★☆☆☆☆|今天
开发框架其他数据工具

gstack

gstack 是 Y Combinator CEO Garry Tan 亲自开源的一套 AI 工程化配置,旨在将 Claude Code 升级为你的虚拟工程团队。面对单人开发难以兼顾产品战略、架构设计、代码审查及质量测试的挑战,gstack 提供了一套标准化解决方案,帮助开发者实现堪比二十人团队的高效产出。 这套配置特别适合希望提升交付效率的创始人、技术负责人,以及初次尝试 Claude Code 的开发者。gstack 的核心亮点在于内置了 15 个具有明确职责的 AI 角色工具,涵盖 CEO、设计师、工程经理、QA 等职能。用户只需通过简单的斜杠命令(如 `/review` 进行代码审查、`/qa` 执行测试、`/plan-ceo-review` 规划功能),即可自动化处理从需求分析到部署上线的全链路任务。 所有操作基于 Markdown 和斜杠命令,无需复杂配置,完全免费且遵循 MIT 协议。gstack 不仅是一套工具集,更是一种现代化的软件工厂实践,让单人开发者也能拥有严谨的工程流程。

64.3k|★★☆☆☆|今天
Agent插件

keras

Keras 是一个专为人类设计的深度学习框架,旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。 无论是刚入门的学生、专注算法的研究人员,还是需要快速落地产品的工程师,都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。 Keras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码,即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性,还允许开发者根据需求自由选择:利用 JAX 或 PyTorch 的即时执行模式进行高效调试,或切换至速度最快的后端以获得最高 350% 的性能提升。此外,Keras 具备强大的扩展能力,能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群,是连接原型开发与生产部署的理想桥梁。

63.9k|★★☆☆☆|昨天
开发框架数据工具其他