10

FileStream「ファイルを開く」ダイアログでユーザーが選択した、を使用してファイルを読み取るC#GUIアプリケーションについて考えてみます。

例外の1つで読み取りが失敗した場合、ユーザーフレンドリーな方法でユーザーに失敗を報告する正しい方法は何ですか?

これらの例外ごとに独自のメッセージを作成する必要がありますか、それとも、ユーザーに逐語的に提示できる、ローカライズされたユーザーフレンドリーなメッセージを取得する方法はありますか?

編集

.NET自体が、提示できる(そして他の.NETプログラムと一貫性のある)記述文字列を提供できるかどうかを尋ねています。私は自分でロールアップできることを知っていますが、標準的な代替手段がある場合はそれを避けたいと思います。

4

3 に答える 3

2

そのうちの 1 つが say である、一連のローカライズ可能なユーザー例外を設定できますFileUploadError。ローカライズされた一般情報をそこに置くことができます。技術的な詳細とユーザーがエラーを修正するために必要な簡単な手順との間で適切なバランスを取るのは非常に難しい場合があるため、いくつかの技術的な詳細を投げるのは少し難しいかもしれません。

私の提案は次のとおりです。

  1. 1 つのユーザー レベルを持つFileUploadErrorException
  2. その中に詳細プロパティがあります
  3. 実際の例外に応じて、いくつかのことを試すようユーザーに提案します
于 2012-07-01T16:26:30.927 に答える
1

.Net フレームワークのファイル クラスの 1 つによってスローされた例外をキャッチする場合、例外の.Messageプロパティの内容は既にローカライズされている可能性があります。プロパティには、.Messageローカライズされた人間が読めるテキストが含まれているはずです。それがどの程度「親しみやすい」かは人によると思いますが、より一般的で親しみやすい段落に埋め込むことができる何かが含まれている可能性があります。

AlertUserWithMessage()ユーザーにエラーを表示するためのメソッドを作成すると仮定すると、次のようにすると便利です。

try
{
    fileStream.Read(...);  // or some other operation
}
catch(Exception e)
{
    AlertUserWithMessage(e.Message);
}

サポート担当者が問題を診断するのに役立つ可能性がある追加情報を含めたい場合は、例外からスタック トレースを文字列として取得することもできます。

try
{
    fileStream.Read(...);  // or some other operation
}
catch(Exception e)
{
    AlertUserWithMessageAndStackTrace(e.Message, e.StackTrace);
}
于 2012-07-01T16:41:19.290 に答える
0

例外メッセージは本質的に技術的なものであり、エンド ユーザーの問題を解決する方法とは対照的に、(実装レベルで) 何が問題だったかを説明します。一方、ユーザーに表示されるエラー メッセージの目的は、何が失敗したか、および問題を解決するためにどのようなアクションを実行するかを説明することです。例外メッセージとエンド ユーザー エラー メッセージは同じ目的を持っておらず、同じ対象者向けに書かれていません。

したがって、適切なユーザー エクスペリエンスを得るには、これらの例外を、問題を回避する方法に関するローカライズされたユーザー フレンドリーなアドバイスにマッピングすることをお勧めします。確かに、技術的なユーザーにとっては、例外の詳細を提供できる診断機能があると便利です (この場合、英語で例外メッセージを表示しても問題ありません。英語は実際には世界の技術言語です)。それらをすべての詳細を含むログに記録します。しかし、たとえローカライズされていたとしても、エンド ユーザーに例外メッセージをスローするだけでは、彼らを困惑させる可能性があります。

このため、例外メッセージのローカライズはあまり役に立たないと思います。.NET フレームワークが主要な言語の例外メッセージをローカライズしているのは事実ですが、これらの言語をベース言語として使用し、必ずしも英語が上手ではない開発者がいるため、それ以上だと思います。したがって、これらのローカライズされた例外メッセージの対象者は依然として開発者であり、.NET で構築されたソフトウェア製品のエンド ユーザーではありません。

于 2012-07-02T13:05:15.053 に答える