Satellite Assemblies en internacionalización ASP.NET MVC

Como vimos en el post de internacionalización, uno de los puntos importantes sobre el cual trabajamos en las aplicaciones con soporte a varias culturas es el archivo de recursos. En los ejemplos sobre los cuales trabajamos el contenido de esos archivos era realmente mínimo, pero pensemos en aplicaciones realmente complejas y extensas con soporte para varios idiomas. En las mismas los archivos de recursos además de texto, pueden tener iconos, imágenes e incluso audios asociados a cada cultura en particular.

Sin duda estamos hablando de un contenido que realmente puede llegar a tener un gran tamaño, lo cual podría llegar a afectar el rendimiento de nuestra aplicación ya que todo ese contenido estaría en el mismo assembly en memoria, conviviendo todas las culturas juntas.

Ante esta situación surge un concepto importante: Satellite Assemblies

Un satellite assembly es una libraría compilada que contiene todos los recursos localizables que mencionábamos con anterioridad. El uso de las mismas se da en los casos de aplicaciones con múltiples culturas, en las cuales se crea un satellite assembly por cada cultura a la que le estemos dando soporte.

Estos assemblies no contienen código, por lo tanto no pueden considerarse como ejecutables, sino que estarán asociadas a un assembly principal (de allí el nombre de satélite).

Trabajando con aplicaciones internacionalizadas en ASP.NET MVC esto es totalmente transparente, teniendo esta solución implementada al 100%. Supongamos el ejemplo donde tenemos los siguientes archivos de recursos:

SatelliteAssembly - ArchivosRecursos

Si vemos el resultado de la aplicación compilada/publicada, veremos que se han generado carpetas por cada una de las culturas que estamos soportando:

SatelliteAssembly - CarpetasCompilacion

Y dentro de las mismas está el assembly asociado al archivo de recursos (el mismo se repetirá dentro de todas las carpetas, cada uoa armado a partir del archivo de recursos asociado a dicha cultura):

SatelliteAssembly - DLLREcursos

Solo a modo de validación, si validamos el contenido de el assembly asociado a la cultura en (inglesa general), veremos el siguiente contenido:

SatelliteAssembly - ContenidoDLL
Satellite Assembly para una cultura específica

Efectivamente podemos apreciar que el contenido del mismo es completamente recursos, no código. Si tendríamos otros archivos (imágenes, audios, etc.) los mismos estarían también como texto dentro de este archivo, lo cual haría que su tamaño sea considerable. Además de poder ver que el nombre (indicado con la flecha arriba a la izquierda) coincide con el nombre que nosotros le estamos dando en nuestra aplicación. Y abajo a la derecha está el contenido de nuestro archivo de recursos, con las claves y valores asociados a esta cultura.

Cabe mencionar que el archivo de recursos por defecto (el que tenemos sin la cultura) no tendrá su propio satellite assembly, sino que estará sobre el assembly asociado al proyecto donde estén los recursos. En nuestro caso están directamente en el proyecto web, por lo que estará junto a los demás componentes de nuestra aplicación:

SatelliteAssembly - ContenidoDLLDefault.jpg
Contenido de la cultura por default en el assembly principal

Finalmente, hablando del tiempo de ejecución de nuestras aplicaciones ASP.NET MVC, la selección del satellite assembly será gestionada por la clase ResourceManager, a partir del valor de cultura disponible, siendo todo esto transparente para nosotros.

A modo de resumen, la utilización de forma nativa de este enfoque nos brinda la siguientes ventajas:

  • Menor consumo de memoria, ya que sólo se cargará el satellite assembly asociado a la cultura con la que accede el usuario.
  • El tiempo de respuesta es mejor, ya que de si estaría todo en el mismo assembly se requeriría mayor tiempo para encontrar el recurso.
  • Se puede agregar soporte a una nueva cultura o modificar alguna de las existentes sin necesidad de modificar el assembly principal de la aplicación.

 

Gracias por leer!

Anuncios

Un comentario en “Satellite Assemblies en internacionalización ASP.NET MVC

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s