【发布时间】:2013-04-27 00:32:28
【问题描述】:
对于以英语为唯一语言的 Windows 版本安装的人来说,这个“问题”可能很难测试/重现。我在安装了“丹麦语(丹麦)”("da-DK" 文化)、.NET 4.5 版的 Windows 7 机器上执行此操作。
我遇到了以下令人惊讶的行为。代码:
Console.WriteLine("Now using intalled UI culture");
Thread.CurrentThread.CurrentUICulture = CultureInfo.InstalledUICulture;
Console.WriteLine(new ArgumentNullException().Message);
Console.WriteLine(new ArgumentOutOfRangeException().Message);
Console.WriteLine();
Console.WriteLine("Now using invariant culture");
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
Console.WriteLine(new ArgumentNullException().Message);
Console.WriteLine(new ArgumentOutOfRangeException().Message);
产生以下输出:
Now using intalled UI culture
En værdi må ikke være null.
Det angivne argument lå uden for det gyldige værdiområde.
Now using invariant culture
Value cannot be null.
Det angivne argument lå uden for det gyldige værdiområde.
说明:在第一部分中,当 UI 线程是丹麦语时,我们看到了两条本地化异常消息。但在第二部分中,我们看到一条英文(“不变”)消息和一条丹麦文消息,即使 UI 文化不再与丹麦文相关。
我也尝试了很多其他 mscorlib 异常类,看起来只有 System.ArgumentOutOfRangeException 不尊重 UI 文化的变化。
为什么ArgumentOutOfRangeException 在这方面与其他异常不同?
(如果其他人(其他版本的操作系统和框架,和/或其他语言)看到相同的行为会很有趣。)
PS!将以下行粘贴到同一台机器上的 PowerShell(针对另一个 .NET 版本)中会出现ArgumentOutOfRangeException?!
[Threading.Thread]::CurrentThread.CurrentUICulture = [Globalization.CultureInfo]::InstalledUICulture; New-Object ArgumentNullException;
[Threading.Thread]::CurrentThread.CurrentUICulture = [Globalization.CultureInfo]::InstalledUICulture; New-Object ArgumentOutOfRangeException;
[Threading.Thread]::CurrentThread.CurrentUICulture = [Globalization.CultureInfo]::InvariantCulture; New-Object ArgumentNullException;
[Threading.Thread]::CurrentThread.CurrentUICulture = [Globalization.CultureInfo]::InvariantCulture; New-Object ArgumentOutOfRangeException;
(保留较长的行以确保每行的两个语句都由 PowerShell 在同一个线程上执行。)
【问题讨论】:
标签: c# .net exception localization internationalization