Información general sobre los recursos de las páginas Web ASP.NET
Actualización: noviembre 2007
Si crea páginas Web que leerán personas que hablan idiomas diferentes, debe ofrecer una forma para que los lectores vean las páginas en su propio idioma. Un método consiste en volver a crear la página en cada idioma. Sin embargo, ese método puede requerir mucho trabajo, es propenso a errores y es difícil de mantener cuando se modifica la página original.
ASP.NET le ofrece una forma de crear una página que puede obtener contenido y otros datos basándose en la configuración de idioma preferida para el explorador o la elección explícita del idioma por parte del usuario. El contenido y otros datos se denominan recursos y esos datos pueden almacenarse en archivos de recursos o en otros orígenes.
En la página Web ASP.NET, configure controles para obtener los valores de sus propiedades de los recursos. En tiempo de ejecución, las expresiones de recursos se reemplazan con recursos del archivo de recursos adecuado.
Archivos de recursos
Un archivo de recursos es un archivo XML que contiene las cadenas que desea traducir a otros idiomas diferentes o rutas de acceso a las imágenes. El archivo de recursos contiene pares de clave y valor. Cada par es un recurso individual. En los nombres de clave no se distingue entre mayúsculas y minúsculas. Por ejemplo, un archivo de recursos podría contener un recurso con la clave Button1 y el valor Submit.
Debe crear un archivo de recursos diferente para cada idioma (por ejemplo, inglés y español) o para un idioma y una referencia cultural (por ejemplo, inglés [Reino Unido], inglés [Estados Unidos]). Cada archivo de recursos adaptado tiene los mismos pares de clave y valor; la única diferencia es que un archivo de recursos adaptado puede contener menos recursos que el archivo de recursos predeterminado. Los recursos de reserva de idioma controlan entonces la carga del recurso neutro o predeterminado.
Los archivos de recursos en ASP.NET tienen una extensión .resx. En tiempo de ejecución, el archivo .resx se compila en un ensamblado, que a veces se denomina un ensamblado satélite. Como los archivos .resx se compilan dinámicamente, de la misma manera que las páginas Web ASP.NET, no tiene que crear los ensamblados de recursos. La compilación condensa varios archivos de recursos de idiomas similares en el mismo ensamblado.
Cuando cree archivos de recursos, empiece por crear un archivo .resx base. Para cada idioma que desee contemplar, cree un nuevo archivo que tenga el mismo nombre de archivo básico, pero que contenga un idioma o un idioma y una referencia cultural (nombre de referencia cultural). Para obtener una lista de los nombres de referencias culturales, vea CultureInfo. Por ejemplo, podría crear los archivos siguientes:
WebResources.resx
El archivo de recursos base. Éste es el archivo de recursos predeterminado, o de reserva.
WebResources.es.resx
Un archivo de recursos para español.
WebResources.es-mx.resx
Un archivo de recursos para español (México), específicamente.
WebResources.de.resx
Un archivo de recursos para alemán.
En tiempo de ejecución, ASP.NET utiliza el archivo de recursos que mejor coincide con la configuración de la propiedad CurrentUICulture. La referencia cultural de la interfaz de usuario para el subproceso se establece de acuerdo con la referencia cultural de la interfaz de usuario de la página. Por ejemplo, si la referencia cultural de la interfaz de usuario actual es española, ASP.NET utilizará la versión compilada del archivo WebResources.es.resx. Si no hay ninguna coincidencia para la referencia cultural de la interfaz de usuario actual, ASP.NET utilizará la reserva de recursos, empezando con recursos para una referencial cultural específica, después una neutra y, por último, el archivo de recursos predeterminado. En este ejemplo, el archivo de recursos predeterminado es WebResource.resx.
Crear archivos de recursos para sitios Web ASP.NET
En ASP.NET puede crear archivos de recursos que tienen un ámbito diferente. Puede crear archivos de recursos globales, lo que significa que puede leer el archivo de recursos desde cualquier página o código existente en el sitio Web. También puede crear archivos de recursos locales, que almacenan los recursos para una única página Web ASP.NET (archivo .aspx).
Archivos de recursos globales
Para crear un archivo de recursos global debe colocarlo en la carpeta reservada App_GlobalResources, en la raíz de la aplicación. Todos los archivos .resx que están en la carpeta App_GlobalResources tienen ámbito global. Además, ASP.NET genera un objeto con establecimiento inflexible de tipos que ofrece a los desarrolladores una manera sencilla de tener acceso mediante programación a los recursos globales.
Archivos de recursos locales
Un archivo de recursos local es aquel que sólo se aplica a una página ASP.NET (una página ASP.NET que tiene la extensión .aspx, .ascx, .master, etc.). Debe colocar los archivos de recursos locales en carpetas que tienen el nombre reservado App_LocalResources. Las carpetas App_LocalResources pueden existir en cualquier carpeta de la aplicación, a diferencia de la carpeta raíz App_GlobalResources. Para asociar un conjunto de archivos de recursos a una página Web concreta se utiliza el nombre del archivo de recursos.
Por ejemplo, si tiene una página denominada Default.aspx en la carpeta App_LocalResources, podría crear los archivos siguientes:
Default.aspx.resx
El archivo de recursos local predeterminado, que es el archivo de recurso de reserva, si no se encuentra ninguna coincidencia de idioma.
Default.aspx.es.resx
El archivo de recursos para español, sin información de referencia cultural.
Default.aspx.es-mx.resx
El archivo de recursos para español (México), específicamente.
Default.aspx.de.resx
El archivo de recursos para alemán, sin información de referencia cultural.
El nombre base del archivo coincide con el nombre del archivo de la página, seguido por un idioma y un nombre de referencia cultural, y termina con la extensión .resx. Para obtener una lista de los nombres de referencias culturales, vea CultureInfo.
Elegir entre archivos de recursos globales y locales
Puede utilizar cualquier combinación de archivos de recursos globales y locales en la aplicación Web. Generalmente, agregará los recursos a un archivo de recursos global cuando desee compartir los recursos entre distintas páginas. Los recursos de los archivos de recursos globales también tienen establecimiento inflexible de tipos para cuando desee tener acceso a los archivos mediante programación.
Sin embargo, los archivos de recursos globales pueden llegar a ser muy grandes si almacena en ellos todos los recursos adaptados. Además, los archivos de recursos globales pueden ser más difíciles de administrar si hay más de un desarrollador trabajando en páginas diferentes pero en un único archivo de recursos.
Los archivos de recursos locales facilitan la administración de recursos para una única página Web ASP.NET. Sin embargo, no puede compartir recursos entre distintas páginas. Además, puede crear muchos archivos de recursos locales si tiene muchas páginas que se deben adaptar a muchos idiomas. Si los sitios son grandes y tienen muchas carpetas e idiomas, el uso de recursos locales puede hacer crecer rápidamente el número de ensamblados en el dominio de la aplicación.
Cuando hace un cambio en un archivo de recursos predeterminado, ya sea local o global, ASP.NET vuelve a compilar los recursos y reinicia la aplicación ASP.NET, lo que puede afectar al rendimiento global del sitio. Al agregar archivos de recursos satélite no se volverán a compilar los recursos, pero la aplicación ASP.NET se reiniciará.
Nota: |
---|
Los recursos vinculados sólo se admiten en archivos de recursos globales. |
Trabajar con recursos en páginas Web
Después de crear los archivos de recursos, puede utilizarlos en páginas Web ASP.NET. Normalmente se utilizan recursos para rellenar los valores de las propiedades de los controles que hay en la página. Por ejemplo, podría utilizar recursos para establecer la propiedad Text de un control Button, en lugar de codificar la propiedad a una cadena concreta.
Si desea utilizar recursos para establecer los valores de las propiedades de los controles, puede utilizar la localización implícita o la localización explícita, de la manera siguiente:
La localización implícita funciona con recursos locales y le permite establecer automáticamente las propiedades de los controles en recursos coincidentes.
La localización explícita le permite utilizar una expresión de recurso para establecer una propiedad de un control en un recurso concreto de un archivo de recursos local o global.
Localización implícita con recursos locales
Si ha creado archivos de recursos locales para una página concreta, puede utilizar la localización implícita para llenar los valores de las propiedades para un control a partir del archivo de recursos. En la localización implícita, ASP.NET lee un archivo de recursos y hace coincidir los recursos con los valores de las propiedades.
Para utilizar la localización implícita, debe emplear una convención de nomenclatura para los recursos en el archivo de recursos local según el modelo siguiente:
Key.Property
Por ejemplo, si va a crear recursos para un control Button denominado Button1, podría crear los siguientes pares de clave y valor en el archivo de recursos local:
Button1.Text
Button1.BackColor
Label1.Text
Puede utilizar cualquier nombre para Key, pero Property debe coincidir con una propiedad del control que está adaptando.
En la página, utilice un atributo meta especial en el marcado para el control con el fin de especificar la localización implícita. No tiene que especificar explícitamente qué propiedades se adaptan. Un control Button configurado para la localización implícita puede ser similar a lo siguiente:
<asp:Button ID="Button1" Text="DefaultText"
meta:resourcekey="Button1" />
El valor resourcekey coincide con una clave del archivo de recursos correspondiente. En tiempo de ejecución, ASP.NET hace coincidir los recursos con las propiedades de los controles utilizando la etiqueta de control como resourcekey. Si el valor de un propiedad está definido en el archivo de recursos, ASP.NET sustituye la propiedad por el valor del recurso.
Localización explícita
De forma alternativa, puede utilizar la localización explícita, donde se utiliza una expresión de recurso. A diferencia de la localización implícita, debe utilizar una expresión de recurso para cada propiedad que desee establecer.
Un control Button configurado para establecer la propiedad Text de un archivo de recursos global podría ser similar al siguiente:
<asp:Button ID="Button1"
Text="<%$ Resources:WebResources, Button1Caption %>" />
La expresión de recurso tiene el formato siguiente, donde Class es opcional, a menos que el recurso sea global, y se requiere ResourceID:
<%$Recursos:Class,ResourceID%>
El valor Class identifica el archivo de recursos que se utilizará cuando emplee recursos globales. Cuando se compilan archivos .resx, se utiliza el nombre de archivo base, sin extensiones, como el nombre de clase del ensamblado resultante, explícitamente. Si desea utilizar recursos de un archivo de recursos local (uno que coincida con el nombre de página actual), no tiene que incluir un nombre de clase, ya que ASP.NET hace coincidir la clase de páginas con la clase de recursos.
El valor ResourceID es el identificador del recurso que se va a leer. En el ejemplo anterior, la propiedad Text para el botón se lee del archivo de recursos global WebResources.resx (o la versión adaptada adecuada). En ese archivo, ASP.NET utiliza el valor para el recurso con el identificador Button1Caption y para la propia página. Para establecer las propiedades de página, puede utilizar expresiones de recurso en la directiva @ Page.
Adaptar texto estático
Si su página incluye texto estático, puede utilizar la adaptación de ASP.NET incluyéndolo en un control Localize y utilizando después la localización explícita para establecer el texto estático. El control Localize no representa el marcado; su única función es actuar como marcador de posición para el texto adaptado. El control Localize se puede editar en la vista de diseño, no sólo en la cuadrícula de propiedades. En tiempo de ejecución, ASP.NET trata el control Localize como un control Literal. Por ejemplo, su página podría incluir el código siguiente:
<h1>
<asp:Localize runat=server
ID="WelcomeMessage"
Text="Welcome!" meta:resourcekey="LiteralResource1" />
</h1>
<br />
<br />
<asp:Localize
ID="NameCaption"
Text="Name: " meta:resourcekey="LiteralResource2" />
<asp:TextBox ID="TextBox1"
meta:resourcekey="TextBox1Resource1" />
Seleccionar archivos de recursos para idiomas diferentes
Cuando se está ejecutando una página y ASP.NET está recuperando valores del administrador de recursos, ASP.NET selecciona la versión del archivo de recursos que mejor coincide con la configuración UICulture actual para la página o utiliza la reserva de recursos para obtener un recurso. Por ejemplo, si está ejecutando la página Default.aspx y la propiedad UICulture actual está establecida en es (español), ASP.NET utiliza la versión compilada del archivo de recursos local Default.aspx.es.resx.
ASP.NET puede establecer las propiedades UICulture y Culture para la página en los valores de idioma y referencia cultural que le pasa el explorador. También puede establecer explícitamente las propiedades UICulture y Culture, ya sea mediante declaración o en el código. Asimismo, puede establecer los valores mediante declaración en archivos Web.config. Para obtener información detallada, vea 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.
Nota: |
---|
No debe confiar exclusivamente en la configuración del explorador para establecer la información de idioma y referencia cultural, ya que los usuarios pueden utilizar un explorador en un equipo que no sea el suyo. Además, los exploradores suelen comunicar sólo el idioma, no una referencia cultural concreta. En este caso, el servidor tiene que deducir una referencia cultural concreta para el formato de datos. Una buena estrategia sería permitir a los usuarios seleccionar un idioma explícitamente. |
Trabajar con recursos mediante programación
Además de establecer los valores de los recursos en el marcado con expresiones de recurso, puede recuperar los valores de los recursos mediante programación. Puede hacerlo si el valor del recurso no se conoce en tiempo de diseño o si desea establecer el valor del recurso basándose en una condición que se produce en tiempo de ejecución. Para obtener información detallada, vea Cómo: Recuperar valores de recursos mediante programación.