2015-10-07 61 views
1

我跟着關於ASP.NET MVC 5國際化這篇大文章(由asp.net網站refered): http://afana.me/post/aspnet-mvc-internationalization.aspxASP.NET MVC 5國際化 - 文化八方通默認

實施後,我只有一個問題,我解決不了。 在MVC5中,使用網址中的文化(不使用cookie),文化總是默認的,永遠不會讓瀏覽器發送用戶偏好的語言。

詳細信息: 問題在於MapRoute中的文化默認設置,它以默認的硬編碼文化爲網站開始。然後在BeginExecuteCore中,RouteData.Values [「culture」]總是充滿默認文化,永遠不會從Request.UserLanguages獲得文化。 即使文化不存在於URL中,例如在第一次站點根訪問時,RouteData.Values [「culture」]也會被填充。

如何正確更改此行爲?

也許創造2條路線,一條沒有文化?

相關的代碼:

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

protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) 
{ 
    string cultureName = RouteData.Values["culture"] as string; 

    // Attempt to read the culture cookie from Request 
    if (cultureName == null)    
     cultureName = Request.UserLanguages != null && Request.UserLanguages.Length > 0 ? Request.UserLanguages[0] : null; // obtain it from HTTP header AcceptLanguages 
    //... 
} 

回答

0

我發現瞭解決方案,需要添加另一個圖路線(MVC的默認網站根目錄訪問),並COMENT文化路線的默認值,路線順序很重要,一切正常現在好:

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      //Route order is important! First need to put culture route. 

      //support for diferent languages/cultures 
      routes.MapRoute(
       name: "CultureEnabled", 
       url: "{culture}/{controller}/{action}/{id}", 
       defaults: new { /*culture = CultureHelper.GetDefaultCulture(),*/ controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

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