我在新西兰工作,为一些罗马尼亚客户开发网络应用程序。当客户使用罗马尼亚机器查看时,应用程序应默认为ro-RO,而在此阶段,应用程序应默认为en-GB。问题是我用来测试的所有机器都默认为en-US。也就是说,Windows Azure欧洲数据中心的机器,新西兰的本地机器以及我通过RDP访问的罗马尼亚的各种机器。
所以我在控制器中使用此代码来根据用户默认值设置语言:
public static void OnBeginExecuteCore(Controller controller)
{
if (controller.RouteData.Values[Constants.ROUTE_PARAMNAME_LANG] != null &&
!string.IsNullOrWhiteSpace(controller.RouteData.Values[Constants.ROUTE_PARAMNAME_LANG].ToString()))
{
// set the culture from the route data (url)
var lang = controller.RouteData.Values[Constants.ROUTE_PARAMNAME_LANG].ToString();
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang);
}
else
{
// load the culture info from the cookie
var cookie = controller.HttpContext.Request.Cookies[Constants.COOKIE_NAME];
var langHeader = string.Empty;
if (cookie != null)
{
// set the culture by the cookie content
langHeader = cookie.Value;
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader);
}
else
{
// set the culture by the location if not specified
langHeader = controller.HttpContext.Request.UserLanguages[0];
if (langHeader.ToLower() == "en-us") langHeader = "en-GB";
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader);
}
// set the lang value into route data
controller.RouteData.Values[Constants.ROUTE_PARAMNAME_LANG] = langHeader;
}
// save the location into cookie
HttpCookie cultCookie;
cultCookie = new HttpCookie(Constants.COOKIE_NAME, Thread.CurrentThread.CurrentUICulture.Name)
{
Expires = DateTime.Now.AddYears(1)
};
controller.HttpContext.Response.SetCookie(cultCookie);
}
其中
langHeader = controller.HttpContext.Request.UserLanguages[0];
总是在美国。然而,该集合中实际上有3个条目:
但是ro显然没有正确加权。这在所有语言环境中的所有计算机上都是相同的。
Web配置中的全球化设置为auto:
<globalization requestEncoding="utf-8"
culture="auto"
uiCulture="auto"
区域窗口设置如下:
浏览器:
我怎样才能做到这一点?
答案
按照马丁斯的评论回答。问题是我在显然全世界的所有设置中都有这个。
当我真正想要的是Chrome中的 ...很快就会转到其他浏览器。
答案 0 :(得分:2)
确保您选择的浏览器(Internet Explorer,Chrome,Firefox,Safari等)已设置为将ro
指定为通过HTTP发送到服务器的用户语言中的第一种语言。
更新Windows和/或浏览器的用户界面语言不会必然导致非英语ISO代码被发送到服务器,这意味着你&#39 ; d让英语归还。
例如,在Firefox中,此设置可在选项 - &gt;内容 - &gt;语言 - &gt;选择下找到。