이 프로젝트의 멀티 소스 번역 (MTRAN)은 다양한 주류 온라인 번역 및 TTS 기능을 통합하는 경량 서비스를 제공합니다. 이 프로그램은 지원되는 온라인 대상 서버에 HTTP 요청을 보내고 반환 된 결과를 얻고 구문 분석하여 사용자에게 편의를 제공합니다. 현재이 프로젝트는 무료이며 오픈 소스 이며 개발자는 이에 따라 2 차 개발을 수행 할 수 있습니다.
현재 지원 소스 및 언어는 다음과 같습니다.
| 번역 소스 | 서버 주소 | 언어 지원 | 방법 |
|---|---|---|---|
| 바이두 번역 | http://fanyi.baidu.com/v2transapi | 중국어, 영어, 일본어, 한국, 프랑스어, 러시아어, 독일어 | 번역 |
| Youdao 번역 | http://fanyi.youdao.com/translate_o | 중국어, 영어, 일본어, 한국, 프랑스어, 러시아어 | 번역 |
| Google 번역 | https://translate.google.cn/translate_a/single | 중국어, 영어, 일본어, 한국, 프랑스어, 러시아어, 독일어 | 번역 |
| Tencent Translator | http://fanyi.qq.com/api/translate | 중국어, 영어, 일본어, 한국, 프랑스어, 러시아어, 독일어 | 번역 |
| OME 번역 | http://www.omianyi.com/transsents.do | 중국어, 영어 | 번역 |
| Trycan | http://fanyi.trycan.com/transfer.do | 중국어, 영어 | 번역 |
| Kingsoft Love Ci Domineer | http://fy.iciba.com/ajax.php?a=fy | 중국어, 영어, 일본어, 한국, 프랑스어, 독일어 | 번역 |
| Sogou 번역 | http://fanyi.sogou.com/reventondc/translate | 중국어, 영어, 일본어, 한국, 프랑스어, 러시아어, 독일어 | 번역 |
| TTS 소스 | 서버 주소 | 언어 지원 |
|---|---|---|
| 바이두 TTS | http://fanyi.baidu.com/gettts | 중국어, 영어, 일본어, 한국, 프랑스어, 러시아어, 독일어, 태국 |
| Youdao tts | http://tts.youdao.com/fanyivoice | 영어, 일본어, 한국, 프랑스어 |
| Google TTS | https://translate.google.cn/translate_tts | 중국어, 영어, 일본어, 한국, 프랑스어, 러시아어, 독일어 |
| Tencent tts | http://audiodetect.browser.qq.com:8080/tts | 중국어, 영어, 일본어, 한국 |
| Sogou tts | http://fanyi.sogou.com/reventondc/syncthesis | 중국어, 영어 |
이 프로젝트는 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 > 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 );
}
}
} 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 );
}
}
}이 프로젝트는 주로 다음 패키지를 정의하며 이름 지정 및 기능은 다음과 같습니다.
| 패키지 이름 | 수업을 포함하십시오 | 설명 |
|---|---|---|
| com.swjtu.lang | 랭 | 열거 유형, 지원되는 언어 목록 |
| com.swjtu.util | 유도 | 툴킷 |
| com.swjtu.http | httpparams, Abstracthttpattribute | HTTP 메소드 인터페이스 및 추상 클래스 |
| com.swjtu.querier | 더 퀴어 | 제네릭, 쿼리어 |
| com.swjtu.trans | AbstractTranslator | 번역가 (초록) 클래스 |
| com.swjtu.trans.impl | Baidutranslator, Googletranslator, Youdaotranslator, Icibatranslator, Omitranslator, Sogoutranslator, TencentTranslator, TryCantranslator | 번역가 엔티티 클래스 |
| com.swjtu.tts | AbstractTts | TTS 초록 클래스 |
| com.swjtu.tts.impl | Baidutts, Youdaotts, Googletts, Tencenttts, Sogoutts | TTS 엔티티 클래스 |
프로젝트 구조

com.swjtu.http 패키지/클래스 다이어그램

com.swjtu. Querier 패키지/클래스 다이어그램

com.swjtu.trans 패키지/클래스 다이어그램

com.swjtu.trans.impl 패키지/클래스 다이어그램

com.swjtu.tts 패키지/클래스 다이어그램

com.swjtu.tts.impl 패키지/클래스 다이어그램

com.swjtu.util 패키지/클래스 다이어그램

LANG Enumeration : 지원되는 언어를 정의하고 언어 목록을 균일하게 표준화합니다.
public enum LANG {
ZH , // 中文
EN , // 英语
JP , // 日语
JPKA , // 日语假名
TH , // 泰语
...
} Util Class : 몇 가지 실용적인 방법을 포함하고 구현합니다.
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 인터페이스를 구현하고 Abstract Translator 클래스를 정의합니다.
@ 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 인터페이스를 구현하고 Abstract 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" );
...
} 이 프로젝트는 몇 가지 방법을 캡슐화하고 Querier Generic 클래스를 통해 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 인터페이스를 통해 관련 작업을 쉽게 수행 할 수 있습니다. 동시에, 사용자의 잠재적 요구를 고려할 때, 우리는이 프로젝트를 기반으로 확장하여 2 차 개발의 목적을 달성하는 방법을 소개합니다. 이 프로젝트를 확장하기 전에 사용자는 프로젝트 소스 코드 및 HTTP 지식에 대한 특정 이해가 필요합니다.
프로젝트 코드에서 LANG 의 열거는 가장 일반적으로 사용되는 언어를 정의합니다. 지원되는 언어가 사용자의 요구를 충족시킬 수없는 경우 사용자는 스스로 확장 할 수 있습니다.
setLangSupport() 메소드에서 코드 맵을 langMap 변수에 추가하십시오.예를 들어 : 예를 들어, YouDAO 번역기에 스페인어 지원을 추가하는 경우 :
1 단계 : YouDAO Translation Server에서 지원하는 언어 목록을 쿼리하면 스페인어 이름이 지원되고 코드 이름이 es 같습니다.
2 단계 : LANG 에서 언어 사용자 정의 코드 추가 :
public enum LANG {
ZH , // 中文
EN , // 英语
JP , // 日语
JPKA , // 日语假名
TH , // 泰语
FRA , // 法语
SPA , // 西班牙语 <--- 添加语种(自定义语种代号)
KOR , // 韩语
....
} 3 단계 : 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" ); // 添加代号映射
} 개발자는 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 ;참고 : 쿠키를 설정 해야하는 일부 HTTP 요청의 경우 요청을하기 전에 쿠키를 얻고 설정하십시오. 일반적으로 Chrome 브라우저에서 F12
document.cookie누르고 다음을 입력하십시오.
개발자는 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/class name -md5 (변환 할 내용) .mp3
(如:com.swjtu.tts.impl.GoogleTTS-5757a2c16ce52b5427eb12f961d6362e.mp3)