如何处理exception消息的翻译?

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

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

如果我抛出exception,我应该在ctor中翻译消息吗?

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

或者我抛出exception并使用自制帮助程序,它将使用View逻辑中的exception类型找到错误消息?

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

或者,Microsoft是否提供了这样做的工具或机制?

总之一句:处理exception消息翻译的好方法是什么?

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

.NET框架包含本地化的exception消息。 对于我作为开发人员来说,这非常烦人,因为我的本地语言(荷兰语)中的exception消息与原始英语exception消息的含义不同。 但是,微软将这些框架exception消息本地化似乎是合理的,因为它们的目标受众可以位于任何地方。

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

 throw new ValidationException(Resources.InvalidUserName); 

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

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

外部代码不应转换消息

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

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