{"id":4279,"date":"2010-09-01T10:00:26","date_gmt":"2010-09-01T08:00:26","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=4279"},"modified":"2010-09-01T09:47:09","modified_gmt":"2010-09-01T07:47:09","slug":"t069-localizzare-applicazioni-iphone-tramite-nslocalizedstring","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t069-localizzare-applicazioni-iphone-tramite-nslocalizedstring\/","title":{"rendered":"T#069 &#8211; Localizzare applicazioni iPhone tramite NSLocalizedString"},"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> Ecco qui il secondo tutorial promesso! In questo articolo spiegher\u00f2 come potete fare per rendere le vostre applicazioni iPhone localizzate, ovvero adattate alla lingua di chi le usa (sempre che siate bravi traduttori si intende, mica come me XD).<\/p>\n<p>Cominciamo subito col creare un&#8217;applicazione view based.<br \/>\nIl comando <em>NSLocalizedString<\/em> non fa altro che  cercare in delle tabelle &#8220;chiave-valore&#8221; che altro non sono che dei file di testo con estensione .strings. Pi\u00f9 precisamente questa istruzione cercher\u00e0 la chiave solamente nelle tabelle chiamate &#8220;Localizable.string&#8221; ovvero nella tabella di default per ogni lingua.<!--more--><br \/>\nVisto che queste tabelle non sono presenti nelle Risorse della nostra applicazione andiamo a crearle. Facciamo click secondario (\u00e8 brutto dire tasto destro con un mac) sul gruppo Resources e scegliamo Add -&gt; New File&#8230;<br \/>\nNella finestra che apparir\u00e0 scegliamo dal gruppo Resource di MacOS X &#8220;Strings File&#8221;.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/08\/LocString1.png\" alt=\"Selezione del file Strings\" width=\"536\" height=\"419\" \/><br \/>\n<\/center><\/p>\n<p>Quando vi verr\u00e0 chiesto come salvarlo chiamatelo &#8220;Localizable.strings&#8221;. Create poi nello stesso modo un secondo file che chiameremo invece &#8220;Uppercase.strings&#8221;.<br \/>\nFatte queste operazioni possiamo cominciare ad aggiungere una coppia &#8220;chiave-valore&#8221; in ognuno di questi due file. Per esempio mettendo<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n\"HELLO WORLD\" = \"Hello world\";\r\n<\/pre>\n<p>nel primo e<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n\"HELLO WORLD\" = \"HELLO WORLD\";\r\n<\/pre>\n<p>nel secondo.<\/p>\n<p>Ora dobbiamo per\u00f2 localizzare in un&#8217;altra lingua (per esempio in italiano) queste due tabelle. Per far questo facciamo clic secondario sul file &#8220;Localizable.strings&#8221; e questa volta selezioniamo <em>Get Info<\/em>.<\/p>\n<p>Ci apparir\u00e0 una nuova finestra e nella tab General possiamo vedere che il file non \u00e8 attualmente localizzato in nessuna lingua, ma possiamo renderlo localizzabile premendo il relativo bottone in basso a sinistra.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\" aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/08\/LocString2.png\" alt=\"Make File Localizable\" width=\"387\" height=\"495\" \/><br \/>\n<\/center><\/p>\n<p>Premendolo noteremo che il contenuto della tab General verr\u00e0 modificato ed ora questo file \u00e8 localizzato solamente in lingua inglese. Per aggiungere l&#8217;italiano premiamo Add Localization e nel campo di testo che apparir\u00e0 immettiamo la parola &#8220;Italian&#8221;.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/08\/LocString3.png\" alt=\"Add Localization\" width=\"387\" height=\"494\" \/><br \/>\n<\/center><\/p>\n<p>Fatto questo possiamo chiudere la finestra delle Info.<br \/>\nEseguiamo la stessa operazione anche per l&#8217;altro file <em>Uppercase.string<\/em>.<\/p>\n<p>Se avete prestato attenzione, avrete forse notato che i due file .strings sono leggermente cambiati, ora infatti \u00e8 presente in &#8220;Group &amp; Files&#8221; un triangolino esattamente come i gruppi e le cartelle. Se lo espandete noterete le due lingue in cui \u00e8 localizzato il file: <em>English<\/em> e <em>Italian<\/em>.<\/p>\n<p>Localizziamo in italiano i due file Italian come segue, mettendo<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n\"HELLO WORLD\" = \"Ciao mondo\";\r\n<\/pre>\n<p>nel primo e<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n\"HELLO WORLD\" = \"CIAO MONDO\";\r\n<\/pre>\n<p>nel secondo.<\/p>\n<p>Bene. Abbiamo appena creato le nostre quattro tabelle (2&#215;2 lingue). Ora non ci resta che vedere come richiamare i valori associati alla chiave nel nostro codice.<br \/>\nApriamo  il file NomeProgettoViewController.m e modifichiamo la loadVied come segue:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)loadView {\r\n\t[super loadView];\r\n\r\n\tUILabel *localizedLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 30)] autorelease];\r\n\tlocalizedLabel.text = NSLocalizedString(@\"HELLO WORLD\", @\"\");\r\n\t[self.view addSubview:localizedLabel];\r\n\r\n\tlocalizedLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10, 80, 300, 30)] autorelease];\r\n\tlocalizedLabel.text = NSLocalizedString(@\"DevApp\", @\"\");\r\n\t[self.view addSubview:localizedLabel];\r\n\r\n\tlocalizedLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10, 150, 300, 30)] autorelease];\r\n\tlocalizedLabel.text = NSLocalizedStringFromTable(@\"HELLO WORLD\", @\"Uppercase\", @\"\");\r\n\t[self.view addSubview:localizedLabel];\r\n}\r\n<\/pre>\n<p>In ognuno dei tre blocchi del codice sopra riportato creiamo una label che visualizzeremo sullo schermo del terminale. Ora quello che importa a noi \u00e8 la seconda rigadi ogni blocco: esatto la NSLocalizedString!<\/p>\n<p>Spieghiamo bene i risultati che ci aspettiamo da ognuna:<\/p>\n<ol>\n<li>La prima NSLocalizedString visualizzail valore associato alla chiave &#8220;HELLO WORLD&#8221; presente nella tabella Localizable.strings. Visualizzer\u00e0 quindi &#8220;Ciao mondo&#8221; se la lingua del device \u00e8 settata su italiano, &#8220;Hello World&#8221; altrimenti.<\/li>\n<li>In questo caso cerchiamo una chiave che non \u00e8 presente nella tabella di default. In questi casi non viene generato nessun errore, semplicemente il sistema adotta la seguente convenzione: chiave = valore. Visualizzeremo quindi all&#8217;interno della chiave la parola &#8220;DevApp&#8221;.<\/li>\n<li>Come ultima abbiamo invece una particolare tipo di NSLocalizedString che ci permette di prelevare i valori da tabelle diverse da quelle di default. In questo caso dalla tabella Uppercase. Visualizzeremo quindi &#8220;CIAO MONDO&#8221; se la lingua del device \u00e8 settata su italiano, &#8220;HELLO WORLD&#8221; altrimenti.<\/li>\n<\/ol>\n<p>Con questo credo di aver terminato la preview sulla <em>NSLocalizedString<\/em>. In ogni caso, se avete dei problemi, potete scaricare l&#8217;archivio con il codice dalla repository su <a title=\"Google Code\" href=\"http:\/\/code.google.com\/p\/devapptutorials\/downloads\/list\" target=\"_blank\">Google Code<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ecco qui il secondo tutorial promesso! In questo articolo spiegher\u00f2 come potete fare per rendere le vostre&#8230;<\/p>\n","protected":false},"author":181,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[6,184,182,247,379,5,17,120,1],"class_list":["post-4279","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-iphone","tag-localizzare-applicazione-iphone","tag-localizzazione","tag-luca-di-franco","tag-nslocalizedstring","tag-objective-c","tag-teoria","tag-tutorial","tag-tutorial-pratici"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4279","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\/181"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=4279"}],"version-history":[{"count":17,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4279\/revisions"}],"predecessor-version":[{"id":4309,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4279\/revisions\/4309"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=4279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=4279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=4279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}