シナリオ
.NET/WPF デスクトップ アプリケーションは、英語とは異なる言語にローカライズ (MS 用語ではglobalized ) する必要があります。つまり、UI を完全に採用する必要があります (ラベル、アイコンなど)。
ただし、ログ ファイル エントリ、監査証跡エントリ、およびアプリケーションのその他の出力は、英語を話すサービス/サポート担当者がレビューできるように、英語のままにしておく必要があります。彼らはフランス語も中国語も話せません。
アプリケーションは、ローカリゼーションを実行するために RESX ファイルに依存しています。
Enterprise Library Validation Block は、オブジェクト モデルのビジネス ルールの検証に使用されます。
ここで、実際のビジネス ロジックを実行する前に、指定されたオブジェクト モデルの引数を検証するサービスがあるとします。状況によっては、無効なオブジェクト モデル引数を受け取りますが、ベスト エフォートで実行を続行します。ただし、無効なオブジェクト モデル データの提供は、監査証跡とログ ファイルに記録する必要があります。
検証ブロックを使用したサービスの例。
public class Service : IService
{
public void MyMethod(MyObjectModelObject obj)
{
Validator validator = ValidationFactory.CreateValidator(typeof(MyObjectModelObject));
ValidationResults results = validator.Validate(this);
// !!! The messages in the validation results are now already localized to CurrentCulture.
// ... build a log message: msg
if (results.Count > 0)
{
Logger.Log(msg);
}
}
}
コードのコメントで述べたように、EnterpriseLibrary バリデーターで Validate() を呼び出した場合、検証メッセージは既にフランス語にローカライズされており、英語のログ ファイルなどに書き込む機会がありません。
アプリケーションの他の領域では、実際の文字列値を解決するために使用するカルチャが特定されるまで、リソース ID とパラメーターをカプセル化するメッセージ クラスを使用します。延期されたリソース解決と呼ぶことができます。
Enterprise Library Validation ブロックに同様のメカニズムを導入する方法はありますか? これまでのアイデア:
- CurrentCulture を一時的に切り替える (私はそれが気に入らず、問題の半分しか解決しません)
- Enterprise Library Validation Block にパッチを適用します (これも好きではありません)。
ご協力いただき、アイデアを共有していただきありがとうございます。