Antonio Feliziani
a- a+

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 al proprio 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 meccanismi veramente facili che mettono lo sviluppatore nelle condizioni di poter creare siti multilingua senza eccessivi sforzi. Con l'avvento di Visual Studio 2005 e del .NET Framework 2.0, inoltre, questi meccanismi sono stati migliorati ulteriormente, rispetto a quello che si aveva con le versioni precedenti.

Prima infatti, le risorse andavano inserite in assembly satelliti a mano e potevano essere create addirittura da riga di 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 localizzazione di applicazioni sono i file .resx, file che contengono un insieme di coppie chiave-valore; sono però considerate risorse anche immagini, icone, file XML, e qualsiasi tipo di oggetto serializzabile.

 

Le risorse globali

Sono quelle risorse che possono essere lette da qualsiasi oggetto presente nell'applicazione web da localizzare, dalle singole web form ai file .sitemap propri del sistema di Site Navigation.

La directory che contiene questi file risorsa è la directory App_GlobalResources. Sarà poi il runtime di .NET a trasformare questi file in assembly satelliti, ciascuno contenente le risorse localizzate per ciascuna cultura specificata.

 

Le risorse locali

Sono quelle risorse legate direttamente ad una singola web form aspx. Infatti, ogni singolo file .resx prende il nome dalla pagina cui è "legato". Per esempio, la pagina peppe.aspx potrà avere, all'interno della directory App_LocalResources, i file peppe.aspx.resx e peppe.asp.en-US.aspx utili alla sua localizzazione. Le risorse presenti all'interno di quei file, sono visibili solamente alla pagina peppe.aspx e ai controlli posti al suo interno.
Visual Studio 2005 permette la creazione automatica di questo 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 file all’interno della directory App_LocalResources contenente le coppie chiave-valore utili a localizzare tutte le proprietà dei web controls inseriti all'interno della pagina che avete aperto. Le proprietà che verranno aggiunte al file di risorsa, sono tutte quelle che hanno l'attributo Localizable settato a true.

 

Metodi di localizzazione

Come abbiamo detto, sono stati inseriti due nuovi metodi di localizzazione: implicita ed esplicita.
La localizzazione implicita viene utilizzata per la lettura di risorse locali e viene effettuata attraverso l'attributo meta:resourceKey:

 

<asp:Label ID="lblAuthor" runat="server" meta:resourcekey="lblAuthorResource1" />

 


La localizzazione esplicita, invece, viene utilizzata per la lettura delle risorse globali. Questa tecnica è attuata attraverso una nuova feature di ASP.NET: le espressioni dinamiche.

Questa caratteristica prevede la creazione a runtime di una classe, nel nostro caso la classe Resources, che in automatico legge i valori nei file di risorsa in base alla chiave scelta. All'interno del markup, le espressioni dinamiche sono descritte dal marker $.

 

<asp:Literal runat="server" Text="<%$ Resources:MyGlobalResources, chiave %>" />

 


Chiaramente la lettura di informazioni localizzate dai file di risorsa, può anche essere fatta via codice. In questo caso ci vengono in aiuto i metodi GetGlobalResourceObject e GetLocalResourceObject della classe HttpContext.
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 questi file risorsa e i modi in cui poter leggere le informazioni per la localizzazione, dobbiamo impostare la nostra applicazione web in maniera adeguata. Abbiamo cioè la necessità di settare la cultura lato client (UICulture) e lato server (Culture).
E' possibile settare questi valori o nel web.config o via codice.

Nel web.config esiste un elemento creato proprio per gestire la globalizzazione dell'applicazione, l'elemento globalization, che espone gli attributi "culture" e "uiCulture". Questi attributi vanno valorizzati o con dei valori di cultura validi

 

<globalization culture="it-IT" uiCulture="it-IT" />

 


o con la keyword "auto" , che lascia il compito della scelta della lingua al browser dell'utente.

 

<globalization culture="auto" uiCulture="auto" />

 

 

Se invece, non vengono settati, verrà presa la lingua del server in cui l'applicazione risiede.

In alternativa, abbiamo la possibilità di settare, e quindi anche di cambiare, la lingua dell'applicazione via codice, in quanto sono presenti due proprietà: CurrentCulture e CurrentUICulture all'interno della classe HttpContext. L'unico vincolo sta nel fatto che queste due proprietà vanno valorizzate solamente all'interno del metodo InitializeCulture proprio della classe 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 un mini-sito web in grado di cambiare la lingua dall'italiano all'inglese, con la presenza di tutte le tecniche di localizzazione spiegate fin'ora.

 

Conclusioni

In questo articolo abbiamo cercato di spiegare tutte le tecniche di localizzazione e globalizzazione offerte dalla versione 2.0 di ASP.NET; tecniche che permettono un facile utilizzo dei file risorsa, sia locali che globali, utili alla creazione di siti multilingua senza eccessivi sforzi da parte dello sviluppatore.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Redazione
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!