【问题标题】:ASP.NET MVC 5 Internationalization - culture allways defaultASP.NET MVC 5 国际化 - 文化始终默认
【发布时间】:2015-10-07 22:16:58
【问题描述】:

我关注了这篇关于 ASP.NET MVC 5 国际化的精彩文章(由 asp.net 站点引用): http://afana.me/post/aspnet-mvc-internationalization.aspx

实施后,我只有一个问题无法解决。 在 MVC5 中,使用 urls 中的文化(不使用 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
     //...
}

【问题讨论】:

    标签: routes asp.net-mvc-5 globalization


    【解决方案1】:

    我发现了解决方案,需要添加另一个mapRoute(站点根访问的mvc默认值),并评论文化路由的默认值,路由顺序很重要,现在一切正常:

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

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 2011-09-07
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2013-04-01
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多