2009-03-31 10 views
4

カスタム例外を投げたり、エンドユーザーにメッセージを発行するときに、文字列(文字列定数を含む)をハードコードしたり、リソースのみのアセンブリを使用したり、データベースのテーブルから文字列を取得することができます。ベストプラクティス:国際化のためにC#.netに例外/エラーまたは情報メッセージを格納する最良の方法は何ですか?

私のアプリケーションは、再コンパイルすることなく簡単に別の言語に切り替えることができるようにしたいと思います。文字列リソースをアセンブリまたはデータベースに格納すると、この目的が達成されますが、プログラムロジックの複雑さが増し、その結果、製品のコストが増加します。

私の質問は:各オプションに付随するコストを無視せずに目的を念頭に置いていく最良の方法は何ですか?リストされているものより優れている練習があるなら、それを聞いてみたいと思います。

技術: OS:Windowsの家族 プラットフォーム:.NETフレーム2とアップ 言語:C# データベース:MS SQL 2005とアップ

みんなありがとう!

カレン

答えて

4

利用資源:

どのようにこれは、プログラムロジックに多くの複雑さを加えるのでしょうか?

try 
{ 
    //do something with System.Net.Mail with invalid email.. 
} 
catch (FormatException fex) 
{ 
    throw new Exception(Resources.ErrorMsg.Invalid_Email, fex); 
} 

編集

VS2008では、リソースを作成するときに、内部または公共の場合は、定義することができます。

InvalidErrorは、エラーの名前ですClassLibrary1.Properties.Resources.InvalidError

:だからClassLibrary1のと呼ばれるアセンブリでは、我々は次のようにプロパティにアクセスすることができ、我々は公衆にそれを設定すると仮定します。繰り返しますが、これは論理に迫っているとは思わない。ジョシュはVS2008は、これらのリソースにアクセスするにはすてきなタイプセーフのラッパーを作成します指摘したように基本的に

<default resource file name>.<culture>.resx 

+0

私のソリューションは、したがって、複数のアセンブリ、複数のプロジェクトが含まれています。アイデアの1つは、リソース専用のアセンブリを作成して文字列を格納し、ResourceManagerを使用してアセンブリに接続し、文字列を読み取ることです。それは複雑さを増します。 –

+0

@Cullenツェリン:私はジョシュに同意する必要があり、設計者はあなたのためにこれのすべての世話をし、あなたがしなければならないすべては彼のようにそれにアクセスするように、リソースファイル内の文字列を公開してきれいに型指定されたクラスを作成しますサンプル。コメントは、あなたがデザイン時サポート – casperOne

+0

casperOneを試していない示しています。あなたがデザイン時サポートに手の込んだことができますしてください? –

2

.NETはすでに命名規則を使用して複数の文化のために複数のリソースをサポートしています。

しかし、VSのUIはあなたができることの最低限度を公開しています。

デフォルトとまったく同じ新しいリソースファイルを作成する場合は、resxの前にカルチャ情報を追加します。

リソースをアクセスしているスレッドにカルチャを適用した場合、アプリケーションは特定のリソースから正しい文字列を取得します(アプリケーションを作成する必要があります)。例えば

// Using the default culture 
    string s = Resources.Error1Msg; 

    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-CO"); 

    // Using the specific culture specified as above: 
    s = Resources.Error1Msg; 

あなたは、あなたのメッセージをパラメータ出力をパラメータ化するString.Formatのを使用する必要がある場合。注意の

一つの単語が(エラーを記述するために)あなたの例外が豊富なペイロードを運ぶように建築家に、アプリケーション層を試してみてください、代わりのテキストだけに頼っています。道プレゼンテーション層はペイロードを利用かもしれない最高のUIの経験を提示することができます

HTH

フィリップ

+0

有益なコメントをいただきありがとうございました。 –

関連する問題