5

有沒有什麼好的方法來創建多語言Web應用程序的路線重寫?ASP.net MVC3多語種路線重寫


的URL模式應該是以下

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

,但沒有語言部分的URL也應予以支持,但他們不應該只映射到控制器直接而產生重定向響應。

這裏重要的是,重定向不應該被硬編碼爲爲一種特定的語言,但可以根據用戶喜好的語言等因素確定,如果可能的話。

注意:確定正確的語言的過程不是問題,只是如何做非靜態重寫。

謝謝

回答

4

我管理與以下路線;

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)" } 
     ); 

我通過重寫DefaultControllerFactory的GetControllerInstance()方法來處理文化。下面的例子是;

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); 
} 

} 

並將其註冊到global.asax;

protected void Application_Start() { 

    //other things here 


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

+1,因爲它的工作原理 – noinstance 2011-07-01 16:34:58

+0

是有選擇不具有默認語言環境的語言/ – GorillaApe 2012-08-15 02:49:39

+0

也是它不正確的工作,因爲我與圖標 – GorillaApe 2012-08-15 02:53:19