Windows Presentation Foundation
.NET Framework 的一部分,它提供统一的编程模型,用于在 Windows 上构建业务线桌面应用程序。
131 个问题
我设计了一个wpf程序来验证.net的异常抛出是否支持本地化的语言。在我搜集资料时获得信息:
如果不需要对异常消息进行特殊处理,只要按照正常方式编写和处理异常代码,.NET 框架会根据操作系统的区域设置自动本地化异常消息。
于是我编写了以下代码在win11中文系统上运行
using System;
using System.Globalization;
using System.Threading;
using System.Windows;
namespace LanguageException
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
// 触发一个除以零的异常
int result = 10 / int.Parse("0");
}
catch (Exception ex)
{
// 显示异常消息
MessageBox.Show(ex.Message, "Exception Message", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}
我进行了debug发现culture确实设置为了zh-CN,但是异常消息仍然是英文的
请问这是什么原因导致的?
您好,.NET 的异常消息(如“试图除以零”)通常是硬编码的,可能无法根据当前文化设置进行本地化。异常消息的本地化取决于 .NET 运行时及其资源。.NET 包含许多你可以使用的不同异常。 但是,如果它们都无法满足你的需要,则可以创建自己的自定义异常。
如果本地化对您的应用程序至关重要,请考虑实施自定义异常处理以自行提供本地化消息。
private void Button_Click(object sender, RoutedEventArgs e)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CN");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
try
{
int result = 10 / int.Parse("0");
}
catch (Exception ex)
{
string localizedMessage = GetLocalizedExceptionMessage(ex);
MessageBox.Show(localizedMessage, "Exception Message", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private string GetLocalizedExceptionMessage(Exception ex)
{
if (ex is DivideByZeroException)
{
return "除数不能为零。";
}
return ex.Message;
}
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。