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:

  1. En vista de diseño nos situamos sobre la página o sobre un control:


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


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


  4. 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:

  1. Crear un sitio Web ASP.NET

  2. Añadir una Label y 2 Hyperlink a la página:


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


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


  6. Añadimos los textos:


  7. Para cada Hyperlink modificamos su propiedad NavigateUrl:


  8. 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:  }

  9. Y por último sólo falta probar (Os adjunto el código fuente):

En la siguiente entrega hablaremos sobre los recursos globales.

Salu2

Attachment: MultiIdioma.zip
Published 6/6/2007 17:59 por Luis Ruiz Pavón
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2007/06/06/crear-un-sitio-multiidioma-i.aspx

Comentarios

# re: Crear un sitio web multiidioma (I)

Te ha faltado explicar como hacer para que se detecte el idioma a través del  que está configurado en el navegador ;)

Thursday, June 07, 2007 12:52 PM por Neu

# re: Crear un sitio web multiidioma (I)

OK Neu tomo nota y en la siguiente entrega lo incorporo.

Gracias por tu comentario ;)

Salu2

Thursday, June 07, 2007 12:58 PM por Luis Ruiz Pavón

# Crear un sitio web multiidioma (II)

En mi anterior artículo estabamos hablando sobre los tipos de recursos existentes y ya vimos los recursos

Monday, June 11, 2007 2:27 PM por Amigo mío Siempre estas Programando en .NET

# re: Crear un sitio web multiidioma (I)

Hola, me esta tomando demasiado tiempo hacer el sitio multi-idioma. Este articulo me mostro un par de cosita que desconocia. En el caso de poder darme un ayudita mas personalizada les dejo apoximadamente mi problema:

Hola, tengo un proyecto en VS2005 y necesito que la pagina web me tome informacion de cookies si es q entro anteriormente e hizo cambios.

Basicamente es una aplicacion finalizada, la cual debe ser ahora multi-idioma. Lo cual ya esta utlizando archivos de recursos como si fuesen diccionario de datos y sus valores en cada idioma. desde la pagina index o default.aspx habria un combo box o link el cual me permita seleccionar el otro lenguaje, cambiando asi la seleccion de lenguaje y generar el cookie con esa informacion par ale futuro. Tengan en cuenta que no estoy logrando es agregar el valor, parametro o variable al cookie con en nombre del archivo de recurso. Una vez logrado esto ya seria facil buscar el cookie "galleta" e identificar el idioma utilizamo en su ultima visita del cliente X.

Desde ya muchas gracias.

Monday, June 11, 2007 6:40 PM por Lucas

# re: Crear un sitio web multiidioma (I)

hola. parece bien pero es solo para pocas palabras y necesita base de datos. en caso que quiera modificar toda una web completamente de un idioma a otro cual sería el sistema más facil

(y si es posible sin base de datos)

Gracias

Friday, July 06, 2007 9:05 AM por Carlos Herrera

# re: Crear un sitio web multiidioma (I)

Esto no necesita una base de datos ;) son archivos de recursos resx

Salu2

Thursday, July 12, 2007 8:38 PM por Luis Ruiz Pavón

# re: Crear un sitio web multiidioma (I)

hi asp. net

Tuesday, September 04, 2007 1:59 PM por jfam

# re: Crear un sitio web multiidioma (I)

Tendran el codigo pero en Vb en lugar de C#.

Muchas gracias

Tuesday, September 04, 2007 8:37 PM por Diego

# re: Crear un sitio web multiidioma (I)

Protected Overrides Sub InitializeCulture()

       Dim sCulture As String = Session("lang")

       If Request.Form("ctl00$MenuContent$eblIdioma") IsNot Nothing Then

           Session("lang") = Request.Form("ctl00$MenuContent$eblIdioma")

           sCulture = Session("lang")

       End If

       UICulture = sCulture

       Thread.CurrentThread.CurrentUICulture = New CultureInfo(sCulture)

       MyBase.InitializeCulture()

   End Sub

yo estoy utilizando esto que te mando y me funciona, del ejemplo original hay que tomar en cuenta que "InitializeCulture event" se dispara muy temprano en la creación de la pagina y controles por lo que necesito hacer uso del request form para obtener de mi radiobuttonlist un valor seleccionado, ademas lo estoy guardando en una variable de session pues no me aseguro que el uiculture que me devuelve el explorador continue siendo el seleccionado originalmente.

Espero que les ayude y si en algo me equivoco tambien se los agradeceria.

Wednesday, October 10, 2007 1:47 AM por Nixon Morales

# re: Crear un sitio web multiidioma (I)

Hola, he seguido los pasos que has puesto y he creado una página web multiidioma con una masterpage.

Me surgen los siguientes problemas:

Al enlazar en la masterPage no sé exactamente en qué página me están navegando y por lo tanto no sabría que dirección poner en el hyperlink.

Al tener seleccionado el idioma ingles y pinchar en cualquier enlace vuelve a cambiar el idioma al español. ¿Hay alguna forma de que guarde el actual idioma sin que se le tenga que pasar en el hyperlink como ?lang?

Friday, October 19, 2007 11:36 PM por Tomatillo

# re: Crear un sitio web multiidioma (I)

mi web todabia no esta terminada pero quiero poner una en idioma  japones e ingles esa mispoa web y quiero saber como se hace.

Wednesday, October 31, 2007 2:46 AM por jonathan fernando zambrano castro

# re: Crear un sitio web multiidioma (I)

esta informacion esta bien pero como que le hace falta mas cosas, yo sujiero que le introducan un poco mas  de informacion pero de todos modos esta bien.

Wednesday, October 31, 2007 2:51 AM por jonathan fernando zambrano castro

# re: Crear un sitio web multiidioma (I)

En asp.net 1.1 como hacemos esto?

Thursday, November 29, 2007 5:16 AM por Elvio

# re: Crear un sitio web multiidioma (I)

Me gustaria que fuera un ejemplo mucho mas amplio, comp por ejemplo como hago con vb 2003

Friday, January 04, 2008 2:35 PM por Safiro

# re: Crear un sitio web multiidioma (I)

Mira este ejemplo:

209.200.119.101/.../Articulo.aspx

Salu2

Tuesday, January 08, 2008 12:12 PM por Luis Ruiz Pavón

# re: Crear un sitio web multiidioma (I)

Hola estoy creando una web multi-idioma y este codigo me ha ayudado mucho, aun así me surgieron dudas, al basar el sitio completo en un Master Page se puede enlazar el sitio solo a dos referencias(una por idioma) e incluir en este archivo el la totalidad de textos en todo el resto del sitio para que el enlace lo haga desde el principio y todas las páginas sean traducidas sin realizar un enlace por pagina?? en lugar de incluir textos independientes existe la forma de incluir parrafos o textos completos en el archivo de cambio de idioma y si es así podrias mostrar como realizarlo?? y bueno para finalizar una felicitación a este foro !!!

Friday, March 14, 2008 5:48 PM por Joel Tirado

# re: Crear un sitio web multiidioma (I)

Que pasa con las paginas creadas con MasterPage??? en VS2008

Wednesday, April 15, 2009 4:05 PM por Yeison