9

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

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

我应该在抛出异常后立即翻译 ctor 中的消息吗?

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

或者我是否抛出异常并且我使用自制的助手,它将使用视图逻辑中的异常类型找到错误消息?

try
{
    //...
}
catch(Exception ex)
{
    myLabel.Text = new ExceptionTranslator(ex).Translate();
}

或者,微软是否提供了工具或机制来做到这一点?

一言以蔽之:处理异常消息翻译的良好做法是什么?

4

3 回答 3

15

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

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

但是,某些类型的异常会被显式抛出以显示给用户。这些是您的ValidationExceptionBusinessLayerException。他们的明确合同将显示给用户。当然,您应该本地化这些异常消息,但不是翻译它们,而是在抛出异常时从本地化资源中提取异常消息通常会更好、更容易:

throw new ValidationException(Resources.InvalidUserName);
于 2013-08-01T12:33:12.397 回答
2

恕我直言,仅在需要显示时才翻译要好得多。这适用于任何可本地化的字符串,而不仅仅是错误消息。

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

于 2013-08-01T12:28:16.147 回答
1

外部代码不应翻译消息

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

这是我心目中最好的解决方案

于 2013-08-01T12:32:53.280 回答