Condividi tramite


Cenni preliminari sulle risorse delle pagine Web ASP.NET

Aggiornamento: novembre 2007

Se si creano pagine Web che verranno lette da persone che parlano lingue diverse, è necessario fornire ai lettori la possibilità di visualizzare la pagina nella propria lingua. Un metodo consiste nel ricreare la pagina in ogni lingua. Tuttavia, questo metodo può implicare notevoli sforzi, il rischio di errori e la difficoltà di gestire le modifiche della pagina originale.

ASP.NET consente di creare una pagina che richiami il contenuto e altri dati in base alle impostazioni della lingua preferita per il browser o alla scelta esplicita della lingua da parte dell'utente. Il contenuto e gli altri dati vengono definiti risorse e tali dati possono essere archiviati in file di risorse o altre origini.

Nella pagina Web ASP.NET i controlli vengono configurati in modo da ottenere i relativi valori delle proprietà dalle risorse. In fase di esecuzione le espressioni di risorse vengono sostituite dalle risorse contenute nel file di risorse appropriato.

File di risorse

Un file di risorse è un file XML che contiene le stringhe che si desidera vengano tradotte in diverse lingue o i percorsi alle immagini. Il file di risorse contiene coppie chiave/valore, ognuna delle quali è una risorsa distinta. Per i nomi delle chiavi non viene effettuata la distinzione tra maiuscole e minuscole. Ad esempio, un file di risorse potrebbe contenere una risorsa con la chiave Button1 e il valore Submit.

È necessario creare un file di risorse distinto per ogni lingua, ad esempio inglese e italiano, o per una lingua e un paese, ad esempio inglese [Regno Unito] e inglese [Stati Uniti]. Ogni file di risorse localizzato contiene le stesse coppie di chiave/valore, l'unica differenza consiste nel fatto che un file di risorse localizzato può contenere un numero inferiore di risorse rispetto al file di risorse predefinito. Il processo di fallback incorporato della lingua gestisce quindi il caricamento della risorsa neutra o predefinita.

I file di risorse in ASP.NET hanno l'estensione RESX. In fase di esecuzione il file RESX viene compilato in un assembly, che talvolta viene definito come assembly satellite. Poiché i file resx vengono compilati dinamicamente, come le pagine Web ASP.NET, non è necessario creare assembly di risorse. La compilazione comprime diversi file di risorse di lingue simili nello stesso assembly.

Per creare i file di risorse, iniziare creando un file resx di base. Per ogni lingua da supportare, creare un nuovo file con lo stesso nome file. Nel nome, tuttavia, includere la lingua o la lingua e le impostazioni cultura (nome di impostazioni cultura). Per un elenco di nomi delle impostazioni cultura, vedere la classe CultureInfo. È ad esempio possibile creare i file seguenti:

  • WebResources.resx

    Il file di risorse di base Si tratta del file di risorse predefinito (fallback).

  • WebResources.es.resx

    Un file di risorse per lo spagnolo.

  • WebResources.es-mx.resx

    Un file di risorse specifico per lo spagnolo del Messico.

  • WebResources.de.resx   

    Un file di risorse per il tedesco.

In fase di esecuzione ASP.NET utilizza il file di risorse che meglio corrisponde all'impostazione della proprietà CurrentUICulture. Le impostazioni cultura dell'interfaccia utente per il thread vengono definite in base alle impostazioni cultura dell'interfaccia utente della pagina. Ad esempio, se le impostazioni cultura correnti dell'interfaccia utente sono rappresentate dallo spagnolo, ASP.NET utilizza la versione compilata del file WebResources.es.resx. Se non vi è corrispondenza per le impostazioni cultura correnti dell'interfaccia utente, in ASP.NET viene utilizzato il fallback della risorsa. All'inizio vengono ricercate le risorse per le specifiche impostazioni cultura. Se non sono disponibili, vengono ricercate le risorse per le impostazioni cultura neutre. Se anch'esse non sono disponibili, in ASP.NET viene caricato il file di risorse predefinito. In questo esempio il file di risorse predefinito è WebResource.resx.

Creazione di file di risorse per siti Web ASP.NET

In ASP.NET è possibile creare file di risorse con ambiti diversi. È possibile creare file di risorse globali, ossia che possono essere letti da qualsiasi pagina o codice presente nel sito Web, o file di risorse locali, che contengono le risorse per una singola pagina Web ASP.NET (file ASPX).

File di risorse globali

Per creare un file di risorse globale inserirlo nella cartella riservata App_GlobalResources nella directory principale dell'applicazione. Ogni file RESX presente nella cartella App_GlobalResources ha un ambito globale. Inoltre, ASP.NET genera un oggetto fortemente tipizzato che fornisce un metodo semplice per accedere alle risorse globali a livello di codice.

File di risorse locali

Un file di risorse locale viene applicato solo a una pagina o a un controllo utente ASP.NET (un file ASP.NET ha l'estensione aspx, ascx o master). Inserire i file di risorse locali nelle cartelle che hanno il nome riservato App_LocalResources. Diversamente dalla cartella radice App_GlobalResources, le cartelle App_LocalResources possono trovarsi in qualsiasi cartella dell'applicazione. Associare un gruppo di file di risorse a una specifica pagina Web utilizzando il nome del file di risorse.

Ad esempio, per la pagina Default.aspx nella cartella App_LocalResources è possibile creare i seguenti file:

  • Default.aspx.resx. Si tratta del file di risorse locale predefinito, ossia il file di risorse utilizzato per il fallback, se non esiste una corrispondenza di lingua.

  • Default.aspx.es.resx. Si tratta del file di risorse per lo spagnolo, senza informazioni sul paese.

  • Default.aspx.es-mx.resx. Si tratta del file di risorse specifico per lo spagnolo del Messico.

  • Default.aspx.fr.resx. Si tratta del file di risorse per il francese, senza informazioni sul paese.

Il nome di base del file corrisponde al nome del file della pagina seguito da un nome di lingua e di paese con l'estensione RESX. Per un elenco di nomi delle impostazioni cultura, vedere CultureInfo.

Localizzazione delle risorse di script client

Il supporto per la localizzazione degli script client ASP.NET AJAX si basa sul modello di localizzazione di ASP.NET 2.0. In questo modello i file di script e le risorse di script localizzate vengono incorporati in un'organizzazione di assembly di tipo hub-and-spoke (assembly satellite). È quindi possibile utilizzare selettivamente gli script client incorporati e le risorse per lingue e regioni specifiche. Questo modello consente a una sola codebase di supportare più impostazioni cultura. Inoltre è disponibile il supporto per i file di script localizzati forniti come file js su disco. ASP.NET può fornire automaticamente script client e risorse localizzati per lingue e regioni specifiche.

Per ulteriori informazioni, vedere i seguenti argomenti:

Scelta tra file di risorse locali e globali

È possibile utilizzare qualsiasi combinazione di file di risorse globali e locali nell'applicazione Web. Di norma, si aggiungono risorse a un file di risorse globali quando si desidera condividere le risorse tra le pagine. Le risorse nei file di risorse globali sono anche fortemente tipizzati per l'accesso a livello di codice.

I file di risorse globali possono tuttavia raggiungere dimensioni elevate se vi vengono incluse tutte le risorse localizzate. I file di risorse globali possono anche essere più difficili da gestire se più sviluppatori lavorano contemporaneamente su diverse pagine utilizzando un singolo file di risorse.

I file di risorse locali rendono più semplice la gestione delle risorse per una singola pagina Web ASP.NET, ma non possono essere condivisi tra le pagine. Inoltre, potrebbe essere necessario creare molti file di risorse locali se si utilizzano molte pagine da localizzare in diverse lingue. Per siti estesi con molte cartelle e lingue, l'utilizzo di risorse locali può causare una rapida crescita del numero di assembly nel dominio dell'applicazione.

Quando si apporta una modifica a un file di risorse predefinito, locale o globale, ASP.NET ricompila le risorse e riavvia l'applicazione ASP.NET. Ciò potrà avere effetto sulle prestazioni complessive del sito. L'aggiunta di file di risorse satellite non provoca la ricompilazione delle risorse, ma solo il riavvio dell'applicazione ASP.NET.

Nota:

Le risorse collegate sono supportate solo nei file di risorse globali.

Utilizzo delle risorse nelle pagine Web

Una volta creati i file di risorse, è possibile utilizzarli nelle pagine Web ASP.NET. In genere le risorse vengono utilizzate per compilare i valori delle proprietà dei controlli nella pagina. Ad esempio, si potrebbe utilizzare le risorse per impostare la proprietà Text di un controllo Button invece di definire la proprietà per una specifica stringa a livello di codice.

Per utilizzare le risorse al fine di impostare i valori delle proprietà dei controlli, è possibile utilizzare la localizzazione implicita o esplicita, descritte di seguito:

  • La localizzazione implicita opera con le risorse locali e consente di impostare automaticamente le proprietà dei controlli sulle risorse corrispondenti.

  • La localizzazione esplicita consente di utilizzare un'espressione di risorsa per impostare la proprietà di un controllo su una risorsa specifica nel file di risorse locale o globale.

Localizzazione implicita con risorse locali

Se sono stati creati file di risorse locali per una pagina specifica, è possibile utilizzare la localizzazione implicita per impostare i valori delle proprietà per un controllo dal file di risorse. In questo caso ASP.NET legge un file di risorse e imposta i valori delle proprietà sulle risorse corrispondenti.

Per utilizzare la localizzazione implicita, è necessario utilizzare la seguente convenzione di denominazione per le risorse nel file di risorse locale:

Key.Property

Ad esempio, se si creano risorse per un controllo Button denominato Button1, è possibile creare le seguenti coppie chiave/valore nel file di risorse locale:

Button1.Text
Button1.BackColor
Label1.Text

È possibile utilizzare qualsiasi nome per Key, ma Property deve corrispondere al nome di una proprietà del controllo che si sta localizzando.

Per specificare la localizzazione implicita, nella pagina viene utilizzato un attributo meta speciale nel codice del controllo . Non è necessario specificare esplicitamente le proprietà localizzate. Un controllo Button configurato per la localizzazione implicita può essere simile a quello riportato di seguito:

<asp:Button ID="Button1"  Text="DefaultText" 
    meta:resourcekey="Button1" />

Il valore resourcekey corrisponde a una chiave presente nel relativo file di risorse. In fase di esecuzione, ASP.NET stabilirà la corrispondenza tra le risorse e le proprietà del controllo utilizzando l'etichetta del controllo come resourcekey. Se nel file di risorse è definito un valore per una proprietà , ASP.NET sostituisce il valore di risorsa per tale proprietà.

Localizzazione esplicita

In alternativa è possibile utilizzare la localizzazione esplicita, dove si specifica un'espressione di risorsa. A differenza della localizzazione implicita, è necessario utilizzare un'espressione di risorsa per ogni proprietà che si desidera impostare.

Un controllo Button configurato per impostare la proprietà Text da un file di risorse globale può essere simile a quello riportato di seguito:

<asp:Button ID="Button1"  
    Text="<%$ Resources:WebResources, Button1Caption %>" />

L'espressione di risorsa utilizza la seguente sintassi, dove Class è facoltativo, a meno che la risorsa non sia globale, e ResourceID è obbligatorio:

<%$Risorse:Class,ResourceID%>

Il valore Class identifica il file di risorse da utilizzare quando si utilizzano risorse globali. Quando i file RESX vengono compilati, il nome del file di base, senza estensioni, viene utilizzato esplicitamente come nome della classe dell'assembly risultante. Se si desidera utilizzare le risorse di un file di risorse locale (un file che corrisponde al nome della pagina corrente), non è necessario includere un nome di classe in quanto ASP.NET adegua la classe della pagina alla classe delle risorse.

Il valore ResourceID è l'identificatore della risorsa da leggere. Nel precedente esempio la proprietà Text per il pulsante viene letta dal file di risorse globale WebResources.resx o dall'appropriata versione localizzata. In tale file, ASP.NET utilizza il valore per la risorsa con l'identificatore Button1Caption e per la pagina stessa. Per impostare le proprietà della pagina, è possibile utilizzare espressioni di risorsa nella direttiva @ Page.

È possibile specificare un'espressione di risorsa esplicita o implicita per un controllo, ma non entrambe. La sintassi dichiarativa seguente in un controllo Button causa un errore del parser:

<asp:Button ID="Button1" 
             
            meta:resourcekey="Button1Resource1"
            Text="<%$ Resources:WebResources, Button1Caption %>" />

In questo esempio, viene specificato un file di risorse locale implicito (un file che corrisponde al nome della pagina corrente) insieme con un file di risorse esplicito denominato WebResources. Per evitare il verificarsi di un errore del parser per questo controllo, rimuovere una delle espressioni di risorsa.

Localizzazione di testo statico

Se una pagina include testo statico, è possibile utilizzare la localizzazione ASP.NET includendolo in un controllo Localize e quindi utilizzando la localizzazione esplicita per impostare il testo statico. Il controllo Localize non esegue il rendering dei codice, ma semplicemente agisce da segnaposto per il testo localizzato. Il controllo Localize può essere modificato in una visualizzazione Progettazione e non solo nella griglia delle proprietà. In fase di esecuzione, ASP.NET considera il controllo Localize come un controllo Literal. La pagina potrebbe ad esempio includere il seguente codice:

<h1>
  <asp:Localize runat=server 
    ID="WelcomeMessage" 
    Text="Welcome!" meta:resourcekey="LiteralResource1" />
</h1>
<br />
<br />
<asp:Localize 
    ID="NameCaption"
    Text="Name: " meta:resourcekey="LiteralResource2" />
<asp:TextBox  ID="TextBox1" 
    meta:resourcekey="TextBox1Resource1" />
Nota sulla sicurezza:

L'esempio include una casella di testo che accetta l'input dell'utente e rappresenta quindi una potenziale minaccia alla sicurezza. Per impostazione predefinita, le pagine Web ASP.NET verificano che l'input dell'utente non includa script o elementi HTML. Per ulteriori informazioni, vedere Cenni preliminari sugli attacchi tramite script.

Localizzazione implicita nei modelli

Nei controlli basati su modelli quali i controlli DataList, GridView e Wizard le proprietà dello stile del modello vengono localizzate accedendo alle proprietà tramite l'espressione di risorsa implicita del controllo padre. Non è possibile utilizzare un'espressione di risorsa implicita per il modello stesso.

Per localizzare i valori per una proprietà del modello, utilizzare l'attributo meta e una chiave di risorsa per il controllo al quale il modello appartiene. Quindi utilizzare la sintassi Proprietà.Sottoproprietà o la sintassi Proprietà-Sottoproprietà nel file di risorse. Ad esempio, la sintassi dichiarativa riportata di seguito è valida per un controllo Wizard:

<asp:Wizard ID="Wizard1" 
     
    meta:resourcekey="Wizard1Resource1">
  <NavigationStyle 
    BorderWidth="<%$ resources:navBorderWidth %>"/>
  <WizardSteps>
    <asp:WizardStep ID="WizardStep1" 
       
      Title="Step 1" 
      meta:resourcekey="WizardStep1Resource1">
    </asp:WizardStep>
  </WizardSteps>
</asp:Wizard>

Le seguenti coppie chiave/valore nel file di risorse locale possono essere utilizzate per l'esempio precedente:

Wizard1Resource1.NavigationStyle.BackColor, Red
navborderWidth, 5

È anche possibile utilizzare le coppie chiave/valore seguenti:

Wizard1Resource1.NavigationStyle-BackColor, Red
navborderWidth, 5

È possibile utilizzare un'espressione di risorsa esplicita per la proprietà NavigationStyle del controllo Wizard nell'esempio precedente. L'espressione di risorsa esplicita omette il nome per Class in modo da consentire l'utilizzo delle risorse di un file di risorse locale.

Per ulteriori informazioni sui controlli server basati su modelli, vedere Modelli dei controlli server Web ASP.NET.

Selezione dei file di risorse per diverse lingue

Quando una pagina è in esecuzione, in ASP.NET viene selezionata la versione del file di risorse che più corrisponde all'impostazione UICulture corrente per la pagina. Se non vi è corrispondenza, in ASP.NET viene utilizzato il fallback della risorsa per ottenere una risorsa. Ad esempio, se si sta eseguendo la pagina Default.aspx e la proprietà UICulture corrente è impostata su es (spagnolo), ASP.NET utilizza la versione compilata del file di risorse locale Default.aspx.es.resx.

ASP.NET può impostare le proprietà UICulture e Culture per la pagina sui valori di lingua e paese passati dal browser. In alternativa, è possibile impostare le proprietà UICulture e Culture esplicitamente, in modo dichiarativo o a livello di codice. È inoltre possibile impostare i valori in modo dichiarativo nei file Web.config. Per informazioni dettagliate, vedere Procedura: impostare la lingua e la lingua dell'interfaccia utente per la globalizzazione di pagine Web ASP.NET.

Nota:

Non è consigliabile fare affidamento esclusivamente sulle impostazioni del browser per impostare le informazioni di lingua e paese in quanto gli utenti potrebbero utilizzare un browser su computer diverso dal proprio. Inoltre, i browser comunicano spesso solo le informazioni sulla lingua senza le specifiche impostazioni cultura. In tal caso, per la formattazione dei dati il valore del paese specifico deve essere ricavato dal server. Un'ottima strategia consiste nel consentire agli utenti di selezionare esplicitamente la lingua.

Utilizzo delle risorse a livello di codice

Oltre a impostare i valori delle risorse nel codice mediante espressioni di risorsa, è possibile recuperarli a livello di codice. Tale opzione è utile se il valore della risorsa non è noto in fase di progettazione o se si desidera impostarlo su un valore ottenuto in fase di esecuzione. Per ulteriori informazioni, vedere Procedura: recuperare valori di risorse a livello di codice.

Vedere anche

Altre risorse

Globalizzazione e localizzazione ASP.NET