Voir l'exemple et les sources

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.

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
  3.  
  4. <mx:Script source="translator.as" />
  5.  
  6. <mx:TextInput id="toTranslate" text="hello"/>
  7.  
  8. <mx:ComboBox id="langpairSelector" dataProvider="{langpairCollection}" />
  9. <mx:TextInput id="translated" />
  10. <mx:Button label="Traduire !!!" click="translate()" />
  11.  
  12. </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 :

{"responseData": { "translatedText":"texte traduit" }, "responseDetails": null, "responseStatus": 200}

Si tout se passe bien la traduction est accessible via la propriété responseData.translatedText de l'objet reçu.

  1. import mx.collections.ArrayCollection;
  2. import mx.collections.ArrayCollection;
  3. import com.adobe.serialization.json.JSON;
  4. import mx.rpc.http.HTTPService;
  5. import mx.rpc.events.ResultEvent;
  6.  
  7. [Bindable]
  8. private var langpairCollection:ArrayCollection = new ArrayCollection(
  9. [
  10. {label:"Traduire de " , value:''},
  11. {label:"Anglais » Français" , value:'en|fr'},
  12. {label :"Francais » Anglais", value:'fr|en'}
  13. ]
  14. )
  15.  
  16. // fonction de traduction : appel du service de google.language.translate
  17. private function translate():void
  18. {
  19. if ( langpairSelector.selectedItem.value ){
  20. initResult();
  21.  
  22. var translator:HTTPService = new HTTPService();
  23. translator.url = 'http://ajax.googleapis.com/ajax/services/language/translate';
  24. translator.request.v = '1.0';
  25. translator.request.q = toTranslate.text;
  26. translator.request.langpair= langpairSelector.selectedItem.value;
  27. translator.resultFormat = 'text';
  28. translator.addEventListener(ResultEvent.RESULT, onResult);
  29. translator.send();
  30. }
  31. }
  32.  
  33. private function initResult():void{
  34. translated.text = '';
  35. }
  36.  
  37.  
  38. // à la réception : affichage du résultat depuis des données au format JSON
  39. private function onResult(event:ResultEvent):void {
  40. try {
  41. var trad:Object = JSON.decode(event.result as String);
  42. translated.htmlText = trad.responseData.translatedText ;
  43. } catch(ignored:Error) {
  44. trace ( 'erreur réception traduction : ' + ignored.toString() );
  45. }
  46. }

Voilà pour un 1er essai... y a de quoi faire !

Plus d'infos