【问题标题】:How to define the locale of an application in .NET如何在 .NET 中定义应用程序的语言环境
【发布时间】:2011-04-14 17:53:47
【问题描述】:

我有一个在 Windwos XP 下使用 Visual C++ 2008 Express Edition 开发的应用程序,它可以在一台计算机上正常运行,默认语言设置为英语。但是,如果在另一台使用默认语言德语的计算机上运行相同的应用程序,我会遇到麻烦,因为在使用 ToDouble 转换为双精度的过程中无法识别预定义的字符串 Infinity,因为在德语平台上该字符串应该是 @987654323 @。特别是 mscorlib 会正确抛出 FormatException

如何强制应用程序使用英语语言环境运行?我还没有找到任何选项...

感谢任何提示。

【问题讨论】:

    标签: visual-studio-2008 locale


    【解决方案1】:

    您可以使用以下命令将当前语言环境设置为英语:

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);
    

    这将在当前线程中强制使用美国英语。如果您在主 Windows 窗体线程中执行此操作,那么您的 UI 文化将始终是英语。请参阅http://msdn.microsoft.com/en-us/library/b28bx3bh(v=VS.100).aspx 了解更多信息。

    正如 Hans 在他的评论中指出的那样,这不会影响池线程,并且可能会导致一些难以发现的错误。事实证明,没有全局设置可以使每个线程都使用您定义的文化。如果您需要该功能,则必须进行自己的应用程序范围设置并确保所有线程都使用它。

    Globalizing Windows Forms 也值得阅读。

    【讨论】:

    • 它不会,运行 I/O 完成调用的线程池线程仍然会以系统语言运行。这可能会导致非常微妙且难以诊断的错误。例如,SortedList 突然不再排序。
    • 谢谢!太糟糕了,没有全局选项。不过,我会看看提到的链接。
    【解决方案2】:

    使用 Convert::ToDouble(str, System::Globalization::CultureInfo::InvariantCulture);

    【讨论】:

      【解决方案3】:

      Convert.ToDouble(stringValue, System.Globalization.CultureInfo.InvariantCulture);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-24
        • 2018-08-09
        • 1970-01-01
        • 2018-09-01
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多