Terjemahan Multi-Sumber (MTRAN) dari proyek ini menyediakan layanan ringan yang mengintegrasikan berbagai terjemahan online utama dan fungsi TTS . Program ini mengirimkan permintaan HTTP ke server target online yang didukung, memperoleh dan mem -parsing hasil yang dikembalikan, memberikan kenyamanan kepada pengguna. Saat ini, proyek ini gratis dan open source , dan pengembang dapat melakukan pengembangan sekunder berdasarkan ini.
Saat ini sumber dukungan dan bahasa adalah sebagai berikut:
| Sumber Terjemahan | Alamat server | Bahasa Dukungan | Jalan |
|---|---|---|---|
| Terjemahan Baidu | http://fanyi.baidu.com/v2transapi | Cina, Inggris, Jepang, Korea, Prancis, Rusia, Jerman | Terjemahan |
| Terjemahan Youdao | http://fanyi.youdao.com/translate_o | Cina, Inggris, Jepang, Korea, Prancis, Rusia | Terjemahan |
| Google Terjemahan | https://translate.google.cn/translate_a/single | Cina, Inggris, Jepang, Korea, Prancis, Rusia, Jerman | Terjemahan |
| Penerjemah tencent | http://fanyi.qq.com/api/translate | Cina, Inggris, Jepang, Korea, Prancis, Rusia, Jerman | Terjemahan |
| Terjemahan ome | http://www.omianyi.com/transsents.do | Cina, Inggris | Terjemahan |
| Trycan | http://fanyi.trycan.com/transfer.do | Cina, Inggris | Terjemahan |
| Kingsoft Love CI Domineer | http://fy.iciba.com/ajax.php?a=fy | Cina, Inggris, Jepang, Korea, Prancis, Jerman | Terjemahan |
| Terjemahan Sogou | http://fanyi.sogou.com/reventondc/translate | Cina, Inggris, Jepang, Korea, Prancis, Rusia, Jerman | Terjemahan |
| Sumber TTS | Alamat server | Bahasa Dukungan |
|---|---|---|
| Baidu tts | http://fanyi.baidu.com/gettts | Cina, Inggris, Jepang, Korea, Prancis, Rusia, Jerman, Thailand |
| Yodao tts | http://tts.youdao.com/fanyivoice | Bahasa Inggris, Jepang, Korea, Prancis |
| Google TTS | https://translate.google.cn/translate_tts | Cina, Inggris, Jepang, Korea, Prancis, Rusia, Jerman |
| Tencent tts | http://audiodetect.browser.qq.com:8080/tts | Cina, Inggris, Jepang, Korea |
| Sogou tts | http://fanyi.sogou.com/reventondc/syncthesis | Cina, Inggris |
Proyek ini dikembangkan menggunakan Idea + Maven . Harap tambahkan dependensi berikut di 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 );
}
}
}Proyek ini terutama mendefinisikan paket -paket berikut, dan penamaan serta fungsinya adalah sebagai berikut:
| Nama paket | Termasuk kelas | menjelaskan |
|---|---|---|
| com.swjtu.lang | Lang | Jenis Pencacahan, Daftar Bahasa yang Didukung |
| com.swjtu.util | Util | Toolkit |
| com.swjtu.http | Httpparams, abstracthttpattribute | Antarmuka metode HTTP dan kelas abstrak |
| com.swjtu.querier | Querier | Generik, queryer |
| com.swjtu.trans | Abstraktranslator | Kelas penerjemah (abstrak) |
| com.swjtu.trans.impl | BaidUtranslator, Googletranslator, Youdaotranslator, Icibatranslator, Omitranslator, Sogouttranslator, Tencenttranslator, TryCanTranslator | Kelas Entitas Penerjemah |
| com.swjtu.tts | Abstraktts | Kelas Abstrak TTS |
| com.swjtu.tts.impl | Baidutts, Youdaotts, Googletts, Tencenttts, Sogoutts | Kelas Entitas TTS |
Struktur proyek

com.swjtu.http Paket/Diagram Kelas

com.swjtu.querier Paket/diagram kelas

diagram paket/kelas com.swjtu.trans

com.swjtu.trans.impl diagram paket/kelas

diagram paket/kelas com.swjtu.tts

com.swjtu.tts.Impl diagram paket/kelas

com.swjtu.util Paket/diagram kelas

Pencacahan LANG : Menentukan bahasa yang didukung atau didukung, dan secara seragam menstandarkan daftar bahasa.
public enum LANG {
ZH , // 中文
EN , // 英语
JP , // 日语
JPKA , // 日语假名
TH , // 泰语
...
} Kelas Util : berisi dan mengimplementasikan beberapa metode praktis.
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 ); Kelas Querier : Menentukan kelas Querier dan menggunakan pola pengamat. Kelas ini berisi koleksi, elemen dalam koleksi adalah kelas penerjemah atau kelas TTS. Setelah mengatur parameter melalui setParams() , jalankan metode execute() untuk mengirim permintaan dan mengembalikan hasilnya. Elemen dapat ditambahkan atau dihapus ke pengumpulan melalui metode attach() dan 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 );
...
} Antarmuka HttpParams : Menentukan metode antarmuka untuk mengatur format data http
public interface HttpParams {
public void setFormData ( LANG source , String text ); // 设置 TTS 参数的接口方法
public void setFormData ( LANG from , LANG to , String text ); // 设置翻译器参数的接口方法
} Kelas AbstractHttpAttribute : Proses Permintaan dan Kontrol Terkait dengan Permintaan 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 (); Kelas AbstractTranslator : mewarisi dari kelas AbstractHttpAttribute , mengimplementasikan antarmuka HttpParams , dan mendefinisikan kelas penerjemah abstrak.
@ 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 ; // 解析返回结果Kelas AbstractTTS : mewarisi dari kelas AbstractHttpAttribute , mengimplementasikan antarmuka HttpParams , dan mendefinisikan kelas TTS abstrak.
@ 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" );
...
} Proyek ini merangkum beberapa metode dan memaparkan 5 metode API melalui kelas generik Querier . Ini sangat sederhana dan mudah digunakan. Lihat contoh untuk detailnya:
// 设置查询器参数
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 ); // 移除查询器中的元素Proyek ini mendukung dan menyediakan layanan terjemahan dan TTS online utama, dan dapat dengan mudah melakukan tugas terkait melalui antarmuka API yang disediakan. Pada saat yang sama, mengingat potensi kebutuhan pengguna, kami akan memperkenalkan cara memperluas berdasarkan proyek ini untuk mencapai tujuan pengembangan sekunder. Sebelum memperluas proyek ini, pengguna perlu memiliki pemahaman tertentu tentang kode sumber proyek dan pengetahuan HTTP.
Pencacahan LANG dalam Kode Proyek mendefinisikan bahasa yang paling umum digunakan. Jika bahasa yang didukung tidak dapat memenuhi kebutuhan pengguna, pengguna dapat memperluasnya sendiri.
setLangSupport() , tambahkan peta kode ke variabel langMap ;Misalnya: Misalnya, jika Anda menambahkan dukungan Spanyol ke penerjemah YouDAO :
Langkah 1: Dengan menanyakan daftar bahasa yang didukung oleh server terjemahan YouDAO, dapat dilihat bahwa bahasa Spanyol didukung dan nama kodenya adalah: es
Langkah 2: Di LANG , tambahkan kode kustom bahasa:
public enum LANG {
ZH , // 中文
EN , // 英语
JP , // 日语
JPKA , // 日语假名
TH , // 泰语
FRA , // 法语
SPA , // 西班牙语 <--- 添加语种(自定义语种代号)
KOR , // 韩语
....
} Langkah 3: Di kelas YoudaoTranslator , tambahkan peta kode:
@ 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" ); // 添加代号映射
} Pengembang mendefinisikan kelas penerjemah mereka sendiri dengan mewarisi kelas AbstractTranslator dan mengimplementasikan metode abstrak berikut di kelas:
// 添加语种支持
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 ;Catatan: Untuk beberapa permintaan HTTP yang memerlukan cookie pengaturan, silakan dapatkan dan atur cookie sebelum mengajukan permintaan. Biasanya, tekan F12 di browser chrome dan masukkan:
document.cookiedi konsol konsol untuk melihatnya.
Pengembang mendefinisikan kelas TTS mereka sendiri dengan mewarisi kelas AbstractTTS dan mengimplementasikan metode abstrak berikut di kelas:
// 添加语种支持
public abstract void setLangSupport ();
// 用于设置请求参数
public abstract void setFormData ( LANG source , String text );
// 发送 HTTP 请求并接收返回结果(通常为 JSON 或 XML 字符串,根据用户请求结果而定)
public abstract String query () throws Exception ;CATATAN: Jalur Simpan TTS default adalah: ./tts/class Name -md5 (konten yang akan dikonversi) .mp3
(如:com.swjtu.tts.impl.GoogleTTS-5757a2c16ce52b5427eb12f961d6362e.mp3)