Creare siti web e applicazioni multilingua con Asp Net 2.0
Essere in grado di creare applicazioni web multilinguaè decisamente un ottima referenza da presentare alproprio capo o ai propri clienti. E in questo periodo,diciamo, che è una competenza cui non si puòfare a meno.
Come al solito ASP.NET mette a disposizione meccanismiveramente facili che mettono lo sviluppatore nelle condizionidi poter creare siti multilingua senza eccessivi sforzi. Conl'avvento di Visual Studio 2005 e del .NET Framework 2.0,inoltre, questi meccanismi sono stati miglioratiulteriormente, rispetto a quello che si aveva con le versioniprecedenti.
Prima infatti, le risorse andavano inserite in assemblysatelliti a mano e potevano essere create addirittura da rigadi comando, tramite dei poveri file di testo.
Ora, ASP.NET 2.0, offre queste nuove funzionalità:
- diversi tipi di risorse:
globali - presenti nella directory speciale App_GlobalResources
locali – presenti nella directory speciale App_LocalResources - diversi metodi di localizzazione:
implicita
esplicita
I file risorsa solitamente utilizzati per la localizzazionedi applicazioni sono i file .resx, file che contengono uninsieme di coppie chiave-valore; sono però consideraterisorse anche immagini, icone, file XML, e qualsiasi tipo dioggetto serializzabile.
Le risorse globali
Sono quelle risorse che possono essere lette da qualsiasioggetto presente nell'applicazione web da localizzare,dalle singole web form ai file .sitemap propri del sistema diSite Navigation.
La directory che contiene questi file risorsa è ladirectory App_GlobalResources. Sarà poi il runtime di.NET a trasformare questi file in assembly satelliti,ciascuno contenente le risorse localizzate per ciascunacultura specificata.
Le risorse locali
Sono quelle risorse legate direttamente ad una singola webform aspx. Infatti, ogni singolo file .resx prende il nomedalla pagina cui è "legato". Per esempio, lapagina peppe.aspx potrà avere, all'interno delladirectory App_LocalResources, i file peppe.aspx.resx epeppe.asp.en-US.aspx utili alla sua localizzazione. Lerisorse presenti all'interno di quei file, sono visibilisolamente alla pagina peppe.aspx e ai controlli posti al suointerno.
Visual Studio 2005 permette la creazione automatica diquesto tipo di file. Provate ad aprire una pagina .aspx,andare in modalità Design, e scegliete l’opzione
Tools » Generate Local Resource
Vedrete che verrà inserito il un nuovo fileall’interno della directory App_LocalResourcescontenente le coppie chiave-valore utili a localizzare tuttele proprietà dei web controls inseriti all'internodella pagina che avete aperto. Le proprietà cheverranno aggiunte al file di risorsa, sono tutte quelle chehanno l'attributo Localizable settato a true.
Metodi di localizzazione
Come abbiamo detto, sono stati inseriti due nuovi metodi dilocalizzazione: implicita ed esplicita.
La localizzazione implicita viene utilizzata per la letturadi risorse locali e viene effettuata attraversol'attributo meta:resourceKey:
<asp:Label ID="lblAuthor" runat="server" meta:resourcekey="lblAuthorResource1" />
La localizzazione esplicita, invece, viene utilizzata per lalettura delle risorse globali. Questa tecnica èattuata attraverso una nuova feature di ASP.NET: leespressioni dinamiche.
Questa caratteristica prevede la creazione a runtime di unaclasse, nel nostro caso la classe Resources, che inautomatico legge i valori nei file di risorsa in base allachiave scelta. All'interno del markup, le espressionidinamiche sono descritte dal marker $.
<asp:Literal runat="server" Text="<%$ Resources:MyGlobalResources, chiave %>" />
Chiaramente la lettura di informazioni localizzate dai filedi risorsa, può anche essere fatta via codice. Inquesto caso ci vengono in aiuto i metodiGetGlobalResourceObject e GetLocalResourceObject della classeHttpContext.
Vediamo come utilizzarli:
literal.Text = HttpContext.GetGlobalResourceObject("MyGlobalResources" ,"chiave").ToString();literal.Text = HttpContext.GetLocalResourceObject("/mySite/myPage.aspx" ,"literalResource1.Text").ToString();
Globalizzazione
Adesso che abbiamo capito la tecnica con cui creare questifile risorsa e i modi in cui poter leggere le informazioniper la localizzazione, dobbiamo impostare la nostraapplicazione web in maniera adeguata. Abbiamo cioè lanecessità di settare la cultura lato client(UICulture) e lato server (Culture).
E' possibile settare questi valori o nel web.config ovia codice.
Nel web.config esiste un elemento creato proprio per gestirela globalizzazione dell'applicazione, l'elementoglobalization, che espone gli attributi "culture" e"uiCulture". Questi attributi vanno valorizzati ocon dei valori di cultura validi
<globalization culture="it-IT" uiCulture="it-IT" />
o con la keyword "auto" , che lascia il compitodella scelta della lingua al browser dell'utente.
<globalization culture="auto" uiCulture="auto" />
Se invece, non vengono settati, verrà presa la linguadel server in cui l'applicazione risiede.
In alternativa, abbiamo la possibilità di settare, equindi anche di cambiare, la lingua dell'applicazione viacodice, in quanto sono presenti due proprietà:CurrentCulture e CurrentUICulture all'interno dellaclasse HttpContext. L'unico vincolo sta nel fatto chequeste due proprietà vanno valorizzate solamenteall'interno del metodo InitializeCulture proprio dellaclasse Page:
protected override void InitializeCulture(){ string lang = Request["ctl00$DropDownList1"]; if (lang == "ita") { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("it-IT"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("it-IT"); } if (lang == "eng") { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); }}
Nel file allegato all’articolo, è presente unmini-sito web in grado di cambiare la linguadall'italiano all'inglese, con la presenza di tuttele tecniche di localizzazione spiegate fin'ora.
Conclusioni
In questo articolo abbiamo cercato di spiegare tutte letecniche di localizzazione e globalizzazione offerte dallaversione 2.0 di ASP.NET; tecniche che permettono un facileutilizzo dei file risorsa, sia locali che globali, utili allacreazione di siti multilingua senza eccessivi sforzi da partedello sviluppatore.