我需要根据Region在运行时更改文化。 我在web.config中进行了以下设置
<configuration>
<system.web>
<globalization culture="auto:en-US" uiCulture="fr" />
</system.web>
</configuration>
但我没有WebUtils ...... 建议我一个博客和一些想法..
答案 0 :(得分:1)
您不应该使用UserLanguages
来强化文化。相反,您应该put the culture in the URL,它允许用户选择使用哪种文化。
如果您的网站面向互联网,这意味着您的每种文化都将被编入索引并可以使用母语进行搜索。如果您的网站取决于浏览器的UserLanguages
设置,那么您的非默认文化将不会被编入搜索索引。
真实故事
我将浏览器的主页设置为MSN已有好几年了。然而,当我突然搬到泰国时,页面以泰语显示。那时,我读不懂泰语。
更糟糕的是,没有(明显的)方法从用户界面中选择语言。当我尝试将网址更改为
那是7年前的事。从那时起,我的主页已设置为Google。最近,我尝试使用MSN网站,仍然没有办法将其切换为英文。en-us
时,它会将我重定向回泰语页面。我找了很长时间,但找不到将页面切换回英文的解决方案。重点:始终让用户选择要查看的语言。
答案 1 :(得分:0)
您需要在Global.asax中添加此功能。它将获得文化。
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
string culture = null;
var request = HttpContext.Current.Request;
string cultureName = null;
// Attempt to read the culture cookie from Request
var cultureCookie = request.Cookies["_culture"];
if (cultureCookie != null)
cultureName = cultureCookie.Value;
else if (request.UserLanguages != null)
cultureName = request.UserLanguages[0]; // obtain it from HTTP header AcceptLanguages
culture = !string.IsNullOrEmpty(request.QueryString["culture"])
? request.QueryString["culture"]
: cultureName;
if (culture == null) return;
var cultures =
CultureInfo.GetCultures(CultureTypes.SpecificCultures);
if (cultures.Any(cultureData => cultureData.Name == cultureName))
{
var cultureInfo = CultureInfo.GetCultureInfo(culture);
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
else
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-IN");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN");
}
}