Recursos de aplicaciones de ASP.NET

Actualización: noviembre 2007

Tras crear ensamblados satélite para una aplicación ASP.NET, es preciso colocarlos en ubicaciones específicas donde el motor en tiempo de ejecución es capaz de localizarlos y utilizarlos. La estructura de directorios de los ensamblados satélite en las aplicaciones ASP.NET y los controles ASP.NET es distinta de la de los ensamblados satélite en las aplicaciones basadas en Windows. Las aplicaciones ASP.NET pueden contener ensamblados. Sin embargo, como las páginas ASP.NET se convierten dinámicamente en ensamblados, no se conoce de antemano el nombre del ensamblado y no se aplica la configuración de ensamblado satélite estándar. En esta sección se describe cómo utilizar los recursos en los controles y páginas ASP.NET.

Nota:

Los procedimientos que deben seguirse para crear y compilar los recursos en las aplicaciones ASP.NET no son distintos de los utilizados para crear recursos en las aplicaciones basadas en Windows. Para obtener más información sobre este proceso, vea los temas Crear archivos de recursos, Empaquetar e implementar recursos y Crear ensamblados satélite.

Recursos de páginas ASP.NET

Para utilizar recursos en las páginas ASP.NET, cree primero un ensamblado principal paralelo para almacenar los recursos de la aplicación. Este ensamblado contendrá los recursos predeterminados o neutros de la aplicación. A continuación, cree un ensamblado satélite que contenga recursos adaptados para cada referencia cultural que admita la aplicación. Instale el ensamblado principal en el directorio bin de la aplicación, y los ensamblados satélite en los subdirectorios esperados.

Nota:

Al implementar recursos de aplicaciones de ASP.NET mediante este modelo, se realiza en la caché de ensamblados global una copia de seguridad de todos los ensamblados, con lo que se evitan posibles problemas de bloqueo.

En el siguiente ejemplo, utilizado en una página ASP.NET, se crea una clase ResourceManager para recuperar los recursos apropiados.

<%
    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"));
    %>

Para especificar explícitamente la referencia cultural que se va a utilizar para recuperar los recursos de una página .aspx, las líneas de código del ejemplo anterior deben ir seguidas de un código que crea un objeto CultureInfo de una referencia cultural especificada y utiliza el valor de CultureInfo para inicializar la propiedad CurrentUICulture. En el siguiente ejemplo, se obliga a recuperar cada vez los recursos del idioma alemán ya que se establece la propiedad CurrentUICulture en la referencia cultural primaria del alemán ("de").

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

Si bien se puede especificar una referencia cultural neutra como "de" para crear un objeto CultureInfo, que puede utilizarse para especificar la propiedad CurrentUICulture, se ha de indicar una referencia cultural específica para inicializar la propiedad CurrentCulture. La propiedad CurrentCulture espera una referencia cultural específica, es decir, una que esté asociada a un idioma y una región, como ("de-AT") para el alemán de Austria. La referencia cultural neutral "de" no funcionará ya que está asociada solamente a un idioma. Para crear un objeto CultureInfo en el formato que espera la propiedad CurrentCulture, utilice el método CultureInfo.CreateSpecificCulture. Este método crea un objeto CultureInfo que represente la referencia cultural específica asociada a la referencia cultural neutra especificada. En el siguiente ejemplo se utiliza el método CultureInfo.CreateSpecificCulture para crear un objeto CultureInfo que represente la referencia cultural específica asociada a la referencia cultural neutra "de", y se utiliza dicho objeto para inicializar el valor de la propiedad CurrentCulture.

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

Se recomienda establecer explícitamente el valor de las propiedades CurrentUICulture y CurrentCulture en la página .aspx. En el siguiente ejemplo, se establece CurrentCulture en "de" y, a continuación, se utiliza el valor de CurrentCulture para inicializar la propiedad 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;

El método CultureInfo.CreateSpecificCulture también permite utilizar el actual idioma del explorador web para inicializar la propiedad CurrentCulture en una página .aspx. En el ejemplo siguiente, la propiedad Request.UserLanguages devuelve el idioma actual del explorador web en forma de cadena. El método CultureInfo.CreateSpecificCulture analiza esa cadena y devuelve un objeto CultureInfo en el formato que se puede utilizar para inicializar el valor de la propiedad 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;

Para obtener más ejemplos de cómo trabajar con recursos en las aplicaciones ASP.NET, vea el tutorial Cómo: Recuperar valores de recursos mediante programación así como los ejemplos de Localizar aplicaciones ASP.NET y Trabajar con ejemplos de archivos de recursos que se encuentran en el Tutorial rápido de ASP.NET.

Recursos de controles ASP.NET

Si se ha desarrollado la aplicación ASP.NET mediante controles ASP.NET, se podrá utilizar la misma estructura de directorios anteriormente descrita. Al crear controles, se puede escribir código que utilice recursos para mostrar al usuario diferentes conjuntos de información. Como los controles están compilados, tienen un ensamblado. Esto permite incrustar un conjunto de recursos predeterminados en dicho ensamblado. Es posible crear ensamblados satélite para los recursos que va a utilizar el control y colocarlos en la estructura de directorios que se espera para los ensamblados satélite. Para obtener información más detallada, vea Crear ensamblados satélite. Coloque el control y los recursos del control en el directorio bin de la raíz de la aplicación. En la siguiente ilustración se muestra un ejemplo de la estructura de directorios correcta.

Aplicación ASP.NET con directorio de controles ASP.NET

Directorio principal de ASP.NET, establecido como AppRoot

Puede colocar varias instancias de myControl, al que se hace referencia en la ilustración, en myPage.aspx. Puede establecer cada versión para que haga referencia a una entrada de archivo de recursos diferente. Esto es lo que se muestra en el siguiente ejemplo de código ASP.NET.

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

En este ejemplo, ResourceManager utiliza la propiedad CultureInfo.CurrentUICulture de la aplicación para determinar los recursos que se van a recuperar.

El siguiente ejemplo es para un control Button. La variable Text hace referencia al valor de propiedad que se está recuperando y que posteriormente se establece en el control de la página .aspx. Se utiliza este valor para determinar el nombre de la entrada que se va a recuperar. En este ejemplo, se utiliza la misma propiedad que para mostrar al usuario el resultado.

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);
    }
}

Vea también

Conceptos

Recursos en aplicaciones

Crear archivos de recursos

Empaquetar e implementar recursos

Crear ensamblados satélite

Referencia

System.Globalization.CultureInfo

Otros recursos

Crear sitios web ASP.NET