多くは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()しか使用できません。
ローカライズされた文字列を例外ハンドラーに取り込む方法に関する推奨事項はありますか?いくつかの異なる例外でこれが必要になりますが、ローカライズされた文字列を取得して例外を作成する例外作成関数の方法をとることができますが、スタック情報は間違っています。また、スローの前に本体を使いすぎないようにします。これは、フローの読みやすさに明らかに影響を及ぼし始めるためです。