7

我遇到了一个使用内置全球化工具的 ASP.NET 应用程序崩溃的情况。

在具有 Culture="auto" 指令的 ASP.NET 页面上,使用中性文化作为浏览器语言(例如“zh-Hans”)的用户将产生以下异常:

文化“zh-Hans”是一种中性文化。它不能用于格式化和解析,因此不能设置为线程的当前文化。

在 System.Globalization.CultureInfo.CheckNeutral(CultureInfoculture) 在 System.Threading.Thread.set_CurrentCulture(CultureInfo value) 在 System.Web.UI.Page.set_Culture(String value) 在 ASP.somePage_aspx.__BuildControlTree(somePage_aspx __ctrl) 在 ASP .somePage_aspx.FrameworkInitialize()

有任何想法吗?输入 Culture/UICulture 参数的垃圾通常似乎被忽略,但这种情况会导致未处理的异常。

4

3 回答 3

6

我遇到了同样的问题,在我的头靠在墙上一段时间后,我在鼻子底下找到了答案。

我遇到的问题是不了解CurrentCultureCurrentUICulture之间的区别。不同之处在于CurrentCulture用于格式化日期、数字和执行排序,CurrentUICulture用于从资源中查找特定于文化的字符串。

我有一些看起来像的代码

return input.ToString("C", System.Globalization.CultureInfo.CurrentUICulture);

什么时候应该

return input.ToString("C", System.Globalization.CultureInfo.CurrentCulture);

当您开始尝试使用非特定文化格式化特定文化项目时,您将收到 System.NotSupportedException。

于 2009-11-03T03:46:00.370 回答
3

首先,您可以考虑在 <%@ Page %> 声明中设置 UICulture="auto" 和 Culture="auto" 。

现在,我在我的 .NET 4.0(测试版)安装中没有看到这个重现,所以这可能是 .NET 3.5 中的产品错误。

这是了解中立文化以及 UICulture 和 Culture 之间区别的绝佳资源:http: //blogs.msdn.com/ddietric/archive/2008/02/05/yacvcp-yet-another-currentculture-vs-currentuiculture-post .aspx

希望这会有所帮助。

于 2009-08-31T20:58:00.983 回答
2

您不能根据开始请求设置文化吗?(注意:asp.net 请求可以在线程之间跳转,因此您也需要挂钩到正在移动的线程。)

于 2009-08-26T18:49:46.827 回答