Procedura: impostare le impostazioni cultura e le impostazioni cultura dell'interfaccia utente per la globalizzazione della pagina Web ASP.NET

 

Data di pubblicazione: ottobre 2016

In una pagina Web ASP.NET, è possibile impostare le proprietà Culture e UICulture su due valori di impostazioni cultura. Il valore Culture determina i risultati delle funzioni dipendenti dalle impostazioni cultura, ad esempio data, numero e formattazione della valuta e così via. Il valore UICulture determina quali risorse vengono caricate per la pagina.

Nota

Le proprietà Culture e UICulture vengono impostate tramite le stringhe standard di Internet che identificano la lingua (ad esempio, en per inglese, es per spagnolo e de per tedesco) e le impostazioni cultura (ad esempio, US per gli Stati Uniti, GB per la Gran Bretagna, MX per il Messico e DE per la Germania). Alcuni esempi: en-US per inglese/Stati Uniti, en-GB per inglese/Gran Bretagna e es-MX per spagnolo/Messico. Per altre informazioni, vedere CultureInfo.

Le due impostazioni cultura non devono necessariamente avere lo stesso valore. A seconda dell'applicazione, può essere opportuno impostarle separatamente. Un esempio è un sito di aste Web. La proprietà UICulture può variare a seconda del browser Web, mentre la proprietà Culture rimane costante. Pertanto, i prezzi vengono sempre visualizzati nella stessa valuta e nello stesso formato.

Il valore Culture può essere impostato su impostazioni cultura specifiche, ad esempio en-US o en-GB. Questo evita la necessità di identificare il simbolo di valuta corretto da usare per en, dove en-US e en-GB hanno simboli di valuta diversi.

Gli utenti possono impostare le impostazioni cultura dell'interfaccia utente e le impostazioni cultura nel browser. Ad esempio, in Microsoft Internet Explorer, nel menu Strumenti, è possibile scegliere Opzioni Internet, nella scheda Generale fare clic su Lingue e quindi impostare la preferenza per la lingua. Se l'attributo enableClientBasedCulture dell'elemento globalization nel file Web.config è impostato su true, ASP.NET può impostare le impostazioni cultura dell'interfaccia utente e le impostazioni cultura per una pagina Web automaticamente, in base ai valori inviati da un browser.

Non è consigliabile fare affidamento esclusivamente sulle impostazioni del browser per determinare le impostazioni cultura dell'interfaccia utente per una pagina. Gli utenti spesso usano browser non impostati in base alle proprie preferenze (ad esempio, in un Internet point). È necessario fornire un metodo per gli utenti affinché possano scegliere in modo esplicito una lingua o una lingua e le impostazioni cultura (CultureInfo) per la pagina.

Per impostare le impostazioni cultura e le impostazioni cultura dell'interfaccia utente per una pagina Web ASP.NET in modo dichiarativo

  • Per impostare le impostazioni cultura dell'interfaccia utente e le impostazioni cultura per tutte le pagine, aggiungere una sezione globalization al file Web.config e impostare gli attributi uiculture e culture, come illustrato nell'esempio seguente:

    <globalization uiCulture="es" culture="es-MX" />
    
  • Per impostare le impostazioni cultura dell'interfaccia utente e le impostazioni cultura per una singola pagina, impostare gli attributi Culture e UICulture della direttiva @ Page, come illustrato nell'esempio seguente:

    <%@ Page UICulture="es" Culture="es-MX" %>
    
  • Affinché ASP.NET definisca le impostazioni cultura dell'interfaccia utente sulla prima lingua specificata nelle impostazioni del browser corrente, impostare UICulture e Culture su auto. In alternativa, è possibile impostare questo valore su **auto:**culture_info_name, dove culture_info_name è un nome di impostazione cultura. Per un elenco dei nomi delle impostazioni cultura, vedere CultureInfo. È possibile definire questa impostazione anche nella direttiva @ Page o nel file Web.config.

Per impostare le impostazioni cultura e le impostazioni cultura dell'interfaccia utente per una pagina Web ASP.NET a livello di codice

  1. Eseguire l'override del metodo InitializeCulture per la pagina.

  2. Nel metodo sottoposto a override, determinare la lingua e le impostazioni cultura su cui impostare la pagina.

    Nota

    Il metodo InitializeCulture viene chiamato all'inizio del ciclo di vita della pagina, prima che vengano creati i controlli o che le proprietà vengano impostate per la pagina. Pertanto, per leggere i valori passati alla pagina dai controlli, è necessario ottenerli direttamente dalla richiesta mediante la raccolta Form.

  3. Impostare le impostazioni cultura dell'interfaccia utente e le impostazioni cultura in uno dei modi seguenti:

    • Impostare le proprietà Culture e UICulture della pagina sulla stringa della lingua e delle impostazioni cultura (ad esempio, en-US). Queste proprietà sono interne alla pagina e possono essere usate solo in una pagina.

    • Impostare le proprietà CurrentUICulture e CurrentCulture del thread corrente per le impostazioni cultura dell'interfaccia utente e le impostazioni cultura, rispettivamente. La proprietà CurrentUICulture accetta la stringa della lingua e delle impostazioni cultura. Per impostare la proprietà CurrentCulture, creare un'istanza della classe CultureInfo e chiamare il relativo metodo CreateSpecificCulture.

    L'esempio di codice seguente illustra una pagina Web ASP.NET che consente agli utenti di selezionare la lingua desiderata da un elenco a discesa. La pagina importa due spazi dei nomi per semplificare l'utilizzo delle classi di threading e globalizzazione.

    Un progetto di sito Web di Visual Studio con codice sorgente è disponibile qui per il download a complemento di questo argomento.

    <%@ Page Language="VB" uiculture="auto" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Globalization" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
      1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <script runat="server">
        Protected Overrides Sub InitializeCulture()
            If Request.Form("ListBox1") IsNot Nothing Then
                Dim selectedLanguage As String = _
                    Request.Form("ListBox1")
                UICulture = Request.Form("ListBox1")
                Culture = Request.Form("ListBox1")
                Thread.CurrentThread.CurrentCulture = _
                    CultureInfo.CreateSpecificCulture(selectedLanguage)
                Thread.CurrentThread.CurrentUICulture = New _
                    CultureInfo(selectedLanguage)
            End If
            MyBase.InitializeCulture()
        End Sub
    </script>
    <html>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListBox ID="ListBox1" runat="server">
                <asp:ListItem Value="en-US" 
                    Selected="True">English</asp:ListItem>
                <asp:ListItem Value="es-MX">Español</asp:ListItem>
                <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
            </asp:ListBox><br />
            <asp:Button ID="Button1" runat="server" 
                Text="Set Language" 
                meta:resourcekey="Button1" />
            <br />
            <asp:Label ID="Label1" runat="server" 
                Text="" 
                meta:resourcekey="Label1" />
            </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" uiculture="auto" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Globalization" %>
    <script runat="server">
    protected override void InitializeCulture()
    {
        if (Request.Form["ListBox1"] != null)
        {
            String selectedLanguage = Request.Form["ListBox1"];
            UICulture = selectedLanguage ;
            Culture = selectedLanguage ;
    
            Thread.CurrentThread.CurrentCulture = 
                CultureInfo.CreateSpecificCulture(selectedLanguage);
            Thread.CurrentThread.CurrentUICulture = new 
                CultureInfo(selectedLanguage);
        }
        base.InitializeCulture();
    }
    </script>
    <html>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListBox ID="ListBox1" runat="server">
                <asp:ListItem Value="en-US" 
                    Selected="True">English</asp:ListItem>
                <asp:ListItem Value="es-MX">Español</asp:ListItem>
                <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
            </asp:ListBox><br />
            <asp:Button ID="Button1" runat="server" 
                Text="Set Language" 
                meta:resourcekey="Button1" />
            <br />
            <asp:Label ID="Label1" runat="server" 
                Text="" 
                meta:resourcekey="Label1" />
            </div>
        </form>
    </body>
    </html>
    

Vedere anche

ASP.NET Globalization and Localization