Aplicación web con multilenguaje
Un tipo de web que puede plantearsete, en un medio globalizado como internet, es la que personaliza contenidos/interfaz para varios idiomas. Una vez que buscas alternativas en cómo dar la mejor solución, puede que en lugar de resolverte las cuestiones aparezcan más, ¿qué pasa con los contenidos en varios lenguajes, indexan correctamente en buscadores? ¿debería elegir un tld propio de cada idioma? Estos puntos requerirían una entrada propia donde dar pistas en cuál sería la mejor alternativa para el proyecto; en ésta comentaremos una manera sencilla de tener una web en varios idiomas usando ficheros de recursos globales. Los cuatro tipos de ficheros que usaremos serán web.config donde configuraremos la elección automática del idioma, ficheros de recursos en los que pondremos los contenidos/etiquetas de cada idioma y finalmente las páginas y codebehind para mostrar/lógica de elección de cada lenguaje. Vamos con los dos primeros. Veamos web.config y un fichero de recursos.
.... <data name="adminemp" xml:space="preserve"> <value>Pages simples pour contrôler des ventes d'une série d'employés, nous avons une connus interface CRUD pour la gesión d'employés dans chacune de catégories entreprise/département.Il utilise .net 1.1, vb.net, asp.net, access 2000. Il est a souligner l'utilisation de contrôles propres de .net, Datagrid avec l'avantage qui implique contre asp 3.0 quant au nombre de lignes nécessaires pour mettre en oeuvre cette fonction.</value> </data> <data name="ButtonResource1" xml:space="preserve"> <value>Envoyer</value> </data> <data name="ButtonResource2Text" xml:space="preserve"> <value>Effacer</value> </data> ... <configuration> <configSections> <globalization culture="auto" /> </configSections> </configuration>
Los ficheros de recursos se crean directamente desde visual studio, basta para ello crear un nuevo recurso para el directorio App_Globalresources. El nombre de cada uno de estos ficheros debe contener el código lenguaje/cultura para cada localización como prefijo de la extensión resx (fichero.fr-Fr.resx). En el lado de elegir y mostrar cada una de las versiones de idioma se usa el evento InitializeCulture() y una cookie para mantener la elección entre las páginas de la aplicación.
using System; using System.Data; using System.Configuration; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Threading; using System.Globalization; using System.Resources; public partial class _Default : System.Web.UI.Page { public string mensaje; protected override void InitializeCulture() { HttpCookie cookielocal = Request.Cookies["langinfo"]; if (Request.QueryString["lang"] != null) { String lang = Request.QueryString["lang"]; UICulture = lang; // Culture = lang; // Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang); Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang); HttpCookie cookie = new HttpCookie("langinfo"); cookie.Value = lang; Response.Cookies.Add(cookie); } else if (cookielocal != null && cookielocal.Value != null) { UICulture = cookielocal.Value; Thread.CurrentThread.CurrentUICulture = new CultureInfo(cookielocal.Value); } base.InitializeCulture(); } } .... <div class="right"> <a href="<%= Request.Path %>?lang=es">Español</a> | <a href="<%= Request.Path %>?lang=en">English</a> | <a href="<%= Request.Path %>?lang=fr">Français</a> </div> ...
Y poco más, con estas lineas puedes personalizar la web usando ficheros de recursos en el caso que optes por esta opción