Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理异常消息的翻译?_C#_Exception - Fatal编程技术网

C# 如何处理异常消息的翻译?

C# 如何处理异常消息的翻译?,c#,exception,C#,Exception,我真的不知道在多语言应用程序中处理异常的最佳方法 我应该在哪里处理错误消息(Exception.message)的翻译 我是否应该在抛出异常后立即在ctor中翻译消息 throw new MyException("Error message", Resource.MyException_TranslatedMessage); 或者我抛出异常并使用自制的助手,该助手将使用视图逻辑中的异常类型查找错误消息 try { //... } catch(Exception ex) { my

我真的不知道在多语言应用程序中处理异常的最佳方法

我应该在哪里处理错误消息(
Exception.message
)的翻译

我是否应该在抛出异常后立即在ctor中翻译消息

throw new MyException("Error message", Resource.MyException_TranslatedMessage);
或者我抛出异常并使用自制的助手,该助手将使用视图逻辑中的异常类型查找错误消息

try
{
    //...
}
catch(Exception ex)
{
    myLabel.Text = new ExceptionTranslator(ex).Translate();
}
或者,微软是否提供了这样做的工具或机制


一句话:处理异常消息翻译的好方法是什么?

最好只在需要显示时进行翻译,IMHO。 这适用于任何可本地化字符串,而不仅仅是错误消息


理想情况下,代码的逻辑不应该关心消息的内容或语言,它只关心异常的类型。只有表示层(可能)需要以本地语言显示它。

外部代码不应翻译消息

throw new MyException("Error message", Resource.MyException_TranslatedMessage);

在我看来,这是最好的解决方案

大多数例外情况都是出于技术目的,除非您的操作和维护团队也位于不同的国家/地区,否则这些例外情况应该只是以编写和维护应用程序的人员的语言显示消息

.NET framework包含本地化的异常消息。对于作为开发人员的我来说,这很烦人,因为我的本地语言(荷兰语)中的异常消息没有原始的英语异常消息那么重要。然而,微软将这些框架异常消息本地化似乎是合理的,因为它们的目标受众可以位于任何地方

但是,某些类型的异常会显式抛出以显示给用户。这些是您的
ValidationException
BusinessLayerException
。他们的清晰合同将显示给用户。当然,您应该本地化这些异常消息,但在抛出异常时,从本地化资源中提取异常消息通常比翻译它们好得多,也更容易:

throw new ValidationException(Resources.InvalidUserName);

提示:永远不要向用户公开异常:)最好尝试让翻译经理翻译您自己的消息只是一个问题:当应用程序配置为中文(我完全不懂的语言;)时,如何将其登录到文件中。不会记录向用户显示的异常(即ValidationException)。它们不是错误,但您可以使用它们快速、安全地中断操作。通常只应记录技术异常。有两种类型的异常是一个好主意:开发人员异常和最终用户异常,这种想法似乎没有一点混乱,因为对异常的一般理解仅用于技术用途?