0

私は既存の Web サイトの新しいプロジェクトに取り組んでおり、現在のローカリゼーション スキームは次のとおりです。

en_welcome.aspx
fr_welcome.aspx
de_welcome.aspx
es_welcome.aspx

そして、それぞれに重要なビジネス ロジックが含まれています。この理由は、周囲の唯一の永続メモリが SQLServer であり、それがすでに打ちのめされているため、ローカライズされた言語文字列を取得するための DB 呼び出しが歓迎されないためだと言われています。しかし、私たちの Web サーバーには大量の RAM があり、私たちのサイトは 12 ページほどしかありません。すべての言語文字列が 300kb をはるかに超えるとは思えないので、IIS で時々 DB からメモリにロードすることができます。

これを行う最良の方法は何ですか?コードでアクセスするにはどうすればよいですか? これはひどい考えですか?DB から文字列をリロードするように Web サーバーをトリガーするにはどうすればよいでしょうか?

4

2 に答える 2

1

これは通常、リソース ファイルを使用して管理されます。

resx ファイルは、データベースに格納するのではなく、コード ベースの一部にすることも、適切と思われる他の方法で提供することもできます (コメントで Sisulizer の推奨事項を参照してください)。ユーザーの言語で各メッセージを検索するために文字列キー (通常は定数クラスから) を使用する単一の "welcome.aspx" ページを作成します。

于 2012-07-16T23:21:41.903 に答える
0

キャッシュされたデータ プロバイダーを介して、すべてのテキスト ルックアップをルーティングできます。たとえば、ICachedTextDataProvider.GetString(string key, CultureInfo culture) などです。

ディクショナリを使用して、データ プロバイダの単純なキャッシュを作成できます。

static Dictionary<CultureInfo, Dictionary<string,string>> m_labelsByCulture;

次に、カルチャをキーとして検索することで、適切なラベル ディクショナリを取得します。

有効期限が切れる限り、最後に更新された時刻を保持するだけで、リクエストが行われるたびに、それがどれくらい経ったかを確認し、必要に応じてラベルを再ロードできます。この時間は、すべてのラベルに対してグローバルに設定できます。または、各言語またはラベルごとにパフォーマンスを向上させたい場合は、作成する複雑さとパフォーマンスの問題によって異なります。

これは非常に基本的な戦略です。ただし、それらをキャッシュアウトするためのより複雑なアプローチがあります。

于 2012-07-17T00:35:59.520 に答える