ASP.NET全球化:Culture =“auto”页面指令,中性文化崩溃?

时间:2009-08-21 23:32:09

标签: asp.net globalization cultureinfo

我遇到了一个使用内置全球化设施的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参数的垃圾通常似乎被忽略了,但是这种情况导致了未处理的异常。

3 个答案:

答案 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请求可以在线程之间跳转,因此你需要挂钩移动的线程。)