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.
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