このプロジェクトのマルチソース翻訳(MTRANS)は、さまざまな主流のオンライン翻訳とTTS関数を統合する軽量サービスを提供します。このプログラムは、サポートされているオンラインターゲットサーバーにHTTPリクエストを送信し、返された結果を取得して解析し、ユーザーに利便性を提供します。現在、このプロジェクトは無料でオープンソースであり、開発者はこれに基づいて二次開発を行うことができます。
現在、サポートソースと言語は次のとおりです。
| 翻訳ソース | サーバーアドレス | サポート言語 | 方法 |
|---|---|---|---|
| Baidu翻訳 | http://fanyi.baidu.com/v2transapi | 中国語、英語、日本、韓国語、フランス語、ロシア語、ドイツ語 | 翻訳 |
| Youdao翻訳 | http://fanyi.youdao.com/translate_o | 中国語、英語、日本、韓国語、フランス語、ロシア語 | 翻訳 |
| Google翻訳 | https://translate.google.cn/translate_a/single | 中国語、英語、日本、韓国語、フランス語、ロシア語、ドイツ語 | 翻訳 |
| Tencent翻訳者 | http://fanyi.qq.com/api/translate | 中国語、英語、日本、韓国語、フランス語、ロシア語、ドイツ語 | 翻訳 |
| オム翻訳 | http://www.omianyi.com/transsents.do | 中国語、英語 | 翻訳 |
| 試してみてください | 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ソース | サーバーアドレス | サポート言語 |
|---|---|---|
| Baidu 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 | 抽象翻訳者 | 翻訳者(要約)クラス |
| com.swjtu.trans.impl | BaidUtranslator、GoogleTranslator、YouDaotranslator、icibatranslator、 オミトラスレーター、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クラス:いくつかの実用的な方法を含み、実装します。
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" );
...
}このプロジェクトは、いくつかのメソッドをカプセル化し、 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の知識を特定して理解する必要があります。
プロジェクトコードにおけるLANGの列挙は、最も一般的に使用される言語を定義します。サポートされている言語がユーザーのニーズを満たすことができない場合、ユーザーは自分でそれを拡張できます。
setLangSupport()メソッドで、コードマップをlangMap変数に追加します。たとえば、たとえば、 Youdao翻訳者にスペイン語のサポートを追加する場合:
ステップ1:Youdao翻訳サーバーでサポートされている言語のリストを照会することにより、スペイン語がサポートされており、そのコード名は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リクエストについては、リクエストを行う前にCookieを取得して設定してください。通常、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)