5

¿Hay algún buen método para crear la reescritura de ruta para una aplicación web multilingüe?ASP.NET MVC3 Reescritura de ruta multilingüe


El esquema URL debe ser el siguiente

http://<Domainname>/{Language}/{Controller}/{Action}/{Id}

pero URL sin la parte de idiomas también deben ser apoyadas, pero no sólo debe asignar a los controladores directamente, sino generar una respuesta de redirección.

Lo importante aquí es que el redireccionamiento no debe codificarse en un idioma específico, sino que se determinará en función de factores como el idioma preferido de los usuarios, si es posible.

Nota: El proceso de determinar el idioma correcto no es el problema, solo cómo hacer la reescritura no estática.

Gracias

Respuesta

4

he conseguido que, con las siguientes rutas;

routes.MapRoute(
      "Default", // Route name 
      "{language}/{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", language = "tr", id = UrlParameter.Optional }, // Parameter defaults 
      new { language = @"(tr)|(en)" } 
     ); 

I manejar la cultura reemplazando el método GetControllerInstance() de DefaultControllerFactory. el ejemplo está abajo;

public class NinjectControllerFactory : DefaultControllerFactory { 

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) { 

    //Get the {language} parameter in the RouteData 

    string UILanguage; 

    if (requestContext.RouteData.Values["language"] == null) { 

     UILanguage = "tr"; 
    } 
    else { 

     UILanguage = requestContext.RouteData.Values["language"].ToString(); 
    } 

    //Get the culture info of the language code 
    CultureInfo culture = CultureInfo.CreateSpecificCulture(UILanguage); 
    Thread.CurrentThread.CurrentCulture = culture; 
    Thread.CurrentThread.CurrentUICulture = culture; 

    return base.GetControllerInstance(requestContext, controllerType); 
} 

} 

y registrarlo en global.asax;

protected void Application_Start() { 

    //other things here 


    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 
} 
+0

+1, ya que funciona – noinstance

+0

es que hay posibilidad de no tener un lenguaje para la configuración regional predeterminada/ – GorillaApe

+0

también que no funciona bien porque me sale error con favicon – GorillaApe