Login: Senha: Registrar-se - Esqueci minha senha
.: Menu
Home
Artigos
Sign. dos Sonhos
Papel de Parede
Ilusões de Ótica
.: Bancos
Emoticons e Gifs
Ícones
Logos
.: Serviços
Mural de Recados
Usuários Online
Bloco de Notas
Formmail
Meu IP
.: Geradores
Gerador de Senhas
Barra de Rolagem
Recomende
Pop-up
Inverter Link
.: Canais
Apostilas
Arte/Cultura
Blog
Busca
Celular
Downloads
E-mail Grátis
Emoticons
Esportes
Filmes
Flogs
Fontes
GTA Mods
Host Grátis
Humor
Infantil
Informática
Jogos
Jogos Online
Linux
Músicas
Notícias
Offline
Redirecionadores
Sites Parceiros
Webdesigners
Webmasters
.: Na Faixa
Sobre
Contato
Recomende-nos
Termos de uso

Implementando um tradutor de línguas no seu web site

Enviado em 01/03/2007 - 06:57
Fonte: A A A A

Como criar uma interface transparente para o programa de tradução de línguas Babelfish.AltaVista.com usando sockets e expressões regulares.
Por: Fábio Berbert de Paula

Introdução


Na minha época de script kiddie meu sonho era colocar um tradutor de Inglês para Português no meu primeiro web site, que ficava hospedado no Geocities, numa URL enorme e que hoje nem existe mais. Pois é, o tempo foi passando, a lógica da informática tomando alguns rumos de esclarecimento na minha cabeça, fui apresentado ao Babelfish, à linguagem PHP e finalmente consegui criar uma gambiarra que funciona como um tradutor.

Neste artigo vou mostrar como projetar uma interface que utiliza o engine doAltavista.com, o babelfish.altavista.com, sem dúvida um dos melhores tradutores multi-línguas da Internet.

Implementando o script - parte 1


Nosso script funcionará da seguinte forma: um formulário será exibido ao usuário, que irá digitar o texto a ser traduzido, escolher a linguagem de origem/destino e pedir para traduzir submetendo o mesmo. O formulário é recursivo, ou seja, os dados são enviados para o mesmo script PHP que mostrou o formulário na tela. Caso exista algum texto a ser traduzido, antes que apareça o formulário na tela, uma rotina de consulta ao engine babelfish será executada e o resultado mostrado na tela.

No primeiro bloco de código do programa definimos algumas constantes que serão processadas pelo babelfish e faremos a verificação do conteúdo da variável que armazena o texto, para saber se apenas mostraremos o formulário na tela ou se efetuaremos conexão com o AltaVista.com:
<?
// definição de constantes
$DOIT = 'done';
$TT = 'urltext';

// se o formulário foi submetido, teremos urltext diferente de vazio
if ($urltext) {
$traducao = traduzir($urltext,$lp);
} else {
$traducao = '-';
}

?>
Em seguida vou digitar o bloco de código HTML que mostra o formulário na tela,com espaço para a entrada do texto a ser traduzido e uma caixa de seleção onde o usuário escolherá as linguagens de origem/destino.
<html>

<style type="text/css">
td,textarea,select,input,a:link,a:visited {
font-family: Arial,Helvetica,Sans-Serif;
font-size: 11px;
color: #000000;
}
</style>

<body bgcolor="#fffff0">

<form name="form1" action="<? echo $PHP_SELF ?>">
<table width="400" bgcolor="#000000" cellpadding=1 cellspacing=0
align="center">
<tr><td>
<table width="100%" bgcolor="#ffffff" cellpadding=3 cellspacing=0>
<tr>
<td class="codigo" nowrap><b><big>BabelFish Translator</big>
</b></td>
<td class="codigo" align="right">
<a href="http://www.altavista.com" >Powered by
AltaVista</a>
</td>
</tr>

<tr><td colspan=2>
Texto:
<br>
<textarea name="urltext" style="width: 100%;" rows=6><? echo
$urltext ?></textarea>
</td></tr>

<tr>
<td width="1%" nowrap>Selecione uma linguagem:</td>
<td>
<select name="lp" style="width: 100%;">
<option value="en_zh">Inglês para Chinês
<option value="en_fr">Inglês para Francês
<option value="en_de">Inglês para Alemão
<option value="en_it">Inglês para Italiano
<option value="en_ja">Inglês para Japonês
<option value="en_ko">Inglês para Coreano
<option value="en_pt">Inglês para Português
<option value="en_es">Inglês para Espanhol
<option value="zh_es">Chinês para Inglês
<option value="fr_en">Francês para Inglês
<option value="fr_de">Francês para Alemão
<option value="de_en">Alemão para Inglês
<option value="de_fr">Alemão para Francês
<option value="it_en">Italiano para Inglês
<option value="ja_en">Japonês para Inglês
<option value="ko_en">Coreano para Inglês
<option value="pt_en" SELECTED>Português para Inglês
<option value="ru_en">Russo para Inglês
<option value="es_en">Espanhol para Inglês
</select>
</td>
</tr>

<tr>
<td align="right">Tradução </td>
<td><? echo $traducao ?></td>
</tr>

<tr><td colspan=2 align="center">
<br>
<input type="submit" value=" Traduzir agora ! ">
</td></tr>

</table>
</td></tr>
</table>
</form>

</body>
</html>


Implementando o script - parte 2


O coração do nosso programa é a parte que efetua comunicação com o babelfish. Abriremos uma conexão via sockets com o programa engine e enviaremos as informações necessárias, que serão as constantes que definimos, o texto a ser traduzido e a linguagem selecionada. Neste procedimento estaremos simulando um browser, que envia a requisição ao programa CGI e aguarda a resposta. Assim que recebermos a resposta,trataremos o código HTML retornado com expressões regulares de modo a buscar apenas o que nos interessa, o texto traduzido.

Vamos ao código da rotina:
<?
function traduzir($urltext,$lp) {
// definição de variáveis
$host = 'babelfish.altavista.com';
// codificar a linha que será enviada ao programa CGI do babelfish
$vars = "doit=$DOIT&tt=$TT&urltext=" . urlencode(utf8_encode($urltext))
. "&lp=$lp";
$url = "/tr?$vars";

// efetuando conexão com o babelfish
$fp = fsockopen ($host, 80, $errno, $errstr, 30);
if (!$fp) {
echo "Ocorreu um erro ao tentar conexão com $host:
$errstr ($errno)<br>\n";
exit;
} else {
// informações adicionais: nossa localidade e mapa
// de caracteres
$addinfo .= "Accept-Language: en\r\nAccept-Charset:
iso-8859-1,*,utf-8\r\n";
// envie as informações e jogue todo o retorno para a
// variável $html
fputs ($fp,
"GET $url HTTP/1.1\r\nHost: $host\r\n$addinfo\r\n");
while (!feof($fp)) {
$html .= fgets ($fp,128);
}
fclose ($fp);
}
// removendo quebras de linhas do resultado para facilitar
// a expressão regular
$html = ereg_replace("\n"," ",$html);

// capturando o texto traduzido, que está na linha que casa
// com a expressão abaixo
ereg("name=\"q\" value=(.*)>",$html,$saida);
$traducao = $saida[1];
$traducao = ereg_replace(">.*$","",$traducao);

// decodificar a string, pois os acentos vem em formato UNICODE,
// ilegíveis para
// nós
$traducao = utf8_decode($traducao);

return($traducao);
}
?>
Prontinho, um tradutor web acabou de sair da boca do forno ! Que conclusão podemos tirar deste exemplo prático de programa complexo de forma simples ? Hum, conclui-seque associando os recursos de rede com expressões regulares temos a bomba atômica e o detonador em mãos para causar bastante barulho Internet à fora. Não deixem de dar atenção especial à esses dois tópicos, valem à pena.

Atenciosamente,
Fábio Berbert de Paula
[email protected]
fonte: www.vivaolinux.com.br

Enviado por: brunohcs

Postado em: PHP

Esse artigo foi visualizado 2251 vezes

Compartilhe este artigo
facebook del.icio.us rec6 digg
Recomende este artigo a um amigo


Voltar
>> Comentários
 
Related Posts Plugin for WordPress, Blogger...
Comentar
Buscar Artigos:
.: Mods de GTA
GTA SA, VC, IV
SA - Carros
IV - Carros
Mods
GTA IV
SA - Mods Cleo
.: Saúde
Calculadora de IMC
Peso Ideal
Artigos de Saúde
.: Jogos Online
Ação
Aventura
Cassino
Classicos
Colorir
Corrida
Educativos
Esporte
Estrategia
Infantil
Luta
Meninas
Nave
Tiro
Outros
Adulto
Top Jogos
.: Parceiros
Mural de Recados Grátis
Papel de Parede
Show Moto
Web Visual
.: Nossos Números
Artigos: 931
Categorias: 51
Comentarios: 1863
Usuarios: 26709
Blocos de Nota: 87
Canais: 169

website monitoring service
eXTReMe Tracker
Na Faixa.net - Todos os direitos reservados. 12/2003 - 11/2024
Leia nossos Termos de Uso - Política de Privacidade
Desenvolvido por Web Visual
Crie seu Site - Papel de Parede Grátis - Show Moto - Mural de Recados Grátis - Dicas10