Quiero cambiar mis vistas en MVC 3 entre dos idiomas: PL y EN. Creé dos carpetas en Views: EN y PL. Así que después de hacer clic en enlace de un lenguaje apropiado en cualquier sitio Quiero que mi cambio de ruta a partir de:¿Cómo cambiar las rutas globalmente?
routes.MapRoute(
"pl", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "PL", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
a:
routes.MapRoute(
"en", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "EN", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Al hacer clic en enlace correspondiente (selector de idiomas) cambia CultureInfo que es persistente en todas las roscas . _Layout View con conmutador:
<ul>
<li>@Html.ActionLink("En", "ChangeCulture", null, new { lang = "en"}, null)</li>
<li>@Html.ActionLink("Pl", "ChangeCulture", null, new { lang = "pl"}, null)</li>
</ul>
y el controlador (que establece también variable estática lang que se puede ver en el método de todos los controladores y ser persistente entre peticiones):
public ActionResult ChangeCulture(string lang)
{
PLController.lang = lang;
CultureSettings setCulture = new CultureSettings();
setCulture.InitializeCulture(lang);
cookie.Value = CultureInfo.CurrentCulture.Name;
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
return View("Index");
}
método InitializeCulture se overriden de la página clase de la siguiente manera:
public class CultureSettings : Page{
public void InitializeCulture(string culture)
{
String selectedLanguage;
if(culture == null)
{
selectedLanguage = "pl";
}
else
{
selectedLanguage = culture;
}
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
base.InitializeCulture();
}
}
Establece CultureInfo correctamente. Ahora quiero (de acuerdo con CultureInfo actual) cambiar las rutas para cada enlace de navegación y cambiar el patrón de ruta desde mysite.com/PL/{controller}/{action} a mysite.com/EN/{controller}/{action}.
¿Alguien tiene alguna idea o mejor enfoque para este problema? Pero la condición es que la dirección debe verse como esta mysite.com/EN o mysite.com/PL - no diferente (es decir, en.mysite.com)
¡muchas gracias! ¡Probaré este enfoque! – lukaleli
y también tengo otra pregunta para usted porque no está funcionando:/ No sé por qué, pero creo que las rutas no se configuran después de que se inicia la aplicación. Hay un error: Error del servidor en la aplicación '/'. El recurso no se puede encontrar. Descripción: HTTP 404. El recurso que está buscando (o una de sus dependencias) podría haberse eliminado, haber cambiado su nombre o no estar disponible temporalmente. Revise la siguiente URL y asegúrese de que esté escrita correctamente. URL solicitada:/ ¿Alguna idea? Soy totalmente novato en ASP.NET y MVC – lukaleli
Ok, está funcionando ahora. Olvidé cambiar el nombre del controlador;) – lukaleli