关于异常本地化的建议

时间:2008-11-13 20:01:45

标签: .net vb.net exception localization

我需要为我的应用程序抛出的异常添加本地化,​​因为很多是ApplicationExceptions并处理并记录到错误报告中。理想情况下,我想创建一个新的Exception,从ApplicationException中继承我可以传递资源键和参数,以便可以从资源信息构建异常消息。不幸的是(我认为)在异常中设置消息的唯一方法是在New()...

我想要像:

public class LocalizedException
    Inherits ApplicationException  

public Sub New(ResourceKey as string, arg0 as Object)
    MyBase.New()
    ' get the localized text'  
    Dim ResMan as New Global.System.Resources.ResourceManager("AppName.ExceptionResources", _
    System.Reflection.Assembly.GetExecutingAssembly)
    Dim LocalText as string = ResMan.GetString(ResourceKey)
    Dim ErrorText as String = ""
    Try
        Dim ErrorText = String.Format(LocalText, arg0)
    Catch
        ErrorText = LocalText + arg0.ToString() ' in case String.Format fails'
    End Try
    ' cannot now set the exception message!'
End Sub
End Class

但是我只能将MyBase.New()作为第一行 消息是ReadOnly

有没有人对如何将本地化字符串放入Exception处理程序提出任何建议?我将在几个不同的异常中需要它,虽然可以采用异常创建函数的方式获取本地化的字符串并创建异常,但堆栈信息将是错误的。我之前在主体中也不需要太多,因为它显然会开始影响流量的可读性。

2 个答案:

答案 0 :(得分:2)

以下是我所做的一个示例。 EmillException继承自ApplicationException。


namespace eMill.Model.Exceptions
{
    public sealed class AccountNotFoundException : EmillException
    {
        private readonly string _accountName;

        public AccountNotFoundException(string accountName)
        {
            _accountName = accountName;
        }

        public override string Message
        {
            get { return string.Format(Resource.GetString("ErrAccountNotFoundFmt"), _accountName); }
        }
    }
}

答案 1 :(得分:0)

看看这个:

http://visualstudiomagazine.com/features/article.aspx?editorialsid=2562

我没有必要处理本地化,但这很有意义。