我如何(在ASP .NET MVC中)获取当前访问者的CultureInfo(基于他/她的浏览器语言)?从当前访问者获取CultureInfo并根据该资源设置资源?
我不知道从哪里开始。我试图查看浏览器发送的“Accept-Languages”头。但是,这是做到这一点的最佳方式吗?
我如何(在ASP .NET MVC中)获取当前访问者的CultureInfo(基于他/她的浏览器语言)?从当前访问者获取CultureInfo并根据该资源设置资源?
我不知道从哪里开始。我试图查看浏览器发送的“Accept-Languages”头。但是,这是做到这一点的最佳方式吗?
Request.UserLanguages是你正在寻找的财产。请记住,该数组可能包含由请求标头设置的任意(甚至非外部)语言。
UPDATE
例子:
// Get Browser languages.
var userLanguages = Request.UserLanguages;
CultureInfo ci;
if (userLanguages.Count() > 0)
{
try
{
ci = new CultureInfo(userLanguages[0]);
}
catch(CultureNotFoundException)
{
ci = CultureInfo.InvariantCulture;
}
}
else
{
ci = CultureInfo.InvariantCulture;
}
// Here CultureInfo should already be set to either user's prefereable language
// or to InvariantCulture if user transmitted invalid culture ID
您可以使用类似于下面的代码从您的用户(包括语言)得到各种细节:
MembershipUser user = Membership.GetUser(model.UserName);
string browser = HttpContext.Request.Browser.Browser;
string version = HttpContext.Request.Browser.Version;
string type = HttpContext.Request.Browser.Type;
string platform = HttpContext.Request.Browser.Platform;
string userAgent = HttpContext.Request.UserAgent;
string[] userLang = HttpContext.Request.UserLanguages
我打标这个问题与自己一个明星,并在这里分享一些代码,本质上将Request.UserLanguages
变成一个CultureInfo数组以便在您的应用程序中进一步使用。这也更加灵活与CultureInfo的工作不仅仅是ISO代码,因为CultureInfo的您可以访问一个文化的所有属性(如名称,两个字符的语言名称,本地名称,...):
// Create array of CultureInfo objects
string locale = string.Empty;
CultureInfo[] cultures = new CultureInfo[Request.UserLanguages.Length + 1];
for (int ctr = Request.UserLanguages.GetLowerBound(0); ctr <= Request.UserLanguages.GetUpperBound(0);
ctr++)
{
locale = Request.UserLanguages[ctr];
if (!string.IsNullOrEmpty(locale))
{
// Remove quality specifier, if present.
if (locale.Contains(";"))
locale = locale.Substring(0, locale.IndexOf(';'));
try
{
cultures[ctr] = new CultureInfo(locale, false);
}
catch (Exception) { continue; }
}
else
{
cultures[ctr] = CultureInfo.CurrentCulture;
}
}
cultures[Request.UserLanguages.Length] = CultureInfo.InvariantCulture;
HTH
var userLanguage = CultureInfo.CurrentUICulture;
这从服务器而不是客户端浏览器获取当前文化 – 2015-03-01 08:40:54
什么类型的值不会这些头通常含有?例子将是很好的工作。 – 2012-02-23 13:41:36
Quote:'通常这些由两个字符的代码为文化,如美国英语的“en-us”和加拿大法语的“fr-ca”的语言,连字符和双字符代码。 '。所以它是一个包含这些值的'string []'数组。 – 2012-02-23 13:44:19
添加了一个示例。 – 2012-02-23 13:50:16