Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

tarowatermelon/MTrans

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

32 Commits

Repository files navigation

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)

About

Multi-source Translation

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 94.1%
  • JavaScript 5.9%

AltStyle によって変換されたページ (->オリジナル) /