Descripción de localización de ASP.NET AJAX

por Scott Cate

La localización es el proceso de diseño e integración de la compatibilidad con una cultura y un idioma específicos en una aplicación o en un componente de una aplicación. La plataforma Microsoft ASP.NET proporciona una amplia compatibilidad con la localización de aplicaciones ASP.NET estándar mediante la integración del modelo de localización estándar de .NET; Microsoft AJAX Framework utiliza el modelo integrado para admitir los diversos escenarios en los que se puede realizar la localización.

Introducción

La tecnología ASP.NET de Microsoft aporta un modelo de programación orientado a objetos y controlado por eventos y lo une a las ventajas del código compilado. Sin embargo, su modelo de procesamiento del lado servidor tiene varias desventajas inherentes a la tecnología, muchas de las cuales se pueden abordar mediante las nuevas características incluidas en el espacio de nombres System.Web.Extensions, que encapsula los servicios de Microsoft AJAX en .NET Framework 3.5. Estas extensiones habilitan muchas características de cliente enriquecidas que antes estaban disponibles como parte de las extensiones AJAX de ASP.NET 2.0, pero que ahora forman parte de la biblioteca de clases base de Framework. Entre los controles y las características de este espacio de nombres se incluyen la representación parcial de páginas sin necesidad de una actualización de página completa, la capacidad de acceder a los servicios web a través del script de cliente (incluida la API de generación de perfiles de ASP.NET) y una amplia API del lado cliente diseñada para reflejar muchos de los esquemas de control vistos en el conjunto de controles del lado servidor de ASP.NET.

En estas notas de producto se examinan las características de localización presentes en Microsoft AJAX Framework y en la biblioteca de scripts de Microsoft AJAX desde el punto de vista de la necesidad empresarial de contar con funcionalidades de localización y de revisar las funcionalidades de localización ya integradas en las aplicaciones web que ofrece .NET Framework. La biblioteca de scripts AJAX de Microsoft utiliza el formato de archivo .resx ya usado por las aplicaciones .NET, que proporciona compatibilidad con el entorno de desarrollo integrado y un tipo de recurso compartible.

Estas notas del producto se basan en la versión Beta 2 de Microsoft Visual Studio 2008. En estas notas del producto también se da por supuesto que trabajará con Visual Studio 2008, no con Visual Web Developer Express, y se proporcionarán tutoriales según la interfaz de usuario de Visual Studio. En algunos ejemplos de código se utilizarán plantillas de proyecto que pueden no estar disponibles en Visual Web Developer Express.

La necesidad de la localización

En el caso concreto de los desarrolladores de aplicaciones empresariales y de componentes, la capacidad de crear herramientas que puedan reconocer las diferencias entre culturas e idiomas es cada vez más necesaria. El diseño de componentes capaces de adaptarse a la configuración regional del cliente aumenta la productividad de los desarrolladores y reduce la cantidad de trabajo necesario para la adaptación de los componentes de modo que funcionen globalmente.

La localización es el proceso de diseño e integración de la compatibilidad con una cultura y un idioma específicos en una aplicación o en un componente de una aplicación. La plataforma Microsoft ASP.NET proporciona una amplia compatibilidad con la localización de aplicaciones ASP.NET estándar mediante la integración del modelo de localización estándar de .NET; Microsoft AJAX Framework utiliza el modelo integrado para admitir los diversos escenarios en los que se puede realizar la localización. Con Microsoft AJAX Framework, los scripts se pueden localizar mediante la implementación en ensamblajes satélite o mediante la utilización de estructuras de sistemas de archivos estáticos.

Inserción de scripts con ensamblados satélite

De acuerdo con la estrategia de localización estándar de .NET Framework, se pueden incluir los recursos en ensamblados satélite. Los ensamblados satélite proporcionan varias ventajas sobre la inclusión de recursos tradicionales en archivos binarios: cualquier localización determinada se puede actualizar sin actualizar la imagen más grande, las localizaciones adicionales se pueden implementar simplemente mediante la instalación de ensamblados satélite en la carpeta del proyecto y los ensamblados satélite se pueden implementar sin provocar una recarga del ensamblado del proyecto principal. Esto es particularmente ventajoso en los proyectos de ASP.NET, porque puede reducir significativamente la cantidad de recursos del sistema utilizados por las actualizaciones incrementales e interrumpir mínimamente el uso del sitio web de producción.

Los scripts se insertan en ensamblados incluyéndolos en archivos .resx administrados (o .resources compilados), que se incluyen en el ensamblado en tiempo de compilación. Los recursos estarán entonces disponibles para la aplicación de script a través del código generado en tiempo de ejecución de AJAX, mediante atributos de nivel de ensamblado.

Convenciones de nomenclatura para archivos de script incrustados

La administración de scripts de Microsoft AJAX Framework admite diversas opciones para su uso en la implementación y la prueba de scripts. Se proporcionan instrucciones para hacer más fácil el uso de esas opciones.

Para hacer más fácil la depuración:

Los scripts de versión (producción) no deben incluir el calificador .debug en el nombre de archivo. Los scripts diseñados para la depuración deben incluir .debug en el nombre de archivo.

Para hacer más fácil la localización:

Los scripts de referencia cultural neutra no deben incluir ningún identificador de referencia cultural en el nombre del archivo. En el caso de los scripts que contienen recursos localizados, se debe especificar el código ISO del idioma en el nombre de archivo. Por ejemplo, es-CO corresponde al español de Colombia.

En la tabla siguiente se resumen las convenciones de nomenclatura de archivos con ejemplos:

Nombre de archivo Significado
Script.js Script de versión de lanzamiento de referencia cultural neutra.
Script.debug.js Script de versión de depuración de referencia cultural neutra.
Script.en-US.js Script de versión de lanzamiento de inglés de Estados Unidos.
Script.debug.es-CO.js Script de versión de depuración de español de Colombia.

Tutorial: Crear un script localizado e incrustado

Nota: Este tutorial requiere usar Visual Studio 2008, ya que Visual Web Developer Express no incluye ninguna plantilla de proyecto para proyectos de bibliotecas de clases.

  1. Cree un nuevo proyecto de sitio web con extensiones AJAX para ASP.NET integradas. Cree otro proyecto, un proyecto de biblioteca de clases, en la solución denominada LocalizingResources.
  2. Agregue un archivo Jscript denominado VerifyDeletion.js al proyecto LocalizingResources, así como archivos de recursos .resx denominados DeletionResources.resx y DeletionResources.es.resx. El primero contendrá recursos de referencia cultural neutra; el segundo contendrá recursos del idioma español.
  3. Agregue el código siguiente a VerifyDeletion.js:
function VerifyDeletion(fileName)
{
 if (confirm(Message.VerifyDelete.replace(/FILENAME/, fileName)))
 {
 Delete(fileName);
 return true;
 }
 return false;
}
function Delete(fileName)
{
 alert (Message.Deleted.replace(/FILENAME/, fileName));
}

Para aquellos que no conozcan la sintaxis de regex de JavaScript, el texto entre barras diagonales simples (en el ejemplo anterior, /FILENAME/ es un ejemplo) indica un objeto RegExp. MSDN Library contiene una amplia referencia de JavaScript y se pueden encontrar recursos sobre objetos nativos de JavaScript en línea.

  1. Agregue las siguientes cadenas de recursos a DeletionResources.resx:

    VerifyDelete: Are you sure you want to delete FILENAME?

    Deleted: FILENAME has been deleted.

  2. Agregue las siguientes cadenas de recursos a DeletionResources.resx:

    VerifyDelete: ¿Seguro que desea eliminar FILENAME?

    Deleted: Se ha eliminado FILENAME.

  3. Agregue las siguientes líneas de código al archivo AssemblyInfo:

[assembly: System.Web.UI.WebResource("LocalizingResources.VerifyDeletion.js",
 "text/javascript")]
[assembly: System.Web.UI.ScriptResource("LocalizingResources.VerifyDeletion.js",
 "LocalizingResources.DeletionResources", "Message")]
  1. Agregue referencias a System.Web y System.Web.Extensions al proyecto LocalizingResources.
  2. Agregue una referencia al proyecto LocalizingResources desde el proyecto de sitio web.
  3. En default.aspx, en el proyecto de sitio web, actualice el control ScriptManager con el siguiente marcado adicional:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptLocalization="true">
 <Scripts>
 <asp:ScriptReference Assembly="LocalizingResources" Name="LocalizingResources.VerifyDeletion.js"/>
 </Scripts>
</asp:ScriptManager>
  1. En default.aspx, en cualquier parte de la página, incluya este marcado:
<asp:Button ID="btnDelete" runat="Server" OnClientClick="VerifyDeletion('a.txt');" Text="Delete" />
  1. Presione F5. Si se le solicita, habilite la depuración. Cuando se cargue la página, presione el botón Eliminar. Tenga en cuenta que se le pedirá la confirmación en inglés (a menos que el equipo esté establecido para que de preferencia a los recursos de idioma español de forma predeterminada).
  2. Cierre la ventana del explorador y vuelva a default.aspx. En la directiva de encabezado @Page, reemplace auto por Culture y UICulture por es-ES. Presione F5 de nuevo para volver a iniciar la aplicación web en el explorador. Esta vez, tenga en cuenta que se le pedirá que elimine el archivo en español:

Screenshot that shows a Windows Internet Explorer dialog with a Spanish language prompt to click O K.

(Haga clic para ver la imagen a tamaño completo).

Screenshot that shows a prompt to delete the file in Spanish.

(Haga clic para ver la imagen a tamaño completo).

Tenga en cuenta que hay varias variaciones para este tutorial. Por ejemplo, los scripts se pueden registrar con el control ScriptManager mediante programación durante la carga de páginas.

Inclusión de una estructura de archivos de script estáticos

Al usar archivos de script estáticos para la implementación, se pierden algunas de las ventajas de usar el esquema de localización inherente de .NET. Lo más visible es que se pierde el tipo automático generado a partir de la inclusión de archivos de recursos de script. En el recorrido anterior, por ejemplo, los recursos se exponían mediante un tipo generado automáticamente llamado Mensaje del control ScriptManager.

Sin embargo, usar una estructura de archivos de script estáticos tiene algunas ventajas. Se pueden realizar actualizaciones sin tener que volver a compilar e implementar los ensamblados satélite, y también se puede usar una estructura de archivos estáticos para invalidar el script incrustado con el fin de integrar una funcionalidad secundaria que quizá no se haya enviado con un componente.

Microsoft recomienda generar automáticamente sus recursos de script durante la compilación del proyecto para evitar un problema de control de versiones. Al mantener una base de código de script extensa, puede resultar cada vez más difícil asegurarse de que se reflejen los cambios de código en cada script localizado. Como alternativa, puede simplemente mantener un script lógico y varios scripts de localización, combinando los archivos al compilar el proyecto.

Dado que no hay recursos para incluir mediante declaración, se debe hacer referencia a los archivos de script estáticos agregando elementos <asp:ScriptElement> como secundarios de la etiqueta <Scripts> del control ScriptManager o agregando objetos ScriptReference a la propiedad Scripts del control ScriptManager en tiempo de ejecución.

ScriptManager y su papel en la localización

ScriptManager habilita varios comportamientos automáticos para las aplicaciones localizadas:

  • Busca automáticamente archivos de script en función de la configuración y las convenciones de nomenclatura. Por ejemplo, carga scripts habilitados para la depuración cuando está en modo de depuración y carga scripts localizados en función de la selección de la interfaz de usuario del explorador.
  • Habilita la definición de referencias culturales, incluidas las referencias culturales personalizadas.
  • Habilita la compresión de archivos de script a través de HTTP.
  • Almacena en caché los scripts para administrar de forma eficaz muchas solicitudes.
  • Agrega una capa de direccionamiento indirecto a los scripts canalizándolos a través de una dirección URL cifrada.

Las referencias de script se pueden agregar al control ScriptManager mediante programación o mediante marcado declarativo. El marcado declarativo es particularmente útil cuando se trabaja con scripts incrustados en ensamblados distintos del propio proyecto de sitio web, ya que es probable que el nombre del script no cambie a medida que se inserten las revisiones.

Resumen

A medida que las aplicaciones web crecen para llegar a un público mayor, la capacidad de llegar a culturas y comunidades más amplias se convierte en el núcleo del modelo de negocio. Las aplicaciones web de comercio electrónico deben ser capaces de tratar con monedas extranjeras; los sistemas de administración de contenido deben poder presentar en otros idiomas el contenido, así como las sugerencias de navegación y los campos de formulario; y las empresas necesitan saber que esta capacidad es accesible.

.NET Framework admite intrínsecamente un marco de localización enriquecido que utiliza ensamblados satélite y archivos de recursos XML (.resx) para presentar una manera uniforme de buscar imágenes y cadenas de recursos. Las extensiones AJAX para ASP.NET, incluidos Microsoft AJAX Framework y la biblioteca de scripts de Microsoft AJAX, proporcionan compatibilidad con este modelo de programación en código del lado cliente, lo que permite búsquedas sencillas de cadenas de recursos. Los ensamblados satélite admiten la inclusión automática de recursos de script (archivos de .js reales) a través de ScriptResource.axd siempre que los nombres de archivo sigan un esquema de nomenclatura determinado. Con esta compatibilidad, las extensiones AJAX para ASP.NET simplifican la localización de scripts y la globalización de las aplicaciones.

Biografía

Scott Cate ha trabajado con las tecnologías web de Microsoft desde 1997 y es el presidente de myKB.com (www.myKB.com), donde es especialista en escribir aplicaciones ASP.NET basadas en soluciones de software de Knowledge Base. Puede ponerse en contacto con Scott por correo electrónico a través de scott.cate@myKB.com o en su blog, en ScottCate.com