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