我遇到了一个使用内置全球化设施的ASP.NET应用程序崩溃的情况。
在具有Culture =“auto”指令的ASP.NET页面上,具有中性文化作为其浏览器语言的用户(例如“zh-Hans”)将产生以下异常:
文化'zh-Hans'是一种中性文化。它不能用于 格式化和解析因此 不能设置为线程的当前 培养
在System.Globalization.CultureInfo.CheckNeutral(CultureInfo 文化) 在System.Threading.Thread.set_CurrentCulture(CultureInfo 值) 在System.Web.UI.Page.set_Culture(String 值) 在ASP.somePage_aspx .__ BuildControlTree(somePage_aspx __ctrl) 在ASP.somePage_aspx.FrameworkInitialize()
有什么想法吗?输入Culture / UICulture参数的垃圾通常似乎被忽略了,但是这种情况导致了未处理的异常。
答案 0 :(得分:6)
我遇到了同样的问题,将我的头撞在墙上一段时间后,我的鼻子下面找到了答案。
我遇到的问题是没有理解 CurrentCulture 和 CurrentUICulture 之间的区别。区别在于 CurrentCulture 用于格式化日期,数字和执行排序, CurrentUICulture 用于从资源中查找特定于文化的字符串。
我有一些看起来像
的代码return input.ToString("C", System.Globalization.CultureInfo.CurrentUICulture);
什么时候应该
return input.ToString("C", System.Globalization.CultureInfo.CurrentCulture);
当您开始尝试使用非特定文化格式化特定于文化的项目时,您将获得System.NotSupportedException。
答案 1 :(得分:3)
首先,您可以考虑在<%@ Page%>中设置UICulture =“auto”以及Culture =“auto”声明。
现在,我没有在我的.NET 4.0(beta)安装上看到这个问题,所以这可能是.NET 3.5中的产品错误。
这是学习中性文化以及UICulture与文化之间差异的重要资源:http://blogs.msdn.com/ddietric/archive/2008/02/05/yacvcp-yet-another-currentculture-vs-currentuiculture-post.aspx
希望这有帮助。
答案 2 :(得分:2)
你不能在开始请求时设置文化吗? (注意:asp.net请求可以在线程之间跳转,因此你需要挂钩移动的线程。)