Cómo: establecer la referencia cultural y la referencia cultural de la interfaz de usuario para la globalización de páginas web de ASP.NET

 

Publicado: octubre de 2016

En una página web de ASP.NET, puede establecer dos valores de referencia cultural, las propiedades Culture y UICulture. El valor Culture determina los resultados de funciones dependientes de la referencia cultural, como el formato de fecha, número y moneda. El valor UICulture determina qué recursos se cargan para la página.

Nota

Las propiedades Culture y UICulture se establecen mediante cadenas estándar de Internet que identifican el idioma (por ejemplo, en para inglés, es para español y de para alemán) y la referencia cultural (por ejemplo, US para Estados Unidos, GB para Gran Bretaña, MX para México y DE para Alemania). Algunos ejemplos son en-US para inglés de Estados Unidos, en-GB para inglés de Gran Bretaña y es-MX para español de México. Para obtener más información, consulta CultureInfo.

No es necesario que las dos configuraciones de referencia cultural tengan el mismo valor. En función de la aplicación, podría ser importante establecerlas por separado. Un ejemplo es un sitio de subastas web. Es posible que la propiedad UICulture cambie para cada explorador web, mientras que Culture permanece constante. Por lo tanto, los precios siempre se muestran en la misma moneda y el mismo formato.

El valor Culture solo puede establecerse en referencias culturales específicas, como en-US o en-GB. Esto evita la necesidad de identificar el símbolo de moneda correcto que se utilizará para en, donde en-US y en-GB tienen distintos símbolos de moneda.

Los usuarios pueden establecer la referencia cultural de la interfaz de usuario y la referencia cultural en sus exploradores. Por ejemplo, en Microsoft Internet Explorer, en el menú Herramientas, los usuarios pueden hacer clic en Opciones de Internet, en la pestaña General, hacer clic en Idioma y, a continuación, establecer sus preferencias de idioma. Si el atributo enableClientBasedCulture del elemento globalización en el archivo Web.config se establece en true, ASP.NET puede establecer la referencia cultural de interfaz de usuario y la de una página web automáticamente, basándose en los valores que envía el explorador.

No es recomendable confiar exclusivamente en la configuración del explorador para determinar la referencia cultural de interfaz de usuario para una página. Los usuarios normalmente usan exploradores que no están configurados para sus preferencias (por ejemplo, en cibercafeterías). Debe proporcionar un método para que los usuarios elijan explícitamente un idioma o el idioma y la referencia cultural (nombre de CultureInfo) de la página.

Establecer la referencia cultural y la referencia cultural de la interfaz de usuario para una página web de ASP.NET mediante declaración

  • Para establecer la referencia cultural de la interfaz de usuario y la referencia cultural para todas las páginas, agregue una sección globalization al archivo Web.config y, a continuación, establezca los atributos uiculture y culture, como se muestra en el ejemplo siguiente:

    <globalization uiCulture="es" culture="es-MX" />
    
  • Para establecer la referencia cultural de interfaz de usuario y la referencia cultural para una página individual, establezca los atributos Culture y UICulturede la directiva @ Page, tal como se muestra en el ejemplo siguiente:

    <%@ Page UICulture="es" Culture="es-MX" %>
    
  • Para que ASP.NET establezca la referencia cultural de la interfaz de usuario y la referencia cultural en el primer idioma que se especifica en la configuración actual del explorador, establezca UICulture y Culture como auto. Como alternativa, puede establecer este valor en **auto:**culture_info_name, donde culture_info_name es un nombre de referencia cultural. Para obtener una lista de nombres de referencia cultural, consulte CultureInfo. Se puede realizar esta configuración tanto en la directiva @ Page como en el archivo Web.config.

Establecer la referencia cultural y la referencia cultural de la interfaz de usuario para una página web de ASP.NET mediante programación

  1. Invalide el método InitializeCulture de la página.

  2. En el método reemplazado, determine en qué idioma y referencia cultural se debe establecer la página.

    Nota

    El método InitializeCulture se llama cada poco tiempo en el ciclo de vida de la página antes de crear los controles o de establecer las propiedades para la página. Por lo tanto, para leer los valores que se pasan a la página de los controles, debe obtenerlos directamente de la solicitud con la recopilación de Form.

  3. Establezca la referencia cultural de la interfaz de usuario y la referencia cultural de una de las maneras siguientes:

    • Establezca las propiedades Culture y UICulture de la página en la cadena de idioma y referencia cultural (por ejemplo, en-US). Estas propiedades son internas de la página y solo pueden usarse en una página.

    • Establezca las propiedades CurrentUICulture y CurrentCulture del subproceso actual en la referencia cultural de interfaz de usuario y la referencia cultural, respectivamente. La propiedad CurrentUICulture toma una cadena de información de idioma y referencia cultural. Para establecer la propiedad CurrentCulture, se crea una instancia de la clase CultureInfo y llama a su método CreateSpecificCulture.

    En el ejemplo de código siguiente se muestra una página web de ASP.NET que permite al usuario seleccionar su idioma preferido de una lista desplegable. La página importa dos espacios de nombres para que sea más fácil trabajar con clases de globalización y subprocesamiento.

    Un proyecto de sitio web de Visual Studio con código fuente está disponible para este tema: descargar.

    <%@ 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>
    

Ver también

ASP.NET Globalization and Localization