データベースでローカライズされた文字列を定義し、ログ メッセージの ID をログ テーブルに記録するだけです。ログ メッセージ テーブルには、言語を示すフィールドも含まれます。
多くのロギングを行っている場合は、ログのサイズも縮小されます (最新のコンピューターで利用可能なストレージ スペースを考えると、おそらく関係ないかもしれませんが ;-)
この方法には 2 つの問題があります。
- アプリケーションのロギングをログ メッセージ テーブルと同期する必要があります。
- 動的データ (顧客名など) をログに記録することはできません。
最初のポイントは、わかりやすい名前の列挙型を使用して処理できます。
enum LogMessages
{
OutOfDiskSpace = 1;
OutOfMemory = 2;
OutOfCoffee = 3;
}
アプリでは、次void LogToDatabase(LogMessages)
のように呼び出します。
// forgot to buy coffee again!
Log(OutOfCoffee);
2 番目の問題は、さらに作業が必要です。使用できるように文字列を定義できますstring.Format()
。
string.format("{0} forgot to buy coffee again. Lazy geek!", "I");
// yields: "I forgot to buy coffee again. Lazy geek!"
このためには、バリエーション データ (「私」、「あなた」、「私の弟」など) をログ メッセージ ID と共にログ テーブルに保存する必要があります。(または、もう少し正規化して 3 番目のテーブルに入れますが、それは正規化が時期尚早である可能性があります ;-)。