【问题标题】:Suggestions for Localising Exceptions本地化异常的建议
【发布时间】:2008-11-13 20:01:44
【问题描述】:

我需要为我的应用程序抛出的异常添加本地化,​​因为很多是 ApplicationExceptions 并处理并记录到错误报告中。理想情况下,我想创建一个新的异常,继承自 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() 作为第一行 消息是只读的

关于如何将本地化字符串放入异常处理程序,是否有人有任何建议?我将在一些不同的异常中需要它,尽管可以采用获取本地化字符串并创建异常的异常创建函数的方式,尽管堆栈信息将是错误的。我也不希望在 Throw 之前的主体中包含太多内容,因为它显然开始影响流程的可读性。

【问题讨论】:

    标签: .net vb.net exception localization


    【解决方案1】:

    这是我所做的一个示例。 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); }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      看看这个:

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

      我不必处理本地化问题,但这很有意义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 2010-10-24
        相关资源
        最近更新 更多