我支持一个应用程序(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
。