Como hacer un sitio multilenguaje en .Net utilizando MasterPage y archivo Global.asax - Version 2 - (Español)
Back to learning
Created: 21/06/2013
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
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
Ahora agreguemos los textos al archivo contact.aspx y un simple label para intercambiar texto en la misma pagina.
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:
Deje sus comentarios! :)