Multilenguaje Sitio Web ASP.NET y C#

Hola que tal!, en este Post le describiré una forma sencilla de hacer su pagina ASP.NET en multilenguaje, usaremos los recursos disponibles que nos proporciona el Framework, usaremos los archivos que se encuentren en App_GlobalResources para implementar esto.

Crearemos un nuevo proyecto vacio.

image

creamos un proyecto vacio ya que solo necesitamos lo necesario para este ejemplo. lo creamos.

y una vez creado vamos a agregar la carpeta ya antes mencionada que contendrá los archivos de recurso.

image

Una vez creado, automáticamente nos creara la carpeta “App_GlobalResources”

image

ya creado la carpeta, vamos a agregar un archivo de recurso agregando desde nuevo elemento.image 

se abrirá un ventana en donde buscamos el archivo de recurso y le colocamos un nombre, les sugiero que lleve el siguiente patrón.

“nombre”+”language”+ “cultura” para este caso no le pongo cultura ya que por default usare este archivo, en este caso es para alojar las traducciones en español.

image

Después de crearlo les mostrara una tabla, donde ponemos  en la columna “Nombre” la etiqueta que contendrá el valor asignado que coloquemos en la columna “Valor”, este caso cuando se trata del archivo de traducciones en español en la etiqueta “lang” se visualizara para tender la disponibilidad de cambiar al Ingles.

image

De la misma manera que agregamos este archivo de recursos, agregamos otro pero para el ingles, siguiendo el patrónpatron antes mencionado. este le agregamos  la terminación “es-us”, para especificar la cultura.

image

llenamos la tabla, pero ahora en ingles, teniendo las mismas etiquetas.

image

Después de hacer esto vamos con la parte de Código.

Agregamos una Pagina ASPX, agregamos el siguiente código para crear nuestro formulario de ejemplo.

image

 

 <form id="form1" runat="server">
        <div>
            <table style="width: 100%;">
                <tr>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td>
                        <asp:HyperLink ID="hlEnglish" NavigateUrl="?lang=en" runat="server" Text="<%$Resources:multi.language, lang%>" />
                        <asp:HyperLink ID="hlSpanish" NavigateUrl="?lang=es" runat="server" Text="<%$Resources:multi.language, lang%>" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="Label1" runat="server" Text="<%$Resources:multi.language, nombre%>"></asp:Label></td>
                    <td><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td><asp:Label ID="Label2" runat="server" Text="<%$Resources:multi.language, correo%>"></asp:Label></td>
                    <td><asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td><asp:Label ID="Label3" runat="server" Text="<%$Resources:multi.language, edad%>"></asp:Label></td>
                    <td><asp:TextBox ID="TextBox3" runat="server"></asp:TextBox></td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td><asp:Button ID="Button1" runat="server" Text="<%$Resources:multi.language, aceptar%>" /></td>
                    <td>&nbsp;</td>
                </tr>
            </table>

        </div>
    </form>

Como se puede ver, lo que cambia a diferencia de formularios que siempre se suele hacer es la propiedad es en “Text” analicemos la línea que contiene HyperLink

 <asp:HyperLink ID="hlEnglish" NavigateUrl="?lang=en" runat="server" Text="<%$Resources:multi.language, lang%>" />
<asp:hyperlink id="hlEnglish" runat="server" navigateurl="?lang=en" text="<%$Resources:multi.language, lang%>" />

en la Propiedad “NavigateUrl” cuando presionemos el link, este en la dirección URL va a pasar un parámetro especificando que lenguaje debe de utilizar. En su propiedad Text: se especifica de que recurso se debe de utilizar, así como la etiqueta de donde obtendrá el texto. analizado esto, pues se puede ver que que en las etiquetas “Label” se les se ha puesto lo mismo, la diferencia esta en la etiqueta de donde obtendrán el valor.

el resultado de el código anterior se ve de la siguiente manera, pero si lo intentamos ejecutar aun no funciona correctamente.

image

Ahora agregamos Código C# que nos hace falta para que funcione como se tiene planeado.

Agregamos una Clase de código que la llamaremos “BasePage.cs” a nuestro proyecto y agregamos el siguiente código:

primero agregamos las siguientes lineas de las clases que se van a utilizar

using System.Globalization;
using System.Threading;

  public class BasePage : System.Web.UI.Page
    {
        protected override void InitializeCulture()
        {
            string culture = string.Empty;
            //verificamos el parametro en Request para verificar si ha espeficiado un valor
            //desde la URL
            if (!string.IsNullOrEmpty(Request["lang"]))
            {//se obtiene el valor del parametro.
                string lang = Request["lang"].ToLower();
                //salvamos en Session el valor del parametro recibido
                Session["lang"] = lang;
                //se verifica que cultura se debe de utilizar de acuerdo al valor.
                switch (lang)
                {
                    case "en":
                        culture = "en-US";
                        break;
                    case "es":
                        culture = "es-MX";
                        break;
                    default:
                        culture = "en-US";
                        break;
                }
            }
            else
            {
                //si no se ha especificado por default usaremos el Español de Mexico.
                culture = "en-MX";
            }
            //creamos y modificamos la especificacion de cultura a nuestra pagina.
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
            base.InitializeCulture();
        }
    }

por ultimo, a nuestra pagina que hemos agregado, hacemos que herede de BasePage  “public partial class Default : BasePage”

colocamos código adicional para mostrar el Hypelink correspondiente al idioma. en el Page_Load y quedaria de la siguiente manera:

protected void Page_Load(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Convert.ToString(Session["lang"])))
            {
                hlEnglish.Visible = true;
                hlSpanish.Visible = false;
            }
            else
            {
                string lang=Session["lang"].ToString();

                if (lang.Equals("en"))
                {
                    hlEnglish.Visible = false;
                    hlSpanish.Visible = true;
                }
                else
                {
                    hlEnglish.Visible = true;
                    hlSpanish.Visible = false;
                }
            }
        }

Ahora ejecutamos, por default nos aparece en español

imageahora si presionamos el link que dice “English” nos mostrara en el idioma seleccionado.

image

bueno eso es todo, espero les sirva, como yo lo he estado utilizando para mis paginas.

Download

3 thoughts on “Multilenguaje Sitio Web ASP.NET y C#

  1. Admiring the time and energy you put into your website and in depth information you offer.
    It’s awesome to come across a blog every once in a while that isn’t the same
    outdated rehashed material. Great read! I’ve saved your site and I’m including your RSS feeds to my Google account.

Deja un comentario