{"id":6526,"date":"2011-04-07T14:04:07","date_gmt":"2011-04-07T12:04:07","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=6526"},"modified":"2011-04-07T14:04:07","modified_gmt":"2011-04-07T12:04:07","slug":"t091-localizzare-le-proprie-applicazioni-ios-e-mac-os-x-con-localizable-strings-merge","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t091-localizzare-le-proprie-applicazioni-ios-e-mac-os-x-con-localizable-strings-merge\/","title":{"rendered":"T#091 &#8211; Localizzare le proprie applicazioni iOS e Mac OS X con Localizable Strings Merge"},"content":{"rendered":"<p><a href=\"http:\/\/clk.tradedoubler.com\/click?p=24373&#038;a=1735897&#038;g=0&#038;url=http:\/\/itunes.apple.com\/app\/localizable-strings-merge\/id424605392?mt=12&#038;partnerId=2003\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Localizable-Strings-Merge-mac-app-store-devAPP-00.jpg\" alt=\"Localizable-Strings-Merge-mac-app-store-devAPP-00\" title=\"Localizable-Strings-Merge-mac-app-store-devAPP-00\" width=\"80\" height=\"80\" class=\"alignleft size-full wp-image-6451\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Localizable-Strings-Merge-mac-app-store-devAPP-00.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Localizable-Strings-Merge-mac-app-store-devAPP-00-92x92.jpg 92w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/03\/Localizable-Strings-Merge-mac-app-store-devAPP-00-64x64.jpg 64w\" sizes=\"auto, (max-width: 80px) 100vw, 80px\" \/><\/a> Per disporre del pi\u00f9 ampio bacino di utenti possibile, e quindi per amplificare i profitti, tutti gli sviluppatori iPhone, iPad e Mac OS dovrebbero porsi il problema di localizzare in pi\u00f9 lingue le proprie applicazioni. Gli utenti, infatti, difficilmente comprano e usano un&#8217;applicazione la cui interfaccia utente \u00e8 scritta in una lingua che non comprendono.<\/p>\n<p>La procedura standard per internazionalizzare un&#8217;applicazione si basa sul tool a linea di comando &#8220;genstrings&#8221; che analizza i file sorgente alla ricerca della macro &#8220;NSLocalizedString&#8221; e genera i file &#8220;Localizable.strings&#8221; che conterranno tutte le stringhe da tradurre. Questa procedura semplifica la creazione dei file per le traduzioni, ma ha alcune pesanti limitazioni; vediamo quali, e soprattutto analizziamo un&#8217;utility chiamata <a href=\"http:\/\/clk.tradedoubler.com\/click?p=24373&#038;a=1735897&#038;g=0&#038;url=http:\/\/itunes.apple.com\/app\/localizable-strings-merge\/id424605392?mt=12&#038;partnerId=2003\" target=\"_blank\">Localizable Strings Merge<\/a> che ci far\u00e0 letteralmente risparmiare ore di lavoro.<!--more--><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-01.jpg\" alt=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-01\" title=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-01\" width=\"500\" height=\"373\" class=\"aligncenter size-full wp-image-6529\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-01.jpg 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-01-300x223.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-01-150x111.jpg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>I limiti di genstrings<\/h4>\n<p>Genstrings \u00e8 un tool a linea di comando: se per molti sviluppatori questo non rappresenta certo un problema, \u00e8 sicuramente meno intuitivo e gradevole di un&#8217;applicazione dotata di un&#8217;interfaccia grafica semplice e elegante.<\/p>\n<p>Ma il vero problema di genstrings \u00e8 il fatto che non \u00e8 in grado di fare il merge delle stringhe. Vediamo meglio che cosa significa e cosa implica.<\/p>\n<p>Per internazionalizzare e localizzare un&#8217;applicazione iOS o Mac OS X normalmente si segue questo processo:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-02.jpg\" alt=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-02\" title=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-02\" width=\"491\" height=\"295\" class=\"aligncenter size-full wp-image-6530\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-02.jpg 491w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-02-300x180.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-02-150x90.jpg 150w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Il processo di traduzione spesso richiede diversi giorni, per questo tipicamente si procede in parallelo con la conclusione dello sviluppo e i relativi test. Come possiamo immaginare, durante questa fase \u00e8 abbastanza comune che vengano raffinate alcune stringhe o che ne vengano aggiunte altre. Al termine diventa dunque necessaria un&#8217;operazione di merge dei termini tradotti e di quelli introdotti nel frattempo, un&#8217;operazione che anche nei casi pi\u00f9 semplici, essendo da fare completamente a mano, diventa estremamente laboriosa e soggetta ad errori difficili da individuare.<\/p>\n<p>Il problema del merge \u00e8 particolarmente evidente nel caso di grandi team di sviluppo che si affidano ad altre societ\u00e0 o a gruppi esterni per le traduzioni, ma accade anche in scenari molto pi\u00f9 semplici, addirittura quando a far lo sviluppo e le traduzioni \u00e8 sempre la stessa persona. Pensiamo ad esempio al caso in cui abbiamo gi\u00e0 in vendita la versione 1.0 di un&#8217;applicazione, completa di traduzioni. Quando lavoriamo alla versione 2.0 non vogliamo doverla rifare da zero, ma giustamente ci vogliamo occupare solo delle differenze.<\/p>\n<p>In questi frangenti entra in gioco <strong>Localizable Strings Merge<\/strong>, in vendita su Mac App Store a 2,99 \u20ac (3,99 $), un prezzo davvero contenuto considerato il tempo (e dunque i costi) che ci fa di risparmiare.<\/p>\n<h4>Introduzione a Localizable Strings Merge<\/h4>\n<p>Localizable Strings Merge sostanzialmente esegue la generazione dei file &#8220;Localizable.strings&#8221; a partire dai file sorgente (in pratica come &#8220;genstrings&#8221;, ma attraverso un&#8217;interfaccia grafica semplice ed elegante) e soprattutto il merge dei file tradotti o parzialmente tradotti.<\/p>\n<p>L&#8217;interfaccia grafica \u00e8 suddivisa in due sezioni: la parte sinistra \u00e8 dedicata ai file sorgente dai quali &#8220;estrarre&#8221; le stringhe da tradurre, mentre la parte destra \u00e8 il contenitore per i file eventualmente gi\u00e0 tradotti che devono essere aggiornati con le informazioni che provengono dalla parte sinistra.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-03.jpg\" alt=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-03\" title=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-03\" width=\"471\" height=\"544\" class=\"aligncenter size-full wp-image-6531\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-03.jpg 471w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-03-259x300.jpg 259w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-03-129x150.jpg 129w\" sizes=\"auto, (max-width: 471px) 100vw, 471px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Possiamo stare tranquilli: lo stile chiaro e essenziale ci guider\u00e0 nel processo con scelte che eliminano ogni ambiguit\u00e0. Ma vediamolo nei dettagli.<\/p>\n<h4>Creazione dei file Localizable.strings<\/h4>\n<p>Per generare i file &#8220;Localizable.strings&#8221; da inviare ai traduttori \u00e8 sufficiente trascinare nella parte sinistra, tramite &#8220;drag &#038; drop&#8221;, tutti i file sorgente. In alternativa si pu\u00f2 trascinare direttamente la cartella che contiene il progetto: in tal caso verranno filtrati in automatico tutti e soli i file sorgente (su cui eventualmente si possono operare dei raffinamenti, eliminando i file non necessari).<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-04.jpg\" alt=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-04\" title=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-04\" width=\"499\" height=\"572\" class=\"aligncenter size-full wp-image-6532\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-04.jpg 499w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-04-261x300.jpg 261w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-04-130x150.jpg 130w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>A questo punto il pulsante &#8220;Genera Stringhe&#8221; diventa attivo (prima era disabilitato). Cliccandoci sopra verr\u00e0 avviata l&#8217;elaborazione, al termine della quale ci verr\u00e0 chiesto dove salvare il file &#8220;Localizable.strings&#8221; generato da zero e contenente tutte le stringhe da tradurre. Una copia di questo file dovr\u00e0 essere poi inviata a ciascun traduttore.<\/p>\n<h4>Merge dei file tradotti<\/h4>\n<p>Quando i traduttori ci avranno inviato i file completi di traduzioni o se nel frattempo abbiamo modificato qualcosa, dovremo eseguire l&#8217;operazione di &#8220;merge&#8221; che unir\u00e0 le stringhe gi\u00e0 tradotte con tutte quelle eventualmente aggiunte nel frattempo.<\/p>\n<p>Per eseguire il merge dovremo trascinare nella parte sinistra, sempre tramite &#8220;drag &#038; drop&#8221;, tutti i file sorgente, esattamente come abbiamo fatto al punto precedente.<\/p>\n<p>A questo punto, per\u00f2, al posto di cliccare sul pulsante &#8220;Genera Stringhe&#8221;, trascineremo nella parte di destra, (via &#8220;drag &#038; drop&#8221;), i file &#8220;Localizable.strings&#8221;, uno per ogni lingua, ricevuti dai traduttori. Il pulsante sotto cambier\u00e0 quindi nome in &#8220;Merge Stringhe&#8221;:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-05.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-05.jpg\" alt=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-05\" title=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-05\" width=\"499\" height=\"572\" class=\"aligncenter size-full wp-image-6533\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-05.jpg 499w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-05-261x300.jpg 261w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-05-130x150.jpg 130w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Un semplice click e i file &#8220;Localizable.strings&#8221; verranno automaticamente aggiornati unendo le stringhe aggiunte nel frattempo ed eliminando quelle tradotte, ma eventualmente non pi\u00f9 presenti nei file sorgente. Il nostro consiglio \u00e8 di lasciare sempre selezionata l&#8217;opzione &#8220;Crea copia di backup prima del merge&#8221;, in tal modo, prima di sovrascrivere un file Localizable.strings, ne viene creata una copia di sicurezza con lo stesso nome a cui viene aggiunta l&#8217;estensione .backup.<\/p>\n<p>A questo punto, se andiamo ad aprire con il nostro editor di testo preferito i nuovi file &#8220;Localizable.strings&#8221; vedremo al loro interno le nuove stringhe marcate con il tag NEW:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-06.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-06.jpg\" alt=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-06\" title=\"t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-06\" width=\"280\" height=\"156\" class=\"aligncenter size-full wp-image-6528\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-06.jpg 280w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/04\/t091-Localizzare-applicazioni-iphone-ipad-macos-Localizable-Strings-Merge-06-150x83.jpg 150w\" sizes=\"auto, (max-width: 280px) 100vw, 280px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Se una stringa per qualche motivo \u00e8 stata rimossa dai sorgenti viene automaticamente eliminata anche dai file tradotti. Questo \u00e8 molto utile perch\u00e8 garantisce che tutte le stringhe presenti nei file &#8220;Localizable.strings&#8221; siano usate nell&#8217;applicazione.<\/p>\n<h4>Conclusione<\/h4>\n<p>Localizable Strings Merge non solo ci semplifica e velocizza le operazioni di unione delle traduzioni, ma ci garantisce che non manchi niente, che i file di localizzazione siano ben formattati e in ordine e, cosa pi\u00f9 importante, ci permette di risparmiare tempo e costi preziosi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per disporre del pi\u00f9 ampio bacino di utenti possibile, e quindi per amplificare i profitti, tutti gli&#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":[649,673,671,650,672],"class_list":["post-6526","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-localizable-strings-merge","tag-localizable-strings","tag-localizzare-applicazioni-ipad","tag-localizzare-applicazioni-iphone","tag-localizzare-applicazioni-mac-os"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6526","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=6526"}],"version-history":[{"count":3,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6526\/revisions"}],"predecessor-version":[{"id":6535,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/6526\/revisions\/6535"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=6526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=6526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=6526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}