Asp.net mvc 4 MVC5如何基于顶级域设置语言
我有一个单一的MVC5网站,可以通过几个不同的区域URL访问。在我的例子中.co.uk(代表英国),.de(代表德国)和.fr(代表法国) 站点内容使用RESX文件进行本地化,用户可以通过cookie进行持久化和HttpModule切换语言,HttpModule根据cookie(我使用的)设置asp.net线程区域设置 我希望默认语言与用户访问站点的顶级域相关。例如,如果用户在.de上,则默认语言应为de-de。用户可以选择更改语言,在这种情况下,默认语言将被覆盖,但默认语言适用于顶级域(对于用户和搜索引擎)非常重要 如何在MVC5中实现这一点?到目前为止,我所能做的最好的事情就是使用JavaScript检查url、设置cookie和刷新页面,但我知道这很糟糕,必须有更好的方法 PS:请注意,这是顶级域名,我想推动这一点。例如,我没有使用区域路由,或者Asp.net mvc 4 MVC5如何基于顶级域设置语言,asp.net-mvc-4,multilingual,resx,Asp.net Mvc 4,Multilingual,Resx,我有一个单一的MVC5网站,可以通过几个不同的区域URL访问。在我的例子中.co.uk(代表英国),.de(代表德国)和.fr(代表法国) 站点内容使用RESX文件进行本地化,用户可以通过cookie进行持久化和HttpModule切换语言,HttpModule根据cookie(我使用的)设置asp.net线程区域设置 我希望默认语言与用户访问站点的顶级域相关。例如,如果用户在.de上,则默认语言应为de-de。用户可以选择更改语言,在这种情况下,默认语言将被覆盖,但默认语言适用于顶级域(对于用
PPS:我也不想使用浏览器语言检测功能,因为这会给搜索引擎带来问题。i、 e.它可能导致.de站点以en GB显示,因为这是搜索引擎使用的语言(或者搜索引擎没有语言,因此这是默认语言)。如果发生这种情况,.de网站将被视为.co.uk网站的复制品,这对SEO从来都不好我知道怎么做了。将此添加到global.asax
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
if (Request.Cookies[Constants.LanguageCookieName] == null)
{
var culture = GetCultureFromHost();
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
}
}
private CultureInfo GetCultureFromHost()
{
//set default culture of en-GB
CultureInfo ci = new CultureInfo("en-GB");
//get top level domain
string host = Request.Url.Host.ToLower();
//check for other known domains and set culture accordingly
if (host.Contains("whatever.de"))
{
ci = new CultureInfo("de-DE");
}
return ci;
}
在我的例子中,我在global.asax中设置了波斯语cluture,效果很好
protected void Application_BeginRequest(object sender, EventArgs e)
{
var persianCulture = new PersianCulture();
persianCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
persianCulture.DateTimeFormat.LongDatePattern = "dddd d MMMM yyyy";
persianCulture.DateTimeFormat.AMDesignator = "صبح";
persianCulture.DateTimeFormat.PMDesignator = "عصر";
Thread.CurrentThread.CurrentCulture = persianCulture;
Thread.CurrentThread.CurrentUICulture = persianCulture;
}
您应该将解决方案添加为(您自己的问题的)答案,以供其他用户/将来参考。然后你可以接受自己的答案。