我创建了两条这样的路线来执行本地化:
routes.MapRoute(
"Default", // Route name
"{language}/{controller}/{action}/{id}", // URL with parameters
new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default2",
"{language}/{controller}/{action}/{id}/{slug}",
new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional, slug = UrlParameter.Optional }
);
现在我遇到了两个问题:
默认www.mydomainname.com
不会自动将en
添加到网址。欲望结果:当我输入www.mydomainame.com
时,它应自动更改为www.mydomainname.com/en
。
当我改变文化时。如何通过该文化的language segment's value
替换路线上的默认TwoLetterISOLanguageName
?
请咨询
答案 0 :(得分:1)
这是一个近似的答案,所以我希望它能让你走上正轨。
CultureInfo.TwoLetterISOLanguageName是一个非静态字段,将取决于用户,因此您将不得不使用重定向来实现此目的(它不能在global.asax文件中设置)。
一种方法是当用户请求域名时,使用普通的默认路由将它们路由到家庭控制器
routes.MapRoute(
name: "TypicalDefault",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
在家庭控制器中,将它们重定向到正确的路径
public ActionReult Index(){
var routeDataDict = HttpContext.Request.RequestContext.RouteData.Values;
routeDataDict.Add("language", CultureInfo.TwoLetterISOLanguageName);
Response.RedirectToRoute(routeDataDict);
}