Como hacer un sitio multilenguaje en .Net utilizando MasterPage y archivo Global.asax
e implementar seleccion del idioma mediante DropDownList
e implementar seleccion del idioma mediante DropDownList
Version 2 - (Español)
Para comenzar estaria mejor que miren este tutorial: Link
En este tutorial veremos como hacer un sitio multilenguaje (En este caso Spanish-English) utilizando Master Pages y archivo Global.asax.
Para aprender a trabajar con MasterPages podes mirar este tutorial: Link
1) Primero cree la estructura del sitio de la siguiente manera:

2) Basicamente tenemos una MasterPage y 2 paginas que la implementan, tambien tenemos un simple archivo Global.asax
3) Siguiente paso abrimos el codigo html de nuestra MasterPage.master y agregamos 2 labels:
<body>
<form id="form1" runat="server">
<div>
<!-- Main Menu -->
<a href="Default.aspx">
<asp:Label ID="Label1" meta:resourcekey="menuItemDefault" runat="server" Text="Go To Default"></asp:Label>
</a>
<a href="Contact.aspx">
<asp:Label ID="Label2" meta:resourcekey="menuItemContact" runat="server" Text="Go To Contact"></asp:Label>
</a>
</div>
Estos labels seran mi menu en el cual se cambiara el texto de acuerdo al idioma seleccionado
a estas 2 labels le vamos a agregar las propiedades resourcekey las que mas tarde vamos a agregar a los archivos de recursos para cambiar el texto acorde al idioma
4) Inserte el DropDownList en el cual vamos a seleccionar el idioma y al mismo agregarle el evento SelectedIndexChange y no olvidarse de setear el AutoPostBack a true.
</div>
<br />
<asp:DropDownList ID="DropDownList_Language" runat="server" Height="20px" Width="170px"
onselectedindexchanged="DropDownList_Language_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Value="es-AR">Spanish</asp:ListItem>
<asp:ListItem Value="en-US">English</asp:ListItem>
</asp:DropDownList>
<div>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
Resultado:

5) Ahora agreguemos algo de codigo a MasterPage.master.cs
Aca basicamente en el PageLoad seteamos el idioma seleccionado actualmente en el DropDown
Durante el cambio del idioma seteamos la variable de Session "myapplication.language" a la cultura seleccionada actualmente que voy a usar en el Global.asax
Entonces: Seteamos el idioma actual en el DropDown, y seteamos la cultura en la variable de Session
protected void Page_Load(object sender, EventArgs e)
{
if(Session["myapplication.language"] != null && !IsPostBack)
{
DropDownList_Language.ClearSelection();
DropDownList_Language.Items.FindByValue(Session["myapplication.language"].ToString()).Selected = true;
}
}
protected void DropDownList_Language_SelectedIndexChanged(object sender, EventArgs e)
{
switch(DropDownList_Language.SelectedValue)
{
case "en-US": this.SetMyNewCulture("en-US");
break;
case "es-AR": this.SetMyNewCulture("es-AR");
break;
default:
break;
}
Response.Redirect(Request.Path);
}
private void SetMyNewCulture(string culture)
{
Session["myapplication.language"] = culture;
}
Resultado:

6) Ahora vamos al archivo Global.asax.
Incluyamos los 2 namespace requeridos
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Globalization" %>
<%@ Import Namespace="System.Threading" %>
<script runat="server">
and add the fallowing method:
void Application_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
if (context.Session["myapplication.language"] != null)
{
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(context.Session["myapplication.language"].ToString().Trim());
Thread.CurrentThread.CurrentCulture = new CultureInfo(context.Session["myapplication.language"].ToString().Trim());
}
}
Este metodo nos va a retornar la cultura seteada actualmente en la variable de Session y la va a setear al Thread actual de nuestro sitio Web.
Resultado:

7) Finalmente vamos a agregar algunos archivos de recursos para cada lenguaje/idioma
En mi caso hice un menu multilenguaje (Para cambiar entre Español e Ingles)

Ahora agreguemos los textos al archivo contact.aspx y un simple label para intercambiar texto en la misma pagina.

8) Pagina de Contacto:
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Label ID="Label1" runat="server" meta:resourcekey="textLanguage" Text=""></asp:Label>
</asp:Content>
Resultado:
Español seleccionado

Ingles seleccionado

Puede modificar el proyecto a sus necesidades
Aca puede descargar todo el codigo fuente: Download Source
Propiedad de: maksim20032@hotmail.com
Deje sus comentarios! :)