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

Actualización: noviembre 2007

En una página Web ASP.NET puede establecer dos valores de referencia cultural, correspondientes a las propiedades Culture y UICulture. El valor Culture determina los resultados de las funciones que dependen de la referencia cultural, como el formato de fecha, número y moneda, entre otras. 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). Son ejemplos en-US para inglés/Estados Unidos, en-GB para inglés/Gran Bretaña, y es-MX para español/México. Para obtener más información, vea CultureInfo.

No es necesario que las dos configuraciones de referencia cultural tengan el mismo valor. En función de la aplicación, quizá sea importante establecerlas por separado. Un ejemplo es un sitio de subastas Web. La propiedad UICulture podría cambiar para cada explorador web, mientras que Culture se mantiene constante. Por consiguiente, los precios siempre se muestran en la misma moneda y formato.

El valor Culture sólo se puede establecer con referencias culturales concretas, como en-US o en-GB. Esto evita que sea necesario identificar el símbolo de moneda correcto para en, donde en-US y en-GB tienen símbolos de moneda diferentes.

Los usuarios pueden establecer la referencia cultural de la interfaz de usuario y la referencia cultural en sus exploradores. Por ejemplo, en el menú Herramientas de Microsoft Internet Explorer, los usuarios pueden hacer clic en Opciones de Internet y después, en la ficha General, hacer clic en Idioma y establecer su preferencia con respecto al idioma. Si el atributo enableClientBasedCulture del elemento globalization en el archivo Web.config se establece en true, ASP.NET puede establecer automáticamente la referencia cultural de la interfaz de usuario y la referencia cultural para una página Web, a partir de los valores que envía un explorador.

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

Para establecer mediante declaración la referencia cultural y la referencia cultural de la interfaz de usuario de una página Web ASP.NET

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

    <globalization uiCulture="es" culture="es-MX" />
    
  • Para establecer la referencia cultural de la interfaz de usuario y la referencia cultural de una sola página, establezca los atributos Culture y UICulture de 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 con el primer idioma especificado en la configuración actual del explorador, establezca UICulture y Culture como auto. Alternativamente, puede establecer este valor en auto:culture_info_name, donde culture_info_name es un nombre de la referencia cultural. Para obtener una lista de los nombres de referencias culturales, vea CultureInfo. Puede realizar esta configuración en la directiva @ Page o en el archivo Web.config.

Para establecer mediante programación la referencia cultural y la referencia cultural de la interfaz de usuario de una página Web ASP.NET

  1. Reemplace el método InitializeCulture para la página.

  2. En el método reemplazado, determine qué idioma y referencia cultural deben establecerse para la página.

    Nota:

    Se llama al método InitializeCulture en una fase muy temprana del ciclo de vida de la página, antes de que se creen los controles o se establezcan las propiedades de la página. Por consiguiente, para leer valores que se pasan a la página desde los controles, debe obtenerlos directamente de la solicitud mediante la colección Form.

  3. Puede establecer la referencia cultural de la interfaz de usuario y la referencia cultural de una de las formas siguientes:

    • Establezca las propiedades Culture y UICulture de la página con la cadena de idioma y referencia cultural (por ejemplo, en-US). Estas propiedades son internas por lo que respecta a la página y sólo se pueden utilizar en una página.

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

    En el ejemplo de código siguiente de muestra una página Web ASP.NET que permite a los usuarios seleccionar de una lista desplegable el idioma que prefieren. La página importa dos espacios de nombres para que resulte más cómodo trabajar con clases de globalización y subprocesamiento.

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

Vea también

Otros recursos

Globalización y adaptación en ASP.NET