在欧洲国家/地区首次加载IE11 / Edge时,HttpContext.Current.Request.UserLanguages为NULL

时间:2019-02-12 15:02:26

标签: c# internet-explorer-11 microsoft-edge

我支持一个应用程序(c#/ asp.net),该应用程序通过多个欧洲国家的.Resx文件使用多种语言。最近,一些用户升级到Windows 10,因此又升级到Internet Explorer11。现在,当他们加载该应用程序时,它将默认主页面设置为en-US,并且当他们转到一个调用引用了HttpContext.Current.Request.UserLanguages[0]的函数的页面时,以NULL的形式返回,从而导致崩溃,并出现NULL参考错误。

如果他们以任何方式更改语言设置(添加,删除或向上或向下移动语言),则HttpContext.Current.Request.UserLanguages[0]将使用该顶级语言进行填充。但是,一旦他们重新启动计算机并重新打开IE11,则该字段将再次为NULL,直到他们再次更改其设置。

如何在重启后每次打开IE11时不让用户更改语言设置而设置/检测正确的语言?

此错误在Chrome中不会发生,但是某些用户可能无法访问Chrome。

我从过去的研究中发现的笔记,目前在我的项目中:

所有页面都有Culture="auto"UICulture="auto"

首次加载应用程序时,System.Threading.Thread.CurrentThread.CurrentUICulture = en-US(而不是默认语言); (CurrentCulture也一样-两者都初始设置为en-US

更改语言设置后,System.Threading.Thread.CurrentThread.CurrentUICulture会更改为其设置的语言(例如:fr-CH用于法语);

总结:当Request.UserLanguages为NULL且CurrentThread.CurrentUICulture默认为en-US而非系统语言时,如何为用户检测IE11的语言设置?是否有使用Request.UserLanguages的解决方法?

我有一个用户进入Edge进行尝试,并发生了同样的问题。该应用程序未采用当地的文化/语言-例如,默认默认为en-US,而不是en-UK或fr-CH。同样,该应用程序经过编码以检查不同的区域性,以区域性格式显示日期,因此对于欧洲,需要DD / MM / YYYY格式,而美国则需要-MM / DD / YYYY;货币也不同。因此,我需要能够在Windows 10中检测正确的区域性,而无需用户更改其语言设置来设置HttpContext.Current

0 个答案:

没有答案