9

多言語アプリケーションで例外を処理する最善の方法がよくわかりません。

エラー メッセージ ( ) の翻訳はどこで処理すればよいException.Messageですか?

例外をスローしたらすぐに ctor のメッセージを翻訳しますか?

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

または、例外をスローし、ビューのロジックで例外のタイプを使用してエラーメッセージを見つける自家製のヘルパーを使用しますか?

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

または、Microsoft はそれを行うためのツールまたはメカニズムを提供していますか?

一言で言えば、例外メッセージの翻訳を処理するための良い方法は何ですか?

4

3 に答える 3

15

ほとんどの例外は技術的な目的で存在します。運用および保守担当者が別の国にいる場合を除き、これらの例外には、アプリケーションを作成および保守する人々の言語でメッセージを表示する必要があります。

.NET フレームワークには、ローカライズされた例外メッセージが含まれています。私のローカル言語 (オランダ語) の例外メッセージは、元の英語の例外メッセージほど意味がないため、開発者としての私にとっては非常に厄介です。ただし、Microsoft がこれらのフレームワークの例外メッセージをローカライズすることは合理的と思われます。対象となるユーザーはどこにでもいる可能性があるからです。

ただし、一部のタイプの例外は、ユーザーに表示するために明示的にスローされます。これらはあなたのValidationExceptionまたはBusinessLayerExceptionです。彼らの明確な契約はユーザーに表示されます。もちろん、これらの例外メッセージをローカライズする必要がありますが、それらを翻訳する代わりに、例外をスローするときにローカライズされたリソースから例外メッセージを取得する方がはるかに優れており、簡単です。

throw new ValidationException(Resources.InvalidUserName);
于 2013-08-01T12:33:12.397 に答える
2

表示する必要がある場合にのみ翻訳する方がはるかに優れています。これは、エラー メッセージだけでなく、ローカライズ可能なすべての文字列に適用されます。

理想的には、コードのロジックはメッセージの内容 (または言語) を気にするべきではなく、例外の種類のみに関心があります。ローカル言語で表示する必要があるのは、プレゼンテーション層だけです。

于 2013-08-01T12:28:16.147 に答える
1

外部コードはメッセージを翻訳すべきではありません

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

これは私の心の中で最善の解決策です

于 2013-08-01T12:32:53.280 に答える