Desarrollando

en tu idioma

Escrito por: TiraCodigo

A continuación mostramos una sencilla forma de crear un sitio que soporte varios idiomas en asp.net con mvc

Para comenzar, tenemos que crear los archivos de recursos, en nuestro ejemplo el sitio soportará español, ingles y portugues, debemos de crear un archivo por cada idioma (con terminacion .en.resx, .pt.resx y el predeterminado solo con el .resx), para esto crearemos una carpeta a nivel de proyecto, y le pondremos el nombre de “Recursos”, y ahí pondremos los archivos

 

 

En donde en cada archivo pondremos el texto que necesitemos en el idioma correspondiente

Vamos a cambiar el formato de la ruta, el cual se encuentra en el archivo “App_Start/RouteConfig.css” para que en él, agreguemos el código de la cultura, quedando así la modificación

routes.MapRoute( name: "Default", url: "{culture}/{controller}/{action}/{id}", defaults: new { culture = "es-MX", controller = "Home", action = "Index", id = UrlParameter.Optional } );

Para que sea posible el cambio de idiomas en la aplicación, debemos agregar en un controller, un action que nos permita cambiar la cultura del hilo

public ActionResult SetLanguage(string idioma) { 
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(idioma);
return RedirectToAction("Home", new { culture = idioma });
}

Definimos la propiedad de “Language” dentro de la clase “MvcApplication”, la cual se encargara de obtener el idioma de la url, en caso de que no viniera, esta regresaría español

public static string Language { 
get {
var currentContext = new HttpContextWrapper(HttpContext.Current);
var routeData = RouteTable.Routes.GetRouteData(currentContext);
if (routeData != null) {
var lang = (string)routeData.Values["culture"];
if (string.IsNullOrEmpty(lang)) {
lang = "es-MX";
}
return lang;
}
return "es-MX";
}
}

Otro cambio que debemos realizar, es en el archivo “Global.asax”, en donde agregaremos la siguiente función, que tendrá a su cargo asignar la cultura en cada request:

protected void Application_BeginRequest(object sender, EventArgs e) { 
Thread.CurrentThread.CurrentUICulture = new CultureInfo(MvcApplication.Language);
Thread.CurrentThread.CurrentCulture = new CultureInfo(MvcApplication.Language);
}

Con lo anterior, tendríamos completado el funcionamiento para el cambio de idioma, restando solo la modificación de la vista, en donde para imprimir el valor del recurso pondríamos:

@SitioMultilenguaje.Recursos.Textos.strTitulo

Y para crear los links para el cambio de idioma:

Español:

 @Html.ActionLink("Español", "SetLanguage","Home", new { idioma = "es-MX" }, new { @class = "btn btn-primary btn-lg" })

Ingles:

@Html.ActionLink("English", "SetLanguage", new { idioma = "en-US" }, new { @class = "btn btn-primary btn-lg" })

Portugues:

@Html.ActionLink("Portuges", "SetLanguage", new { idioma = "pt-BR" }, new { @class = "btn btn-primary btn-lg" })