route - ASP.NET MVC cambiar el lenguaje, ¿cómo implementar?
route controller mvc 5 (3)
Comencé a convertir mi sitio web simple a ASP.NET MVC, solo para jugar con él. Tengo una función de cambio de idioma que básicamente establece la Sesión ["idioma"] a otro idioma y actualiza la página. Corríjame si esto podría hacerse mejor, pero he hecho dos controladores para esto y configurar la sesión allí. El problema es el enrutamiento al final. ¿Puedo actualizar la página de una manera ordenada, o puedo obtener la Acción actual y redirigirla a eso? ¿O es este un escenario más para el Ajax?
Agradecido por el consejo!
¿Hay alguna razón por la que está utilizando la variable de sesión? Una solución más común es incluir el código de idioma en la ruta, es decir, blah.com/en/info o blah.com/jp/info (para inglés y japonés)
Si hiciera esto, todas las páginas del sitio podrían contener enlaces a cada idioma. Si está escribiendo un sitio de acceso público, esto también facilitaría que Google indexe todo su contenido.
este artículo explica cómo incluir el idioma en el dominio, es decir. en.blah.com o jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx
ACTUALIZADO: Este es un ejemplo simple de incluir el código de idioma en la ruta de la URL.
Cambie la ruta predeterminada para incluir un parámetro de idioma:
routes.MapRoute(
"Default",
"{language}/{controller}/{action}/{id}",
new { language = "en", controller = "Home", action = "Index", id = "" }
);
Agregue enlaces para cada idioma a su página maestra:
<li><%= Html.ActionLink(
"Spanish",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "es" })%></li>
<li><%= Html.ActionLink(
"French",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "fr" })%></li>
<li><%= Html.ActionLink(
"English",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "en" })%></li>
Se mostrarán como enlaces a la página en la que se encuentra, solo con el idioma cambiado.
El siguiente enfoque funciona bien para mí:
Estoy usando cookies y mi propio motor para la localización. Todo lo que necesita para poner un enlace en la página que redirija a algo como esto:
public class LanguageController : Controller
{
//
// GET: /Language/
public void Change(string id)
{
var cuka = new HttpCookie("lang", id + "");
cuka.Expires = DateTime.Now.AddYears(10);
System.Web.HttpContext.Current.Response.Cookies.Add(cuka);
if (Request.UrlReferrer.IsNotNull())
Response.Redirect(Request.UrlReferrer.AbsoluteUri);
else
Response.Redirect("/");
}
}
}
Si estás interesado en este motor, házmelo saber.
Aquí está la solución simple de cómo habilitar la selección diferente en la URL.