代码之家  ›  专栏  ›  技术社区  ›  Gabriel Isenberg

ASP.NET全球化:culture=“auto”带有中性文化崩溃的页面指令?

  •  7
  • Gabriel Isenberg  · 技术社区  · 15 年前

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

    在带有culture=“auto”指令的ASP.NET页面上,具有中性区域性作为浏览器语言的用户(例如“zh hans”)将产生以下异常:

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

    在system.globalization.cultureinfo.checkneutral(cultureinfo)中 文化) 在system.threading.thread.set上设置当前区域性(cultureinfo 价值) 在system.web.ui.page.set_culture(字符串 价值) 在asp.somepage_aspx.uubuildcontroltree(somepage_aspx_uuctrl) 在asp.somepage_aspx.frameworkinitialize()处

    有什么想法吗?向culture/uiculture参数馈入的垃圾通常似乎被忽略,但这种情况会导致未处理的异常。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Andrew Arnott    15 年前

    首先,您可以考虑在您的<%@page%>声明中设置uiculture=“auto”和culture=“auto”。

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

    以下是学习中性文化以及uiculture和culture之间差异的重要资源: http://blogs.msdn.com/ddietric/archive/2008/02/05/yacvcp-yet-another-currentculture-vs-currentuiculture-post.aspx

    希望有帮助。

        2
  •  6
  •   mjallday    15 年前

    我也遇到了同样的问题,当我的头撞到墙上一段时间后,我发现答案就在我的鼻子下面。

    我遇到的问题是不理解 当代文化 当前文化 . 区别在于 当代文化 用于格式化日期、数字和执行排序, 当前文化 用于从资源中查找区域性特定的字符串。

    我有一些代码看起来像

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

    应该是什么时候

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

    当您开始尝试使用非特定区域性格式化区域性特定的项时,您将得到System.NotSupportedException。

        3
  •  2
  •   Svante Svenson    15 年前

    不能在开始请求时设置区域性吗?(注意:ASP.NET请求可以在线程之间跳转,因此您还需要钩住正在移动的线程。)