如何处理异常消息的翻译

本文关键字:异常 消息 翻译 处理 何处理 | 更新日期: 2023-09-27 18:25:58

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

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

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

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

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

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

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

总之:处理异常消息翻译的良好做法是什么?

如何处理异常消息的翻译

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

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

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

throw new ValidationException(Resources.InvalidUserName);

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

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

外部代码不应转换消息

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

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