{"id":3068,"date":"2010-04-15T12:42:23","date_gmt":"2010-04-15T10:42:23","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3068"},"modified":"2010-04-16T13:05:49","modified_gmt":"2010-04-16T11:05:49","slug":"t034-come-localizzare-le-nostre-applicazioni-iphone","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t034-come-localizzare-le-nostre-applicazioni-iphone\/","title":{"rendered":"T#034 &#8211; Come localizzare le nostre applicazioni iPhone [aggiornato]"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/bandiere1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/bandiere1.png\" alt=\"Bandiere Localizzazione Applicazioni iPhone\" title=\"bandiere\" width=\"208\" height=\"90\" class=\"alignleft size-full wp-image-3080\" \/><\/a> Salve a tutti mi chiamo Vanni ( nickname Ragazzetto ) e sono lo sviluppatore dell applicazione per iPhone iEcology che attualmente  \u00e8 in fase di revisione !<br \/>\nCon questo articolo volevo illustrarvi un modo piuttosto semplice per l<strong>ocalizzare le vostra applicazione in altre lingue<\/strong> !<br \/>\nA parer mio la localizzazione di un&#8217;applicazione in pi\u00f9 lingue acquista un valore molto importante nel caso vogliate pubblicarla in AppStore , ogni utente apprezzer\u00e0 il fatto di poter usare l\u2019applicazione nella propria lingua e quindi, considerando che il 58% degli iPhone del mondo sono nel Nordamerica ( statistica AdMob di luglio 2009 ), almeno la localizzazione in inglese la reputo praticamente indispensabile !<br \/>\nNel mio caso tutto lo sviluppo, per comodit\u00e0, \u00e8 stato fatto in italiano per poi aggiungere una seconda lingua: l\u2019 inglese.<!--more--><\/p>\n<p>Cominciamo con il localizzare i file di interfaccia grafica .xib:<\/p>\n<p>clicchiamo con il tasto destro del mouse sul file  _ViewController.xib  e dal men\u00f9 a tendina selezioniamo Get Info:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione01.png\" alt=\"T034 - Localizzazione app iphone screenshot 01\" title=\"t034_Localizzazione01\" width=\"393\" height=\"383\" class=\"aligncenter size-full wp-image-3069\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione01.png 393w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione01-300x292.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione01-50x50.png 50w\" sizes=\"auto, (max-width: 393px) 100vw, 393px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Dalla finestra info, all\u2019interno del tab \u201c General \u201c,  clicchiamo sul tasto in basso a sinistra \u201c make File Localizable \u201c<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione02.jpg\" alt=\"T034 - Localizzare applicazioni iPhone screenshot 02\" title=\"t034_Localizzazione02\" width=\"330\" height=\"379\" class=\"aligncenter size-full wp-image-3071\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione02.jpg 330w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione02-261x300.jpg 261w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/a><br \/>\n<\/center> <\/p>\n<p>Controlliamo che sia spuntato il Target della nostra applicazione e torniamo quindi nel Tab General.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione03.jpg\" alt=\"t034 - Localizzare applicazioni iPhone screenshot 03\" title=\"t034_Localizzazione03\" width=\"329\" height=\"377\" class=\"aligncenter size-full wp-image-3072\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione03.jpg 329w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione03-261x300.jpg 261w\" sizes=\"auto, (max-width: 329px) 100vw, 329px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>All&#8217;interno di questa finestra Clicchiamo sul tasto in basso a sinistra \u201c Add Localization \u201c<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione04.jpg\" alt=\"t034 - Localizzare applicazioni iPhone screenshot 04\" title=\"t034_Localizzazione04\" width=\"330\" height=\"379\" class=\"aligncenter size-full wp-image-3073\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione04.jpg 330w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione04-261x300.jpg 261w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Inseriamo il nome della nostra localizzazione e clicchimo su Add.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione05.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione05.jpg\" alt=\"t034 - Localizzare applicazioni iPhone screensgot 05\" title=\"t034_Localizzazione05\" width=\"310\" height=\"358\" class=\"aligncenter size-full wp-image-3074\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione05.jpg 310w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione05-259x300.jpg 259w\" sizes=\"auto, (max-width: 310px) 100vw, 310px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Ci ritroveremo quindi le nostre due localizzazioni. Chiudendo la finestra noteremo che Xcode avr\u00e0 creato una copia del nostro file .xib<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione06.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione06.jpg\" alt=\"t034 - Localizzare applicazioni iPhone screenshot 06\" title=\"t034_Localizzazione06\" width=\"330\" height=\"379\" class=\"aligncenter size-full wp-image-3075\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione06.jpg 330w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione06-261x300.jpg 261w\" sizes=\"auto, (max-width: 330px) 100vw, 330px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Adesso i 2 file sono completamente identici , toccher\u00e0 a noi variare i testi al loro interno per adattarli alla lingua impostata.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione07.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione07.jpg\" alt=\"t034 - Localizzare applicazioni iPhone screenshot 07\" title=\"t034_Localizzazione07\" width=\"333\" height=\"103\" class=\"aligncenter size-full wp-image-3076\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione07.jpg 333w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione07-300x92.jpg 300w\" sizes=\"auto, (max-width: 333px) 100vw, 333px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>In questo modo Xcode utilizzer\u00e0 il file provalocalizzazione_ViewController.xib ( English) di default ogni volta che trover\u00e0 impostata all\u2019interno del nostro iPhone ( o del simulatore ) una lingua diversa dall\u2019italiano mentre quando trover\u00e0 impostata la lingua \u201cItaliano\u201d utilizzer\u00e0 il file provalocalizzazione_ViewController.xib (Italian).<\/p>\n<p>Ci tengo a sottolineare che la localizzazione \u00e8 un aspetto che va eseguito nelle ultime fasi di tutto il progetto , nel nostro caso, infatti, i file per l&#8217;interfaccia grafica sono solo 2 e ogni modifica all\u2019interfaccia effettuata da ora in avanti va eseguita su entrambi i file. Questo pu\u00f2 risultare molto pi\u00f9 scomodo se applicato a pi\u00f9 file. Considerate inoltre che a causa di una semplice svista, potreste tralasciare qualche modifica in un file o in un altro, cosa che porterebbe sicuramente a qualche malfunzionamento indesiderato.<\/p>\n<p>A questo punto dobbiamo localizzare ogni testo che viene visualizzato attraverso il codice , ad esempio, quello presente in un alertView.<\/p>\n<p>Vediamo quindi questo piccolo esempio che, tramite queste poche righe di codice,  ci permette di intercettare la lingua impostata dall&#8217;utente e di conseguenza mostrare a video l\u2019<strong>alertView nella lingua desiderata<\/strong>:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n-(IBAction)alert1:(id)sender{\r\n\t\/\/ codice per intercettare la lingua impostata dall utente  \r\n\t\r\n\tNSUserDefaults  *defaults         = [NSUserDefaults standardUserDefaults];\r\n\tNSArray         *languages        = [defaults objectForKey:@\"AppleLanguages\"];\r\n\tNSString    *currentLanguage  = [languages objectAtIndex:0];\r\n\tNSLog(@\"Codice lingua %@\", currentLanguage);\r\n\t\r\n\t\r\n\tif( [currentLanguage isEqualToString:@\"it\"] ) {\r\n\t\t\/\/ codice in italiano !\r\n\t\tUIAlertView * alertView1 = [[UIAlertView alloc] initWithTitle:@\"Titolo in Italiano \" message:@\"Testo in Italiano\" delegate:nil cancelButtonTitle:nil otherButtonTitles:@\"OK\", nil];\r\n\t\t[alertView1 show];\r\n\t\t[alertView1 release];\r\n\t} \r\n\telse {\r\n\t\t\/\/ codice in altra lingua !\r\n\t\t\tUIAlertView * alertView1 = [[UIAlertView alloc] initWithTitle:@\"Title in English \" message:@\"Text in English \" delegate:nil cancelButtonTitle:nil otherButtonTitles:@\"OK\", nil];\r\n\t\t[alertView1 show];\r\n\t\t[alertView1 release];\r\n\t}\r\n<\/pre>\n<p>Con le prime 4 righe all&#8217;interno dell&#8217; IBAction non faremo altro che determinare la lingua impostata dall&#8217;utente, mentre con il successivo ciclo di &#8220;If else&#8221; assegneremo un&#8217;azione nel caso la lingua impostata sia l\u2019italiano:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nif( [currentLanguage isEqualToString:@\"it\"] ){\r\n}\r\n<\/pre>\n<p>ed un altra azione negli altri casi ( ovvero una lingua diversa dall italiano ) <\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nelse {\r\n} \r\n<\/pre>\n<p>Nel caso decidiate di inserire localizzazioni in pi\u00f9 lingue i cicli di if else saranno pi\u00f9 lunghi ma avranno lo stesso concetto! (o eventualmente potrete usare altri sistemi, ad esempio uno switch)<\/p>\n<p>Il risultato di questa nostra prova sar\u00e0 quello mostrato in figura qui sotto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione08.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione08.jpg\" alt=\"t034 - Localizzare applicazioni iPhone screenshot 08\" title=\"t034_Localizzazione08\" width=\"603\" height=\"384\" class=\"aligncenter size-full wp-image-3077\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione08.jpg 603w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/04\/t034_Localizzazione08-300x191.jpg 300w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Noterete la lingua impostata nello spazio riservato al gestore telefonico nella barra in alto a sinistra !  <\/p>\n<p>Per verificare il diverso funzionamento ci baster\u00e0 dopo il &#8220;Build and Go&#8221;  modificare le impostazioni all&#8217;interno del nostro iPhone \/ Simulatore:<\/p>\n<p>Impostazioni > Generali > Internazionale > Lingua <\/p>\n<p>Sperando di essere stato chiaro ed esauriente vi saluto<\/p>\n<p>Ciao <\/p>\n<p>Vanni<\/p>\n<h4>AGGIORNAMENTO<\/h4>\n<p>In riferimento al commento di dylandogg volevo sottolineare e precisare che con la stessa tecnica utilizzata per localizzare i file .xib \u00e8 possibile localizzare anche solo le immagini.<br \/>\nRiepilogando:<\/p>\n<p>Tasto destro > get info > make file localizable >add localization >  lingua ( ad esempio Italian ) .<\/p>\n<p>Analogamente al caso precedente adesso avremo il nostro file immagine perfettamente sdoppiato  in due cartelle del nostro progetto English.lproj e Italian.lproj .<\/p>\n<p>In questo caso ci baster\u00e0 sovrascrivere il file che ci interessa far variare nelle diverse localizzazioni ed il gioco \u00e8 fatto ! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Salve a tutti mi chiamo Vanni ( nickname Ragazzetto ) e sono lo sviluppatore dell applicazione per&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[183,6,184,182],"class_list":["post-3068","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-applicazioni-multilingua","tag-iphone","tag-localizzare-applicazione-iphone","tag-localizzazione"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3068"}],"version-history":[{"count":7,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3068\/revisions"}],"predecessor-version":[{"id":3084,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3068\/revisions\/3084"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}