Google AJAX Language API… et ton Flex devient polyglotte !

Je viens de tomber sur une API bien pratique : l’API de traduction de Google. Accessible via un HTTPService, elle permet d’effectuer des requêtes de traduction en plus de 30 langues. Voyons comment l’utiliser depuis une application Flex.
Requis : AS3 Corelib pour le traitement des données au format JSON
Fonctionnement : Dans le fichier MXML de mon application, TextInputs, une comboBox permettant la sélection des langues et un bouton d’envoi. L’appel au service est défini dans le fichier translator.as.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
<mx:Script source="translator.as" />
<mx:TextInput id="toTranslate" text="hello"/>
<mx:ComboBox
id="langpairSelector"
dataProvider="{langpairCollection}"
/>
<mx:TextInput id="translated" />
<mx:Button label="Traduire !!!" click="translate()" />
</mx:Application>
L’appel se fait via un HTTPService. L’url du service est : ‘http://ajax.googleapis.com/ajax/services/language/translate’.
Des paramètres sont également à ajouter à la requête :
- v » la version : 1.0 ( c’est la seule existante )
- q » le mot ou expression à traduire
- langpair » l’identifiant de la langue à traduire et celui de la langue de destination ( séparées par un | ). Si une seule langue est indiquée, le service cherchera à deviner la langue du mot à traduire ( voir la liste des langues et des identifiants ).
Le service renvoie des données au format JSON, que nous transformons en object Actionscript via la classe JSON de la Corelib. Les données reçues sont de la forme :
{
&amp;quot;responseData&amp;quot;:{ &amp;quot;translatedText&amp;quot;:&amp;quot;texte traduit&amp;quot; },
&amp;quot;responseDetails&amp;quot;: null,
&amp;quot;responseStatus&amp;quot;: 200}
Si tout se passe bien la traduction est accessible via la propriété
{
"responseData": { "translatedText":"texte traduit" }
"responseDetails": null,
"responseStatus": 200
}
de l’objet reçu.
import mx.collections.ArrayCollection;
import mx.collections.ArrayCollection;
import com.adobe.serialization.json.JSON;
import mx.rpc.http.HTTPService;
import mx.rpc.events.ResultEvent;
[Bindable]
private var langpairCollection:ArrayCollection = new ArrayCollection(
[
{label:"Traduire de " , value:''},
{label: , value:'en|fr'},
{label :"Francais È Anglais", value:'fr|en'}
]
)
// fonction de traduction : appel du service de google.language.translate
private function translate():void{
if ( langpairSelector.selectedItem.value ){
initResult();
var translator:HTTPService = new HTTPService();
translator.request.q = toTranslate.text;
translator.url = 'http://ajax.googleapis.com/ajax/services/language/translate';
translator.request.v = '1.0';
translator.request.langpair= langpairSelector.selectedItem.value;
translator.resultFormat = 'text';
translator.addEventListener(ResultEvent.RESULT, onResult);
translator.send();
}
}
private function initResult():void{
translated.text = '';
}
// ˆ la réception : affichage du résultat depuis des données au format JSON
private function onResult(event:ResultEvent):void {
try {
var trad:Object = JSON.decode(event.result as String);
translated.htmlText = trad.responseData.translatedText ;
} catch(ignored:Error) {
trace ( 'erreur réception traduction : ' + ignored.toString() );
}
}
Voilà pour un 1er essai… y a de quoi faire !
Tags: Flex, google api, httpservice, Tutoriels

--> 7 juin 2008 ( 19:05 )
Pas mal, en plus ça permet de voir comment coder un appel vers un HTTPService.
Par contre, quand je veux traduire "mer" en anglais, il me retourne Wednesday ???
Pour lui mer serait donc forcement la contraction de mercredi ?
Merci pour l’info en tout cas .
--> 7 juin 2008 ( 19:22 )
excellent !!! ca fait pareil avec ‘jeu’, qui renvoie "Thursday" :)., mais pas avec ‘jeu d’enfant’ , qui lui renvoie bien ‘child’s play’. En fait çà le fait pour toutes les abbréviations de jour et de mois… en fait, en francais ça fait au final deux mots qui sont susceptible de poser problème : le ‘mer’ dans mercredi, et le ‘jeu’ du jeudi, pour tous les autres jour et mois, les abbréviations ne correspondent pas à des mots existants. Bravo tu est le grand vainqueur du grand jeu Debug moi le traducteur de google !!!
--> 8 juin 2008 ( 18:04 )
yop ca m’etonne à moitié… juste comme ca, as tu essayé avec “la mer”, “le jeu” parce que “sam” comme ca on sait pas si c’est un nom propre, une abbreviation, un mot et pour le coup google c’est pas magique
?
--> 2 janvier 2009 ( 18:04 )
I build an API library a while ago around this ajax api that does this and more, it returns data vo’s so it’s easy to see what fields are available.
The library contains websearch, imagesearch, videosearch, blogsearch, patentsearch, newssearch and translation,
You can download it on http://code.google.com/p/googleas3api/ or at our developer blog http://labs.boulevart.be/index.php/2008/12/15/google-as3-api/
Cheers!