Procedura: impostare la lingua e la lingua dell'interfaccia utente per la globalizzazione di pagine Web ASP.NET
Aggiornamento: novembre 2007
In una pagina Web ASP.NET è possibile impostare due proprietà per le impostazioni cultura, Culture e UICulture. La proprietà Culture determina i risultati delle funzioni dipendenti dalle impostazioni cultura, ad esempio il formato della data, del numero e della valuta e così via. La proprietà 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 l'inglese, es per lo spagnolo e de per il tedesco) e il paese (ad esempio, US per gli Stati Uniti, GB per la Gran Bretagna, MX per il Messico e DE per la Germania). Alcuni esempi sono en-US per inglese/Stati Uniti, en-GB per inglese/Gran Bretagna e es-MX per spagnolo/Messico. Per ulteriori informazioni, vedere CultureInfo. |
Non è necessario che le due impostazioni cultura abbiano lo stesso valore. A seconda dell'applicazione può essere opportuno impostarle separatamente, ad esempio nel caso di un sito di aste tramite Internet. La proprietà UICulture può variare a seconda del browser Web, mentre la proprietà Culture rimane la stessa. Pertanto i prezzi sono sempre visualizzati nella stessa valuta e nello stesso formato.
Il valore Culture può essere specificato solo con impostazioni cultura specifiche, ad esempio en-US o en-GB. Ciò significa che non è necessario identificare il simbolo di valuta corretto da utilizzare per en, dove en-US e en-GB hanno simboli di valuta diversi.
Gli utenti possono definire le impostazioni cultura dell'interfaccia utente e le impostazioni cultura nei rispettivi browser. Ad esempio, in Microsoft Internet Explorer gli utenti possono fare clic su Opzioni Internet nel menu Strumenti, fare clic su Lingue nella scheda Generale, quindi impostare la preferenza della lingua. Se l'attributo enableClientBasedCulture dell'elemento globalization nel file Web.config è impostato su true, ASP.NET può definire automaticamente le impostazioni cultura dell'interfaccia utente e le impostazioni cultura per una pagina Web, in base ai valori inviati da un browser.
Non si consiglia di fare affidamento esclusivamente sulle impostazioni del browser per determinare le impostazioni cultura dell'interfaccia utente per una pagina. Gli utenti spesso utilizzano browser per cui non sono impostate le loro preferenze (ad esempio, in un Internet caffè). Fornire un metodo agli utenti che consenta loro di scegliere esplicitamente una lingua o una lingua e un paese (nome CultureInfo) per la pagina.
Per definire in modo dichiarativo le impostazioni cultura e le impostazioni cultura dell'interfaccia utente per una pagina Web ASP.NET
Per definire le impostazioni cultura dell'interfaccia utente e le impostazioni cultura per tutte le pagine, aggiungere una sezione globalization nel file Web.config, quindi impostare gli attributi uiculture e culture, come illustrato nell'esempio seguente:
<globalization uiCulture="es" culture="es-MX" />
Per definire 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 e le impostazioni cultura in base alla prima lingua specificata nelle impostazioni correnti del browser, impostare UICulture e Culture su auto. In alternativa, è possibile impostare questo valore su auto:culture_info_name, dove culture_info_name è un nome delle impostazioni cultura. Per un elenco di nomi delle impostazioni cultura, vedere CultureInfo. È possibile definire questa impostazione nella direttiva @ Page o nel file Web.config.
Per definire le impostazioni cultura e le impostazioni cultura dell'interfaccia utente per una pagina Web ASP.NET a livello di codice
Eseguire l'override del metodo InitializeCulture per la pagina.
Nel metodo di cui si è eseguito l'override determinare la lingua e il paese su cui impostare la pagina.
Nota: Il metodo InitializeCulture viene chiamato molto presto nel ciclo di vita della pagina, prima che vengano creati i controlli o vengano impostate le proprietà per la pagina. Pertanto, per leggere i valori trasmessi alla pagina dai controlli, è necessario ottenerli direttamente dalla richiesta mediante la raccolta di Form.
Definire 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 del paese (ad esempio, en-US). Queste proprietà sono interne alla pagina e possono essere usate solo in una pagina.
Specificare per le proprietà CurrentUICulture e CurrentCulture del thread corrente rispettivamente le impostazioni cultura dell'interfaccia utente e le impostazioni cultura. La proprietà CurrentUICulture accetta una stringa della lingua e del paese. Per impostare la proprietà CurrentCulture, creare un'istanza della classe CultureInfo e chiamare il relativo metodo CreateSpecificCulture.
Nell'esempio di codice riportato di seguito viene illustrata una pagina Web ASP.NET in cui è possibile selezionare la lingua preferita da un elenco a discesa. La pagina importa due spazi dei nomi per facilitare l'utilizzo delle classi di threading e globalizzazione.
<%@ 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 > 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" > <div> <asp:ListBox ID="ListBox1" > <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" Text="Set Language" meta:resourcekey="Button1" /> <br /> <asp:Label ID="Label1" Text="" meta:resourcekey="Label1" /> </div> </form> </body> </html>
<%@ Page Language="C#" uiculture="auto" %> <%@ Import Namespace="System.Threading" %> <%@ Import Namespace="System.Globalization" %> <script > 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" > <div> <asp:ListBox ID="ListBox1" > <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" Text="Set Language" meta:resourcekey="Button1" /> <br /> <asp:Label ID="Label1" Text="" meta:resourcekey="Label1" /> </div> </form> </body> </html>