Crear un sitio web multiidioma (I)
En algunas ocasiones necesitamos que nuestras aplicaciones soporten varios idiomas y al principio nos puede parecer un trabajo tedioso y complicado, pero con ASP.NET es un trabajo sencillo y rápido.
Para ello ASP.NET utiliza archivos de recursos (resx), que no son más que ficheros XML que contienen los textos en diferentes idiomas para los controles web.
Existe 2 tipos de recuros: Locales y Globales
Recursos Locales:
Son específicos para una página web en concreto y deben ser usados para suministrar versiones de la página en diferentes idiomas.
Estos ficheros se almacenan en la carpeta App_LocalResources de nuestro sitio web. Su nomenclatura es la siguiente:
<Nombre de la página>[.lenguaje].resx
Así por ejemplo para un recurso español tendríamos:
Default.aspx.es.resx
A continuación se detalla como crear un recurso local de una página web desde Visual Studio 2005:
- En vista de diseño nos situamos sobre la página o sobre un control:

- Pinchamos sobre el menú Herramientas -> Generar recurso local

- Y automáticamente VS nos crea (Si no estaba creada) la carpeta App_LocalResources y su correspondiente recurso:

- Y si nos vamos a la vista HTML de la página sobre la que hemos asignado el recurso, nos encontramos con que VS ha creado unas etiquetas especiales para indicar que esos controles están enlazados a una página de recursos:

Si añades nuevos controles a la página debes volver a generar el archivo de recursos para que se actualice con los nuevos controles por lo que generar los archivos de recursos debería ser una de las últimas fases en el desarrollo de la aplicación.
Para crear archivos de recursos de otros idiomas o culturas basta con copiar el por defecto y pegarlo sobre la misma carpeta, se cambia la extensión y se modifican los textos.
A continuación vamos a ver como aplicar esto con un ejemplo:
- Crear un sitio Web ASP.NET
- Añadir una Label y 2 Hyperlink a la página:

- Creamos el archivo de recursos como vimos anteriormente.
- Añadimos los textos:

- Copiamos el archivo de recursos y lo renombramos a Default.aspx.en.resx (Inglés):

- Añadimos los textos:

- Para cada Hyperlink modificamos su propiedad NavigateUrl:

- Y sólo nos falta sobreescribir el evento InitializeCulture para cambiar el idioma de nuestro sitio en función del enlace:
1: using System;
2: using System.Data;
3: using System.Configuration;
4: using System.Web;
5: using System.Web.Security;
6: using System.Web.UI;
7: using System.Web.UI.WebControls;
8: using System.Web.UI.WebControls.WebParts;
9: using System.Web.UI.HtmlControls;
10: using System.Globalization;
11:
12: public partial class _Default : System.Web.UI.Page
13: { 14: protected void Page_Load(object sender, EventArgs e)
15: { 16:
17: }
18:
19: protected override void InitializeCulture()
20: { 21: if (Request.QueryString["lang"] != null)
22: { 23: UICulture = Request.QueryString["lang"];
24: }
25: base.InitializeCulture();
26: }
27: }
- Y por último sólo falta probar (Os adjunto el código fuente):
En la siguiente entrega hablaremos sobre los recursos globales.
Salu2