检测我得到这个代码,获取由用户设置的浏览器语言:无效的语言名称上的浏览器
string cultureName = string.Empty;
try
{
string[] languages = HttpContext.Current.Request.UserLanguages;
cultureName = languages[0].ToLowerInvariant().Trim();
}
catch
{
cultureName = "en-US";
}
System.Globalization.CultureInfo browserCulture = CultureInfo.CreateSpecificCulture(cultureName);
System.Threading.Thread.CurrentThread.CurrentCulture = browserCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = browserCulture;
我得到了这些错误:
Culture name 'name' is not supported
:从我们的错误日志,发现名称是x-ns1xs4m8wixnxg
,x-ns1dfk__jmpnx0
等。我不知道这些语言来自哪里,或者它们是什么,但我认为从移动设备浏览时会检索到这些语言。The name 'name' contains characters that are not valid for a Culture or Region
:还发现,名字是fr; q=1.0
,en;q=1.0
,en_us
,en;q=0.9
,等等......我想,我应该分析它每个字符,看它是否是一个有效的
我已经修改了我的代码来处理这些错误:
CultureInfo cultureInfo;
try
{
string[] languages = HttpContext.Current.Request.UserLanguages;
string cultureName = languages[0].ToLowerInvariant().Trim();
cultureInfo = CultureInfo.CreateSpecificCulture(cultureName);
}
catch
{
cultureInfo = CultureInfo.CreateSpecificCulture("en-US");
}
System.Globalization.CultureInfo browserCulture = cultureInfo;
System.Threading.Thread.CurrentThread.CurrentCulture = browserCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = browserCulture;
,但我想知道这些语言来自何处,或如何复制呢?这是为了验证我的代码是否正常工作。谢谢。
感谢您的回答,我会在这一个上注明。顺便说一句,除了'fr; q = 1.0'语言,有时我会检索像'en_us'这样的语言,它会生成'error 2',看起来像解析';'不是我的选项 – KaeL
只是为了验证这个:“所以,你应该把这个值分割成_';'_and得到第一个bit._“,我知道这种方式会起作用,但我们有多确定,'language'将始终在第一位?并考虑格式,我会总是检索'头值'''''作为属性分隔符?谢谢:) – KaeL
我们绝对乐观。第一位是实际的标题值。之后的一切都是属性。 –