Creiamo un traduttore per la nostra applicazione tramite le api di google

Ciao a tutti, oggi vi spiegherò come creare un traduttore utilizzando le api di Google Translate, in modo molto semplice e veloce! Grazie a queste api messe a disposizione da Google possiamo creare un qualsiasi tipo di traduttore ita/ing o  jap/ing insomma ce ne per tutti i gusti.

Flags_PWT_pro_tcm17-96648

Però c’è una piccola pecca, Google offre questo servizio a patto che la vostra applicazione sia gratuita!

Prima di iniziare con il tutorial vero e proprio dobbiamo fare una piccola introduzione a JSON.

JSON sta per JavaScript Object Notation  ed è molto  utile per immagazzinare informazioni e quindi scambiare dati tra client e server, (in un prossimo tutorial spiegheremo meglio il suo utilizzo questo è stata solo una piccola premessa).

Iniziamo subito con la creazione di un nuovo progetto di tipo view based application diamogli il nome di Traduttore

Ora ci tocca scaricare JSON che ci permetterà di comunicare con Google e rendere possibile la traduzione: Download Link

Una volta scaricato decomprimente la cartella e inseritela nel progetto(ricordatevi di spuntare “copy items into destination group’s folder“)

Ora andiamo in traduttoreViewController.h e scriviamo il seguente codice

[code lang=”objc”]

#import <UIKit/UIKit.h>

@interface traduttoreViewController : UIViewController{

IBOutlet UITextView *textView;

IBOutlet UITextField *textField;

IBOutlet UIButton *bottone;

NSMutableData *Data;

NSMutableArray *traduzione;

NSString *_UltimoText;

}

@property (nonatomic, copy) NSString *Ultimo;

-(IBAction)traduci;

@end

[/code]

Dopo aver dichiarato i tre oggetti e un azione andiamo a creare l’interfaccia grafica quindi rechiamoci sul file traduttoreViewController.xib e inseriamo i seguenti oggetti:

  • una text field
  • un bottone
  • una textview

Ora facciamo un click sulla text view ed eliminiamo tutto il testo e togliamo il flag da editable

Ora andiamo nel file traduttoreViewController.m e scriviamo questo codice:

[code lang=”objc”]

//

//  traduttoreViewController.m

//  traduttore

//  Created by flexkid on 09/09/11.

//  Copyright 2011 __MyCompanyName__. All rights reserved.

//

#import "traduttoreViewController.h"

#import "JSON.h"//fondamentale per il nostro traduttore!!!

@implementation traduttoreViewController

@synthesize ultimo=_Ultimo;

– (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

}

#pragma mark – View lifecycle

– (void)viewDidLoad

{

[super viewDidLoad];

traduzione = [[NSMutableArray alloc] init]; //inizializziamo

}

– (void)viewDidUnload

{

[super viewDidUnload];

}

– (void)dealloc {

[traduzione release];

[_Ultimo release];

[super dealloc];

}

– (void)performTranslation {

//se eccediamo

if (traduzione.count > 50) {

bottone.enabled = YES;

return;

}

Data = [[NSMutableData data] retain];// inizializziamo e la utilizzeremo per per memorizzare la risposta JSON

BOOL translateToEnglish = ([traduzione count] % 2 == 0);

if (!translateToEnglish && [traduzione count] >= 3) {

NSString *oldString = [traduzione objectAtIndex:[traduzione count] – 3];

if ([oldString caseInsensitiveCompare:_Ultimo] == NSOrderedSame) {

bottone.enabled = YES;

return;

}

}

NSString *langString;

if (translateToEnglish) {

langString = @"it|en";//

} else {

langString = @"en|it";//valori modificabili in base alla lingua desiderata

}

NSString *textEscaped = [_Ultimo stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *langStringEscaped = [langString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSString *url = [NSString stringWithFormat:@"http://ajax.googleapis.com/ajax/services/language/translate?q=%@&v=1.0&langpair=%@",

textEscaped, langStringEscaped];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];

[[NSURLConnection alloc] initWithRequest:request delegate:self];

}

– (IBAction)traduci {

[traduzione removeAllObjects];

[textField resignFirstResponder];//rimuoviamo la tastiera

bottone.enabled = NO;

self.ultimo = textField.text;

[traduzione addObject:_Ultimo];

textView.text = _Ultimo;

[self performTranslation];

}

//i metodi a seguire sono abbastanza chiari servono per ricevere i dati dal nostro NSMutableData (Data)

– (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

[Data setLength:0];

}

– (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

[Data appendData:data];

}

– (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

textView.text = [NSString stringWithFormat:@"Connection failed: %@", [error description]];

bottone.enabled = YES;

}

//metodo abbastanza  interessante!!

– (void)connectionDidFinishLoading:(NSURLConnection *)connection {

[connection release];

NSString *responseString = [[NSString alloc] initWithData:Data encoding:NSUTF8StringEncoding];//convertiamo la nostra NSMutableData in una stringa

[Data release];

NSMutableDictionary *luckyNumbers = [responseString JSONValue];

[responseString release];

if (luckyNumbers != nil) {

NSDecimalNumber * responseStatus = [luckyNumbers objectForKey:@"responseStatus"];

if ([responseStatus intValue] != 200) {

bottone.enabled = YES;

return;

}

NSMutableDictionary *responseDataDict = [luckyNumbers objectForKey:@"responseData"];

if (responseDataDict != nil) {

NSString *translatedText = [responseDataDict objectForKey:@"translatedText"];

[traduzione addObject:translatedText];

self.ultimo = translatedText;

textView.text = [textView.text stringByAppendingFormat:@"\n%@", translatedText];

bottone.enabled = YES;

[self performTranslation];

}

}

}

@end

[/code]

Ora non ci resta che ritornare nel file xib e fare i collegamenti :

TextView ———————–>textView

TextField ———————–>textField

traduci————————>pulsante (ps ricordatevi di selezionare touch up inside)

Tabella

Lingua Code Lingua Code
AFRIKAANS af ITALIAN it
ALBANIAN sq JAPANESE ja
ARABIC ar KOREAN ko
BELARUSIAN be LATVIAN lv
BULGARIAN bg LITHUANIAN lt
CATALAN ca MACEDONIAN mk
CHINESE zh MALAY ms
CHINESE_SIMPLIFIED zh-CN MALTESE mt
CHINESE_TRADITIONAL zh-TW NORWEGIAN no
CROATIAN hr PERSIAN fa
CZECH cs POLISH pl
DANISH da PORTUGUESE pt
DUTCH nl PORTUGUESE_PORTUGAL pt-PT
ENGLISH en ROMANIAN ro
ESTONIAN et RUSSIAN ru
FILIPINO tl SERBIAN sr
FINNISH fi SLOVAK sk
FRENCH fr SLOVENIAN sl
GALICIAN gl SPANISH es
GERMAN de SWAHILI sw
GREEK el SWEDISH sv
HAITIAN_CREOLE ht TAGALOG tl
HEBREW iw THAI th
HINDI hi TURKISH tr
HUNGARIAN hu UKRAINIAN uk
ICELANDIC is VIETNAMESE vi
INDONESIAN id WELSH cy
IRISH ga YIDDISH yi

Download Progetto Link