Le applicazioni per Windows Phone possono essere pubblicate attraverso il Marketplace e grazie a questo strumento è possibile rendere visibile le proprie app in più paesi o addirittura in tutto il mondo. In questo scenario è importante che un'app supporti la maggior parte delle lingue, così da renderla più fruibile e user friendly.
Per sviluppare un'applicazione che supporti più lingue esistono diverse strade, ma tra le più semplici c'è sicuramente quella basate sulle risorse. Da non confondere con quelle XAML, le risorse sono file .resx che vengono inclusi nel pacchetto di deployment, attraverso i satellite assembly possono essere specifiche per una culture, e godono di un meccanismo automatico per il caricamento in base alla lingua del device Windows Phone.
Si parte quindi dalla voce Add->New Item per selezionare la tipologia Resources file, dando un nome che rappresenti l'intero set di informazioni che si vogliono localizzare a seconda della lingua dell'utente, nell'esempio Resource.resx. Premendo OK si presenta una form di Visual Studio che permette di inserire più voci stringa identificate da un nome.
Facendo attenzione a cambiare la voce Access modifier in Public, come nell'immagine, si procede riempiendo questo file con la lista di chiavi e valori per la lingua predefinita o principale della propria applicazione. Una volta salvato il file è possibile trovare una classe di nome Resource con proprietà statiche, ognuna per ogni chiave inserita. A questo punto è possibile ripetere l'operazione di inserimento dei file di risorsa utilizzando lo stesso nome, ma ponendo il suffisso della culture: per esempio Resource.it-IT.resx per supportare l'italiano. Creato il file occorre poi riempirlo con le stesse chiavi, ma valorizzando i testi in italiano; in questo modo si crea un set di chiavi localizzate in una lingua predefinita e in italiano. Per utilizzare queste informazioni è necessario aprire il file di progetto csproj o vbproj attraverso un programma di editor di testo, come notepad. In questo file va localizzato il tag SupportedCultures e valorizzato con la lista delle lingue supportate, come nello snippet seguente.
<SupportedCultures>en-US;it-IT</SupportedCultures>
Salvato il file, Visual Studio chiederà se ricaricare il progetto, a cui occorre rispondere di sì. Non resta quindi che usare le risorse. Per farlo ci sono due strade: la prima più semplice si basa sul codice. Laddove serve è possibile leggere la stringa localizzata e valorizzare le proprietà di proprio interesse:
PageTitle.Text = Resource.Title;
Se invece si vuole utilizzare le chiavi di risorse all'interno dello XAML, sfruttando il Binding, è necessario instanziare la classe Resource e usarla come risorsa XAML a livello di Page o di App.
<phone:PhoneApplicationPage xmlns:local="clr-namespace:MyPhoneApp"> <phone:PhoneApplicationPage.Resources> <local:Resource x:Key="resource" /> </phone:PhoneApplicationPage.Resources>
Dichiarata la risorsa è possibile usarla come sorgente dati e sfruttare il binding per interrogare le proprietà, ognuna per ogni chiave dichiarata.
<TextBlock Text="{Binding Title,Source={StaticResource resource}}"/>
Non occorre fare altro, perché il motore di caricamento delle risorse si occupa in autonomia di caricare il file it-IT o quello predefinito, a seconda che la lingua del device sia in italiano o in un'altra lingua.
Per una lista completa delle culture si veda:
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.95)
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Disabilitare automaticamente un workflow di GitHub
Migliorare l'organizzazione delle risorse con Azure Policy
Cambiare la chiave di partizionamento di Azure Cosmos DB
Recuperare l'ultima versione di una release di GitHub
Creare una custom property in GitHub
Creare alias per tipi generici e tuple in C#
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Evitare la script injection nelle GitHub Actions
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Eseguire query verso tipi non mappati in Entity Framework Core