PHP
Implementando um tradutor de línguas no seu web site
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: enrnAccept-Charset:
iso-8859-1,*,utf-8rn";
// envie as informações e jogue todo o retorno para a
// variável $html
fputs ($fp,
"GET $url HTTP/1.1rnHost: $hostrn$addinforn");
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
fabio@vivaolinux.com.br
Parceiros
Tecnoponta Santos - SP
Capital Administração de Condomínios
BR-Linux.org
Criar WEB
Verdade Absoluta
Artigos mais acessados
Desenho de Letras - Construindo fontes TTF
Menu Circular em 3D
Criando um sistema de login
Enviando email em formato HTML em PHP
Cargos e salários na área de informática
Como fazer e modificar calendários
Serviços
Desenvolvimento de Sites e Sistemas WEB
Otimização de Sites (SEO)
Catálogo de Produtos
Parcerias e Soluções de Publicidade
Fale Conosco


