代码之家  ›  专栏  ›  技术社区  ›  Corey Trager

如何测试我的ASP.NET/SQL Server应用程序是否正确处理德国的小数?

  •  6
  • Corey Trager  · 技术社区  · 16 年前

    在美国,您使用“.”作为分隔符,但在德国,您使用“,”。我正在测试我的逻辑是否足够聪明,可以处理其中任何一个,但我似乎没能将我的Windows2000机器设置为德语模式。

    我去了控制面板,区域选项,并把“你的地区”改为“德国”。然后我重新启动了IIS和SQL Server。但我的改变似乎没有生效。

    这些行仍显示“.”作为分隔符。

    system.globalization.cultureinfo ci=新建 系统、全球化、文化信息( system.threading.thread.currenthread.currentCulture.name);

    response.write(ci.numberFormat.numberDecimalSeparator);

    我做错什么了?

    10 回复  |  直到 16 年前
        1
  •  6
  •   to StackOverflow    16 年前

    测试这一点的最佳方法是将全球化元素添加到web.config中,例如:

    <system.web>
       <globalization culture="de-DE" uiCulture="en-US" />
    </system.web>
    

    将区域性更改为de de de将影响日期和数字格式:如果需要,也可以更改uiculture,将uiculture保留为en-us意味着您将收到美式英语中的异常消息。

        2
  •  3
  •   Cerebrus    16 年前

    设置区域设置时,是否确保“将所有设置应用于当前用户帐户和默认用户配置文件”(高级选项卡)?

    在大多数情况下都应该这样做。我还假设你的文化在 globalization 元素 Web.config .

    似乎您不希望通过在代码中手动设置区域性设置来完成此操作,而是希望它们由系统设置继承。IMO是一种很好的检查方法,因为您的更改也应该传播到SQL Server。

        3
  •  1
  •   bobince    16 年前

    使网站处理格式问题(如小数点分隔符依赖于Web服务器的区域设置)通常是错误的。这就增加了一个服务器配置问题,这会使部署应用程序变得更加困难,但实际上并不一定要向最终用户提供他们想要的东西。例如,您可能希望将同一应用程序的法语和英语部署安装到单个应用程序(加拿大!)服务器。

    由于遗留问题(例如,仅在日语中工作的应用程序,或世界各地的生产服务器作为Windows__的标准版本运行en-US),将系统区域设置为不适当的内容也很常见。

    通常情况下,最好在应用程序层中处理这一点,每个站点代码部署都有一个区域设置选项,或者(如果需要)每个站点用户都有一个区域设置选项。然后任何人都可以登录到应用程序并获得适当的数字格式。

    最后,如果你的应用程序的界面是纯英语的,那么它可能更适合坚持英语数字格式。德国人会习惯的,事实上 更多 将英语和德语的UI约定混合在一起会令人困惑。IMO:彻底定位,或者根本不定位。

        4
  •  0
  •   Dmitri Nesteruk    16 年前

    我想你想要的是格式标签(第一个)。

        5
  •  0
  •   Nathan Koop    16 年前

    你可以把你现在的文化设定为德语。

    我认为这比切换区域设置更容易

        6
  •  0
  •   Chris Brandsma    16 年前

    如果你真的想打这个…虚拟机是你的朋友。 但是你真的需要订阅一个msdn来获得操作系统的德语版本。

    将操作系统(WinXP或Vista)加载到虚拟机中,然后浏览到网站。

        7
  •  0
  •   Dave Swersky    16 年前

    我不认为IIS使用区域设置。您需要在代码中明确地设置CultureInfo。

        8
  •  0
  •   Jeramy Rutley    16 年前

    如果您只是测试一次,您可以将行更改为:

    System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("de-DE");
    

    然后再换回来。如果你想做一些单元测试,你可以使用这样的字符串。

        9
  •  0
  •   Steve    16 年前

    我可以澄清一点吗,你想让你的机器进入德语模式来测试你的web应用程序,它恰好和浏览器运行在同一台机器上?

    当这是真正的运行时,我们可以假设服务器可以在德国以外的地方(或者可能在德国,但是在一台设置了美国区域设置的机器上)托管-这经常发生。如果是这样,那么在服务器上设置区域性并不是您真正想要的,而且在部署时您可能无法做到这一点。

    你还有另一个问题,没有一种简单的方法可以检测出你的用户想要使用哪种文化。您可以从HTTP头中检测到各种信息,对IP地址进行域查找,但是如果一个德语使用者想要使用您在美国的站点,或者一个美国人在德国,想要看到“.”而不是“,”作为十进制分隔符呢?

    换一种说法,我是说,不管你的客户电脑使用的是什么文化,这都无关紧要,因为一旦你浏览了网页,所有的赌注都被取消了,即使你的应用程序正确地检测到了你的文化,它也可能不是你的用户想要的!

    所以,我这样做的方法是询问用户他们想要什么语言,然后在运行时显式地设置应用程序中的区域设置。这确实意味着要求用户选择语言,但这是确保为用户使用正确语言环境的唯一方法。如果你所有的用户都是德国人,那么你就不必问了,你可以硬编码。如果他的方法听起来可行,那么这里有一些很好的示例代码: http://msdn.microsoft.com/en-us/library/bz9tc508.aspx .

    祝你好运,或者更确切地说,祝你好运!

        10
  •  0
  •   silverfighter    16 年前