Como este blog está há muito tempo sem atualizações, resolvi voltar fazendo um post sobre
um assunto bem legal, onde utilizaremos o serviço de tradução do Google para traduzir um texto
em inglês para português. Para isso faremos uso da classe HTTPService.
Utilizamos a classe HTTPService para representar um objeto HTTPService no ActionScript.
Quando você chamar o método send () do objeto HTTPService, ele faz uma solicitação HTTP para a
URL especificada e uma resposta HTTP é retornada. Opcionalmente, você pode passar parâmetros
para a URL especificada.
Abaixo o código mxml inicial:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#F4F4F4, #333333]">
<mx:Script source="script.as" />
<mx:VBox horizontalCenter="0" verticalCenter="0" horizontalAlign="center" verticalAlign="middle">
<mx:Image source="logo.png" />
<mx:TextArea width="500" height="100" id="ta_original" fontSize="14"/>
<mx:TextArea width="500" height="100" id="ta_traducao" editable="false" fontSize="14"/>
<mx:Button label="Traduzir" />
</mx:VBox>
<mx:HTTPService id="servicoGoogleTradutor" />
</mx:Application>
Crie o arquivo ActionScript para as funções.
A função abaixo fará a requisição ao serviço.
public function servicoGoogleTradutorRequest():void {
/* Url do serviço de tradução do google */
var googleTranslateUrl:String = "http://ajax.googleapis.com/ajax/services/language/translate";
/* Aqui atribuimos ao HTTPService a url que ele fará a requisição */
servicoGoogleTradutor.url = googleTranslateUrl;
/* Configuração dos parâmetros do serviço */
/* Versão do serviço */
servicoGoogleTradutor.request.v = "1.0";
/* Passamos o texto da TextArea que contem o texto que será traduzido */
servicoGoogleTradutor.request.q = ta_original.text;
/* Códigos da linguagens texto em Inglês (en) para POrtuguês (pt) */
servicoGoogleTradutor.request.langpair = "en|pt";
/* Chamar o serviço */
servicoGoogleTradutor.send();
}
e na propriedade click do botão vinculamos a função acima.
<mx:Button label="Traduzir" click="servicoGoogleTradutorRequest()"/>
Em seguida criamos a função que irá receber e tratar o retorno,
que será um objeto JSON parecido com código abaixo:
{“responseData”: {“translatedText”:”texto traduzido”}, “responseDetails”: null, “responseStatus”: 200}
para exibir apenas o texto podemos utilizar a classe JSON da biblioteca as3corelib que pode ser baixada aqui.
import mx.rpc.events.ResultEvent;
import com.adobe.serialization.json.JSON;
public function servicoGoogleTradutorResult(event:ResultEvent):void {
var result:String = event.result.toString();
if( JSON.decode( result ).responseData.translatedText != null ){
ta_traducao.htmlText = JSON.decode( result ).responseData.translatedText;
} else {
Alert.show( "Não foi possível realizar a tradução!");
}
}
Para eventuais erros na requisição do serviço, criamos mais uma função para dar um “Alert” da mensagem.
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
public function servicoGoogleTradutorFault(event:FaultEvent):void {
Alert.show( "ERROR:\n" + event.fault.faultString );
}
E para finalizar vinculamos as funções ao componenete HTTPService.
<mx:HTTPService id="servicoGoogleTradutor"
fault="servicoGoogleTradutorFault(event)"
result="servicoGoogleTradutorResult(event)" />
Finish.
Se der tudo certo pode aparecer algo como isso:
Referência de classe para a API de tradução
Mais sobre HTTPService no Adobe Labs