A tradução para várias fontes (MTRANS) deste projeto fornece um serviço leve que integra uma variedade de funções on-line convencionais e TTS . O programa envia solicitações HTTP para os servidores de destino on -line suportados, obtém e analisa os resultados retornados, proporcionando conveniência aos usuários. Atualmente, este projeto é gratuito e de código aberto , e os desenvolvedores podem realizar o desenvolvimento secundário com base nisso.
Atualmente, as fontes e idiomas de suporte são os seguintes:
| Fonte de tradução | Endereço do servidor | Suportar idiomas | Caminho |
|---|---|---|---|
| Tradução Baidu | http://fanyi.baidu.com/v2transapi | Chinês, inglês, japonês, coreano, francês, russo, alemão | Tradução |
| Tradução Youdao | http://fanyi.youdao.com/translate_o | Chinês, inglês, japonês, coreano, francês, russo | Tradução |
| Google tradutor | https://translate.google.cn/translate_a/single | Chinês, inglês, japonês, coreano, francês, russo, alemão | Tradução |
| Trenker Tencent | http://fanyi.qq.com/api/translate | Chinês, inglês, japonês, coreano, francês, russo, alemão | Tradução |
| Tradução de Ome | http://www.omianyi.com/transsents.do | Chinês, inglês | Tradução |
| Trycan | http://fanyi.trycan.com/transfer.do | Chinês, inglês | Tradução |
| Kingsoft Love Ci Domineer | http://fy.iciba.com/ajax.php?a=fy | Chinês, inglês, japonês, coreano, francês, alemão | Tradução |
| Tradução SOGOU | http://fanyi.sogou.com/reventondc/translate | Chinês, inglês, japonês, coreano, francês, russo, alemão | Tradução |
| Fonte TTS | Endereço do servidor | Suportar idiomas |
|---|---|---|
| Baidu Tts | http://fanyi.baidu.com/gettts | Chinês, inglês, japonês, coreano, francês, russo, alemão, tailandês |
| Youdao tts | http://tts.youdao.com/fanyivoice | Inglês, japonês, coreano, francês |
| Google TTS | https://translate.google.cn/translate_tts | Chinês, inglês, japonês, coreano, francês, russo, alemão |
| Tencent tts | http://audiodetect.browser.qq.com:8080/tts | Chinês, inglês, japonês, coreano |
| SOGOU TTS | http://fanyi.sogou.com/reventondc/syncthesis | Chinês, inglês |
Este projeto é desenvolvido usando o Idea + Maven . Adicione as seguintes dependências no 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 projeto define principalmente os pacotes a seguir, e sua nomeação e funções são as seguintes:
| Nome do pacote | Inclua aulas | ilustrar |
|---|---|---|
| com.swjtu.lang | Lang | Tipo de enumeração, lista de idiomas suportados |
| com.swjtu.util | Util | Kit de ferramentas |
| com.swjtu.http | HttpParams, abstactttpattribute | Interface do método HTTP e classes abstratas |
| com.swjtu.querier | Querier | Genéricos, Queryer |
| com.swjtu.trans | AbstractTranslator | Classe de tradutor (Resumo) |
| com.swjtu.trans.impl | Baidutranslator, GoogleTranslator, Youdaotranslator, Icibatranslator, Omitranslator, SogouTranslator, tencenttranslator, TryCantranslator | Classe de entidade tradutora |
| com.swjtu.tts | Resumo | Classe abstrata de TTS |
| com.swjtu.tts.impl | Baidutts, Youdaotts, Googletts, Tencenttts, Sogoutts | Classe de entidade TTS |
Estrutura do projeto

com.swjtu.http pacote/diagrama de classe

com.swjtu.Querier Package/Class Diagram

diagrama de pacote/classe com.swjtu.Trans

com.swjtu.trans.impl Package/Class Diagram

com.swjtu.tts pacote/diagrama de classe

com.swjtu.tts.impl Package/Class Diagram

com.swjtu.util Package/Class Diagram

Enumeração LANG : define os idiomas suportados ou suportados e padroniza uniformemente a lista de idiomas.
public enum LANG {
ZH , // 中文
EN , // 英语
JP , // 日语
JPKA , // 日语假名
TH , // 泰语
...
} Classe Util : contém e implementa alguns métodos práticos.
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 ); Classe Querier : define Querier e usa o padrão de observador. Esta classe contém uma coleção, os elementos da coleção são a classe tradutora ou a classe TTS. Após definir parâmetros através setParams() , execute execute() para enviar a solicitação e retornar o resultado. Os elementos podem ser adicionados ou removidos à coleção através attach() e 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 );
...
} Interface HttpParams : define o método de interface para definir o formato de dados HTTP
public interface HttpParams {
public void setFormData ( LANG source , String text ); // 设置 TTS 参数的接口方法
public void setFormData ( LANG from , LANG to , String text ); // 设置翻译器参数的接口方法
} Classe AbstractHttpAttribute : processo de solicitação e controle relacionado às solicitações 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 (); Classe AbstractTranslator : herda da classe AbstractHttpAttribute , implementa a interface HttpParams e define classes abstratas de tradutor.
@ 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 ; // 解析返回结果Classe AbstractTTS : herda da classe AbstractHttpAttribute , implementa a interface HttpParams e define a classe TTS abstrata.
@ 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 projeto encapsula vários métodos e expõe 5 métodos de API através Querier . É muito simples e fácil de usar. Veja o exemplo para obter detalhes:
// 设置查询器参数
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 projeto suporta e fornece serviços de tradução on -line e TTS convencionais e pode executar facilmente tarefas relacionadas através da interface da API fornecida. Ao mesmo tempo, considerando as necessidades potenciais dos usuários, apresentaremos como expandir com base neste projeto para alcançar o objetivo do desenvolvimento secundário. Antes de expandir este projeto, os usuários precisam ter um certo entendimento do código -fonte do projeto e do conhecimento HTTP.
A enumeração de LANG no código do projeto define os idiomas mais usados. Se o idioma suportado não puder atender às necessidades do usuário, o usuário poderá expandi -lo sozinho.
setLangSupport() , adicione o mapa de código à variável langMap ;Por exemplo: por exemplo, se você adicionar suporte espanhol ao tradutor do YouDao :
Etapa 1: Ao consultar a lista de idiomas suportados pelo servidor de tradução YouDAO, pode -se ver que o idioma espanhol é suportado e seu nome de código é: es
Etapa 2: em LANG , adicione o código personalizado da linguagem:
public enum LANG {
ZH , // 中文
EN , // 英语
JP , // 日语
JPKA , // 日语假名
TH , // 泰语
FRA , // 法语
SPA , // 西班牙语 <--- 添加语种(自定义语种代号)
KOR , // 韩语
....
} Etapa 3: Na classe YoudaoTranslator , adicione o 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" ); // 添加代号映射
} Os desenvolvedores definem sua própria classe de tradutor herdando a classe AbstractTranslator e implementam os seguintes métodos abstratos na classe:
// 添加语种支持
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 algumas solicitações HTTP que requerem cookies de definição, obtenha e defina os cookies antes de fazer a solicitação. Geralmente, pressione F12 no navegador Chrome e digite:
document.cookieno console do console para visualizá -lo.
Os desenvolvedores definem sua própria classe TTS herdando a classe AbstractTTS e implementam os seguintes métodos abstratos na classe:
// 添加语种支持
public abstract void setLangSupport ();
// 用于设置请求参数
public abstract void setFormData ( LANG source , String text );
// 发送 HTTP 请求并接收返回结果(通常为 JSON 或 XML 字符串,根据用户请求结果而定)
public abstract String query () throws Exception ;NOTA: O caminho de salvamento TTS padrão é: ./tts/class Name -md5 (conteúdo a ser convertido) .mp3
(如:com.swjtu.tts.impl.GoogleTTS-5757a2c16ce52b5427eb12f961d6362e.mp3)