La traducción de múltiples fuentes (MTRAN) de este proyecto proporciona un servicio liviano que integra una variedad de funciones de traducción en línea y TTS . El programa envía solicitudes HTTP a los servidores de destino en línea compatibles, obtiene y analiza los resultados devueltos, proporcionando conveniencia a los usuarios. En la actualidad, este proyecto es gratuito y de código abierto , y los desarrolladores pueden realizar un desarrollo secundario basado en esto.
Actualmente, las fuentes e idiomas de soporte son las siguientes:
| Fuente de traducción | Dirección del servidor | Lenguajes de apoyo | Forma |
|---|---|---|---|
| Traducción de Baidu | http://fanyi.baidu.com/v2transapi | Chino, inglés, japonés, coreano, francés, ruso, alemán | Traducción |
| Traducción de YouDao | http://fanyi.youdao.com/translate_o | Chino, inglés, japonés, coreano, francés, ruso | Traducción |
| Google Translate | https://translate.google.cn/translate_a/single | Chino, inglés, japonés, coreano, francés, ruso, alemán | Traducción |
| Traductor de tencent | http://fanyi.qq.com/api/translate | Chino, inglés, japonés, coreano, francés, ruso, alemán | Traducción |
| Traducción | http://www.omianyi.com/transsents.do | Chino, inglés | Traducción |
| Truco | http://fanyi.trycan.com/transfer.do | Chino, inglés | Traducción |
| Kingsoft Love CI Domineer | http://fy.iciba.com/ajax.php?a=fy | Chino, inglés, japonés, coreano, francés, alemán | Traducción |
| Traducción de Sogou | http://fanyi.sogou.com/reventondc/translate | Chino, inglés, japonés, coreano, francés, ruso, alemán | Traducción |
| Fuente de TTS | Dirección del servidor | Lenguajes de apoyo |
|---|---|---|
| Baidu TTS | http://fanyi.baidu.com/gettts | Chino, inglés, japonés, coreano, francés, ruso, alemán, tailandés |
| YouDao TTS | http://tts.youdao.com/fanyivoice | Inglés, japonés, coreano, francés |
| Google TTS | https://translate.google.cn/translate_tts | Chino, inglés, japonés, coreano, francés, ruso, alemán |
| Tencent TTS | http://audiodetect.browser.qq.com:8080/tts | Chino, inglés, japonés, coreano |
| Sogou TTS | http://fanyi.sogou.com/reventondc/syncthesis | Chino, inglés |
Este proyecto se desarrolla utilizando Idea + Maven . Agregue las siguientes dependencias en 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 );
}
}
}Este proyecto define principalmente los siguientes paquetes, y sus nombres y funciones son los siguientes:
| Nombre del paquete | Incluir clases | ilustrar |
|---|---|---|
| com.swjtu.lang | Lang | Tipo de enumeración, lista de idiomas compatibles |
| com.swjtu.util | Utilizar | Kit de herramientas |
| com.swjtu.http | Httparams, abstractthttpattribute | Interfaz de método HTTP y clases abstractas |
| com.swjtu.querier | Quemar | Genéricos, consulta |
| com.swjtu.trans | Traductor de abstracto | Clase de traductor (Resumen) |
| com.swjtu.trans.impl | Baidutranslator, Googletranslator, Yodaotranslator, Icibatranslator, Omitranslator, SogoUtranslator, TencentTranslator, Trycantranslator | Clase de entidad traductor |
| com.swjtu.tts | Abstracttts | Clase abstracta de TTS |
| com.swjtu.tts.Impl | Baidutts, Yodaotts, Googletts, Tencenttts, Sogoutts | Clase de entidad TTS |
Estructura de proyectos

com.swjtu.http paquete/diagrama de clases

com.swjtu.querier Package/Class Diagram

com.swjtu.trans paquete/diagrama de clases

com.swjtu.trans.impl paquete/diagrama de clases

com.swjtu.tts paquete/diagrama de clases

com.swjtu.tts.impl paquete/diagrama de clases

com.swjtu.util paquete/diagrama de clases

Enumeración LANG : define los idiomas compatibles o admitidos, y estandariza de manera uniforme la lista de idiomas.
public enum LANG {
ZH , // 中文
EN , // 英语
JP , // 日语
JPKA , // 日语假名
TH , // 泰语
...
} Clase Util : contiene e implementa algunos métodos prácticos.
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 ); Clase Querier : Define Querier y usa el patrón Observer. Esta clase contiene una colección, los elementos de la colección son la clase de traductor o la clase TTS. Después de configurar los parámetros a través de setParams() , ejecute execute() para enviar la solicitud y devolver el resultado. Los elementos se pueden agregar o eliminar a la colección a través de attach() y 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 );
...
} Interfaz HttpParams : define el método de interfaz para configurar el formato de datos HTTP
public interface HttpParams {
public void setFormData ( LANG source , String text ); // 设置 TTS 参数的接口方法
public void setFormData ( LANG from , LANG to , String text ); // 设置翻译器参数的接口方法
} Clase AbstractHttpAttribute : Solicitud y proceso de control relacionado con las solicitudes 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 (); Clase AbstractTranslator : hereda de la clase AbstractHttpAttribute , implementa la interfaz HttpParams y define las clases de traductor abstracto.
@ 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 ; // 解析返回结果Clase AbstractTTS : hereda de la clase AbstractHttpAttribute , implementa la interfaz HttpParams y define la clase TTS abstracta.
@ 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" );
...
} Este proyecto encapsula varios métodos y expone 5 métodos API a través de Querier . Es muy simple y fácil de usar. Vea el ejemplo de detalles:
// 设置查询器参数
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 ); // 移除查询器中的元素Este proyecto admite y proporciona servicios de traducción en línea y TTS , y puede realizar fácilmente tareas relacionadas a través de la interfaz API proporcionada. Al mismo tiempo, teniendo en cuenta las necesidades potenciales de los usuarios, presentaremos cómo expandirse en función de este proyecto para lograr el propósito del desarrollo secundario. Antes de expandir este proyecto, los usuarios deben tener una cierta comprensión del código fuente del proyecto y el conocimiento HTTP.
La enumeración de LANG en el código del proyecto define los idiomas más utilizados. Si el idioma compatible no puede satisfacer las necesidades del usuario, el usuario puede expandirlo por sí mismo.
setLangSupport() de Entity Class, agregue el mapa de código a la variable langMap ;Por ejemplo: por ejemplo, si agrega soporte en español al traductor de YouDao :
Paso 1: al consultar la lista de idiomas compatibles con el servidor de traducción de Yodao, se puede ver que el idioma de español es compatible y su nombre en código es: es
Paso 2: en LANG , agregue el código personalizado del idioma:
public enum LANG {
ZH , // 中文
EN , // 英语
JP , // 日语
JPKA , // 日语假名
TH , // 泰语
FRA , // 法语
SPA , // 西班牙语 <--- 添加语种(自定义语种代号)
KOR , // 韩语
....
} Paso 3: En la clase de YoudaoTranslator , agregue el mapa de código:
@ 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" ); // 添加代号映射
} Los desarrolladores definen su propia clase de traductor heredando la clase de AbstractTranslator e implementan los siguientes métodos abstractos en la clase:
// 添加语种支持
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 ;Nota: Para algunas solicitudes HTTP que requieren configuración de cookies, obtenga y establezca las cookies antes de hacer la solicitud. Por lo general, presione F12 en el navegador Chrome e ingrese:
document.cookieen la consola de la consola para verlo.
Los desarrolladores definen su propia clase TTS heredando la clase AbstractTTS e implementan los siguientes métodos de abstracto en la clase:
// 添加语种支持
public abstract void setLangSupport ();
// 用于设置请求参数
public abstract void setFormData ( LANG source , String text );
// 发送 HTTP 请求并接收返回结果(通常为 JSON 或 XML 字符串,根据用户请求结果而定)
public abstract String query () throws Exception ;Nota: La ruta de guardado TTS predeterminada es: ./tts/class Name -md5 (contenido a convertir) .mp3
(如:com.swjtu.tts.impl.GoogleTTS-5757a2c16ce52b5427eb12f961d6362e.mp3)