Condividi tramite


Risorse nelle applicazioni ASP.NET

Aggiornamento: novembre 2007

Dopo aver creato gli assembly satellite per un'applicazione ASP.NET, è necessario inserirli in percorsi specifici in modo da consentire a Common Language Runtime di individuarli e utilizzarli. La struttura di directory per gli assembly satellite delle applicazioni e dei controlli ASP.NET differisce dalla struttura di directory per gli assembly satellite di un'applicazione basata su Windows. Le applicazioni ASP.NET possono contenere assembly. Poiché le pagine ASP.NET vengono però convertite in assembly in modo dinamico, il nome dell'assembly non è noto in anticipo e può applicarsi la configurazione degli assembly satellite standard. In questa sezione viene descritto come utilizzare le risorse nelle pagine ASP.NET e nei controlli ASP.NET.

Nota:

Le procedure per la creazione e la compilazione delle risorse da utilizzare in un'applicazione ASP.NET non differiscono da quelle utilizzate per la creazione di risorse per un'applicazione basata su Windows. Per informazioni dettagliate su questo processo, vedere Creazione di file di risorse, Creazione del package e distribuzione di risorse e Creazione di assembly satellite.

Risorse nelle pagine ASP.NET

Per utilizzare le risorse nelle pagine ASP.NET, creare prima un assembly principale parallelo in cui memorizzare le risorse dell'applicazione. L'assembly conterrà le risorse predefinite o neutre relative all'applicazione. Successivamente creare un assembly satellite contenente le risorse localizzate per tutte le impostazioni cultura supportate dall'applicazione. Installare l'assembly principale nella directory bin dell'applicazione e gli assembly satellite nelle sottodirectory appropriate.

Nota:

Quando le risorse vengono distribuite nelle applicazioni ASP.NET mediante questo modello, tutti gli assembly vengono replicati nella Global Assembly Cache. In questo modo vengono eliminati potenziali problemi di blocco.

Nell'esempio riportato di seguito, utilizzato in una pagina ASP.NET, viene creato un ResourceManager per il recupero delle risorse appropriate.

<%
    Dim a As Assembly = Assembly.Load("myApp")
    Dim rm As ResourceManager = New ResourceManager("myApp", a)
    Response.Write(rm.GetString("string"))
    %>
<%
    Assembly a = Assembly.Load("myApp");
    ResourceManager rm = new ResourceManager("myApp", a);
    Response.Write(rm.GetString("string"));
    %>

È possibile specificare in modo esplicito le impostazioni cultura da utilizzare per il recupero delle risorse in una pagina aspx aggiungendo al codice del precedente esempio il codice in cui viene creato un oggetto CultureInfo da impostazioni cultura specificate e viene utilizzato il valore di CultureInfo per inizializzare la proprietà CurrentUICulture. Nell'esempio riportato di seguito viene imposto ogni volta il recupero delle risorse in tedesco tramite l'impostazione della proprietà CurrentUICulture sulle impostazioni cultura padre tedesco "de".

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de")
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

Si noti che, sebbene sia possibile specificare impostazioni cultura neutre come "de", per creare un oggetto CultureInfo che possa essere utilizzato per inizializzare la proprietà CurrentUICulture, è necessario indicare impostazioni cultura specifiche per inizializzare la proprietà CurrentCulture. La proprietà CurrentCulture richiede impostazioni cultura specifiche, ovvero associate a una regione, come ("de-AT") per il tedesco dell'Austria. La sigla "de" neutra non funzionerà perché associata a una sola lingua. Per creare un oggetto CultureInfo nel formato previsto dalla proprietà CurrentCulture, utilizzare il metodo CultureInfo.CreateSpecificCulture. Tale metodo crea un oggetto CultureInfo che rappresenta le impostazioni cultura specifiche associate a impostazioni cultura neutre specificate. Nell'esempio riportato di seguito viene utilizzato il metodo CultureInfo.CreateSpecificCulture per creare un oggetto CultureInfo, che rappresenta le impostazioni cultura specifiche associate alle impostazioni cultura neutre "de", nonché per inizializzare il valore della proprietà CurrentCulture.

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

È opportuno impostare in modo esplicito i valori di entrambe le proprietà CurrentUICulture e CurrentCulture nella pagina aspx. Nell'esempio che segue la proprietà CurrentCulture viene impostata su "de", quindi viene utilizzato il valore di CurrentCulture per inizializzare la proprietà CurrentUICulture.

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

Il metodo CultureInfo.CreateSpecificCulture consente inoltre di utilizzare la lingua corrente del browser Web per inizializzare la proprietà CurrentCulture di una pagina aspx. Nell'esempio riportato di seguito la proprietà Request.UserLanguages restituisce la lingua corrente del browser Web sotto forma di stringa. Il metodo CultureInfo.CreateSpecificCulture analizza questa stringa e restituisce un oggetto CultureInfo nel formato che può essere utilizzato per inizializzare il valore della proprietà CurrentCulture.

' Set the CurrentCulture property to the culture associated with the Web
' browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0])

' It is good practice to explicitly set the CurrentUICulture property.
' Initialize the CurrentUICulture property
' with the CurrentCulture property.
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
// Set the CurrentCulture property to the culture associated with the Web
// browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

// It is good practice to explicitly set the CurrentUICulture property.
// Initialize the CurrentUICulture property
// with the CurrentCulture property.
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

Per ulteriori esempi sull'utilizzo delle risorse in applicazioni ASP.NET, vedere l'esercitazione Procedura: recuperare valori di risorse a livello di codice e gli esempi Localizzazione delle applicazioni ASP.NET e Utilizzo dei file di risorse nella Guida rapida di ASP.NET.

Risorse nei controlli ASP.NET

Se un'applicazione ASP.NET viene sviluppata utilizzando i controlli ASP.NET, sarà possibile utilizzare la stessa struttura di directory descritta in precedenza. Quando si creano i controlli, è possibile scrivere codice che utilizza le risorse per visualizzare set di informazioni diversificati. Poiché i controlli vengono compilati, dispongono di un assembly. In tale assembly è possibile incorporare un set di risorse predefinite. È inoltre possibile creare assembly satellite per le risorse che verranno utilizzate dal controllo e inserirli nella struttura di directory prevista per gli assembly satellite. Per ulteriori informazioni, vedere Creazione di assembly satellite. Posizionare il controllo e le relative risorse nella directory bin della radice dell'applicazione. Nell'illustrazione che segue viene fornito un esempio di struttura di directory corretta.

Applicazione ASP.NET con directory di controlli ASP.NET

Directory principale ASP.NET, impostata come AppRoot

È possibile inserire più istanze del controllo myControl, a cui si fa riferimento nella figura, in myPage.aspx. È possibile inoltre impostare ciascuna versione in modo da fare riferimento a una diversa voce del file di risorse. Nell'esempio di codice ASP.NET che segue viene illustrata questa possibilità.

<Loc:myControl  Text="entry1" />
<Loc:myControl  Text="entry2" />

In questo esempio, ResourceManager utilizza la proprietà CultureInfo.CurrentUICulture dell'applicazione per determinare quali risorse recuperare.

Nell'esempio riportato di seguito si fa riferimento a un controllo Button. La variabile Text si riferisce al valore della proprietà che viene recuperato e successivamente impostato nel controllo contenuto nella pagina aspx. Tale valore viene utilizzato per determinare il nome della voce da recuperare. In questo esempio si tratta della stessa proprietà utilizzata per visualizzare il risultato.

Public Class myControl
Inherits Button

    Protected Overrides Sub Render(HtmlTextWriter writer)
        ' rm refers to the ResourceManager.
        Text = rm.GetString(Text)
        MyBase.Render(writer)
    End Sub
End Class
public class mycontrol : Button 
{
    protected override void Render(HtmlTextWriter writer) 
    {
        // rm refers to the ResourceManager.
        Text = rm.GetString(Text);      
        base.Render(writer);
    }
}

Vedere anche

Concetti

Risorse nelle applicazioni

Creazione di file di risorse

Creazione del package e distribuzione delle risorse

Creazione di assembly satellite

Riferimenti

System.Globalization.CultureInfo

Altre risorse

Creazione di siti Web ASP.NET