in

DotNetSide

Dot Net South Italy Developers User Group

Articoli

Articoli pubblicati dagli iscritti a .netSide

ASP.NET 2.0 Localization Overview

articolo di Tiziana Loporchio

Introduzione 

Molte aziende puntano, ormai da tempo, ai mercati internazionali; tale politica imprenditoriale spinge le stesse a non limitarsi alla sola presenza online con siti Corporate, ma a cercare di fidelizzare i propri clienti e conquistarsi la fiducia di altri, con la fornitura di servizi verso paesi con differenti lingue e culture.
Pur essendo questa una sentita e crescente necessità, stranamente i tool necessari ad una facile gestione della localizzazione delle applicazioni sono risultati assolutamente inefficienti ed onerosi tanto che, per realizzare applicazioni localizzate, si finisce spesso per tornare ai metodi “tradizionali”, decisamente meno gravosi ma che inducono lo sviluppatore all'implementazione di applicazioni ridondanti.
La nuova release di ASP.NET 2.0 promette di migliorare il nostro approccio alla localizzazione delle applicazioni e, a tale scopo, fornisce una nuova API specifica che, oltre a rendere più facile la scrittura di codice per l’accesso a risorse localizzate, sfrutta sistemi più veloci di separazione del contenuto localizzabile rispetto alle pagine web che lo utilizzano.

ASP.NET 2.0 Localization

ASP.NET 2.0, pur mantenendo alla base le caratteristiche introdotte in ASP.NET 1.x, fornisce nuovi tool per il supporto alla generazione di risorse localizzate utili all’applicazione web, nuovi costrutti dichiarativi e di runtime per l’accesso alle stesse, che migliorano ed assicurano il supporto alle nuove caratteristiche anche nei controlli ASP.NET.
Creare e gestire risorse, oggi, è infatti più agevole tramite il nuovo “Managed Resource Editor”, un tool capace di includere nel progetto disparate tipologie di risorse inserite in file .resx, file che contengono un insieme di coppie chiave-valore (da semplici stringhe a tipi complessi o, comunque, qualsiasi tipo di oggetto serializzabile), di cui si avvale l' applicazione web in relazione alla lingua selezionata.
Con la nuova release, finalmente, viene anche introdotto il sistema di “Resource Generation”, già conosciuto agli sviluppatori di Windows Forms, creato a supporto della rapida ed automatica internazionalizzazione delle risorse.
Rifacendosi, infine, proprio al modello di programmazione Windows Forms, ma diversificandosi grazie all’introduzione di requisiti specifici per il web, ASP.NET può oggi beneficiare di caratteristiche di programmazione che facilitano la gestione e l’utilizzo di risorse localizzate.

Local Resources generate automaticamente in ASP.NET 2.0

Il sistema di “Resource Generation” di ASP.NET 2.0 fornisce un semplice approccio alla generazione automatica delle risorse per elementi HTML, attributi dei tag, Server Controls e contenuto statico in Web Forms, User Controls e Master Pages.
La presenza obbligata dell’attributo “runat=server” nei tag, permetterà, per i controlli server side che espongono proprietà marcate come <Localizable(true)> di default, la conversione automatica in risorsa (“Local Resource”).
Le “Local  Resources” sono automaticamente generate basandosi, infatti, proprio sulle proprietà localizzabili esposte da elementi server side della pagina.
Per creare le risorse locali è sufficiente selezionare la pagina web (.aspx), la master page (.master) o lo user control (.ascx) in Design Mode, e cliccare nell’ area di Menù Tools di Visual Studio 2005 la voce ”Generate Local Resource” come nella (figura 1.)


figura 1.
Area di Menù "Generate Local Resource" (se non presente in elenco aggiungerla dal menù Customize…)

La cartella dedicata "\App_LocalResources" del progetto ASP.NET, a questo punto, presenterà un set di file XML (.resx)  (figura 2.) e verranno aggiunte, nella dichiarazione dei singoli controlli, delle espressioni dichiarative implicite che ci permettono di non scrivere alcun codice aggiuntivo per applicare le risorse localizzate ai server controls come nell’esempio di codice seguente :

<asp:LinkButton id="lnkSelectCulture" PostBackUrl="selectculture.aspx" runat="server"

Text="Language Preference" meta:resourcekey="lnkSelectCultureResource1" >

</asp:LinkButton> 


figura 2. File di risorse locali autogenerato per lo user control CultureInfo.ascx

Tutte le proprietà del controllo con attributo <Localizable(true)>, inoltre, sono facilmente riconoscibili tramite una icona rossa presente nella finestra delle proprietà (figura 3.).

 
figura 3. La proprietà Text distinta da un icona di Localizzazione

Per quelle proprietà, invece, che non implementano la possibilità di essere automaticamente localizzate, esiste la possibilità di associare espressioni esplicite di localizzazione in maniera dichiarativa.
L’Espression dialog box (figura 4.), infatti, in maniera visuale ed intuitiva permette di eseguire il mapping delle risorse disponibili alle proprietà e automaticamente di generare espressioni esplicite di localizzazione come nell’esempio che segue:

<asp:Image ID="Image1" runat="server" AlternateText="<%$ Resources:l1Resource1.Text %>" />

 
figura 4.Expression Dialog Box

L’automatismo nella creazione di risorse  fatto su ogni pagina però, può portare alla duplicazione di termini già tradotti in altre pagine con sforzi ed inutili perdite di tempo e difficoltà di aggiornamento.
L’uso di Master Pages, di controlli che condividono intestazioni, di menù ed altre sezioni HTML con le altre pagine, pur permettendo un implicito riuso ed una riduzione della duplicazione delle risorse, non risolvono il problema.
Pensiamo, infatti, alla necessità di gestire tutti i messaggi d’errore nelle diverse lingue, alla volontà di concentrare le risorse in maniera globale per riutilizzarle in altre applicazioni.
La metodologia che utilizza risorse locali, fino ad ora analizzata, inizia ad essere laboriosa e controindicata.
Vengono in aiuto a tal proposito le “Global Resourses” già presenti in precedenza, ma che oggi, nella versione 2.0 di ASP.NET, beneficiano di nuove caratteristiche.

Le Global Resources in ASP.NET 2.0

Anche se costretti alla creazione manuale dei file di risorse globali, un nuovo “Managed Resource Editor(figura 5.) sulla scia di Windows Forms, facilita la creazione e la gestione delle risorse localizzate.
Beneficio maggiore, nell’utilizzo delle risorse globali, è la compilazione in una classe tipizzata che permette il facile accesso da codice, tramite l’Intellisense, direttamente richiamando l’oggetto Resources.
Ipotizzando, infatti, la presenza di un file di risorse localizzate di nome “Flags.resx”, le stesse sono accessibili a runtime scrivendo semplicemente Resources.Flags.Canada piuttosto che Resources.Flags.Spain.
In tal modo, e diversamente dalle precedenti versioni di asp.net, allo sviluppatore è notevolmente facilitata la gestione del lifecycle dell’accesso alle risorse a runtime, grazie soprattutto all’istanza automatica e all’inserimento nella cache della classe ResourceManager.

 
figura 5. Managed Resource Editor con le differenti tipologie di risorse gestibili

L’uso visuale dell’Espression dialog box già visto in precedenza per Local Resources è altresì disponibile per l’associazione alle proprietà di “Global resources” (figura 6) richiamando, questa volta, la classe tipizzata.
L’impostazione della  proprietà ClassKey genererà espressioni esplicite di localizzazione, come nell’esempio che segue: 

<asp:Image ID="Image2" runat="server"
AlternateText="<%$ Resources:Glossary, CompanyName %>" ImageUrl="…" />

 
figura 6. Expression Dialog Box e ClassKey

Come impostare le differenti Cultures

Create le risorse localizzate necessarie, esistono due differenti approcci per selezionare la lingua corrente nell’applicazione web.
Il primo approccio prevede la sola configurazione dichiarativa del web.config, tramite il tag xml <globalization>,  dove viene specificata la Culture e la UI Culture corrente, utilizzata dal thread del runtime per la richiesta delle relative risorse come nell’esempio che segue:

<globalization culture=”auto:it-IT” uiCulture=”auto:it”>

 

Nota : Nell’esempio viene utilizzato il nuovo valore “auto” che imposta la lingua corrente basandosi sull’eventuale valore ACCEPT_LANG  passato negli HTTP Headers o in caso contrario l’Italiano.

 

 

Il secondo approccio, invece, prevede l’utilizzo di codice che sostituisca il valore automatico settato a runtime con quello desiderato, utilizzando la classe CultureInfo (System.Globalization).
Verranno quindi gestite le informazioni su una lingua specifica, impostandola a runtime, al fine di individuare le risorse relative alla lingua scelta. Questo approccio viene scelto, per esempio, quando si desidera permettere la selezione della lingua tramite una lista di selezione a discesa nel sito o associarla ad un profilo utente. Di seguito un esempio di codice per l’impostazione a runtime dell’italiano:


[C# code]
CultureInfo ci = new CultureInfo(“it-IT”);

Thread.CurrentThread.CurrentCulture = ci;

Thread.CurrentThread.CurrentUICulture = ci;

 

Conclusioni

Queste nuove caratteristiche di localizzazione di ASP.NET 2.0 rendono più semplice la definizione di una strategia di localizzazione dell’applicazione, grazie all’introduzione di nuovi tool, nuove espressioni dichiarative ed un nuovo e flessibile modello di runtime.
Definire una nuova strategia di localizzazione per la creazione di applicazioni web, renderà possibile pertanto la riduzione, rispetto al passato, di costi e sforzi di sviluppo con l’apertura anche a scenari di personalizzazione, come potremo vedere nel prossimo articolo.

 

Only published comments... Nov 26 2006, 12:00 PM by Tiziana
Filed under:

Comments

 

Blog di Tiziana Loporchio said:

Nel mio articolo su come localizzare le applicazioni web, viene introdotto il concetto di risorsa (&amp;quot;Resource&amp;quot;)

November 29, 2006 10:24 AM
 

Andrea Bettiato said:

Salve Tiziana,

molto interessante e produttivo il tuo articolo sulla localizzazione delle pagine .aspx.

Trovo però, molto difficile creare le risorse localzzate direttamente dall'applicazione Web. Ritengo infatti la modifica di  files .resx da una pagina web un'operazione alquanto impegnativa da realizzare. Un database sarebbe una soluzione più pratica. Esite la possilità di cambiare il provider della localizzazione di ASP.NET 2.0 in modo da utilizzare SQL SERLVER al posto di files .resx?

January 1, 2007 2:54 PM
 

Tiziana said:

Certamente si, già dalle precedenti versioni era possibile farlo .Oggi è possibile per ASP.NET 2.0 tramite l'estensione della classe ResourceProviderFactory di cui parlerò in un prossimo articolo . Ciao !

January 9, 2007 9:37 AM
 

Raffaeu said:

Un unico commento breve ma significativo (spero), ottimo articolo. Aspetto la continuazione magari proprio con SQL 2005.
February 9, 2007 7:42 PM
 

Blog di lucab said:

Sto lavorando ad alcuni siti web che, tra l'altro, dovranno essere visualizzabili in diverse lingue.

May 5, 2007 2:02 AM
 

MADIL's Blog said:

Oggi stavo lavorando su di un sito Web per il quale &#232; prevista la localizzazione come indicato nelpost

July 25, 2007 1:47 PM

About Tiziana

Tiziana Loporchio oggi è Practice Leader presso una multinazionale presente in Italia, Svizzera e Romania che da oltre 20 anni fornisce consulenza nel settore ICT con un organico di oltre 600 risorse; Per otto anni, è stata Team Manager e Microsoft Certified Trainer per una società di formazione e servizi Microsoft Gold Certified Partner for Learning Solutions e ISV/Software Solutions. Responsabile della progettazione e dello sviluppo di applicazioni complesse, coordina il Team di Sviluppo Software e partecipa alla analisi e realizzazione di applicazioni Web e Windows Based.

Tiziana da 8 anni è Microsoft Certified Trainer ed ha erogato interventi formativi di diversa tipologia e complessità su tecnologie, linguaggi e software Microsoft; docente in corsi di formazione interni e per aziende o privati, svolge la sua attività a Bari, dove vive.

Powered by Community Server (Commercial Edition), by Telligent Systems