Предложения по локализации исключений - PullRequest
0 голосов
/ 13 ноября 2008

Мне нужно добавить локализацию к исключениям, выдаваемым моим приложением, поскольку многие из них являются 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, поскольку он, очевидно, начинает влиять на читаемость потока.

Ответы [ 2 ]

2 голосов
/ 13 ноября 2008

Вот пример того, что я делаю. 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); }
        }
    }
}
0 голосов
/ 01 декабря 2008

посмотрите на это:

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

Мне не нужно иметь дело с локализацией, но это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...