2011-10-26 2 views
0

SQLデータベースにすべてのテキストを含むMVC 3アプリケーションがあります。テキストには、各言語の名前と値があります。私は、キャッシュオブジェクトにテキストを保存し、何らかの形でセッション変数に基づいて私のビューと私のコントローラにそれらを取得したい。MVC 3のキャッシュベースグローバリゼーション

私の最初の解決策は、オブジェクトTextHandlerをキャッシュに保存することでした。 TextHandlerには、名前(文字列として)や他の値でテキストを抽出するのに役立つテキストとメソッドがすべてあります。また、セッション変数に基づいてTextHandlerからテキストを取得するためのコントローラメソッドとヘルパーがあります。私はこの解決策に満足していません。

私はこれについていくつかのガイドを見つけましたが、本当に必要なのは、実際のコードではなく、それを行う方法に関するいくつかの指針です。

答えて

0

私はメモリ内のキャッシュに保存することができます(あなたが持っている言語と辞書の値に応じて、分散型またはローカル型のどちらでも)。

languagecode | nameキーを使用できます。値はその言語の単語です。

などですので、キーとしてheader_nameを使用し、値として「My Header」を使用することができます。

これらの値を保存できる上記のように、要件によって異なります。ローカルメモリに属していないと思う場合は、memcache構造体またはLRUキャッシュを設定して、最も人気の高い上位N値を保持し、キャッシュミスがあるとデータベースに移動します(あなたの辞書をすべての言語で含む)を使用して、名前と言語を指定した値を探します。

これは何とか役立ちます。

0

一般的な方法は、URLにコードを入力し、コントローラのパラメータとして使用することです。この言語コードは、データベースで照会している文字列に加えて使用されます。

リソース・ファイルを検討する場合は、ソリューションは、すでにあなたのために設定されています http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx

他の事は、ブラウザの要求が文化を設定したものに基づいています。この名前を使用してデータベースに照会します。 (How to pass CultureInfo to partialView for ajax call?から)カルチャ名

 
public static string GetCurrentCulture() 
{ 
    return Thread.CurrentThread.CurrentCulture.Name; 
} 

今単にリポジトリパターンを実装して、特定のキャッシュに行きます。 'language'と 'string'でクエリを実行すると、キャッシュにその文字列が存在するかどうかを確認します。そうであればそれを返し、それ以外の場合はデータベースにアクセスして取得します。これはリポジトリパターンを使用する大きな利点です。キャッシュの詳細は呼び出し側から削除されます。リソースファイルの実装に進むことに決めた場合は、文化サポートが組み込まれているので、これは必須ではありません。